lkml.org 
[lkml]   [2022]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v3 3/7] mmc: sdhci-brcmstb: Fix SDHCI_RESET_ALL for CQHCI
    From
    On 24/10/22 20:54, Brian Norris wrote:
    > [[ NOTE: this is completely untested by the author, but included solely
    > because, as noted in commit df57d73276b8 ("mmc: sdhci-pci: Fix
    > SDHCI_RESET_ALL for CQHCI for Intel GLK-based controllers"), "other
    > drivers using CQHCI might benefit from a similar change, if they
    > also have CQHCI reset by SDHCI_RESET_ALL." We've now seen the same
    > bug on at least MSM, Arasan, and Intel hardware. ]]
    >
    > SDHCI_RESET_ALL resets will reset the hardware CQE state, but we aren't
    > tracking that properly in software. When out of sync, we may trigger
    > various timeouts.
    >
    > It's not typical to perform resets while CQE is enabled, but this may
    > occur in some suspend or error recovery scenarios.
    >
    > Include this fix by way of the new sdhci_and_cqhci_reset() helper.
    >
    > Fixes: d46ba2d17f90 ("mmc: sdhci-brcmstb: Add support for Command Queuing (CQE)")
    > Signed-off-by: Brian Norris <briannorris@chromium.org>

    This patch is dependent on "mmc: cqhci: Provide
    helper for resetting both SDHCI and CQHCI". Best point that out
    in this commit message as well.

    Otherwise:

    Acked-by: Adrian Hunter <adrian.hunter@intel.com>

    > ---
    >
    > Changes in v3:
    > - Use new SDHCI+CQHCI helper
    >
    > Changes in v2:
    > - Rely on cqhci_deactivate() to handle NULL cqe_private, instead of
    > moving around CQE capability flags
    >
    > drivers/mmc/host/sdhci-brcmstb.c | 3 ++-
    > 1 file changed, 2 insertions(+), 1 deletion(-)
    >
    > diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c
    > index aff36a933ebe..55d8bd232695 100644
    > --- a/drivers/mmc/host/sdhci-brcmstb.c
    > +++ b/drivers/mmc/host/sdhci-brcmstb.c
    > @@ -12,6 +12,7 @@
    > #include <linux/bitops.h>
    > #include <linux/delay.h>
    >
    > +#include "sdhci-cqhci.h"
    > #include "sdhci-pltfm.h"
    > #include "cqhci.h"
    >
    > @@ -55,7 +56,7 @@ static void brcmstb_reset(struct sdhci_host *host, u8 mask)
    > struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    > struct sdhci_brcmstb_priv *priv = sdhci_pltfm_priv(pltfm_host);
    >
    > - sdhci_reset(host, mask);
    > + sdhci_and_cqhci_reset(host, mask);
    >
    > /* Reset will clear this, so re-enable it */
    > if (priv->flags & BRCMSTB_PRIV_FLAGS_GATE_CLOCK)

    \
     
     \ /
      Last update: 2022-10-25 15:10    [W:5.141 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site