mmc: rpmb: Add interface functions

Add interface functions for external programs,
other functions can use it to read and write
rpmb partitions.

Change-Id: Ie94a6586077e1e9f4fc2924d283029f0a4a3e545
Signed-off-by: Hisping Lin <hisping.lin@rock-chips.com>
This commit is contained in:
Hisping Lin 2017-09-08 11:07:23 +08:00 committed by Kever Yang
parent 87b8e6decf
commit ea5fd1c643
2 changed files with 61 additions and 0 deletions

View File

@ -350,3 +350,58 @@ int mmc_rpmb_write(struct mmc *mmc, void *addr, unsigned short blk,
return -1;
return cnt;
}
int read_counter(struct mmc *mmc, struct s_rpmb *requestpackets)
{
if (mmc_rpmb_request(mmc, requestpackets, 1, false))
return -1;
if (mmc_rpmb_response(mmc, requestpackets, RPMB_RESP_WCOUNTER, 1))
return -1;
return 0;
}
int program_key(struct mmc *mmc, struct s_rpmb *requestpackets)
{
if (mmc_rpmb_request(mmc, requestpackets, 1, true))
return -1;
memset(requestpackets, 0, sizeof(struct s_rpmb));
requestpackets->request = cpu_to_be16(RPMB_REQ_STATUS);
if (mmc_rpmb_request(mmc, requestpackets, 1, false))
return -1;
return mmc_rpmb_response(mmc, requestpackets, RPMB_RESP_KEY, 1);
}
int authenticated_read(struct mmc *mmc,
struct s_rpmb *requestpackets, uint16_t block_count)
{
if (mmc_rpmb_request(mmc, requestpackets, 1, false))
return -1;
if (mmc_rpmb_response
(mmc, requestpackets, RPMB_RESP_READ_DATA, block_count))
return -1;
return 0;
}
int authenticated_write(struct mmc *mmc, struct s_rpmb *requestpackets)
{
if (mmc_rpmb_request(mmc, requestpackets, 1, true))
return -1;
memset(requestpackets, 0, sizeof(struct s_rpmb));
requestpackets->request = cpu_to_be16(RPMB_REQ_STATUS);
if (mmc_rpmb_request(mmc, requestpackets, 1, false))
return -1;
return mmc_rpmb_response(mmc, requestpackets, RPMB_RESP_WRITE_DATA, 1);
}

View File

@ -336,6 +336,12 @@ int do_authenticatedread(struct s_rpmb *requestpackets, uint16_t block_count);
int do_authenticatedwrite(struct s_rpmb *requestpackets);
struct mmc *do_returnmmc(void);
int read_counter(struct mmc *mmc, struct s_rpmb *requestpackets);
int program_key(struct mmc *mmc, struct s_rpmb *requestpackets);
int authenticated_read
(struct mmc *mmc, struct s_rpmb *requestpackets, uint16_t block_count);
int authenticated_write(struct mmc *mmc, struct s_rpmb *requestpackets);
/* Driver model support */
/**