From b64f682240453932f73d58438c928bdd319aeb8a Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Mon, 2 Mar 2020 09:16:13 +0100 Subject: scsi: docs: convert ufs.txt to ReST Link: https://lore.kernel.org/r/052d45576e342a217185e91a83793b384b1592a4.1583136624.git.mchehab+huawei@kernel.org Acked-by: Avri Altman Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Martin K. Petersen --- Documentation/scsi/index.rst | 1 + Documentation/scsi/ufs.rst | 195 +++++++++++++++++++++++++++++++++++++++++++ Documentation/scsi/ufs.txt | 171 ------------------------------------- 3 files changed, 196 insertions(+), 171 deletions(-) create mode 100644 Documentation/scsi/ufs.rst delete mode 100644 Documentation/scsi/ufs.txt (limited to 'Documentation/scsi') diff --git a/Documentation/scsi/index.rst b/Documentation/scsi/index.rst index df005cb94f6b..27720d145eff 100644 --- a/Documentation/scsi/index.rst +++ b/Documentation/scsi/index.rst @@ -44,5 +44,6 @@ Linux SCSI Subsystem sym53c500_cs sym53c8xx_2 tcm_qla2xxx + ufs scsi_transport_srp/figures diff --git a/Documentation/scsi/ufs.rst b/Documentation/scsi/ufs.rst new file mode 100644 index 000000000000..a920c0a5a1f6 --- /dev/null +++ b/Documentation/scsi/ufs.rst @@ -0,0 +1,195 @@ +.. SPDX-License-Identifier: GPL-2.0 + +======================= +Universal Flash Storage +======================= + + +.. Contents + + 1. Overview + 2. UFS Architecture Overview + 2.1 Application Layer + 2.2 UFS Transport Protocol(UTP) layer + 2.3 UFS Interconnect(UIC) Layer + 3. UFSHCD Overview + 3.1 UFS controller initialization + 3.2 UTP Transfer requests + 3.3 UFS error handling + 3.4 SCSI Error handling + + +1. Overview +=========== + +Universal Flash Storage(UFS) is a storage specification for flash devices. +It is aimed to provide a universal storage interface for both +embedded and removable flash memory based storage in mobile +devices such as smart phones and tablet computers. The specification +is defined by JEDEC Solid State Technology Association. UFS is based +on MIPI M-PHY physical layer standard. UFS uses MIPI M-PHY as the +physical layer and MIPI Unipro as the link layer. + +The main goals of UFS is to provide: + + * Optimized performance: + + For UFS version 1.0 and 1.1 the target performance is as follows: + + - Support for Gear1 is mandatory (rate A: 1248Mbps, rate B: 1457.6Mbps) + - Support for Gear2 is optional (rate A: 2496Mbps, rate B: 2915.2Mbps) + + Future version of the standard, + + - Gear3 (rate A: 4992Mbps, rate B: 5830.4Mbps) + + * Low power consumption + * High random IOPs and low latency + + +2. UFS Architecture Overview +============================ + +UFS has a layered communication architecture which is based on SCSI +SAM-5 architectural model. + +UFS communication architecture consists of following layers, + +2.1 Application Layer +--------------------- + + The Application layer is composed of UFS command set layer(UCS), + Task Manager and Device manager. The UFS interface is designed to be + protocol agnostic, however SCSI has been selected as a baseline + protocol for versions 1.0 and 1.1 of UFS protocol layer. + + UFS supports subset of SCSI commands defined by SPC-4 and SBC-3. + + * UCS: + It handles SCSI commands supported by UFS specification. + * Task manager: + It handles task management functions defined by the + UFS which are meant for command queue control. + * Device manager: + It handles device level operations and device + configuration operations. Device level operations mainly involve + device power management operations and commands to Interconnect + layers. Device level configurations involve handling of query + requests which are used to modify and retrieve configuration + information of the device. + +2.2 UFS Transport Protocol(UTP) layer +------------------------------------- + + UTP layer provides services for + the higher layers through Service Access Points. UTP defines 3 + service access points for higher layers. + + * UDM_SAP: Device manager service access point is exposed to device + manager for device level operations. These device level operations + are done through query requests. + * UTP_CMD_SAP: Command service access point is exposed to UFS command + set layer(UCS) to transport commands. + * UTP_TM_SAP: Task management service access point is exposed to task + manager to transport task management functions. + + UTP transports messages through UFS protocol information unit(UPIU). + +2.3 UFS Interconnect(UIC) Layer +------------------------------- + + UIC is the lowest layer of UFS layered architecture. It handles + connection between UFS host and UFS device. UIC consists of + MIPI UniPro and MIPI M-PHY. UIC provides 2 service access points + to upper layer, + + * UIC_SAP: To transport UPIU between UFS host and UFS device. + * UIO_SAP: To issue commands to Unipro layers. + + +3. UFSHCD Overview +================== + +The UFS host controller driver is based on Linux SCSI Framework. +UFSHCD is a low level device driver which acts as an interface between +SCSI Midlayer and PCIe based UFS host controllers. + +The current UFSHCD implementation supports following functionality, + +3.1 UFS controller initialization +--------------------------------- + + The initialization module brings UFS host controller to active state + and prepares the controller to transfer commands/response between + UFSHCD and UFS device. + +3.2 UTP Transfer requests +------------------------- + + Transfer request handling module of UFSHCD receives SCSI commands + from SCSI Midlayer, forms UPIUs and issues the UPIUs to UFS Host + controller. Also, the module decodes, responses received from UFS + host controller in the form of UPIUs and intimates the SCSI Midlayer + of the status of the command. + +3.3 UFS error handling +---------------------- + + Error handling module handles Host controller fatal errors, + Device fatal errors and UIC interconnect layer related errors. + +3.4 SCSI Error handling +----------------------- + + This is done through UFSHCD SCSI error handling routines registered + with SCSI Midlayer. Examples of some of the error handling commands + issues by SCSI Midlayer are Abort task, Lun reset and host reset. + UFSHCD Routines to perform these tasks are registered with + SCSI Midlayer through .eh_abort_handler, .eh_device_reset_handler and + .eh_host_reset_handler. + +In this version of UFSHCD Query requests and power management +functionality are not implemented. + +4. BSG Support +============== + +This transport driver supports exchanging UFS protocol information units +(UPIUs) with a UFS device. Typically, user space will allocate +struct ufs_bsg_request and struct ufs_bsg_reply (see ufs_bsg.h) as +request_upiu and reply_upiu respectively. Filling those UPIUs should +be done in accordance with JEDEC spec UFS2.1 paragraph 10.7. +*Caveat emptor*: The driver makes no further input validations and sends the +UPIU to the device as it is. Open the bsg device in /dev/ufs-bsg and +send SG_IO with the applicable sg_io_v4:: + + io_hdr_v4.guard = 'Q'; + io_hdr_v4.protocol = BSG_PROTOCOL_SCSI; + io_hdr_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_TRANSPORT; + io_hdr_v4.response = (__u64)reply_upiu; + io_hdr_v4.max_response_len = reply_len; + io_hdr_v4.request_len = request_len; + io_hdr_v4.request = (__u64)request_upiu; + if (dir == SG_DXFER_TO_DEV) { + io_hdr_v4.dout_xfer_len = (uint32_t)byte_cnt; + io_hdr_v4.dout_xferp = (uintptr_t)(__u64)buff; + } else { + io_hdr_v4.din_xfer_len = (uint32_t)byte_cnt; + io_hdr_v4.din_xferp = (uintptr_t)(__u64)buff; + } + +If you wish to read or write a descriptor, use the appropriate xferp of +sg_io_v4. + +The userspace tool that interacts with the ufs-bsg endpoint and uses its +upiu-based protocol is available at: + + https://github.com/westerndigitalcorporation/ufs-tool + +For more detailed information about the tool and its supported +features, please see the tool's README. + +UFS Specifications can be found at: + +- UFS - http://www.jedec.org/sites/default/files/docs/JESD220.pdf +- UFSHCI - http://www.jedec.org/sites/default/files/docs/JESD223.pdf diff --git a/Documentation/scsi/ufs.txt b/Documentation/scsi/ufs.txt deleted file mode 100644 index 81842ec3e116..000000000000 --- a/Documentation/scsi/ufs.txt +++ /dev/null @@ -1,171 +0,0 @@ - Universal Flash Storage - ======================= - - -Contents --------- - -1. Overview -2. UFS Architecture Overview - 2.1 Application Layer - 2.2 UFS Transport Protocol(UTP) layer - 2.3 UFS Interconnect(UIC) Layer -3. UFSHCD Overview - 3.1 UFS controller initialization - 3.2 UTP Transfer requests - 3.3 UFS error handling - 3.4 SCSI Error handling - - -1. Overview ------------ - -Universal Flash Storage(UFS) is a storage specification for flash devices. -It is aimed to provide a universal storage interface for both -embedded and removable flash memory based storage in mobile -devices such as smart phones and tablet computers. The specification -is defined by JEDEC Solid State Technology Association. UFS is based -on MIPI M-PHY physical layer standard. UFS uses MIPI M-PHY as the -physical layer and MIPI Unipro as the link layer. - -The main goals of UFS is to provide, - * Optimized performance: - For UFS version 1.0 and 1.1 the target performance is as follows, - Support for Gear1 is mandatory (rate A: 1248Mbps, rate B: 1457.6Mbps) - Support for Gear2 is optional (rate A: 2496Mbps, rate B: 2915.2Mbps) - Future version of the standard, - Gear3 (rate A: 4992Mbps, rate B: 5830.4Mbps) - * Low power consumption - * High random IOPs and low latency - - -2. UFS Architecture Overview ----------------------------- - -UFS has a layered communication architecture which is based on SCSI -SAM-5 architectural model. - -UFS communication architecture consists of following layers, - -2.1 Application Layer - - The Application layer is composed of UFS command set layer(UCS), - Task Manager and Device manager. The UFS interface is designed to be - protocol agnostic, however SCSI has been selected as a baseline - protocol for versions 1.0 and 1.1 of UFS protocol layer. - UFS supports subset of SCSI commands defined by SPC-4 and SBC-3. - * UCS: It handles SCSI commands supported by UFS specification. - * Task manager: It handles task management functions defined by the - UFS which are meant for command queue control. - * Device manager: It handles device level operations and device - configuration operations. Device level operations mainly involve - device power management operations and commands to Interconnect - layers. Device level configurations involve handling of query - requests which are used to modify and retrieve configuration - information of the device. - -2.2 UFS Transport Protocol(UTP) layer - - UTP layer provides services for - the higher layers through Service Access Points. UTP defines 3 - service access points for higher layers. - * UDM_SAP: Device manager service access point is exposed to device - manager for device level operations. These device level operations - are done through query requests. - * UTP_CMD_SAP: Command service access point is exposed to UFS command - set layer(UCS) to transport commands. - * UTP_TM_SAP: Task management service access point is exposed to task - manager to transport task management functions. - UTP transports messages through UFS protocol information unit(UPIU). - -2.3 UFS Interconnect(UIC) Layer - - UIC is the lowest layer of UFS layered architecture. It handles - connection between UFS host and UFS device. UIC consists of - MIPI UniPro and MIPI M-PHY. UIC provides 2 service access points - to upper layer, - * UIC_SAP: To transport UPIU between UFS host and UFS device. - * UIO_SAP: To issue commands to Unipro layers. - - -3. UFSHCD Overview ------------------- - -The UFS host controller driver is based on Linux SCSI Framework. -UFSHCD is a low level device driver which acts as an interface between -SCSI Midlayer and PCIe based UFS host controllers. - -The current UFSHCD implementation supports following functionality, - -3.1 UFS controller initialization - - The initialization module brings UFS host controller to active state - and prepares the controller to transfer commands/response between - UFSHCD and UFS device. - -3.2 UTP Transfer requests - - Transfer request handling module of UFSHCD receives SCSI commands - from SCSI Midlayer, forms UPIUs and issues the UPIUs to UFS Host - controller. Also, the module decodes, responses received from UFS - host controller in the form of UPIUs and intimates the SCSI Midlayer - of the status of the command. - -3.3 UFS error handling - - Error handling module handles Host controller fatal errors, - Device fatal errors and UIC interconnect layer related errors. - -3.4 SCSI Error handling - - This is done through UFSHCD SCSI error handling routines registered - with SCSI Midlayer. Examples of some of the error handling commands - issues by SCSI Midlayer are Abort task, Lun reset and host reset. - UFSHCD Routines to perform these tasks are registered with - SCSI Midlayer through .eh_abort_handler, .eh_device_reset_handler and - .eh_host_reset_handler. - -In this version of UFSHCD Query requests and power management -functionality are not implemented. - -4. BSG Support ------------------- - -This transport driver supports exchanging UFS protocol information units -(UPIUs) with a UFS device. Typically, user space will allocate -struct ufs_bsg_request and struct ufs_bsg_reply (see ufs_bsg.h) as -request_upiu and reply_upiu respectively. Filling those UPIUs should -be done in accordance with JEDEC spec UFS2.1 paragraph 10.7. -*Caveat emptor*: The driver makes no further input validations and sends the -UPIU to the device as it is. Open the bsg device in /dev/ufs-bsg and -send SG_IO with the applicable sg_io_v4: - - io_hdr_v4.guard = 'Q'; - io_hdr_v4.protocol = BSG_PROTOCOL_SCSI; - io_hdr_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_TRANSPORT; - io_hdr_v4.response = (__u64)reply_upiu; - io_hdr_v4.max_response_len = reply_len; - io_hdr_v4.request_len = request_len; - io_hdr_v4.request = (__u64)request_upiu; - if (dir == SG_DXFER_TO_DEV) { - io_hdr_v4.dout_xfer_len = (uint32_t)byte_cnt; - io_hdr_v4.dout_xferp = (uintptr_t)(__u64)buff; - } else { - io_hdr_v4.din_xfer_len = (uint32_t)byte_cnt; - io_hdr_v4.din_xferp = (uintptr_t)(__u64)buff; - } - -If you wish to read or write a descriptor, use the appropriate xferp of -sg_io_v4. - -The userspace tool that interacts with the ufs-bsg endpoint and uses its -upiu-based protocol is available at: - - https://github.com/westerndigitalcorporation/ufs-tool - -For more detailed information about the tool and its supported -features, please see the tool's README. - -UFS Specifications can be found at, -UFS - http://www.jedec.org/sites/default/files/docs/JESD220.pdf -UFSHCI - http://www.jedec.org/sites/default/files/docs/JESD223.pdf -- cgit v1.2.3