mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 02:25:36 -04:00
Merge patch series "UFS Advanced RPMB"
Bean Huo <beanhuo@iokpp.de> says: This series of changes is to add support for UFS advanced RPMB in ufs_bsg. The advanced RPMB application of user space is ufs_utils, the reference code is at: https://github.com/beanhuo/ufs-utils-Micron/blob/ufs_arpmb/ufs_arpmb.c. Changes to ufs_utils will be pushed to: https://github.com/westerndigitalcorporation/ufs-utils Link: https://lore.kernel.org/r/20221201140437.549272-1-beanhuo@iokpp.de Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
@@ -14,10 +14,27 @@
|
||||
*/
|
||||
|
||||
#define UFS_CDB_SIZE 16
|
||||
#define UPIU_TRANSACTION_UIC_CMD 0x1F
|
||||
/* uic commands are 4DW long, per UFSHCI V2.1 paragraph 5.6.1 */
|
||||
#define UIC_CMD_SIZE (sizeof(__u32) * 4)
|
||||
|
||||
enum ufs_bsg_msg_code {
|
||||
UPIU_TRANSACTION_UIC_CMD = 0x1F,
|
||||
UPIU_TRANSACTION_ARPMB_CMD,
|
||||
};
|
||||
|
||||
/* UFS RPMB Request Message Types */
|
||||
enum ufs_rpmb_op_type {
|
||||
UFS_RPMB_WRITE_KEY = 0x01,
|
||||
UFS_RPMB_READ_CNT = 0x02,
|
||||
UFS_RPMB_WRITE = 0x03,
|
||||
UFS_RPMB_READ = 0x04,
|
||||
UFS_RPMB_READ_RESP = 0x05,
|
||||
UFS_RPMB_SEC_CONF_WRITE = 0x06,
|
||||
UFS_RPMB_SEC_CONF_READ = 0x07,
|
||||
UFS_RPMB_PURGE_ENABLE = 0x08,
|
||||
UFS_RPMB_PURGE_STATUS_READ = 0x09,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct utp_upiu_header - UPIU header structure
|
||||
* @dword_0: UPIU header DW-0
|
||||
@@ -79,6 +96,23 @@ struct utp_upiu_req {
|
||||
};
|
||||
};
|
||||
|
||||
struct ufs_arpmb_meta {
|
||||
__u16 req_resp_type;
|
||||
__u8 nonce[16];
|
||||
__u32 write_counter;
|
||||
__u16 addr_lun;
|
||||
__u16 block_count;
|
||||
__u16 result;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct ufs_ehs {
|
||||
__u8 length;
|
||||
__u8 ehs_type;
|
||||
__u16 ehssub_type;
|
||||
struct ufs_arpmb_meta meta;
|
||||
__u8 mac_key[32];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/* request (CDB) structure of the sg_io_v4 */
|
||||
struct ufs_bsg_request {
|
||||
__u32 msgcode;
|
||||
@@ -95,11 +129,21 @@ struct ufs_bsg_reply {
|
||||
* msg and status fields. The per-msgcode reply structure
|
||||
* will contain valid data.
|
||||
*/
|
||||
__u32 result;
|
||||
int result;
|
||||
|
||||
/* If there was reply_payload, how much was received? */
|
||||
__u32 reply_payload_rcv_len;
|
||||
|
||||
struct utp_upiu_req upiu_rsp;
|
||||
};
|
||||
|
||||
struct ufs_rpmb_request {
|
||||
struct ufs_bsg_request bsg_request;
|
||||
struct ufs_ehs ehs_req;
|
||||
};
|
||||
|
||||
struct ufs_rpmb_reply {
|
||||
struct ufs_bsg_reply bsg_reply;
|
||||
struct ufs_ehs ehs_rsp;
|
||||
};
|
||||
#endif /* UFS_BSG_H */
|
||||
|
||||
Reference in New Issue
Block a user