> > +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? Thanks, Avri