aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch')
-rw-r--r--target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch85
1 files changed, 0 insertions, 85 deletions
diff --git a/target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch b/target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch
deleted file mode 100644
index b02a9c1617..0000000000
--- a/target/linux/mediatek/patches-4.14/0157-mmc-mediatek-add-support-of-source_cg-clock.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From 3c6b94d7091f0793445f2faf777e584af643e9da Mon Sep 17 00:00:00 2001
-From: Chaotian Jing <chaotian.jing@mediatek.com>
-Date: Mon, 16 Oct 2017 09:46:36 +0800
-Subject: [PATCH 157/224] mmc: mediatek: add support of source_cg clock
-
-source clock need an independent cg to control, when doing clk mode
-switch, need gate source clock to avoid hw issue(multi-bit sync hw hang)
-
-Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
-Tested-by: Sean Wang <sean.wang@mediatek.com>
-Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
----
- drivers/mmc/host/mtk-sd.c | 23 ++++++++++++++++++++++-
- 1 file changed, 22 insertions(+), 1 deletion(-)
-
---- a/drivers/mmc/host/mtk-sd.c
-+++ b/drivers/mmc/host/mtk-sd.c
-@@ -374,6 +374,7 @@ struct msdc_host {
-
- struct clk *src_clk; /* msdc source clock */
- struct clk *h_clk; /* msdc h_clk */
-+ struct clk *src_clk_cg; /* msdc source clock control gate */
- u32 mclk; /* mmc subsystem clock frequency */
- u32 src_clk_freq; /* source clock frequency */
- u32 sclk; /* SD/MS bus clock frequency */
-@@ -618,6 +619,7 @@ static void msdc_set_timeout(struct msdc
-
- static void msdc_gate_clock(struct msdc_host *host)
- {
-+ clk_disable_unprepare(host->src_clk_cg);
- clk_disable_unprepare(host->src_clk);
- clk_disable_unprepare(host->h_clk);
- }
-@@ -626,6 +628,7 @@ static void msdc_ungate_clock(struct msd
- {
- clk_prepare_enable(host->h_clk);
- clk_prepare_enable(host->src_clk);
-+ clk_prepare_enable(host->src_clk_cg);
- while (!(readl(host->base + MSDC_CFG) & MSDC_CFG_CKSTB))
- cpu_relax();
- }
-@@ -694,6 +697,15 @@ static void msdc_set_mclk(struct msdc_ho
- sclk = (host->src_clk_freq >> 2) / div;
- }
- }
-+ sdr_clr_bits(host->base + MSDC_CFG, MSDC_CFG_CKPDN);
-+ /*
-+ * As src_clk/HCLK use the same bit to gate/ungate,
-+ * So if want to only gate src_clk, need gate its parent(mux).
-+ */
-+ if (host->src_clk_cg)
-+ clk_disable_unprepare(host->src_clk_cg);
-+ else
-+ clk_disable_unprepare(clk_get_parent(host->src_clk));
- if (host->dev_comp->clk_div_bits == 8)
- sdr_set_field(host->base + MSDC_CFG,
- MSDC_CFG_CKMOD | MSDC_CFG_CKDIV,
-@@ -702,10 +714,14 @@ static void msdc_set_mclk(struct msdc_ho
- sdr_set_field(host->base + MSDC_CFG,
- MSDC_CFG_CKMOD_EXTRA | MSDC_CFG_CKDIV_EXTRA,
- (mode << 12) | div);
-+ if (host->src_clk_cg)
-+ clk_prepare_enable(host->src_clk_cg);
-+ else
-+ clk_prepare_enable(clk_get_parent(host->src_clk));
-
-- sdr_set_bits(host->base + MSDC_CFG, MSDC_CFG_CKPDN);
- while (!(readl(host->base + MSDC_CFG) & MSDC_CFG_CKSTB))
- cpu_relax();
-+ sdr_set_bits(host->base + MSDC_CFG, MSDC_CFG_CKPDN);
- host->sclk = sclk;
- host->mclk = hz;
- host->timing = timing;
-@@ -1825,6 +1841,11 @@ static int msdc_drv_probe(struct platfor
- goto host_free;
- }
-
-+ /*source clock control gate is optional clock*/
-+ host->src_clk_cg = devm_clk_get(&pdev->dev, "source_cg");
-+ if (IS_ERR(host->src_clk_cg))
-+ host->src_clk_cg = NULL;
-+
- host->irq = platform_get_irq(pdev, 0);
- if (host->irq < 0) {
- ret = -EINVAL;