From: Adrian Hunter <adrian.hunter@intel.com>
To: Dong Aisheng <aisheng.dong@nxp.com>, linux-mmc@vger.kernel.org
Cc: ulf.hansson@linaro.org, chris@printf.net, shawnguo@kernel.org,
linux-arm-kernel@lists.infradead.org, haibo.chen@nxp.com,
dongas86@gmail.com
Subject: Re: [PATCH V2 08/15] mmc: sdhci: add standard hw auto retuning support
Date: Thu, 21 Jul 2016 10:46:57 +0300 [thread overview]
Message-ID: <57907DF1.60104@intel.com> (raw)
In-Reply-To: <1468309584-3591-9-git-send-email-aisheng.dong@nxp.com>
On 12/07/16 10:46, Dong Aisheng wrote:
> If HW supports SDHCI_TUNING_MODE_3 which is auto retuning, we won't
> retune during runtime suspend and resume, instead we use Re-tuning
> Request signaled via SDHCI_INT_RETUNE interrupt to do retuning and
> hw auto retuning during data transfer to guarantee the signal sample
> window correction.
>
> This can avoid a mass of repeatedly retuning during small file system
> data access and improve the performance.
>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> drivers/mmc/host/sdhci.c | 15 ++++++++++++---
> drivers/mmc/host/sdhci.h | 3 +++
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 7894652b9929..31c14b0ff8e2 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -229,6 +229,10 @@ static void sdhci_init(struct sdhci_host *host, int soft)
> SDHCI_INT_TIMEOUT | SDHCI_INT_DATA_END |
> SDHCI_INT_RESPONSE;
>
> + if (host->tuning_mode == SDHCI_TUNING_MODE_2 ||
> + host->tuning_mode == SDHCI_TUNING_MODE_3)
> + host->ier |= SDHCI_INT_RETUNE;
> +
> sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
> sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
>
> @@ -2673,6 +2677,9 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
> pr_err("%s: Card is consuming too much power!\n",
> mmc_hostname(host->mmc));
>
> + if (intmask & SDHCI_INT_RETUNE)
> + mmc_retune_needed(host->mmc);
> +
> if (intmask & SDHCI_INT_CARD_INT) {
> sdhci_enable_sdio_irq_nolock(host, false);
> host->thread_isr |= SDHCI_INT_CARD_INT;
> @@ -2682,7 +2689,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
> intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE |
> SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK |
> SDHCI_INT_ERROR | SDHCI_INT_BUS_POWER |
> - SDHCI_INT_CARD_INT);
> + SDHCI_INT_RETUNE | SDHCI_INT_CARD_INT);
>
> if (intmask) {
> unexpected |= intmask;
> @@ -2787,7 +2794,8 @@ int sdhci_suspend_host(struct sdhci_host *host)
> sdhci_disable_card_detection(host);
>
> mmc_retune_timer_stop(host->mmc);
> - mmc_retune_needed(host->mmc);
> + if (host->tuning_mode != SDHCI_TUNING_MODE_3)
> + mmc_retune_needed(host->mmc);
>
> if (!device_may_wakeup(mmc_dev(host->mmc))) {
> host->ier = 0;
> @@ -2848,7 +2856,8 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host)
> unsigned long flags;
>
> mmc_retune_timer_stop(host->mmc);
> - mmc_retune_needed(host->mmc);
> + if (host->tuning_mode != SDHCI_TUNING_MODE_3)
> + mmc_retune_needed(host->mmc);
>
> spin_lock_irqsave(&host->lock, flags);
> host->ier &= SDHCI_INT_CARD_INT;
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index e241e11a90d0..0411c9f36461 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -128,6 +128,7 @@
> #define SDHCI_INT_CARD_INSERT 0x00000040
> #define SDHCI_INT_CARD_REMOVE 0x00000080
> #define SDHCI_INT_CARD_INT 0x00000100
> +#define SDHCI_INT_RETUNE 0x00001000
> #define SDHCI_INT_ERROR 0x00008000
> #define SDHCI_INT_TIMEOUT 0x00010000
> #define SDHCI_INT_CRC 0x00020000
> @@ -518,6 +519,8 @@ struct sdhci_host {
> unsigned int tuning_count; /* Timer count for re-tuning */
> unsigned int tuning_mode; /* Re-tuning mode supported by host */
> #define SDHCI_TUNING_MODE_1 0
> +#define SDHCI_TUNING_MODE_2 1
> +#define SDHCI_TUNING_MODE_3 2
>
> unsigned long private[0] ____cacheline_aligned;
> };
>
WARNING: multiple messages have this Message-ID (diff)
From: adrian.hunter@intel.com (Adrian Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V2 08/15] mmc: sdhci: add standard hw auto retuning support
Date: Thu, 21 Jul 2016 10:46:57 +0300 [thread overview]
Message-ID: <57907DF1.60104@intel.com> (raw)
In-Reply-To: <1468309584-3591-9-git-send-email-aisheng.dong@nxp.com>
On 12/07/16 10:46, Dong Aisheng wrote:
> If HW supports SDHCI_TUNING_MODE_3 which is auto retuning, we won't
> retune during runtime suspend and resume, instead we use Re-tuning
> Request signaled via SDHCI_INT_RETUNE interrupt to do retuning and
> hw auto retuning during data transfer to guarantee the signal sample
> window correction.
>
> This can avoid a mass of repeatedly retuning during small file system
> data access and improve the performance.
>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> drivers/mmc/host/sdhci.c | 15 ++++++++++++---
> drivers/mmc/host/sdhci.h | 3 +++
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 7894652b9929..31c14b0ff8e2 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -229,6 +229,10 @@ static void sdhci_init(struct sdhci_host *host, int soft)
> SDHCI_INT_TIMEOUT | SDHCI_INT_DATA_END |
> SDHCI_INT_RESPONSE;
>
> + if (host->tuning_mode == SDHCI_TUNING_MODE_2 ||
> + host->tuning_mode == SDHCI_TUNING_MODE_3)
> + host->ier |= SDHCI_INT_RETUNE;
> +
> sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
> sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
>
> @@ -2673,6 +2677,9 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
> pr_err("%s: Card is consuming too much power!\n",
> mmc_hostname(host->mmc));
>
> + if (intmask & SDHCI_INT_RETUNE)
> + mmc_retune_needed(host->mmc);
> +
> if (intmask & SDHCI_INT_CARD_INT) {
> sdhci_enable_sdio_irq_nolock(host, false);
> host->thread_isr |= SDHCI_INT_CARD_INT;
> @@ -2682,7 +2689,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
> intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE |
> SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK |
> SDHCI_INT_ERROR | SDHCI_INT_BUS_POWER |
> - SDHCI_INT_CARD_INT);
> + SDHCI_INT_RETUNE | SDHCI_INT_CARD_INT);
>
> if (intmask) {
> unexpected |= intmask;
> @@ -2787,7 +2794,8 @@ int sdhci_suspend_host(struct sdhci_host *host)
> sdhci_disable_card_detection(host);
>
> mmc_retune_timer_stop(host->mmc);
> - mmc_retune_needed(host->mmc);
> + if (host->tuning_mode != SDHCI_TUNING_MODE_3)
> + mmc_retune_needed(host->mmc);
>
> if (!device_may_wakeup(mmc_dev(host->mmc))) {
> host->ier = 0;
> @@ -2848,7 +2856,8 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host)
> unsigned long flags;
>
> mmc_retune_timer_stop(host->mmc);
> - mmc_retune_needed(host->mmc);
> + if (host->tuning_mode != SDHCI_TUNING_MODE_3)
> + mmc_retune_needed(host->mmc);
>
> spin_lock_irqsave(&host->lock, flags);
> host->ier &= SDHCI_INT_CARD_INT;
> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
> index e241e11a90d0..0411c9f36461 100644
> --- a/drivers/mmc/host/sdhci.h
> +++ b/drivers/mmc/host/sdhci.h
> @@ -128,6 +128,7 @@
> #define SDHCI_INT_CARD_INSERT 0x00000040
> #define SDHCI_INT_CARD_REMOVE 0x00000080
> #define SDHCI_INT_CARD_INT 0x00000100
> +#define SDHCI_INT_RETUNE 0x00001000
> #define SDHCI_INT_ERROR 0x00008000
> #define SDHCI_INT_TIMEOUT 0x00010000
> #define SDHCI_INT_CRC 0x00020000
> @@ -518,6 +519,8 @@ struct sdhci_host {
> unsigned int tuning_count; /* Timer count for re-tuning */
> unsigned int tuning_mode; /* Re-tuning mode supported by host */
> #define SDHCI_TUNING_MODE_1 0
> +#define SDHCI_TUNING_MODE_2 1
> +#define SDHCI_TUNING_MODE_3 2
>
> unsigned long private[0] ____cacheline_aligned;
> };
>
next prev parent reply other threads:[~2016-07-21 7:51 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-12 7:46 [PATCH V2 00/15] a few sdhci/imx clean up and fix patches Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 01/15] mmc: sdhci: using common mmc_regulator_set_vqmmc() Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 7:06 ` Adrian Hunter
2016-07-21 7:06 ` Adrian Hunter
2016-07-12 7:46 ` [PATCH V2 02/15] mmc: sdhci-esdhc-imx: remove SDHCI_QUIRK_BROKEN_TIMEOUT_VAL Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 03/15] mmc: sdhci-esdhc-imx: add esdhc specific suspend resume callback Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 04/15] mmc: sdhci-esdhc-imx: restore watermark level setting after resume Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 7:18 ` Adrian Hunter
2016-07-21 7:18 ` Adrian Hunter
2016-07-12 7:46 ` [PATCH V2 05/15] mmc: sdhci-esdhci-imx: disable DLL delay line settings explicitly Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 06/15] mmc: sdhci-esdhc-imx: support setting tuning start point Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 07/15] doc: dt: fsl-imx-esdhc: add set tuning start point binding Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 13:59 ` Andrew Lunn
2016-07-12 13:59 ` Andrew Lunn
2016-07-13 9:10 ` Dong Aisheng
2016-07-13 9:10 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 08/15] mmc: sdhci: add standard hw auto retuning support Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 7:46 ` Adrian Hunter [this message]
2016-07-21 7:46 ` Adrian Hunter
2016-07-12 7:46 ` [PATCH V2 09/15] mmc: sdhci-esdhc-imx: enable hw auto retuning for STD_TUNING Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 10/15] mmc: sdhci-esdhc-imx: enable hw auto retuning for MAN_TUNING Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-08-15 14:59 ` [V2, " Gary Bisson
2016-08-15 14:59 ` Gary Bisson
2016-08-16 10:18 ` Dong Aisheng
2016-08-16 10:18 ` Dong Aisheng
2016-08-16 12:44 ` Gary Bisson
2016-08-16 12:44 ` Gary Bisson
2016-08-17 14:31 ` Dong Aisheng
2016-08-17 14:31 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 11/15] mmc: sdhci-esdhc-imx: fix strobe DLL lock wrong clock issue Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 12/15] mmc: sdhci-esdhc-imx: factor out hw related initialization into function Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 8:11 ` Adrian Hunter
2016-07-21 8:11 ` Adrian Hunter
2016-07-12 7:46 ` [PATCH V2 13/15] mmc: sdhci-esdhc-imx: move tuning static configuration into hwinit function Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-12 7:46 ` [PATCH V2 14/15] mmc: sdhci-esdhci-imx: re-initialize hw state after resume Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 8:11 ` Adrian Hunter
2016-07-21 8:11 ` Adrian Hunter
2016-07-12 7:46 ` [PATCH V2 15/15] mmc: sdhci-esdhc-imx: clear tuning bits during driver probe Dong Aisheng
2016-07-12 7:46 ` Dong Aisheng
2016-07-21 8:33 ` Adrian Hunter
2016-07-21 8:33 ` Adrian Hunter
2016-07-12 13:54 ` [PATCH V2 00/15] a few sdhci/imx clean up and fix patches Andrew Lunn
2016-07-12 13:54 ` Andrew Lunn
2016-07-13 8:55 ` Dong Aisheng
2016-07-13 8:55 ` Dong Aisheng
2016-07-13 13:40 ` Andrew Lunn
2016-07-13 13:40 ` Andrew Lunn
2016-07-21 9:32 ` Adrian Hunter
2016-07-21 9:32 ` Adrian Hunter
2016-07-21 10:23 ` Dong Aisheng
2016-07-21 10:23 ` Dong Aisheng
2016-07-23 9:37 ` Ulf Hansson
2016-07-23 9:37 ` Ulf Hansson
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=57907DF1.60104@intel.com \
--to=adrian.hunter@intel.com \
--cc=aisheng.dong@nxp.com \
--cc=chris@printf.net \
--cc=dongas86@gmail.com \
--cc=haibo.chen@nxp.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mmc@vger.kernel.org \
--cc=shawnguo@kernel.org \
--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.