All of lore.kernel.org
 help / color / mirror / Atom feed
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 12/15] mmc: sdhci-esdhc-imx: factor out hw related initialization into function
Date: Thu, 21 Jul 2016 11:11:27 +0300	[thread overview]
Message-ID: <579083AF.1040403@intel.com> (raw)
In-Reply-To: <1468309584-3591-13-git-send-email-aisheng.dong@nxp.com>

On 12/07/16 10:46, Dong Aisheng wrote:
> Move all hw related static initializations into a separate function
> which helps concentrate the hw related initialization code.
> And that function could also be called by other places later as a
> basic hw state restore.
> e.g. suspend/resume where the hw state is possible to lost due to
> low power mode.
> 
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>


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


> ---
>  drivers/mmc/host/sdhci-esdhc-imx.c | 72 +++++++++++++++++++++-----------------
>  1 file changed, 40 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
> index bbb0bd4eac28..5a0e5dee977f 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -979,6 +979,44 @@ static const struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
>  	.ops = &sdhci_esdhc_ops,
>  };
>  
> +static void sdhci_esdhc_imx_hwinit(struct sdhci_host *host)
> +{
> +	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
> +	struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host);
> +
> +	if (esdhc_is_usdhc(imx_data)) {
> +		/*
> +		 * The imx6q ROM code will change the default watermark
> +		 * level setting to something insane.  Change it back here.
> +		 */
> +		writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
> +
> +		/*
> +		 * ROM code will change the bit burst_length_enable setting
> +		 * to zero if this usdhc is choosed to boot system. Change
> +		 * it back here, otherwise it will impact the performance a
> +		 * lot. This bit is used to enable/disable the burst length
> +		 * for the external AHB2AXI bridge, it's usefully especially
> +		 * for INCR transfer because without burst length indicator,
> +		 * the AHB2AXI bridge does not know the burst length in
> +		 * advance. And without burst length indicator, AHB INCR
> +		 * transfer can only be converted to singles on the AXI side.
> +		 */
> +		writel(readl(host->ioaddr + SDHCI_HOST_CONTROL)
> +			| ESDHC_BURST_LEN_EN_INCR,
> +			host->ioaddr + SDHCI_HOST_CONTROL);
> +		/*
> +		* errata ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
> +		* TO1.1, it's harmless for MX6SL
> +		*/
> +		writel(readl(host->ioaddr + 0x6c) | BIT(7),
> +			host->ioaddr + 0x6c);
> +
> +		/* disable DLL_CTRL delay line settings */
> +		writel(0x0, host->ioaddr + ESDHC_DLL_CTRL);
> +	}
> +}
> +
>  #ifdef CONFIG_OF
>  static int
>  sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
> @@ -1176,43 +1214,11 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
>  		host->quirks |= SDHCI_QUIRK_NO_MULTIBLOCK
>  			| SDHCI_QUIRK_BROKEN_ADMA;
>  
> -	/*
> -	 * The imx6q ROM code will change the default watermark level setting
> -	 * to something insane.  Change it back here.
> -	 */
>  	if (esdhc_is_usdhc(imx_data)) {
> -		writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
> -
>  		host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
>  		host->mmc->caps |= MMC_CAP_1_8V_DDR;
> -
> -		/*
> -		 * ROM code will change the bit burst_length_enable setting
> -		 * to zero if this usdhc is choosed to boot system. Change
> -		 * it back here, otherwise it will impact the performance a
> -		 * lot. This bit is used to enable/disable the burst length
> -		 * for the external AHB2AXI bridge, it's usefully especially
> -		 * for INCR transfer because without burst length indicator,
> -		 * the AHB2AXI bridge does not know the burst length in
> -		 * advance. And without burst length indicator, AHB INCR
> -		 * transfer can only be converted to singles on the AXI side.
> -		 */
> -		writel(readl(host->ioaddr + SDHCI_HOST_CONTROL)
> -			| ESDHC_BURST_LEN_EN_INCR,
> -			host->ioaddr + SDHCI_HOST_CONTROL);
> -
>  		if (!(imx_data->socdata->flags & ESDHC_FLAG_HS200))
>  			host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
> -
> -		/*
> -		* errata ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
> -		* TO1.1, it's harmless for MX6SL
> -		*/
> -		writel(readl(host->ioaddr + 0x6c) | BIT(7),
> -			host->ioaddr + 0x6c);
> -
> -		/* disable DLL_CTRL delay line settings */
> -		writel(0x0, host->ioaddr + ESDHC_DLL_CTRL);
>  	}
>  
>  	if (imx_data->socdata->flags & ESDHC_FLAG_MAN_TUNING)
> @@ -1237,6 +1243,8 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
>  	if (err)
>  		goto disable_clk;
>  
> +	sdhci_esdhc_imx_hwinit(host);
> +
>  	err = sdhci_add_host(host);
>  	if (err)
>  		goto disable_clk;
> 


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 12/15] mmc: sdhci-esdhc-imx: factor out hw related initialization into function
Date: Thu, 21 Jul 2016 11:11:27 +0300	[thread overview]
Message-ID: <579083AF.1040403@intel.com> (raw)
In-Reply-To: <1468309584-3591-13-git-send-email-aisheng.dong@nxp.com>

