From: Florian Fainelli <f.fainelli@gmail.com>
To: Adrian Hunter <adrian.hunter@intel.com>,
Brian Norris <briannorris@chromium.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
Shawn Lin <shawn.lin@rock-chips.com>,
Shawn Guo <shawnguo@kernel.org>,
Fabio Estevam <festevam@gmail.com>,
Haibo Chen <haibo.chen@nxp.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
NXP Linux Team <linux-imx@nxp.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Michal Simek <michal.simek@xilinx.com>,
Faiz Abbas <faiz_abbas@ti.com>,
linux-mmc@vger.kernel.org, Jonathan Hunter <jonathanh@nvidia.com>,
Al Cooper <alcooperx@gmail.com>,
linux-arm-kernel@lists.infradead.org,
Sowjanya Komatineni <skomatineni@nvidia.com>,
linux-kernel@vger.kernel.org,
Thierry Reding <thierry.reding@gmail.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
stable@vger.kernel.org
Subject: Re: [PATCH v2 2/7] mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI
Date: Fri, 21 Oct 2022 10:45:36 -0700 [thread overview]
Message-ID: <9fe9c826-9b1a-0471-e30c-7fa949d2b08e@gmail.com> (raw)
In-Reply-To: <5f1adbf7-b477-914e-0a07-5c76532e85cd@intel.com>
On 10/19/22 23:29, Adrian Hunter wrote:
> On 20/10/22 01:19, Brian Norris wrote:
>> On Wed, Oct 19, 2022 at 02:59:39PM -0700, Florian Fainelli wrote:
>>> On 10/19/22 14:54, Brian Norris wrote:
>>>> The same bug was already found and fixed for two other drivers, in v5.7
>>>> and v5.9:
>>>>
>>>> 5cf583f1fb9c mmc: sdhci-msm: Deactivate CQE during SDHC reset
>>>> df57d73276b8 mmc: sdhci-pci: Fix SDHCI_RESET_ALL for CQHCI for Intel GLK-based controllers
>>>>
>>>> The latter is especially prescient, saying "other drivers using CQHCI
>>>> might benefit from a similar change, if they also have CQHCI reset by
>>>> SDHCI_RESET_ALL."
>>
>>>> --- a/drivers/mmc/host/sdhci-of-arasan.c
>>>> +++ b/drivers/mmc/host/sdhci-of-arasan.c
>>>> @@ -366,6 +366,9 @@ static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
>>>> struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
>>>> struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
>>>> + if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL))
>>>> + cqhci_deactivate(host->mmc);
>>>> +
>>>> sdhci_reset(host, mask);
>>>
>>> Cannot this be absorbed by sdhci_reset() that all of these drivers appear to
>>> be utilizing since you have access to the host and the mask to make that
>>> decision?
>>
>> It potentially could.
>>
>> I don't know if this is a specified SDHCI behavior that really belongs
>> in the common helper, or if this is just a commonly-shared behavior. Per
>> the comments I quote above ("if they also have CQHCI reset by
>> SDHCI_RESET_ALL"), I chose to leave that as an implementation-specific
>> behavior.
>>
>> I suppose it's not all that harmful to do this even if some SDHCI
>> controller doesn't have the same behavior/quirk.
>>
>> I guess I also don't know if any SDHCI controllers will support command
>> queueing (MMC_CAP2_CQE) via somethings *besides* CQHCI. I see
>> CQE support in sdhci-sprd.c without CQHCI, although that driver doesn't
>> set MMC_CAP2_CQE.
>
> SDHCI and CQHCI are separate modules and are not dependent, so they cannot
> call into each other directly (and should not). A new CQE API would be
> needed in mmc_cqe_ops e.g. (*cqe_notify_reset)(struct mmc_host *host),
> and wrapped in mmc/host.h:
>
> static inline void mmc_cqe_notify_reset(struct mmc_host *host)
> {
> if (host->cqe_ops->cqe_notify_reset)
> host->cqe_ops->cqe_notify_reset(host);
> }
>
> Alternatively, you could make a new module for SDHCI/CQHCI helper functions,
> although in this case there is so little code it could be static inline and
> added in a new include file instead, say sdhci-cqhci.h e.g.
>
> #include "cqhci.h"
> #include "sdhci.h"
>
> static inline void sdhci_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);
> }
>
I like the simplicity of the inline helper, especially towards
backports. May suggest to name it sdhci_and_cqhci_reset() to illustrate
that it does both, and does not apply specifically CQHCI that would be
"embedded" into SDHCI, but your call here.
--
Florian
WARNING: multiple messages have this Message-ID (diff)
From: Florian Fainelli <f.fainelli@gmail.com>
To: Adrian Hunter <adrian.hunter@intel.com>,
Brian Norris <briannorris@chromium.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
Shawn Lin <shawn.lin@rock-chips.com>,
Shawn Guo <shawnguo@kernel.org>,
Fabio Estevam <festevam@gmail.com>,
Haibo Chen <haibo.chen@nxp.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
NXP Linux Team <linux-imx@nxp.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Michal Simek <michal.simek@xilinx.com>,
Faiz Abbas <faiz_abbas@ti.com>,
linux-mmc@vger.kernel.org, Jonathan Hunter <jonathanh@nvidia.com>,
Al Cooper <alcooperx@gmail.com>,
linux-arm-kernel@lists.infradead.org,
Sowjanya Komatineni <skomatineni@nvidia.com>,
linux-kernel@vger.kernel.org,
Thierry Reding <thierry.reding@gmail.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
stable@vger.kernel.org
Subject: Re: [PATCH v2 2/7] mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI
Date: Fri, 21 Oct 2022 10:45:36 -0700 [thread overview]
Message-ID: <9fe9c826-9b1a-0471-e30c-7fa949d2b08e@gmail.com> (raw)
In-Reply-To: <5f1adbf7-b477-914e-0a07-5c76532e85cd@intel.com>
On 10/19/22 23:29, Adrian Hunter wrote:
> On 20/10/22 01:19, Brian Norris wrote:
>> On Wed, Oct 19, 2022 at 02:59:39PM -0700, Florian Fainelli wrote:
>>> On 10/19/22 14:54, Brian Norris wrote:
>>>> The same bug was already found and fixed for two other drivers, in v5.7
>>>> and v5.9:
>>>>
>>>> 5cf583f1fb9c mmc: sdhci-msm: Deactivate CQE during SDHC reset
>>>> df57d73276b8 mmc: sdhci-pci: Fix SDHCI_RESET_ALL for CQHCI for Intel GLK-based controllers
>>>>
>>>> The latter is especially prescient, saying "other drivers using CQHCI
>>>> might benefit from a similar change, if they also have CQHCI reset by
>>>> SDHCI_RESET_ALL."
>>
>>>> --- a/drivers/mmc/host/sdhci-of-arasan.c
>>>> +++ b/drivers/mmc/host/sdhci-of-arasan.c
>>>> @@ -366,6 +366,9 @@ static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
>>>> struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
>>>> struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
>>>> + if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL))
>>>> + cqhci_deactivate(host->mmc);
>>>> +
>>>> sdhci_reset(host, mask);
>>>
>>> Cannot this be absorbed by sdhci_reset() that all of these drivers appear to
>>> be utilizing since you have access to the host and the mask to make that
>>> decision?
>>
>> It potentially could.
>>
>> I don't know if this is a specified SDHCI behavior that really belongs
>> in the common helper, or if this is just a commonly-shared behavior. Per
>> the comments I quote above ("if they also have CQHCI reset by
>> SDHCI_RESET_ALL"), I chose to leave that as an implementation-specific
>> behavior.
>>
>> I suppose it's not all that harmful to do this even if some SDHCI
>> controller doesn't have the same behavior/quirk.
>>
>> I guess I also don't know if any SDHCI controllers will support command
>> queueing (MMC_CAP2_CQE) via somethings *besides* CQHCI. I see
>> CQE support in sdhci-sprd.c without CQHCI, although that driver doesn't
>> set MMC_CAP2_CQE.
>
> SDHCI and CQHCI are separate modules and are not dependent, so they cannot
> call into each other directly (and should not). A new CQE API would be
> needed in mmc_cqe_ops e.g. (*cqe_notify_reset)(struct mmc_host *host),
> and wrapped in mmc/host.h:
>
> static inline void mmc_cqe_notify_reset(struct mmc_host *host)
> {
> if (host->cqe_ops->cqe_notify_reset)
> host->cqe_ops->cqe_notify_reset(host);
> }
>
> Alternatively, you could make a new module for SDHCI/CQHCI helper functions,
> although in this case there is so little code it could be static inline and
> added in a new include file instead, say sdhci-cqhci.h e.g.
>
> #include "cqhci.h"
> #include "sdhci.h"
>
> static inline void sdhci_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);
> }
>
I like the simplicity of the inline helper, especially towards
backports. May suggest to name it sdhci_and_cqhci_reset() to illustrate
that it does both, and does not apply specifically CQHCI that would be
"embedded" into SDHCI, but your call here.
--
Florian
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-10-21 17:45 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-19 21:54 [PATCH v2 0/7] mmc: sdhci controllers: Fix SDHCI_RESET_ALL for CQHCI Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:54 ` [PATCH v2 1/7] mmc: cqhci: Handle deactivate() when not yet initialized Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:54 ` [PATCH v2 2/7] mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:59 ` Florian Fainelli
2022-10-19 21:59 ` Florian Fainelli
2022-10-19 22:19 ` Brian Norris
2022-10-19 22:19 ` Brian Norris
2022-10-20 6:29 ` Adrian Hunter
2022-10-20 6:29 ` Adrian Hunter
2022-10-21 17:45 ` Florian Fainelli [this message]
2022-10-21 17:45 ` Florian Fainelli
2022-10-23 16:47 ` Adrian Hunter
2022-10-23 16:47 ` Adrian Hunter
2022-10-19 21:54 ` [PATCH v2 3/7] mmc: sdhci-brcmstb: " Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:54 ` [PATCH v2 4/7] mms: sdhci-esdhc-imx: " Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-21 2:35 ` Bough Chen
2022-10-21 2:35 ` Bough Chen
2022-10-19 21:54 ` [PATCH v2 5/7] mmc: sdhci-tegra: " Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:54 ` [PATCH v2 6/7] mmc: sdhci_am654: " Brian Norris
2022-10-19 21:54 ` Brian Norris
2022-10-19 21:54 ` [PATCH v2 7/7] mmc: sdhci-pci-*: Drop redundant ->cqe_private check Brian Norris
2022-10-19 21:54 ` Brian Norris
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9fe9c826-9b1a-0471-e30c-7fa949d2b08e@gmail.com \
--to=f.fainelli@gmail.com \
--cc=adrian.hunter@intel.com \
--cc=alcooperx@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=briannorris@chromium.org \
--cc=faiz_abbas@ti.com \
--cc=festevam@gmail.com \
--cc=haibo.chen@nxp.com \
--cc=jonathanh@nvidia.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=michal.simek@xilinx.com \
--cc=s.hauer@pengutronix.de \
--cc=shawn.lin@rock-chips.com \
--cc=shawnguo@kernel.org \
--cc=skomatineni@nvidia.com \
--cc=stable@vger.kernel.org \
--cc=thierry.reding@gmail.com \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.