diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-08-23 11:02:42 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-08-23 11:02:42 -0400 |
commit | 1e72fe1fca4490474984d6356bbf66e2daa89f73 (patch) | |
tree | 12d95820cbb2083a6c78cfe550a0f9b20b1246eb /arch/arm | |
parent | 8a211d362cc94df2bb42323ab13d258650529bec (diff) | |
parent | a46d2619d7180bda12bad2bf15bbd0731dfc2dcf (diff) |
Merge branch 'imx/fixes-for-3.6' of git://git.linaro.org/people/shawnguo/linux-2.6 into fixes
* 'imx/fixes-for-3.6' of git://git.linaro.org/people/shawnguo/linux-2.6:
ARM: dts: imx51-babbage: fix esdhc cd/wp properties
ARM: imx6: spin the cpu until hardware takes it down
ARM i.MX6q: Add virtual 1/3.5 dividers in the LDB clock path
Also updates to Linux 3.6-rc2
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/boot/dts/imx27.dtsi | 6 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx51-babbage.dts | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx51.dtsi | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx53.dtsi | 7 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6q.dtsi | 7 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx6q.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-imx/hotplug.c | 23 | ||||
-rw-r--r-- | arch/arm/mm/dma-mapping.c | 12 |
8 files changed, 40 insertions, 31 deletions
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 00bae3aad5ab..5303ab680a34 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi | |||
@@ -19,6 +19,12 @@ | |||
19 | serial3 = &uart4; | 19 | serial3 = &uart4; |
20 | serial4 = &uart5; | 20 | serial4 = &uart5; |
21 | serial5 = &uart6; | 21 | serial5 = &uart6; |
22 | gpio0 = &gpio1; | ||
23 | gpio1 = &gpio2; | ||
24 | gpio2 = &gpio3; | ||
25 | gpio3 = &gpio4; | ||
26 | gpio4 = &gpio5; | ||
27 | gpio5 = &gpio6; | ||
22 | }; | 28 | }; |
23 | 29 | ||
24 | avic: avic-interrupt-controller@e0000000 { | 30 | avic: avic-interrupt-controller@e0000000 { |
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index cd86177a3ea2..59d9789e5508 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts | |||
@@ -25,8 +25,8 @@ | |||
25 | aips@70000000 { /* aips-1 */ | 25 | aips@70000000 { /* aips-1 */ |
26 | spba@70000000 { | 26 | spba@70000000 { |
27 | esdhc@70004000 { /* ESDHC1 */ | 27 | esdhc@70004000 { /* ESDHC1 */ |
28 | fsl,cd-internal; | 28 | fsl,cd-controller; |
29 | fsl,wp-internal; | 29 | fsl,wp-controller; |
30 | status = "okay"; | 30 | status = "okay"; |
31 | }; | 31 | }; |
32 | 32 | ||
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 53cbaa3d4f90..aba28dc87fc8 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi | |||
@@ -17,6 +17,10 @@ | |||
17 | serial0 = &uart1; | 17 | serial0 = &uart1; |
18 | serial1 = &uart2; | 18 | serial1 = &uart2; |
19 | serial2 = &uart3; | 19 | serial2 = &uart3; |
20 | gpio0 = &gpio1; | ||
21 | gpio1 = &gpio2; | ||
22 | gpio2 = &gpio3; | ||
23 | gpio3 = &gpio4; | ||
20 | }; | 24 | }; |
21 | 25 | ||
22 | tzic: tz-interrupt-controller@e0000000 { | 26 | tzic: tz-interrupt-controller@e0000000 { |
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index fc79cdc4b4e6..cd37165edce5 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi | |||
@@ -19,6 +19,13 @@ | |||
19 | serial2 = &uart3; | 19 | serial2 = &uart3; |
20 | serial3 = &uart4; | 20 | serial3 = &uart4; |
21 | serial4 = &uart5; | 21 | serial4 = &uart5; |
22 | gpio0 = &gpio1; | ||
23 | gpio1 = &gpio2; | ||
24 | gpio2 = &gpio3; | ||
25 | gpio3 = &gpio4; | ||
26 | gpio4 = &gpio5; | ||
27 | gpio5 = &gpio6; | ||
28 | gpio6 = &gpio7; | ||
22 | }; | 29 | }; |
23 | 30 | ||
24 | tzic: tz-interrupt-controller@0fffc000 { | 31 | tzic: tz-interrupt-controller@0fffc000 { |
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index 3d3c64b014e6..fd57079f71a9 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi | |||
@@ -19,6 +19,13 @@ | |||
19 | serial2 = &uart3; | 19 | serial2 = &uart3; |
20 | serial3 = &uart4; | 20 | serial3 = &uart4; |
21 | serial4 = &uart5; | 21 | serial4 = &uart5; |
22 | gpio0 = &gpio1; | ||
23 | gpio1 = &gpio2; | ||
24 | gpio2 = &gpio3; | ||
25 | gpio3 = &gpio4; | ||
26 | gpio4 = &gpio5; | ||
27 | gpio5 = &gpio6; | ||
28 | gpio6 = &gpio7; | ||
22 | }; | 29 | }; |
23 | 30 | ||
24 | cpus { | 31 | cpus { |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index ea89520b6e22..4233d9e3531d 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -152,7 +152,7 @@ enum mx6q_clks { | |||
152 | ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3, | 152 | ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3, |
153 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, | 153 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, |
154 | pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg, | 154 | pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg, |
155 | ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, | 155 | ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5, |
156 | clk_max | 156 | clk_max |
157 | }; | 157 | }; |
158 | 158 | ||
@@ -288,8 +288,10 @@ int __init mx6q_clocks_init(void) | |||
288 | clk[gpu3d_shader] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3); | 288 | clk[gpu3d_shader] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3); |
289 | clk[ipu1_podf] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3); | 289 | clk[ipu1_podf] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3); |
290 | clk[ipu2_podf] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3); | 290 | clk[ipu2_podf] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3); |
291 | clk[ldb_di0_podf] = imx_clk_divider("ldb_di0_podf", "ldb_di0_sel", base + 0x20, 10, 1); | 291 | clk[ldb_di0_div_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); |
292 | clk[ldb_di1_podf] = imx_clk_divider("ldb_di1_podf", "ldb_di1_sel", base + 0x20, 11, 1); | 292 | clk[ldb_di0_podf] = imx_clk_divider("ldb_di0_podf", "ldb_di0_div_3_5", base + 0x20, 10, 1); |
293 | clk[ldb_di1_div_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7); | ||
294 | clk[ldb_di1_podf] = imx_clk_divider("ldb_di1_podf", "ldb_di1_div_3_5", base + 0x20, 11, 1); | ||
293 | clk[ipu1_di0_pre] = imx_clk_divider("ipu1_di0_pre", "ipu1_di0_pre_sel", base + 0x34, 3, 3); | 295 | clk[ipu1_di0_pre] = imx_clk_divider("ipu1_di0_pre", "ipu1_di0_pre_sel", base + 0x34, 3, 3); |
294 | clk[ipu1_di1_pre] = imx_clk_divider("ipu1_di1_pre", "ipu1_di1_pre_sel", base + 0x34, 12, 3); | 296 | clk[ipu1_di1_pre] = imx_clk_divider("ipu1_di1_pre", "ipu1_di1_pre_sel", base + 0x34, 12, 3); |
295 | clk[ipu2_di0_pre] = imx_clk_divider("ipu2_di0_pre", "ipu2_di0_pre_sel", base + 0x38, 3, 3); | 297 | clk[ipu2_di0_pre] = imx_clk_divider("ipu2_di0_pre", "ipu2_di0_pre_sel", base + 0x38, 3, 3); |
diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 20ed2d56c1af..f8f7437c83b8 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c | |||
@@ -42,22 +42,6 @@ static inline void cpu_enter_lowpower(void) | |||
42 | : "cc"); | 42 | : "cc"); |
43 | } | 43 | } |
44 | 44 | ||
45 | static inline void cpu_leave_lowpower(void) | ||
46 | { | ||
47 | unsigned int v; | ||
48 | |||
49 | asm volatile( | ||
50 | "mrc p15, 0, %0, c1, c0, 0\n" | ||
51 | " orr %0, %0, %1\n" | ||
52 | " mcr p15, 0, %0, c1, c0, 0\n" | ||
53 | " mrc p15, 0, %0, c1, c0, 1\n" | ||
54 | " orr %0, %0, %2\n" | ||
55 | " mcr p15, 0, %0, c1, c0, 1\n" | ||
56 | : "=&r" (v) | ||
57 | : "Ir" (CR_C), "Ir" (0x40) | ||
58 | : "cc"); | ||
59 | } | ||
60 | |||
61 | /* | 45 | /* |
62 | * platform-specific code to shutdown a CPU | 46 | * platform-specific code to shutdown a CPU |
63 | * | 47 | * |
@@ -67,11 +51,10 @@ void platform_cpu_die(unsigned int cpu) | |||
67 | { | 51 | { |
68 | cpu_enter_lowpower(); | 52 | cpu_enter_lowpower(); |
69 | imx_enable_cpu(cpu, false); | 53 | imx_enable_cpu(cpu, false); |
70 | cpu_do_idle(); | ||
71 | cpu_leave_lowpower(); | ||
72 | 54 | ||
73 | /* We should never return from idle */ | 55 | /* spin here until hardware takes it down */ |
74 | panic("cpu %d unexpectedly exit from shutdown\n", cpu); | 56 | while (1) |
57 | ; | ||
75 | } | 58 | } |
76 | 59 | ||
77 | int platform_cpu_disable(unsigned int cpu) | 60 | int platform_cpu_disable(unsigned int cpu) |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index c2cdf6500f75..4e7d1182e8a3 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -358,7 +358,7 @@ void __init dma_contiguous_remap(void) | |||
358 | if (end > arm_lowmem_limit) | 358 | if (end > arm_lowmem_limit) |
359 | end = arm_lowmem_limit; | 359 | end = arm_lowmem_limit; |
360 | if (start >= end) | 360 | if (start >= end) |
361 | return; | 361 | continue; |
362 | 362 | ||
363 | map.pfn = __phys_to_pfn(start); | 363 | map.pfn = __phys_to_pfn(start); |
364 | map.virtual = __phys_to_virt(start); | 364 | map.virtual = __phys_to_virt(start); |
@@ -423,7 +423,7 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page) | |||
423 | unsigned int pageno; | 423 | unsigned int pageno; |
424 | unsigned long flags; | 424 | unsigned long flags; |
425 | void *ptr = NULL; | 425 | void *ptr = NULL; |
426 | size_t align; | 426 | unsigned long align_mask; |
427 | 427 | ||
428 | if (!pool->vaddr) { | 428 | if (!pool->vaddr) { |
429 | WARN(1, "coherent pool not initialised!\n"); | 429 | WARN(1, "coherent pool not initialised!\n"); |
@@ -435,11 +435,11 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page) | |||
435 | * small, so align them to their order in pages, minimum is a page | 435 | * small, so align them to their order in pages, minimum is a page |
436 | * size. This helps reduce fragmentation of the DMA space. | 436 | * size. This helps reduce fragmentation of the DMA space. |
437 | */ | 437 | */ |
438 | align = PAGE_SIZE << get_order(size); | 438 | align_mask = (1 << get_order(size)) - 1; |
439 | 439 | ||
440 | spin_lock_irqsave(&pool->lock, flags); | 440 | spin_lock_irqsave(&pool->lock, flags); |
441 | pageno = bitmap_find_next_zero_area(pool->bitmap, pool->nr_pages, | 441 | pageno = bitmap_find_next_zero_area(pool->bitmap, pool->nr_pages, |
442 | 0, count, (1 << align) - 1); | 442 | 0, count, align_mask); |
443 | if (pageno < pool->nr_pages) { | 443 | if (pageno < pool->nr_pages) { |
444 | bitmap_set(pool->bitmap, pageno, count); | 444 | bitmap_set(pool->bitmap, pageno, count); |
445 | ptr = pool->vaddr + PAGE_SIZE * pageno; | 445 | ptr = pool->vaddr + PAGE_SIZE * pageno; |
@@ -648,12 +648,12 @@ void arm_dma_free(struct device *dev, size_t size, void *cpu_addr, | |||
648 | 648 | ||
649 | if (arch_is_coherent() || nommu()) { | 649 | if (arch_is_coherent() || nommu()) { |
650 | __dma_free_buffer(page, size); | 650 | __dma_free_buffer(page, size); |
651 | } else if (__free_from_pool(cpu_addr, size)) { | ||
652 | return; | ||
651 | } else if (!IS_ENABLED(CONFIG_CMA)) { | 653 | } else if (!IS_ENABLED(CONFIG_CMA)) { |
652 | __dma_free_remap(cpu_addr, size); | 654 | __dma_free_remap(cpu_addr, size); |
653 | __dma_free_buffer(page, size); | 655 | __dma_free_buffer(page, size); |
654 | } else { | 656 | } else { |
655 | if (__free_from_pool(cpu_addr, size)) | ||
656 | return; | ||
657 | /* | 657 | /* |
658 | * Non-atomic allocations cannot be freed with IRQs disabled | 658 | * Non-atomic allocations cannot be freed with IRQs disabled |
659 | */ | 659 | */ |