mmc: cqhci: Provide helper for resetting both SDHCI and CQHCI
Several SDHCI drivers need to deactivate command queueing in their reset hook (see sdhci_cqhci_reset() / sdhci-pci-core.c, for example), and several more are coming. Those reset implementations have some small subtleties (e.g., ordering of initialization of SDHCI vs. CQHCI might leave us resetting with a NULL ->cqe_private), and are often identical across different host drivers. We also don't want to force a dependency between SDHCI and CQHCI, or vice versa; non-SDHCI drivers use CQHCI, and SDHCI drivers might support command queueing through some other means. So, implement a small helper, to avoid repeating the same mistakes in different drivers. Simply stick it in a header, because it's so small it doesn't deserve its own module right now, and inlining to each driver is pretty reasonable. This is marked for -stable, as it is an important prerequisite patch for several SDHCI controller bugfixes that follow. Cc: <stable@vger.kernel.org> Signed-off-by: Brian Norris <briannorris@chromium.org> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Link: https://lore.kernel.org/r/20221026124150.v4.1.Ie85faa09432bfe1b0890d8c24ff95e17f3097317@changeid Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
f0c4d9fc9c
commit
ebb5fd38f4
24
drivers/mmc/host/sdhci-cqhci.h
Normal file
24
drivers/mmc/host/sdhci-cqhci.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright 2022 The Chromium OS Authors
|
||||
*
|
||||
* Support that applies to the combination of SDHCI and CQHCI, while not
|
||||
* expressing a dependency between the two modules.
|
||||
*/
|
||||
|
||||
#ifndef __MMC_HOST_SDHCI_CQHCI_H__
|
||||
#define __MMC_HOST_SDHCI_CQHCI_H__
|
||||
|
||||
#include "cqhci.h"
|
||||
#include "sdhci.h"
|
||||
|
||||
static inline void sdhci_and_cqhci_reset(struct sdhci_host *host, u8 mask)
|
||||
{
|
||||
if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL) &&
|
||||
host->mmc->cqe_private)
|
||||
cqhci_deactivate(host->mmc);
|
||||
|
||||
sdhci_reset(host, mask);
|
||||
}
|
||||
|
||||
#endif /* __MMC_HOST_SDHCI_CQHCI_H__ */
|
Loading…
x
Reference in New Issue
Block a user