From: Dong Aisheng <aisheng.dong@nxp.com> To: linux-mmc@vger.kernel.org Cc: aisheng.dong@nxp.com, ulf.hansson@linaro.org, dongas86@gmail.com, chris@printf.net, haibo.chen@nxp.com, adrian.hunter@intel.com, shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 21/23] mmc: sdhci-esdhc-imx: factor out hw related intialization into function Date: Sat, 16 Apr 2016 01:29:45 +0800 [thread overview] Message-ID: <1460741387-23815-22-git-send-email-aisheng.dong@nxp.com> (raw) In-Reply-To: <1460741387-23815-1-git-send-email-aisheng.dong@nxp.com> Factor out hw related intialization into a separate function which has two benifits: 1) concentrate hw related intialization at one place 2) ease the hw state restore after resume by simply calling this function Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- drivers/mmc/host/sdhci-esdhc-imx.c | 76 +++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 3ff213f..95f3632 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -978,6 +978,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(0x10401040, 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, @@ -1175,43 +1213,13 @@ 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(0x10401040, host->ioaddr + ESDHC_WTMK_LVL); + sdhci_esdhc_imx_hwinit(host); + if (esdhc_is_usdhc(imx_data)) { 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) @@ -1289,8 +1297,8 @@ static int sdhci_esdhc_resume(struct device *dev) { struct sdhci_host *host = dev_get_drvdata(dev); - /* restore watermark setting in case it's lost in low power mode */ - writel(0x10401040, host->ioaddr + ESDHC_WTMK_LVL); + /* reinitialize hw state in case it's lost in low power mode */ + sdhci_esdhc_imx_hwinit(host); return sdhci_pltfm_resume(dev); } -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: aisheng.dong@nxp.com (Dong Aisheng) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 21/23] mmc: sdhci-esdhc-imx: factor out hw related intialization into function Date: Sat, 16 Apr 2016 01:29:45 +0800 [thread overview] Message-ID: <1460741387-23815-22-git-send-email-aisheng.dong@nxp.com> (raw) In-Reply-To: <1460741387-23815-1-git-send-email-aisheng.dong@nxp.com> Factor out hw related intialization into a separate function which has two benifits: 1) concentrate hw related intialization at one place 2) ease the hw state restore after resume by simply calling this function Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- drivers/mmc/host/sdhci-esdhc-imx.c | 76 +++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 3ff213f..95f3632 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -978,6 +978,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(0x10401040, 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, @@ -1175,43 +1213,13 @@ 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(0x10401040, host->ioaddr + ESDHC_WTMK_LVL); + sdhci_esdhc_imx_hwinit(host); + if (esdhc_is_usdhc(imx_data)) { 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) @@ -1289,8 +1297,8 @@ static int sdhci_esdhc_resume(struct device *dev) { struct sdhci_host *host = dev_get_drvdata(dev); - /* restore watermark setting in case it's lost in low power mode */ - writel(0x10401040, host->ioaddr + ESDHC_WTMK_LVL); + /* reinitialize hw state in case it's lost in low power mode */ + sdhci_esdhc_imx_hwinit(host); return sdhci_pltfm_resume(dev); } -- 1.9.1
next prev parent reply other threads:[~2016-04-15 17:29 UTC|newest] Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-04-15 17:29 [PATCH 00/23] a few sdhci/imx clean up and fix patches Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 01/23] mmc: sdhci: removed unneeded function wrappers Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:27 ` Adrian Hunter 2016-04-22 10:27 ` Adrian Hunter 2016-05-10 6:32 ` Adrian Hunter 2016-05-10 6:32 ` Adrian Hunter 2016-05-10 9:46 ` Ulf Hansson 2016-05-10 9:46 ` Ulf Hansson 2016-04-15 17:29 ` [PATCH 02/23] mmc: sdhci: move sdhci_get_cd() forward to avoid declaration Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:27 ` Adrian Hunter 2016-04-22 10:27 ` Adrian Hunter 2016-04-24 9:17 ` Dong Aisheng 2016-04-24 9:17 ` Dong Aisheng 2016-04-27 20:26 ` Adrian Hunter 2016-04-27 20:26 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 03/23] mmc: core: fix a comment typo Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:28 ` Adrian Hunter 2016-04-22 10:28 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 04/23] mmc: sdhci: re-factor sdhci_start_signal_voltage() Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 11:43 ` Adrian Hunter 2016-04-22 11:43 ` Adrian Hunter 2016-04-24 9:14 ` Dong Aisheng 2016-04-24 9:14 ` Dong Aisheng 2016-04-27 20:26 ` Adrian Hunter 2016-04-27 20:26 ` Adrian Hunter 2016-04-28 3:09 ` Dong Aisheng 2016-04-28 3:09 ` Dong Aisheng 2016-04-28 6:39 ` Adrian Hunter 2016-04-28 6:39 ` Adrian Hunter 2016-04-28 7:15 ` Jaehoon Chung 2016-04-28 7:15 ` Jaehoon Chung 2016-04-28 7:44 ` Adrian Hunter 2016-04-28 7:44 ` Adrian Hunter 2016-04-28 8:30 ` Jaehoon Chung 2016-04-28 8:30 ` Jaehoon Chung 2016-04-28 14:09 ` Dong Aisheng 2016-04-28 14:09 ` Dong Aisheng 2016-04-28 23:06 ` Jaehoon Chung 2016-04-28 23:06 ` Jaehoon Chung 2016-04-28 13:14 ` Dong Aisheng 2016-04-28 13:14 ` Dong Aisheng 2016-04-28 13:36 ` Adrian Hunter 2016-04-28 13:36 ` Adrian Hunter 2016-04-28 14:28 ` Dong Aisheng 2016-04-28 14:28 ` Dong Aisheng 2016-04-29 7:32 ` Adrian Hunter 2016-04-29 7:32 ` Adrian Hunter 2016-04-29 7:57 ` Dong Aisheng 2016-04-29 7:57 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 05/23] mmc: core: mmc_regulator_set_vqmmc not return error if vqmmc/vmmc not exist Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 06/23] mmc: sdhci: using common mmc_regulator_set_vqmmc() Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 11:48 ` Adrian Hunter 2016-04-22 11:48 ` Adrian Hunter 2016-04-24 9:25 ` Dong Aisheng 2016-04-24 9:25 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 07/23] mmc: sdhci: check SDHCI_QUIRK2_NO_1_8_V when do voltage switch Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:30 ` Adrian Hunter 2016-04-22 12:30 ` Adrian Hunter 2016-04-24 9:56 ` Dong Aisheng 2016-04-24 9:56 ` Dong Aisheng 2016-04-27 20:27 ` Adrian Hunter 2016-04-27 20:27 ` Adrian Hunter 2016-04-28 13:24 ` Dong Aisheng 2016-04-28 13:24 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 08/23] mmc: sdhci: rename quirk SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:33 ` Adrian Hunter 2016-04-22 12:33 ` Adrian Hunter 2016-04-24 10:00 ` Dong Aisheng 2016-04-24 10:00 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 09/23] mmc: sdhci: fix incorrect get data interrupt during no data transfer Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 6:51 ` Adrian Hunter 2016-05-10 6:51 ` Adrian Hunter 2016-05-17 4:31 ` Ritesh Harjani 2016-05-17 4:31 ` Ritesh Harjani 2016-05-17 5:58 ` Adrian Hunter 2016-05-17 5:58 ` Adrian Hunter 2016-05-26 14:59 ` Ritesh Harjani 2016-05-26 14:59 ` Ritesh Harjani 2016-05-26 11:41 ` Dong Aisheng 2016-05-26 11:41 ` Dong Aisheng 2016-05-26 11:59 ` Adrian Hunter 2016-05-26 11:59 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 10/23] mmc: core: disable auto retune during card detection process Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:48 ` Adrian Hunter 2016-04-22 12:48 ` Adrian Hunter 2016-04-24 10:47 ` Dong Aisheng 2016-04-24 10:47 ` Dong Aisheng 2016-04-28 7:04 ` Adrian Hunter 2016-04-28 7:04 ` Adrian Hunter 2016-04-28 13:22 ` Dong Aisheng 2016-04-28 13:22 ` Dong Aisheng 2016-04-29 6:54 ` Adrian Hunter 2016-04-29 6:54 ` Adrian Hunter 2016-04-29 7:42 ` Dong Aisheng 2016-04-29 7:42 ` Dong Aisheng 2016-05-10 6:55 ` Adrian Hunter 2016-05-10 6:55 ` Adrian Hunter 2016-05-31 10:18 ` Dong Aisheng 2016-05-31 10:18 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 11/23] mmc: sdhci-esdhci-imx: remove SDHCI_QUIRK_BROKEN_TIMEOUT_VAL Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:30 ` Adrian Hunter 2016-05-10 9:30 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 12/23] mmc: sdhci-esdhc-imx: add esdhc specific suspend resume callback Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:35 ` Adrian Hunter 2016-05-10 9:35 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 13/23] mmc: sdhci-esdhc-imx: restore watermark level setting after resume Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:30 ` Adrian Hunter 2016-05-10 9:30 ` Adrian Hunter 2016-05-31 7:18 ` Dong Aisheng 2016-05-31 7:18 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 14/23] mmc: sdhci-esdhci-imx: disable DLL delay line settings explicitly Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:02 ` Adrian Hunter 2016-05-10 11:02 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 15/23] mmc: sdhci-esdhc-imx: support setting tuning start point Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:17 ` Adrian Hunter 2016-05-10 11:17 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 16/23] doc: dt: fsl-imx-esdhc: add set tuning start point binding Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 17/23] mmc: sdhci: add standard hw auto retuning support Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 8:35 ` Adrian Hunter 2016-05-10 8:35 ` Adrian Hunter 2016-05-26 12:11 ` Dong Aisheng 2016-05-26 12:11 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 18/23] mmc: sdhci-esdhc-imx: enable hw auto retuning for STD_TUNING Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:19 ` Adrian Hunter 2016-05-10 11:19 ` Adrian Hunter 2016-05-26 12:21 ` Dong Aisheng 2016-05-26 12:21 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 19/23] mmc: sdhci-esdhc-imx: enable hw auto retuning for MAN_TUNING Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:24 ` Adrian Hunter 2016-05-10 11:24 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 20/23] mmc: sdhci-esdhc-imx: fix strobe DLL lock wrong clock issue Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 12:03 ` Adrian Hunter 2016-05-10 12:03 ` Adrian Hunter 2016-05-26 11:47 ` Dong Aisheng 2016-05-26 11:47 ` Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng [this message] 2016-04-15 17:29 ` [PATCH 21/23] mmc: sdhci-esdhc-imx: factor out hw related intialization into function Dong Aisheng 2016-05-10 12:15 ` Adrian Hunter 2016-05-10 12:15 ` Adrian Hunter 2016-05-26 11:45 ` Dong Aisheng 2016-05-26 11:45 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 22/23] mmc: sdhci-esdhc-imx: move tuning static configuration into hwinit function Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 13:07 ` Adrian Hunter 2016-05-10 13:07 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 23/23] mmc: sdhci-esdhc-imx: clear tuning bits during hwinit Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 13:10 ` Adrian Hunter 2016-05-10 13:10 ` Adrian Hunter
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=1460741387-23815-22-git-send-email-aisheng.dong@nxp.com \ --to=aisheng.dong@nxp.com \ --cc=adrian.hunter@intel.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: linkBe 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.