+struct rpmb_frame {
u8 stuff[196];
u8 key_mac[32];
u8 data[256];
u8 nonce[16];
__be32 write_counter;
__be16 addr;
__be16 block_count;
__be16 result;
__be16 req_resp;
+} __packed;
I haven't looked at the NVME or the UFS spec in detail. Although, I assume the above frame makes sense for those types of
interfaces/protocols too? The rpmb implementation in ufs, has drifted apart from eMMC. E.g. in UFS4.0:
- the frame is different - see struct ufs_arpmb_meta in
include/uapi/scsi/scsi_bsg_ufs.h,
- Additional extended header was added,
- the frame size is no longer 512Bytes (256Bytes meta info + 256Bytes data)
but 4k,
- there are 9 rpmb operations instead of 7,
- The atomicity requirement of the command sequence was waved, And
probably more differences that I forgot. This is why it is better to designated this as an eMMC-only implementation?
As I wrote previously the original implementation has already resolved protocol differences (NVMe have also different byte ordering) for closed usecase of storing data (not the configuration) I believe the whole point here is to let TEE driver to store the data, regardless of the technology. In addition I might be wrong but I don't see much value in eMMC as the UFS and NVMe are currently leading technologies. Thanks Tomas