|
@@ -472,7 +472,7 @@ out:
|
|
static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
|
|
static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
|
|
struct mmc_blk_ioc_data *idata)
|
|
struct mmc_blk_ioc_data *idata)
|
|
{
|
|
{
|
|
- struct mmc_command cmd = {};
|
|
|
|
|
|
+ struct mmc_command cmd = {}, sbc = {};
|
|
struct mmc_data data = {};
|
|
struct mmc_data data = {};
|
|
struct mmc_request mrq = {};
|
|
struct mmc_request mrq = {};
|
|
struct scatterlist sg;
|
|
struct scatterlist sg;
|
|
@@ -550,10 +550,15 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
|
|
}
|
|
}
|
|
|
|
|
|
if (idata->rpmb) {
|
|
if (idata->rpmb) {
|
|
- err = mmc_set_blockcount(card, data.blocks,
|
|
|
|
- idata->ic.write_flag & (1 << 31));
|
|
|
|
- if (err)
|
|
|
|
- return err;
|
|
|
|
|
|
+ sbc.opcode = MMC_SET_BLOCK_COUNT;
|
|
|
|
+ /*
|
|
|
|
+ * We don't do any blockcount validation because the max size
|
|
|
|
+ * may be increased by a future standard. We just copy the
|
|
|
|
+ * 'Reliable Write' bit here.
|
|
|
|
+ */
|
|
|
|
+ sbc.arg = data.blocks | (idata->ic.write_flag & BIT(31));
|
|
|
|
+ sbc.flags = MMC_RSP_R1 | MMC_CMD_AC;
|
|
|
|
+ mrq.sbc = &sbc;
|
|
}
|
|
}
|
|
|
|
|
|
if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_SANITIZE_START) &&
|
|
if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_SANITIZE_START) &&
|