[U-Boot] [PATCH 05/10] ufs: Add Initial Support for UFS subsystem

Vignesh Raghavendra vigneshr at ti.com
Tue Sep 10 03:48:00 UTC 2019



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?

> Also register this host controller as a SCSI host controller.
> 
> Signed-off-by: Faiz Abbas <faiz_abbas at 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?

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_abbas at ti.com>
> +S:	Maintained
> +F:	drivers/ufs/
> +
>  USB
>  M:	Marek Vasut <marex at 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.
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

> +#endif
> 

-- 
Regards
Vignesh


More information about the U-Boot mailing list