提交 5ea2a2ac 编写于 作者: W Wolfram Sang 提交者: Ulf Hansson

mmc: tmio: fix CMD12 (STOP) handling

I always anticipated this code to be not correct, but now I had a test
case to prove it. According to all documentation I have, setting the
TMIO_STOP_STP bit ever only worked during block transfers. This bit is
like manually enforcing an autocmd12 during a so far seamless transfer.
It does NOT work when the block transfer had errors. It also does NOT
work with any other cmd except block commands. For all those, CMD12 has
to be treated like any other command. So, basically, we could use this
bit only for mrq->data->stop cmds. But for these, we happily use the
autocmd12 feature using the TMIO_STOP_SEC bit. As a result, the above
bit is not useful for us and we need to treat CMD12 as a regular cmd
always. Just remove the special handling code. Note that the BSP
recognized this issue as well yet had a more cautious solution to the
problem [1]. Which is understandable but makes CMD12 handling even more
complicated.

Checked with a Renesas Salvator-X/M3-W which needed to send CMD12 when
retuning one of my SD cards.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas-bsp.git/commit/?id=2838a2ff8ca776f6d18b7fbbe75f3df8dd64183aSigned-off-by: NWolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: NJan Klötzke <jan.kloetzke@preh.de>
Tested-by: NNguyen Viet Dung <dung.nguyen.aj@renesas.com>
Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
上级 f216c124
...@@ -349,12 +349,6 @@ static int tmio_mmc_start_command(struct tmio_mmc_host *host, ...@@ -349,12 +349,6 @@ static int tmio_mmc_start_command(struct tmio_mmc_host *host,
int c = cmd->opcode; int c = cmd->opcode;
u32 irq_mask = TMIO_MASK_CMD; u32 irq_mask = TMIO_MASK_CMD;
/* CMD12 is handled by hardware */
if (cmd->opcode == MMC_STOP_TRANSMISSION && !cmd->arg) {
sd_ctrl_write16(host, CTL_STOP_INTERNAL_ACTION, TMIO_STOP_STP);
return 0;
}
switch (mmc_resp_type(cmd)) { switch (mmc_resp_type(cmd)) {
case MMC_RSP_NONE: c |= RESP_NONE; break; case MMC_RSP_NONE: c |= RESP_NONE; break;
case MMC_RSP_R1: case MMC_RSP_R1:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册