MMC host:
- renesas_sdhi: Fix regression with hard reset on old SDHIs - dw_mmc: Only inject fault before done/error -----BEGIN PGP SIGNATURE----- iQJLBAABCgA1FiEEugLDXPmKSktSkQsV/iaEJXNYjCkFAmFSMzIXHHVsZi5oYW5z c29uQGxpbmFyby5vcmcACgkQ/iaEJXNYjCmDgg//Qqw+PemDfHK0yNOoKjtvoagn qn//H3U8XRSvJikt/U7TNbuBjoUZ+W0srTYy5iE+gXOoprMjyfCe4jRCPnFBxc/2 tfSrwXQ2RKsW5IWKm0Hg1WtK5h/oDCeyX57h3TzO1dsdO/vS25MRGoZk6khcPGD3 8mWGEHEHL7MmZpknEtZU/LtttF0m1aZN5DBmWvkGUr4zDh6Idqg0PqUv8gx2vv0U ZgOH1Ln1PnVjUtaoA8UCjBfN/eheoerQWIkSDoBEIIvawxohsQj05P6/I+hk1Cwi KfuvSuD28OWzxyooPVjf6JeezMX6hoMGcOMASUhH5zr4e+av0INuY6r1OKXmYroL nJXZ6UiU1gWxayG168mjOwl2qz7XTlOtiSVLtYXLw92rDfFoiX3KgaF72ek8QeqX Cl0hfru7I4p/xIA9IsgjfvHYxOzDKPrvFncD3xja9t6428eDmlbvp9he1lfFeJ5Z pkXW3IxxoknWiDWT+TRwupzMf8viUk9RklInVYbg3W1BZDfZJ7g5R0lMOIsrDktb s+tAT3xc8eIt4HZHbbXVulY22QcQ2P3QN5bztHiNfH6dplF3jlN6F/c5+W41LFrn ngc2KWfHKDSk+RYhdrjvnLEC3Y/F4cOgCtoJ38d1wyWNwAof5aIXWcehJeHPK7Ti rMdtTwAziaTI/4to3M4= =WC87 -----END PGP SIGNATURE----- Merge tag 'mmc-v5.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc Pull MMC fixes from Ulf Hansson: - renesas_sdhi: Fix regression with hard reset on old SDHIs - dw_mmc: Only inject fault before done/error * tag 'mmc-v5.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: renesas_sdhi: fix regression with hard reset on old SDHIs mmc: dw_mmc: Only inject fault before done/error
This commit is contained in:
commit
0c72b292de
|
@ -1802,10 +1802,15 @@ static enum hrtimer_restart dw_mci_fault_timer(struct hrtimer *t)
|
|||
|
||||
spin_lock_irqsave(&host->irq_lock, flags);
|
||||
|
||||
if (!host->data_status)
|
||||
/*
|
||||
* Only inject an error if we haven't already got an error or data over
|
||||
* interrupt.
|
||||
*/
|
||||
if (!host->data_status) {
|
||||
host->data_status = SDMMC_INT_DCRC;
|
||||
set_bit(EVENT_DATA_ERROR, &host->pending_events);
|
||||
tasklet_schedule(&host->tasklet);
|
||||
set_bit(EVENT_DATA_ERROR, &host->pending_events);
|
||||
tasklet_schedule(&host->tasklet);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&host->irq_lock, flags);
|
||||
|
||||
|
@ -2721,12 +2726,16 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
|
|||
}
|
||||
|
||||
if (pending & DW_MCI_DATA_ERROR_FLAGS) {
|
||||
spin_lock(&host->irq_lock);
|
||||
|
||||
/* if there is an error report DATA_ERROR */
|
||||
mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
|
||||
host->data_status = pending;
|
||||
smp_wmb(); /* drain writebuffer */
|
||||
set_bit(EVENT_DATA_ERROR, &host->pending_events);
|
||||
tasklet_schedule(&host->tasklet);
|
||||
|
||||
spin_unlock(&host->irq_lock);
|
||||
}
|
||||
|
||||
if (pending & SDMMC_INT_DATA_OVER) {
|
||||
|
|
|
@ -561,6 +561,8 @@ static void renesas_sdhi_reset(struct tmio_mmc_host *host)
|
|||
/* Unknown why but without polling reset status, it will hang */
|
||||
read_poll_timeout(reset_control_status, ret, ret == 0, 1, 100,
|
||||
false, priv->rstc);
|
||||
/* At least SDHI_VER_GEN2_SDR50 needs manual release of reset */
|
||||
sd_ctrl_write16(host, CTL_RESET_SD, 0x0001);
|
||||
priv->needs_adjust_hs400 = false;
|
||||
renesas_sdhi_set_clock(host, host->clk_cache);
|
||||
} else if (priv->scc_ctl) {
|
||||
|
|
Loading…
Reference in New Issue