diff options
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r-- | arch/arm/mach-imx/clk-fixup-mux.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx27.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx51-imx53.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-imx/system.c | 11 |
5 files changed, 22 insertions, 5 deletions
diff --git a/arch/arm/mach-imx/clk-fixup-mux.c b/arch/arm/mach-imx/clk-fixup-mux.c index deb4b8093b30..0d40b35c557c 100644 --- a/arch/arm/mach-imx/clk-fixup-mux.c +++ b/arch/arm/mach-imx/clk-fixup-mux.c | |||
@@ -90,6 +90,7 @@ struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg, | |||
90 | init.ops = &clk_fixup_mux_ops; | 90 | init.ops = &clk_fixup_mux_ops; |
91 | init.parent_names = parents; | 91 | init.parent_names = parents; |
92 | init.num_parents = num_parents; | 92 | init.num_parents = num_parents; |
93 | init.flags = 0; | ||
93 | 94 | ||
94 | fixup_mux->mux.reg = reg; | 95 | fixup_mux->mux.reg = reg; |
95 | fixup_mux->mux.shift = shift; | 96 | fixup_mux->mux.shift = shift; |
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index c3cfa4116dc0..c6b40f386786 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c | |||
@@ -285,7 +285,7 @@ int __init mx27_clocks_init(unsigned long fref) | |||
285 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); | 285 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); |
286 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc"); | 286 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc"); |
287 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); | 287 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); |
288 | clk_register_clkdev(clk[cpu_div], NULL, "cpufreq-cpu0.0"); | 288 | clk_register_clkdev(clk[cpu_div], NULL, "cpu0"); |
289 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); | 289 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); |
290 | 290 | ||
291 | mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1); | 291 | mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1); |
diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index 1a56a3319997..7c0dc4540aa4 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c | |||
@@ -328,7 +328,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, | |||
328 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); | 328 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); |
329 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); | 329 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); |
330 | clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma"); | 330 | clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma"); |
331 | clk_register_clkdev(clk[cpu_podf], NULL, "cpufreq-cpu0.0"); | 331 | clk_register_clkdev(clk[cpu_podf], NULL, "cpu0"); |
332 | clk_register_clkdev(clk[iim_gate], "iim", NULL); | 332 | clk_register_clkdev(clk[iim_gate], "iim", NULL); |
333 | clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0"); | 333 | clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0"); |
334 | clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1"); | 334 | clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1"); |
@@ -397,7 +397,7 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, | |||
397 | mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel)); | 397 | mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel)); |
398 | clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2, | 398 | clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2, |
399 | spdif_sel, ARRAY_SIZE(spdif_sel)); | 399 | spdif_sel, ARRAY_SIZE(spdif_sel)); |
400 | clk[spdif1_pred] = imx_clk_divider("spdif1_podf", "spdif1_sel", MXC_CCM_CDCDR, 16, 3); | 400 | clk[spdif1_pred] = imx_clk_divider("spdif1_pred", "spdif1_sel", MXC_CCM_CDCDR, 16, 3); |
401 | clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6); | 401 | clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6); |
402 | clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1, | 402 | clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1, |
403 | mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel)); | 403 | mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel)); |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 85a1b51346c8..90372a21087f 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -233,10 +233,15 @@ put_node: | |||
233 | of_node_put(np); | 233 | of_node_put(np); |
234 | } | 234 | } |
235 | 235 | ||
236 | static void __init imx6q_opp_init(struct device *cpu_dev) | 236 | static void __init imx6q_opp_init(void) |
237 | { | 237 | { |
238 | struct device_node *np; | 238 | struct device_node *np; |
239 | struct device *cpu_dev = get_cpu_device(0); | ||
239 | 240 | ||
241 | if (!cpu_dev) { | ||
242 | pr_warn("failed to get cpu0 device\n"); | ||
243 | return; | ||
244 | } | ||
240 | np = of_node_get(cpu_dev->of_node); | 245 | np = of_node_get(cpu_dev->of_node); |
241 | if (!np) { | 246 | if (!np) { |
242 | pr_warn("failed to find cpu0 node\n"); | 247 | pr_warn("failed to find cpu0 node\n"); |
@@ -268,7 +273,7 @@ static void __init imx6q_init_late(void) | |||
268 | imx6q_cpuidle_init(); | 273 | imx6q_cpuidle_init(); |
269 | 274 | ||
270 | if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) { | 275 | if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) { |
271 | imx6q_opp_init(&imx6q_cpufreq_pdev.dev); | 276 | imx6q_opp_init(); |
272 | platform_device_register(&imx6q_cpufreq_pdev); | 277 | platform_device_register(&imx6q_cpufreq_pdev); |
273 | } | 278 | } |
274 | } | 279 | } |
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c index 64ff37ea72b1..80c177c36c5f 100644 --- a/arch/arm/mach-imx/system.c +++ b/arch/arm/mach-imx/system.c | |||
@@ -117,6 +117,17 @@ void __init imx_init_l2cache(void) | |||
117 | /* Configure the L2 PREFETCH and POWER registers */ | 117 | /* Configure the L2 PREFETCH and POWER registers */ |
118 | val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL); | 118 | val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL); |
119 | val |= 0x70800000; | 119 | val |= 0x70800000; |
120 | /* | ||
121 | * The L2 cache controller(PL310) version on the i.MX6D/Q is r3p1-50rel0 | ||
122 | * The L2 cache controller(PL310) version on the i.MX6DL/SOLO/SL is r3p2 | ||
123 | * But according to ARM PL310 errata: 752271 | ||
124 | * ID: 752271: Double linefill feature can cause data corruption | ||
125 | * Fault Status: Present in: r3p0, r3p1, r3p1-50rel0. Fixed in r3p2 | ||
126 | * Workaround: The only workaround to this erratum is to disable the | ||
127 | * double linefill feature. This is the default behavior. | ||
128 | */ | ||
129 | if (cpu_is_imx6q()) | ||
130 | val &= ~(1 << 30 | 1 << 23); | ||
120 | writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL); | 131 | writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL); |
121 | val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN; | 132 | val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN; |
122 | writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL); | 133 | writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL); |