Here is a proposal to use the scsi transport subsystem to manage
ufs devices.

scsi transport is a framework that allow to send scsi commands to
a non-scsi devices. Still, it is flexible enough to allow
sending non-scsi commands as well. We will use this framework to
manage ufs devices by sending UPIU transactions.

We added a new scsi transport module, a ufs-bsg LLD companion, 
and some new API to the ufs driver.

For the time being, we will not use it for data transfer,
but just for device management per-se.
We are planning to add this capability in the future.

We tested it on a Hikey-960 platform with a V4.14 kernel,
"modernized" by recent bsg and ufs patches.
We also used a htc11 with a V4.4 kernel, but needed much more
transport/bsg/ufs patches to make it relevant.

V1->v2:
        Use inline functions instead of defines, and ida to obtain the 
        port indices, in scsi_transport_ufs module.
        Remove the closing data pointer and __packed notation from
        struct ufs_bsg_{request_reply}.
        Re-use ufshcd_issue_tm_cmd code - needed another patch for that,
        and call req_upiu and rsp_upio with their appropriate struct pointers.
        Use a more appropriate name when checking if enough memory
        was  allocated for write descriptor, and remove redundant goto.
        Add reference to the spec to explain uic command size.
        Fix a lot of typos.

Avri Altman (8):
  scsi: Add ufs transport class
  scsi: ufs: Add ufs-bsg module
  scsi: ufs: Instantiate a ufs transport if its available
  scsi: ufs: Add fill task management request
  scsi: ufs: Allow ufshcd_issue_tm_cmd accept raw task upius
  scsi: ufs: Add API to execute raw upiu commands
  scsi: ufs-bsg: Add support for raw upiu in ufs_bsg_request()
  scsi: ufs-bsg: Add support for uic commands in ufs_bsg_request()

 drivers/scsi/Kconfig              |  13 ++
 drivers/scsi/Makefile             |   1 +
 drivers/scsi/scsi_transport_ufs.c | 354 ++++++++++++++++++++++++++++++++++++++
 drivers/scsi/ufs/Makefile         |   1 +
 drivers/scsi/ufs/ufs_bsg.c        | 291 +++++++++++++++++++++++++++++++
 drivers/scsi/ufs/ufs_bsg.h        |  75 ++++++++
 drivers/scsi/ufs/ufshcd.c         | 242 +++++++++++++++++++++++---
 drivers/scsi/ufs/ufshcd.h         |   6 +
 include/scsi/scsi_transport_ufs.h |  44 +++++
 include/uapi/scsi/scsi_bsg_ufs.h  |  56 ++++++
 10 files changed, 1055 insertions(+), 28 deletions(-)
 create mode 100644 drivers/scsi/scsi_transport_ufs.c
 create mode 100644 drivers/scsi/ufs/ufs_bsg.c
 create mode 100644 drivers/scsi/ufs/ufs_bsg.h
 create mode 100644 include/scsi/scsi_transport_ufs.h
 create mode 100644 include/uapi/scsi/scsi_bsg_ufs.h

-- 
1.9.1

Reply via email to