diff options
| author | Bernard Xiong <[email protected]> | 2017-12-30 13:51:28 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-12-30 13:51:28 +0800 |
| commit | f6a95087858189dbabce0ed1b8e87858cebf3bce (patch) | |
| tree | 7f07c440d2aa802cd536510c1072cbb2e261a336 | |
| parent | b07bd6c5156a8c60b845bd34c4eff596a47c00d3 (diff) | |
| parent | 1f25504c0b37f329ecbcd81472fb435ba591574b (diff) | |
Merge pull request #1149 from enkiller/development
[bsp]修复qemu-vexpress-a9 SD卡不能多块读写的BUG
| -rw-r--r-- | bsp/qemu-vexpress-a9/drivers/drv_sdio.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/bsp/qemu-vexpress-a9/drivers/drv_sdio.c b/bsp/qemu-vexpress-a9/drivers/drv_sdio.c index 86119d2c81..fa0ea725d6 100644 --- a/bsp/qemu-vexpress-a9/drivers/drv_sdio.c +++ b/bsp/qemu-vexpress-a9/drivers/drv_sdio.c @@ -312,9 +312,11 @@ static void mmc_request_send(struct rt_mmcsd_host *host, struct rt_mmcsd_req *re { struct sdhci_t *sdhci = (struct sdhci_t *)host->private_data; struct sdhci_cmd_t cmd; + struct sdhci_cmd_t stop; struct sdhci_data_t dat; rt_memset(&cmd, 0, sizeof(struct sdhci_cmd_t)); + rt_memset(&stop, 0, sizeof(struct sdhci_cmd_t)); rt_memset(&dat, 0, sizeof(struct sdhci_data_t)); cmd.cmdidx = req->cmd->cmd_code; @@ -343,6 +345,7 @@ static void mmc_request_send(struct rt_mmcsd_host *host, struct rt_mmcsd_req *re } dbg_log(DBG_INFO, "cmdarg:%d\n", cmd.cmdarg); + dbg_log(DBG_INFO, "cmdidx:%d\n", cmd.cmdidx); dbg_log(DBG_INFO, "[0]:0x%08x [1]:0x%08x [2]:0x%08x [3]:0x%08x\n", cmd.response[0], cmd.response[1], cmd.response[2], cmd.response[3]); req->cmd->resp[3] = cmd.response[3]; @@ -352,6 +355,22 @@ static void mmc_request_send(struct rt_mmcsd_host *host, struct rt_mmcsd_req *re if(req->cmd->err) dbg_log(DBG_ERROR, "transfer cmd err \n"); + + if (req->stop) + { + stop.cmdidx = req->stop->cmd_code; + stop.cmdarg = req->stop->arg; + if (req->stop->flags & RESP_MASK) + { + stop.resptype = PL180_RSP_PRESENT; + if (resp_type(req->stop) == RESP_R2) + stop.resptype |= PL180_RSP_136BIT; + } + else + stop.resptype = 0; + + req->stop->err = sdhci_pl180_transfer(sdhci, &stop, RT_NULL); + } mmcsd_req_complete(host); } |
