Hi Vignesh, On 10/09/19 9:18 AM, Vignesh Raghavendra wrote: > > > On 09/09/19 1:49 PM, Faiz Abbas wrote: >> Add Support for UFS Host Controller Interface (UFSHCI) for communicating >> with Universal Flash Storage (UFS) devices. The steps to initialize the >> host controller interface are the following: >> >> - Initiate the Host Controller Initialization process by writing to the >> Host controller enable register. >> - Configure the Host Controller base address registers by allocating a >> host memory space and related data structures. >> - Unipro link startup procedure >> - Check for connected device >> - Configure UFS host controller to process requests >> > > I am guessing code is derived from Linux kernel? Could you add kernel > version from which this code is borrowed from?
I did write that in the ufs.c file description. Will also add it here. > >> Also register this host controller as a SCSI host controller. >> >> Signed-off-by: Faiz Abbas <faiz_ab...@ti.com> >> --- >> MAINTAINERS | 5 + >> drivers/Kconfig | 2 + >> drivers/Makefile | 1 + >> drivers/ufs/Kconfig | 9 + >> drivers/ufs/Makefile | 6 + >> drivers/ufs/ufs-uclass.c | 16 + >> drivers/ufs/ufs.c | 1973 ++++++++++++++++++++++++++++++++++++++ >> drivers/ufs/ufs.h | 918 ++++++++++++++++++ >> drivers/ufs/unipro.h | 270 ++++++ > > Should UFS reside under SCSI framework given that UFS follows SAM? > driver/scsi/ufs? Other scsi implementations (like ahci) have their own folders so I'm just following that convention. > > Regards > Vignesh > >> include/dm/uclass-id.h | 1 + >> include/ufs.h | 7 + >> 11 files changed, 3208 insertions(+) >> create mode 100644 drivers/ufs/Kconfig >> create mode 100644 drivers/ufs/Makefile >> create mode 100644 drivers/ufs/ufs-uclass.c >> create mode 100644 drivers/ufs/ufs.c >> create mode 100644 drivers/ufs/ufs.h >> create mode 100644 drivers/ufs/unipro.h >> create mode 100644 include/ufs.h >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index 36625795a4..ed3a4c352c 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -772,6 +772,11 @@ S: Maintained >> T: git git://git.denx.de/u-boot-ubi.git >> F: drivers/mtd/ubi/ >> >> +UFS >> +M: Faiz Abbas <faiz_ab...@ti.com> >> +S: Maintained >> +F: drivers/ufs/ >> + >> USB >> M: Marek Vasut <ma...@denx.de> >> S: Maintained >> diff --git a/drivers/Kconfig b/drivers/Kconfig >> index 96ff4f566a..61bbe88d6c 100644 >> --- a/drivers/Kconfig >> +++ b/drivers/Kconfig >> @@ -118,6 +118,8 @@ source "drivers/tpm/Kconfig" >> >> source "drivers/usb/Kconfig" >> >> +source "drivers/ufs/Kconfig" >> + >> source "drivers/video/Kconfig" >> >> source "drivers/virtio/Kconfig" >> diff --git a/drivers/Makefile b/drivers/Makefile >> index 6635dabd2c..2794bef18a 100644 >> --- a/drivers/Makefile >> +++ b/drivers/Makefile >> @@ -111,6 +111,7 @@ obj-y += soc/ >> obj-y += thermal/ >> obj-$(CONFIG_TEE) += tee/ >> obj-y += axi/ >> +obj-y += ufs/ >> obj-$(CONFIG_W1) += w1/ >> obj-$(CONFIG_W1_EEPROM) += w1-eeprom/ >> >> diff --git a/drivers/ufs/Kconfig b/drivers/ufs/Kconfig >> new file mode 100644 >> index 0000000000..538aad8cd9 >> --- /dev/null >> +++ b/drivers/ufs/Kconfig >> @@ -0,0 +1,9 @@ >> +menu "UFS Host Controller Support" >> + >> +config UFS >> + bool "Support UFS controllers" >> + select DM_SCSI > > DM_SCSI has further dependencies, so its preferred not to use select > > depends on DM_SCSI > > Also if this is moved under drivers/scsi/ then this Kconfig file can be > sourced conditionally > >> + help >> + This selects support for Universal Flash Subsystem (UFS). >> + Say Y here if you want UFS Support. >> +endmenu >> diff --git a/drivers/ufs/Makefile b/drivers/ufs/Makefile >> new file mode 100644 >> index 0000000000..b8df759f66 >> --- /dev/null >> +++ b/drivers/ufs/Makefile >> @@ -0,0 +1,6 @@ >> +# SPDX-License-Identifier: GPL-2.0 >> +# >> +# Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com >> +# >> + >> +obj-$(CONFIG_UFS) += ufs.o ufs-uclass.o >> diff --git a/drivers/ufs/ufs-uclass.c b/drivers/ufs/ufs-uclass.c >> new file mode 100644 >> index 0000000000..920bfa64e1 >> --- /dev/null >> +++ b/drivers/ufs/ufs-uclass.c >> @@ -0,0 +1,16 @@ >> +// SPDX-License-Identifier: GPL-2.0 >> +/** >> + * ufs-uclass.c - Universal Flash Subsystem (UFS) Uclass driver >> + * >> + * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com >> + */ >> + >> +#include <common.h> >> +#include "ufs.h" >> +#include <dm.h> >> + >> +UCLASS_DRIVER(ufs) = { >> + .id = UCLASS_UFS, >> + .name = "ufs", >> + .per_device_auto_alloc_size = sizeof(struct ufs_hba), >> +}; > > [...] > >> +#endif /* _UNIPRO_H_ */ >> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h >> index 09e0ad5391..a606b8c41b 100644 >> --- a/include/dm/uclass-id.h >> +++ b/include/dm/uclass-id.h >> @@ -96,6 +96,7 @@ enum uclass_id { >> UCLASS_THERMAL, /* Thermal sensor */ >> UCLASS_TIMER, /* Timer device */ >> UCLASS_TPM, /* Trusted Platform Module TIS interface */ >> + UCLASS_UFS, /* Universale Flash Storage */ > > s/Universale/Universal > >> UCLASS_USB, /* USB bus */ >> UCLASS_USB_DEV_GENERIC, /* USB generic device */ >> UCLASS_USB_HUB, /* USB hub */ >> diff --git a/include/ufs.h b/include/ufs.h >> new file mode 100644 >> index 0000000000..2245838b3c >> --- /dev/null >> +++ b/include/ufs.h >> @@ -0,0 +1,7 @@ >> +/* SPDX-License-Identifier: GPL-2.0+ */ >> +#ifndef _UFS_H >> +#define _UFS_H >> + >> +int ufs_probe(void); > > This is fine, but you may want to provide helper to initialize a single > instance of controller so that we don't end up in a situation like MMC > where all the instances are initialized always. > Probably modify ufs_probe() to take an int arg that indicates instance > to be probed and -1 to probe all instances. Makes sense. Will modify the API. > Irrespective of this, please add API documentation before the function > declaration > >> +int ufs_scsi_bind(struct udevice *scsi_dev, struct udevice **devp); > > Please document the API Ok. Thanks, Faiz _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot