mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
ebb5fd38f4
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>
25 lines
609 B
C
25 lines
609 B
C
/* 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__ */
|