mmc: sdhci: Correct the tuning command handle for PIO mode
If sdhci use PIO mode, and use mmc_send_tuning() to send the tuning command, system will stuck because of the storm irq of sdhci. For PIO mode, use mmc_send_tuning(), it will trigger buffer_read_ready interrupt and data transfer complete interrupt. In current code logic, it will directly return in sdhci_data_irq, can not call the sdhci_transfer_pio(). So the buffer_read_ready interrupt storm happen. So for standard tuning method, need to exclude this case. Signed-off-by: Haibo Chen <haibo.chen@nxp.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Link: https://lore.kernel.org/r/1628858041-1911-1-git-send-email-haibo.chen@nxp.com [Ulf: Dropped redundant parenthesis in an expression] Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
71b7597c63
commit
f4ff24f8a7
1 changed files with 8 additions and 2 deletions
|
|
@ -3279,8 +3279,14 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
|
|||
{
|
||||
u32 command;
|
||||
|
||||
/* CMD19 generates _only_ Buffer Read Ready interrupt */
|
||||
if (intmask & SDHCI_INT_DATA_AVAIL) {
|
||||
/*
|
||||
* CMD19 generates _only_ Buffer Read Ready interrupt if
|
||||
* use sdhci_send_tuning.
|
||||
* Need to exclude this case: PIO mode and use mmc_send_tuning,
|
||||
* If not, sdhci_transfer_pio will never be called, make the
|
||||
* SDHCI_INT_DATA_AVAIL always there, stuck in irq storm.
|
||||
*/
|
||||
if (intmask & SDHCI_INT_DATA_AVAIL && !host->data) {
|
||||
command = SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND));
|
||||
if (command == MMC_SEND_TUNING_BLOCK ||
|
||||
command == MMC_SEND_TUNING_BLOCK_HS200) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue