MMC host:
- mtk-sd: Fix dma hang issues - sdhci-pci-o2micro: Fix card detect by dealing with debouncing -----BEGIN PGP SIGNATURE----- iQJLBAABCgA1FiEEugLDXPmKSktSkQsV/iaEJXNYjCkFAmK0VGQXHHVsZi5oYW5z c29uQGxpbmFyby5vcmcACgkQ/iaEJXNYjCkeow//VxrrjmFhXqJKk9ZIUgCTfqnt yycVwg6YDFFLWH/6+PLMPNqfqpm6DEuXM4Ofz/C29wCclUXn2Z5IJeQ1YckGOEJ1 Qr62RyX9qUNslr5v3mXWC0Thmhbut/p07GiPZHuGkLFFnWHQmqTlaTZNm4uzRA9X fIcKNQKEKxb12MIwhggVPG2y99cvMQ8PUjnJFSzRZvhhtvlaKmZYbnhBFMQYgLSV kueIAp6Uin+R8VpEz/nV5+dOIP1HRArXtA0QtegEOx+9V1MmocqlQywv+LzZFgHg Cg59g9KrhjSYx5tvM8HnDgNlIKPfhRS9KmpHWc/qScWuMsHh0ujz0HoTJkLl3DuT K/mk5wbn+DD9k0w9wohIgZgH9vJFC9CdI7HgVjqhJKfCJDVYylE1Dy6bJitg78vJ MWgc9HablWmR0INLoD4ZhDlOHIR4F09k4JWnC2aK/K+1Y6mf/wZGIteg+2N+IHIp wTU3Q2fsyoc4M+Bl3+N/SNmC14Ttq/D0FUkb+0IFFs6Qpck8KobLm8i2Hv4ZiIlp /aoroBnVfwDhanfN/yPorzTz4Q8/on9cBKpm6rpkw5x0urxuuC6BGfDMwc7cTFPY L5/oVnmCLL73fERIrZ/HeIfSsawSasyLHK5UgcJQLhKxAYZ24suX8k2PSLCoyxLq URs1SpzV2x0Dgn3be9A= =Cbgi -----END PGP SIGNATURE----- Merge tag 'mmc-v5.19-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc Pull MMC fixes from Ulf Hansson: - mtk-sd: Fix dma hang issues - sdhci-pci-o2micro: Fix card detect by dealing with debouncing * tag 'mmc-v5.19-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: mediatek: wait dma stop bit reset to 0 mmc: sdhci-pci-o2micro: Fix card detect by dealing with debouncing
This commit is contained in:
commit
f410c3e000
|
@ -1356,7 +1356,7 @@ static void msdc_data_xfer_next(struct msdc_host *host, struct mmc_request *mrq)
|
|||
msdc_request_done(host, mrq);
|
||||
}
|
||||
|
||||
static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
|
||||
static void msdc_data_xfer_done(struct msdc_host *host, u32 events,
|
||||
struct mmc_request *mrq, struct mmc_data *data)
|
||||
{
|
||||
struct mmc_command *stop;
|
||||
|
@ -1376,7 +1376,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
|
|||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
|
||||
if (done)
|
||||
return true;
|
||||
return;
|
||||
stop = data->stop;
|
||||
|
||||
if (check_data || (stop && stop->error)) {
|
||||
|
@ -1385,12 +1385,15 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
|
|||
sdr_set_field(host->base + MSDC_DMA_CTRL, MSDC_DMA_CTRL_STOP,
|
||||
1);
|
||||
|
||||
ret = readl_poll_timeout_atomic(host->base + MSDC_DMA_CTRL, val,
|
||||
!(val & MSDC_DMA_CTRL_STOP), 1, 20000);
|
||||
if (ret)
|
||||
dev_dbg(host->dev, "DMA stop timed out\n");
|
||||
|
||||
ret = readl_poll_timeout_atomic(host->base + MSDC_DMA_CFG, val,
|
||||
!(val & MSDC_DMA_CFG_STS), 1, 20000);
|
||||
if (ret) {
|
||||
dev_dbg(host->dev, "DMA stop timed out\n");
|
||||
return false;
|
||||
}
|
||||
if (ret)
|
||||
dev_dbg(host->dev, "DMA inactive timed out\n");
|
||||
|
||||
sdr_clr_bits(host->base + MSDC_INTEN, data_ints_mask);
|
||||
dev_dbg(host->dev, "DMA stop\n");
|
||||
|
@ -1415,9 +1418,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,
|
|||
}
|
||||
|
||||
msdc_data_xfer_next(host, mrq);
|
||||
done = true;
|
||||
}
|
||||
return done;
|
||||
}
|
||||
|
||||
static void msdc_set_buswidth(struct msdc_host *host, u32 width)
|
||||
|
@ -2416,6 +2417,9 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)
|
|||
if (recovery) {
|
||||
sdr_set_field(host->base + MSDC_DMA_CTRL,
|
||||
MSDC_DMA_CTRL_STOP, 1);
|
||||
if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CTRL, val,
|
||||
!(val & MSDC_DMA_CTRL_STOP), 1, 3000)))
|
||||
return;
|
||||
if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CFG, val,
|
||||
!(val & MSDC_DMA_CFG_STS), 1, 3000)))
|
||||
return;
|
||||
|
|
|
@ -152,6 +152,8 @@ static int sdhci_o2_get_cd(struct mmc_host *mmc)
|
|||
|
||||
if (!(sdhci_readw(host, O2_PLL_DLL_WDT_CONTROL1) & O2_PLL_LOCK_STATUS))
|
||||
sdhci_o2_enable_internal_clock(host);
|
||||
else
|
||||
sdhci_o2_wait_card_detect_stable(host);
|
||||
|
||||
return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue