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