> > > +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