mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 06:04:14 +08:00
mmc: block: Prepare CQE data
Enhance mmc_blk_data_prep() to support CQE requests. That means adding some things that for non-CQE requests would be encoded into the command arguments - such as the block address, reliable-write flag, and data tag flag. Also the request tag is needed to provide the command queue task id, and a comment is added to explain the future possibility of defining a priority. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
d3377c012f
commit
93482b3d70
@ -1595,6 +1595,7 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
|
|||||||
memset(brq, 0, sizeof(struct mmc_blk_request));
|
memset(brq, 0, sizeof(struct mmc_blk_request));
|
||||||
|
|
||||||
brq->mrq.data = &brq->data;
|
brq->mrq.data = &brq->data;
|
||||||
|
brq->mrq.tag = req->tag;
|
||||||
|
|
||||||
brq->stop.opcode = MMC_STOP_TRANSMISSION;
|
brq->stop.opcode = MMC_STOP_TRANSMISSION;
|
||||||
brq->stop.arg = 0;
|
brq->stop.arg = 0;
|
||||||
@ -1609,6 +1610,14 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
|
|||||||
|
|
||||||
brq->data.blksz = 512;
|
brq->data.blksz = 512;
|
||||||
brq->data.blocks = blk_rq_sectors(req);
|
brq->data.blocks = blk_rq_sectors(req);
|
||||||
|
brq->data.blk_addr = blk_rq_pos(req);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The command queue supports 2 priorities: "high" (1) and "simple" (0).
|
||||||
|
* The eMMC will give "high" priority tasks priority over "simple"
|
||||||
|
* priority tasks. Here we always set "simple" priority by not setting
|
||||||
|
* MMC_DATA_PRIO.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The block layer doesn't support all sector count
|
* The block layer doesn't support all sector count
|
||||||
@ -1638,8 +1647,10 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
|
|||||||
brq->data.blocks);
|
brq->data.blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_rel_wr)
|
if (do_rel_wr) {
|
||||||
mmc_apply_rel_rw(brq, card, req);
|
mmc_apply_rel_rw(brq, card, req);
|
||||||
|
brq->data.flags |= MMC_DATA_REL_WR;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Data tag is used only during writing meta data to speed
|
* Data tag is used only during writing meta data to speed
|
||||||
@ -1651,6 +1662,9 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
|
|||||||
((brq->data.blocks * brq->data.blksz) >=
|
((brq->data.blocks * brq->data.blksz) >=
|
||||||
card->ext_csd.data_tag_unit_size);
|
card->ext_csd.data_tag_unit_size);
|
||||||
|
|
||||||
|
if (do_data_tag)
|
||||||
|
brq->data.flags |= MMC_DATA_DAT_TAG;
|
||||||
|
|
||||||
mmc_set_data_timeout(&brq->data, card);
|
mmc_set_data_timeout(&brq->data, card);
|
||||||
|
|
||||||
brq->data.sg = mqrq->sg;
|
brq->data.sg = mqrq->sg;
|
||||||
|
Loading…
Reference in New Issue
Block a user