On 12/07/16 10:46, Dong Aisheng wrote:
> Move all hw related static initializations into a separate function
> which helps concentrate the hw related initialization code.
> And that function could also be called by other places later as a
> basic hw state restore.
> e.g. suspend/resume where the hw state is possible to lost due to
> low power mode.
> 
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>


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


> ---
>  drivers/mmc/host/sdhci-esdhc-imx.c | 72 +++++++++++++++++++++-----------------
>  1 file changed, 40 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
> index bbb0bd4eac28..5a0e5dee977f 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -979,6 +979,44 @@ static const struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
>  	.ops = &sdhci_esdhc_ops,
>  };
>  
> +static void sdhci_esdhc_imx_hwinit(struct sdhci_host *host)
> +{
> +	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
> +	struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host);
> +
> +	if (esdhc_is_usdhc(imx_data)) {
> +		/*
> +		 * The imx6q ROM code will change the default watermark
> +		 * level setting to something insane.  Change it back here.
> +		 */
> +		writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
> +
> +		/*
> +		 * ROM code will change the bit burst_length_enable setting
> +		 * to zero if this usdhc is choosed to boot system. Change
> +		 * it back here, otherwise it will impact the performance a
> +		 * lot. This bit is used to enable/disable the burst length
> +		 * for the external AHB2AXI bridge, it's usefully especially
> +		 * for INCR transfer because without burst length indicator,
> +		 * the AHB2AXI bridge does not know the burst length in
> +		 * advance. And without burst length indicator, AHB INCR
> +		 * transfer can only be converted to singles on the AXI side.
> +		 */
> +		writel(readl(host->ioaddr + SDHCI_HOST_CONTROL)
> +			| ESDHC_BURST_LEN_EN_INCR,
> +			host->ioaddr + SDHCI_HOST_CONTROL);
> +		/*
> +		* errata ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
> +		* TO1.1, it's harmless for MX6SL
> +		*/
> +		writel(readl(host->ioaddr + 0x6c) | BIT(7),
> +			host->ioaddr + 0x6c);
> +
> +		/* disable DLL_CTRL delay line settings */
> +		writel(0x0, host->ioaddr + ESDHC_DLL_CTRL);
> +	}
> +}
> +
>  #ifdef CONFIG_OF
>  static int
>  sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
> @@ -1176,43 +1214,11 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
>  		host->quirks |= SDHCI_QUIRK_NO_MULTIBLOCK
>  			| SDHCI_QUIRK_BROKEN_ADMA;
>  
> -	/*
> -	 * The imx6q ROM code will change the default watermark level setting
> -	 * to something insane.  Change it back here.
> -	 */
>  	if (esdhc_is_usdhc(imx_data)) {
> -		writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
> -
>  		host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
>  		host->mmc->caps |= MMC_CAP_1_8V_DDR;
> -
> -		/*
> -		 * ROM code will change the bit burst_length_enable setting
> -		 * to zero if this usdhc is choosed to boot system. Change
> -		 * it back here, otherwise it will impact the performance a
> -		 * lot. This bit is used to enable/disable the burst length
> -		 * for the external AHB2AXI bridge, it's usefully especially
> -		 * for INCR transfer because without burst length indicator,
> -		 * the AHB2AXI bridge does not know the burst length in
> -		 * advance. And without burst length indicator, AHB INCR
> -		 * transfer can only be converted to singles on the AXI side.
> -		 */
> -		writel(readl(host->ioaddr + SDHCI_HOST_CONTROL)
> -			| ESDHC_BURST_LEN_EN_INCR,
> -			host->ioaddr + SDHCI_HOST_CONTROL);
> -
>  		if (!(imx_data->socdata->flags & ESDHC_FLAG_HS200))
>  			host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
> -
> -		/*
> -		* errata ESDHC_FLAG_ERR004536 fix for MX6Q TO1.2 and MX6DL
> -		* TO1.1, it's harmless for MX6SL
> -		*/
> -		writel(readl(host->ioaddr + 0x6c) | BIT(7),
> -			host->ioaddr + 0x6c);
> -
> -		/* disable DLL_CTRL delay line settings */
> -		writel(0x0, host->ioaddr + ESDHC_DLL_CTRL);
>  	}
>  
>  	if (imx_data->socdata->flags & ESDHC_FLAG_MAN_TUNING)
> @@ -1237,6 +1243,8 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
>  	if (err)
>  		goto disable_clk;
>  
> +	sdhci_esdhc_imx_hwinit(host);
> +
>  	err = sdhci_add_host(host);
>  	if (err)
>  		goto disable_clk;
> 

  reply	other threads:[~2016-07-21  8:15 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
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 [this message]
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=579083AF.1040403@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.