scsi: ufs: core: bsg: Add advanced RPMB support in ufs_bsg
authorBean Huo <beanhuo@micron.com>
Thu, 1 Dec 2022 14:04:37 +0000 (15:04 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 30 Dec 2022 21:01:04 +0000 (21:01 +0000)
commit6ff265fc5ef660499e0edc4641647e99eed3f519
tree26e4dc87b18bbea0988ef9b9ac4201cd838a7301
parenta4b1c9b9b38c92da099aba234c96e818f8d2e4dd
scsi: ufs: core: bsg: Add advanced RPMB support in ufs_bsg

Add advanced RPMB support in ufs_bsg:

 1. According to the UFS specification, only one RPMB operation can be
    performed at any time. We can ensure this by using reserved slot and
    its dev_cmd sync operation protection mechanism.

 2. For Advanced RPMB, RPMB metadata is packaged in an EHS (Extra Header
    Segment) of a command UPIU, and the corresponding reply EHS (from the
    device) should also be returned to the user space.  bsg_job->request
    and bsg_job->reply allow us to pass and return EHS from/back to
    userspace.

Compared to normal/legacy RPMB, the advantages of advanced RPMB are:

 1. The data length in the Advanced RPMB data read/write command can be
    larger than 4KB. For the legacy RPMB, the data length in a single RPMB
    data transfer is 256 bytes.

 2. All of the advanced RPMB operations will be a single command. For
    legacy RPMB, take the read write-counter value as an example, you need
    two commands (first SECURITY PROTOCOL OUT, then second SECURITY
    PROTOCOL IN).

Signed-off-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufs_bsg.c
drivers/ufs/core/ufshcd.c
include/uapi/scsi/scsi_bsg_ufs.h
include/ufs/ufs.h
include/ufs/ufshcd.h
include/ufs/ufshci.h