diff options
Diffstat (limited to 'arch/arm')
24 files changed, 163 insertions, 56 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index d0262bea8020..8b562c82d8a2 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1578,6 +1578,7 @@ config BL_SWITCHER_DUMMY_IF | |||
1578 | 1578 | ||
1579 | choice | 1579 | choice |
1580 | prompt "Memory split" | 1580 | prompt "Memory split" |
1581 | depends on MMU | ||
1581 | default VMSPLIT_3G | 1582 | default VMSPLIT_3G |
1582 | help | 1583 | help |
1583 | Select the desired split between kernel and user memory. | 1584 | Select the desired split between kernel and user memory. |
@@ -1595,6 +1596,7 @@ endchoice | |||
1595 | 1596 | ||
1596 | config PAGE_OFFSET | 1597 | config PAGE_OFFSET |
1597 | hex | 1598 | hex |
1599 | default PHYS_OFFSET if !MMU | ||
1598 | default 0x40000000 if VMSPLIT_1G | 1600 | default 0x40000000 if VMSPLIT_1G |
1599 | default 0x80000000 if VMSPLIT_2G | 1601 | default 0x80000000 if VMSPLIT_2G |
1600 | default 0xC0000000 | 1602 | default 0xC0000000 |
@@ -1903,6 +1905,7 @@ config XEN | |||
1903 | depends on ARM && AEABI && OF | 1905 | depends on ARM && AEABI && OF |
1904 | depends on CPU_V7 && !CPU_V6 | 1906 | depends on CPU_V7 && !CPU_V6 |
1905 | depends on !GENERIC_ATOMIC64 | 1907 | depends on !GENERIC_ATOMIC64 |
1908 | depends on MMU | ||
1906 | select ARM_PSCI | 1909 | select ARM_PSCI |
1907 | select SWIOTLB_XEN | 1910 | select SWIOTLB_XEN |
1908 | select ARCH_DMA_ADDR_T_64BIT | 1911 | select ARCH_DMA_ADDR_T_64BIT |
diff --git a/arch/arm/boot/compressed/.gitignore b/arch/arm/boot/compressed/.gitignore index 47279aa96a6a..0714e0334e33 100644 --- a/arch/arm/boot/compressed/.gitignore +++ b/arch/arm/boot/compressed/.gitignore | |||
@@ -1,4 +1,5 @@ | |||
1 | ashldi3.S | 1 | ashldi3.S |
2 | bswapsdi2.S | ||
2 | font.c | 3 | font.c |
3 | lib1funcs.S | 4 | lib1funcs.S |
4 | hyp-stub.S | 5 | hyp-stub.S |
diff --git a/arch/arm/boot/dts/bcm11351.dtsi b/arch/arm/boot/dts/bcm11351.dtsi index e491b82f8d67..792fde1b7f75 100644 --- a/arch/arm/boot/dts/bcm11351.dtsi +++ b/arch/arm/boot/dts/bcm11351.dtsi | |||
@@ -147,7 +147,7 @@ | |||
147 | }; | 147 | }; |
148 | 148 | ||
149 | pinctrl@35004800 { | 149 | pinctrl@35004800 { |
150 | compatible = "brcm,capri-pinctrl"; | 150 | compatible = "brcm,bcm11351-pinctrl"; |
151 | reg = <0x35004800 0x430>; | 151 | reg = <0x35004800 0x430>; |
152 | }; | 152 | }; |
153 | 153 | ||
diff --git a/arch/arm/boot/dts/keystone-clocks.dtsi b/arch/arm/boot/dts/keystone-clocks.dtsi index 2363593e1050..ef58d1c24313 100644 --- a/arch/arm/boot/dts/keystone-clocks.dtsi +++ b/arch/arm/boot/dts/keystone-clocks.dtsi | |||
@@ -612,7 +612,7 @@ clocks { | |||
612 | compatible = "ti,keystone,psc-clock"; | 612 | compatible = "ti,keystone,psc-clock"; |
613 | clocks = <&chipclk13>; | 613 | clocks = <&chipclk13>; |
614 | clock-output-names = "vcp-3"; | 614 | clock-output-names = "vcp-3"; |
615 | reg = <0x0235000a8 0xb00>, <0x02350060 0x400>; | 615 | reg = <0x023500a8 0xb00>, <0x02350060 0x400>; |
616 | reg-names = "control", "domain"; | 616 | reg-names = "control", "domain"; |
617 | domain-id = <24>; | 617 | domain-id = <24>; |
618 | }; | 618 | }; |
diff --git a/arch/arm/boot/dts/omap3-gta04.dts b/arch/arm/boot/dts/omap3-gta04.dts index c551e4af4d83..d3b253bbc885 100644 --- a/arch/arm/boot/dts/omap3-gta04.dts +++ b/arch/arm/boot/dts/omap3-gta04.dts | |||
@@ -13,7 +13,7 @@ | |||
13 | 13 | ||
14 | / { | 14 | / { |
15 | model = "OMAP3 GTA04"; | 15 | model = "OMAP3 GTA04"; |
16 | compatible = "ti,omap3-gta04", "ti,omap3"; | 16 | compatible = "ti,omap3-gta04", "ti,omap36xx", "ti,omap3"; |
17 | 17 | ||
18 | cpus { | 18 | cpus { |
19 | cpu@0 { | 19 | cpu@0 { |
diff --git a/arch/arm/boot/dts/omap3-igep0020.dts b/arch/arm/boot/dts/omap3-igep0020.dts index 25a2b5f652fd..f2779ac75872 100644 --- a/arch/arm/boot/dts/omap3-igep0020.dts +++ b/arch/arm/boot/dts/omap3-igep0020.dts | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | / { | 15 | / { |
16 | model = "IGEPv2 (TI OMAP AM/DM37x)"; | 16 | model = "IGEPv2 (TI OMAP AM/DM37x)"; |
17 | compatible = "isee,omap3-igep0020", "ti,omap3"; | 17 | compatible = "isee,omap3-igep0020", "ti,omap36xx", "ti,omap3"; |
18 | 18 | ||
19 | leds { | 19 | leds { |
20 | pinctrl-names = "default"; | 20 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/omap3-igep0030.dts b/arch/arm/boot/dts/omap3-igep0030.dts index 145c58cfc8ac..2793749eb1ba 100644 --- a/arch/arm/boot/dts/omap3-igep0030.dts +++ b/arch/arm/boot/dts/omap3-igep0030.dts | |||
@@ -13,7 +13,7 @@ | |||
13 | 13 | ||
14 | / { | 14 | / { |
15 | model = "IGEP COM MODULE (TI OMAP AM/DM37x)"; | 15 | model = "IGEP COM MODULE (TI OMAP AM/DM37x)"; |
16 | compatible = "isee,omap3-igep0030", "ti,omap3"; | 16 | compatible = "isee,omap3-igep0030", "ti,omap36xx", "ti,omap3"; |
17 | 17 | ||
18 | leds { | 18 | leds { |
19 | pinctrl-names = "default"; | 19 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi index 10666ca8aee1..d4d2763f4794 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi | |||
@@ -426,7 +426,7 @@ | |||
426 | }; | 426 | }; |
427 | 427 | ||
428 | rtp: rtp@01c25000 { | 428 | rtp: rtp@01c25000 { |
429 | compatible = "allwinner,sun4i-ts"; | 429 | compatible = "allwinner,sun4i-a10-ts"; |
430 | reg = <0x01c25000 0x100>; | 430 | reg = <0x01c25000 0x100>; |
431 | interrupts = <29>; | 431 | interrupts = <29>; |
432 | }; | 432 | }; |
diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi index 64961595e8d6..79fd412005b0 100644 --- a/arch/arm/boot/dts/sun5i-a10s.dtsi +++ b/arch/arm/boot/dts/sun5i-a10s.dtsi | |||
@@ -383,7 +383,7 @@ | |||
383 | }; | 383 | }; |
384 | 384 | ||
385 | rtp: rtp@01c25000 { | 385 | rtp: rtp@01c25000 { |
386 | compatible = "allwinner,sun4i-ts"; | 386 | compatible = "allwinner,sun4i-a10-ts"; |
387 | reg = <0x01c25000 0x100>; | 387 | reg = <0x01c25000 0x100>; |
388 | interrupts = <29>; | 388 | interrupts = <29>; |
389 | }; | 389 | }; |
diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi index 320335abfccd..c463fd730c91 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi | |||
@@ -346,7 +346,7 @@ | |||
346 | }; | 346 | }; |
347 | 347 | ||
348 | rtp: rtp@01c25000 { | 348 | rtp: rtp@01c25000 { |
349 | compatible = "allwinner,sun4i-ts"; | 349 | compatible = "allwinner,sun4i-a10-ts"; |
350 | reg = <0x01c25000 0x100>; | 350 | reg = <0x01c25000 0x100>; |
351 | interrupts = <29>; | 351 | interrupts = <29>; |
352 | }; | 352 | }; |
diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi index 9ff09484847b..6f25cf559ad0 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi | |||
@@ -454,7 +454,7 @@ | |||
454 | rtc: rtc@01c20d00 { | 454 | rtc: rtc@01c20d00 { |
455 | compatible = "allwinner,sun7i-a20-rtc"; | 455 | compatible = "allwinner,sun7i-a20-rtc"; |
456 | reg = <0x01c20d00 0x20>; | 456 | reg = <0x01c20d00 0x20>; |
457 | interrupts = <0 24 1>; | 457 | interrupts = <0 24 4>; |
458 | }; | 458 | }; |
459 | 459 | ||
460 | sid: eeprom@01c23800 { | 460 | sid: eeprom@01c23800 { |
@@ -463,7 +463,7 @@ | |||
463 | }; | 463 | }; |
464 | 464 | ||
465 | rtp: rtp@01c25000 { | 465 | rtp: rtp@01c25000 { |
466 | compatible = "allwinner,sun4i-ts"; | 466 | compatible = "allwinner,sun4i-a10-ts"; |
467 | reg = <0x01c25000 0x100>; | 467 | reg = <0x01c25000 0x100>; |
468 | interrupts = <0 29 4>; | 468 | interrupts = <0 29 4>; |
469 | }; | 469 | }; |
@@ -596,10 +596,10 @@ | |||
596 | hstimer@01c60000 { | 596 | hstimer@01c60000 { |
597 | compatible = "allwinner,sun7i-a20-hstimer"; | 597 | compatible = "allwinner,sun7i-a20-hstimer"; |
598 | reg = <0x01c60000 0x1000>; | 598 | reg = <0x01c60000 0x1000>; |
599 | interrupts = <0 81 1>, | 599 | interrupts = <0 81 4>, |
600 | <0 82 1>, | 600 | <0 82 4>, |
601 | <0 83 1>, | 601 | <0 83 4>, |
602 | <0 84 1>; | 602 | <0 84 4>; |
603 | clocks = <&ahb_gates 28>; | 603 | clocks = <&ahb_gates 28>; |
604 | }; | 604 | }; |
605 | 605 | ||
diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index 00fe9e9710fd..27d69b558c5d 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig | |||
@@ -204,7 +204,10 @@ CONFIG_MMC_BLOCK_MINORS=16 | |||
204 | CONFIG_MMC_SDHCI=y | 204 | CONFIG_MMC_SDHCI=y |
205 | CONFIG_MMC_SDHCI_PLTFM=y | 205 | CONFIG_MMC_SDHCI_PLTFM=y |
206 | CONFIG_MMC_SDHCI_TEGRA=y | 206 | CONFIG_MMC_SDHCI_TEGRA=y |
207 | CONFIG_NEW_LEDS=y | ||
208 | CONFIG_LEDS_CLASS=y | ||
207 | CONFIG_LEDS_GPIO=y | 209 | CONFIG_LEDS_GPIO=y |
210 | CONFIG_LEDS_TRIGGERS=y | ||
208 | CONFIG_LEDS_TRIGGER_TIMER=y | 211 | CONFIG_LEDS_TRIGGER_TIMER=y |
209 | CONFIG_LEDS_TRIGGER_ONESHOT=y | 212 | CONFIG_LEDS_TRIGGER_ONESHOT=y |
210 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 213 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index 8756e4bcdba0..4afb376d9c7c 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h | |||
@@ -30,14 +30,15 @@ | |||
30 | */ | 30 | */ |
31 | #define UL(x) _AC(x, UL) | 31 | #define UL(x) _AC(x, UL) |
32 | 32 | ||
33 | /* PAGE_OFFSET - the virtual address of the start of the kernel image */ | ||
34 | #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) | ||
35 | |||
33 | #ifdef CONFIG_MMU | 36 | #ifdef CONFIG_MMU |
34 | 37 | ||
35 | /* | 38 | /* |
36 | * PAGE_OFFSET - the virtual address of the start of the kernel image | ||
37 | * TASK_SIZE - the maximum size of a user space task. | 39 | * TASK_SIZE - the maximum size of a user space task. |
38 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area | 40 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area |
39 | */ | 41 | */ |
40 | #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) | ||
41 | #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_16M)) | 42 | #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_16M)) |
42 | #define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M) | 43 | #define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M) |
43 | 44 | ||
@@ -104,10 +105,6 @@ | |||
104 | #define END_MEM (UL(CONFIG_DRAM_BASE) + CONFIG_DRAM_SIZE) | 105 | #define END_MEM (UL(CONFIG_DRAM_BASE) + CONFIG_DRAM_SIZE) |
105 | #endif | 106 | #endif |
106 | 107 | ||
107 | #ifndef PAGE_OFFSET | ||
108 | #define PAGE_OFFSET PLAT_PHYS_OFFSET | ||
109 | #endif | ||
110 | |||
111 | /* | 108 | /* |
112 | * The module can be at any place in ram in nommu mode. | 109 | * The module can be at any place in ram in nommu mode. |
113 | */ | 110 | */ |
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 47cd974e57ea..c96ecacb2021 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -177,6 +177,18 @@ __lookup_processor_type_data: | |||
177 | .long __proc_info_end | 177 | .long __proc_info_end |
178 | .size __lookup_processor_type_data, . - __lookup_processor_type_data | 178 | .size __lookup_processor_type_data, . - __lookup_processor_type_data |
179 | 179 | ||
180 | __error_lpae: | ||
181 | #ifdef CONFIG_DEBUG_LL | ||
182 | adr r0, str_lpae | ||
183 | bl printascii | ||
184 | b __error | ||
185 | str_lpae: .asciz "\nError: Kernel with LPAE support, but CPU does not support LPAE.\n" | ||
186 | #else | ||
187 | b __error | ||
188 | #endif | ||
189 | .align | ||
190 | ENDPROC(__error_lpae) | ||
191 | |||
180 | __error_p: | 192 | __error_p: |
181 | #ifdef CONFIG_DEBUG_LL | 193 | #ifdef CONFIG_DEBUG_LL |
182 | adr r0, str_p1 | 194 | adr r0, str_p1 |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 914616e0bdcd..f5f381d91556 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -102,7 +102,7 @@ ENTRY(stext) | |||
102 | and r3, r3, #0xf @ extract VMSA support | 102 | and r3, r3, #0xf @ extract VMSA support |
103 | cmp r3, #5 @ long-descriptor translation table format? | 103 | cmp r3, #5 @ long-descriptor translation table format? |
104 | THUMB( it lo ) @ force fixup-able long branch encoding | 104 | THUMB( it lo ) @ force fixup-able long branch encoding |
105 | blo __error_p @ only classic page table format | 105 | blo __error_lpae @ only classic page table format |
106 | #endif | 106 | #endif |
107 | 107 | ||
108 | #ifndef CONFIG_XIP_KERNEL | 108 | #ifndef CONFIG_XIP_KERNEL |
diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 3b05aea56d1f..11ed9152e665 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c | |||
@@ -433,7 +433,9 @@ static const struct clk_ops dpll4_m5x2_ck_ops = { | |||
433 | .enable = &omap2_dflt_clk_enable, | 433 | .enable = &omap2_dflt_clk_enable, |
434 | .disable = &omap2_dflt_clk_disable, | 434 | .disable = &omap2_dflt_clk_disable, |
435 | .is_enabled = &omap2_dflt_clk_is_enabled, | 435 | .is_enabled = &omap2_dflt_clk_is_enabled, |
436 | .set_rate = &omap3_clkoutx2_set_rate, | ||
436 | .recalc_rate = &omap3_clkoutx2_recalc, | 437 | .recalc_rate = &omap3_clkoutx2_recalc, |
438 | .round_rate = &omap3_clkoutx2_round_rate, | ||
437 | }; | 439 | }; |
438 | 440 | ||
439 | static const struct clk_ops dpll4_m5x2_ck_3630_ops = { | 441 | static const struct clk_ops dpll4_m5x2_ck_3630_ops = { |
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index 4c158c838d40..01fc710c8181 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include "prm.h" | 23 | #include "prm.h" |
24 | #include "clockdomain.h" | 24 | #include "clockdomain.h" |
25 | 25 | ||
26 | #define MAX_CPUS 2 | ||
27 | |||
26 | /* Machine specific information */ | 28 | /* Machine specific information */ |
27 | struct idle_statedata { | 29 | struct idle_statedata { |
28 | u32 cpu_state; | 30 | u32 cpu_state; |
@@ -48,11 +50,11 @@ static struct idle_statedata omap4_idle_data[] = { | |||
48 | }, | 50 | }, |
49 | }; | 51 | }; |
50 | 52 | ||
51 | static struct powerdomain *mpu_pd, *cpu_pd[NR_CPUS]; | 53 | static struct powerdomain *mpu_pd, *cpu_pd[MAX_CPUS]; |
52 | static struct clockdomain *cpu_clkdm[NR_CPUS]; | 54 | static struct clockdomain *cpu_clkdm[MAX_CPUS]; |
53 | 55 | ||
54 | static atomic_t abort_barrier; | 56 | static atomic_t abort_barrier; |
55 | static bool cpu_done[NR_CPUS]; | 57 | static bool cpu_done[MAX_CPUS]; |
56 | static struct idle_statedata *state_ptr = &omap4_idle_data[0]; | 58 | static struct idle_statedata *state_ptr = &omap4_idle_data[0]; |
57 | 59 | ||
58 | /* Private functions */ | 60 | /* Private functions */ |
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index 3185ced807c9..3c418ea54bbe 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c | |||
@@ -623,6 +623,32 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk) | |||
623 | 623 | ||
624 | /* Clock control for DPLL outputs */ | 624 | /* Clock control for DPLL outputs */ |
625 | 625 | ||
626 | /* Find the parent DPLL for the given clkoutx2 clock */ | ||
627 | static struct clk_hw_omap *omap3_find_clkoutx2_dpll(struct clk_hw *hw) | ||
628 | { | ||
629 | struct clk_hw_omap *pclk = NULL; | ||
630 | struct clk *parent; | ||
631 | |||
632 | /* Walk up the parents of clk, looking for a DPLL */ | ||
633 | do { | ||
634 | do { | ||
635 | parent = __clk_get_parent(hw->clk); | ||
636 | hw = __clk_get_hw(parent); | ||
637 | } while (hw && (__clk_get_flags(hw->clk) & CLK_IS_BASIC)); | ||
638 | if (!hw) | ||
639 | break; | ||
640 | pclk = to_clk_hw_omap(hw); | ||
641 | } while (pclk && !pclk->dpll_data); | ||
642 | |||
643 | /* clk does not have a DPLL as a parent? error in the clock data */ | ||
644 | if (!pclk) { | ||
645 | WARN_ON(1); | ||
646 | return NULL; | ||
647 | } | ||
648 | |||
649 | return pclk; | ||
650 | } | ||
651 | |||
626 | /** | 652 | /** |
627 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate | 653 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate |
628 | * @clk: DPLL output struct clk | 654 | * @clk: DPLL output struct clk |
@@ -637,27 +663,14 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw, | |||
637 | unsigned long rate; | 663 | unsigned long rate; |
638 | u32 v; | 664 | u32 v; |
639 | struct clk_hw_omap *pclk = NULL; | 665 | struct clk_hw_omap *pclk = NULL; |
640 | struct clk *parent; | ||
641 | 666 | ||
642 | if (!parent_rate) | 667 | if (!parent_rate) |
643 | return 0; | 668 | return 0; |
644 | 669 | ||
645 | /* Walk up the parents of clk, looking for a DPLL */ | 670 | pclk = omap3_find_clkoutx2_dpll(hw); |
646 | do { | ||
647 | do { | ||
648 | parent = __clk_get_parent(hw->clk); | ||
649 | hw = __clk_get_hw(parent); | ||
650 | } while (hw && (__clk_get_flags(hw->clk) & CLK_IS_BASIC)); | ||
651 | if (!hw) | ||
652 | break; | ||
653 | pclk = to_clk_hw_omap(hw); | ||
654 | } while (pclk && !pclk->dpll_data); | ||
655 | 671 | ||
656 | /* clk does not have a DPLL as a parent? error in the clock data */ | 672 | if (!pclk) |
657 | if (!pclk) { | ||
658 | WARN_ON(1); | ||
659 | return 0; | 673 | return 0; |
660 | } | ||
661 | 674 | ||
662 | dd = pclk->dpll_data; | 675 | dd = pclk->dpll_data; |
663 | 676 | ||
@@ -672,6 +685,55 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw, | |||
672 | return rate; | 685 | return rate; |
673 | } | 686 | } |
674 | 687 | ||
688 | int omap3_clkoutx2_set_rate(struct clk_hw *hw, unsigned long rate, | ||
689 | unsigned long parent_rate) | ||
690 | { | ||
691 | return 0; | ||
692 | } | ||
693 | |||
694 | long omap3_clkoutx2_round_rate(struct clk_hw *hw, unsigned long rate, | ||
695 | unsigned long *prate) | ||
696 | { | ||
697 | const struct dpll_data *dd; | ||
698 | u32 v; | ||
699 | struct clk_hw_omap *pclk = NULL; | ||
700 | |||
701 | if (!*prate) | ||
702 | return 0; | ||
703 | |||
704 | pclk = omap3_find_clkoutx2_dpll(hw); | ||
705 | |||
706 | if (!pclk) | ||
707 | return 0; | ||
708 | |||
709 | dd = pclk->dpll_data; | ||
710 | |||
711 | /* TYPE J does not have a clkoutx2 */ | ||
712 | if (dd->flags & DPLL_J_TYPE) { | ||
713 | *prate = __clk_round_rate(__clk_get_parent(pclk->hw.clk), rate); | ||
714 | return *prate; | ||
715 | } | ||
716 | |||
717 | WARN_ON(!dd->enable_mask); | ||
718 | |||
719 | v = omap2_clk_readl(pclk, dd->control_reg) & dd->enable_mask; | ||
720 | v >>= __ffs(dd->enable_mask); | ||
721 | |||
722 | /* If in bypass, the rate is fixed to the bypass rate*/ | ||
723 | if (v != OMAP3XXX_EN_DPLL_LOCKED) | ||
724 | return *prate; | ||
725 | |||
726 | if (__clk_get_flags(hw->clk) & CLK_SET_RATE_PARENT) { | ||
727 | unsigned long best_parent; | ||
728 | |||
729 | best_parent = (rate / 2); | ||
730 | *prate = __clk_round_rate(__clk_get_parent(hw->clk), | ||
731 | best_parent); | ||
732 | } | ||
733 | |||
734 | return *prate * 2; | ||
735 | } | ||
736 | |||
675 | /* OMAP3/4 non-CORE DPLL clkops */ | 737 | /* OMAP3/4 non-CORE DPLL clkops */ |
676 | const struct clk_hw_omap_ops clkhwops_omap3_dpll = { | 738 | const struct clk_hw_omap_ops clkhwops_omap3_dpll = { |
677 | .allow_idle = omap3_dpll_allow_idle, | 739 | .allow_idle = omap3_dpll_allow_idle, |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 42d81885c700..1f33f5db10d5 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -1947,29 +1947,31 @@ static int _ocp_softreset(struct omap_hwmod *oh) | |||
1947 | goto dis_opt_clks; | 1947 | goto dis_opt_clks; |
1948 | 1948 | ||
1949 | _write_sysconfig(v, oh); | 1949 | _write_sysconfig(v, oh); |
1950 | ret = _clear_softreset(oh, &v); | ||
1951 | if (ret) | ||
1952 | goto dis_opt_clks; | ||
1953 | |||
1954 | _write_sysconfig(v, oh); | ||
1955 | 1950 | ||
1956 | if (oh->class->sysc->srst_udelay) | 1951 | if (oh->class->sysc->srst_udelay) |
1957 | udelay(oh->class->sysc->srst_udelay); | 1952 | udelay(oh->class->sysc->srst_udelay); |
1958 | 1953 | ||
1959 | c = _wait_softreset_complete(oh); | 1954 | c = _wait_softreset_complete(oh); |
1960 | if (c == MAX_MODULE_SOFTRESET_WAIT) | 1955 | if (c == MAX_MODULE_SOFTRESET_WAIT) { |
1961 | pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n", | 1956 | pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n", |
1962 | oh->name, MAX_MODULE_SOFTRESET_WAIT); | 1957 | oh->name, MAX_MODULE_SOFTRESET_WAIT); |
1963 | else | 1958 | ret = -ETIMEDOUT; |
1959 | goto dis_opt_clks; | ||
1960 | } else { | ||
1964 | pr_debug("omap_hwmod: %s: softreset in %d usec\n", oh->name, c); | 1961 | pr_debug("omap_hwmod: %s: softreset in %d usec\n", oh->name, c); |
1962 | } | ||
1963 | |||
1964 | ret = _clear_softreset(oh, &v); | ||
1965 | if (ret) | ||
1966 | goto dis_opt_clks; | ||
1967 | |||
1968 | _write_sysconfig(v, oh); | ||
1965 | 1969 | ||
1966 | /* | 1970 | /* |
1967 | * XXX add _HWMOD_STATE_WEDGED for modules that don't come back from | 1971 | * XXX add _HWMOD_STATE_WEDGED for modules that don't come back from |
1968 | * _wait_target_ready() or _reset() | 1972 | * _wait_target_ready() or _reset() |
1969 | */ | 1973 | */ |
1970 | 1974 | ||
1971 | ret = (c == MAX_MODULE_SOFTRESET_WAIT) ? -ETIMEDOUT : 0; | ||
1972 | |||
1973 | dis_opt_clks: | 1975 | dis_opt_clks: |
1974 | if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET) | 1976 | if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET) |
1975 | _disable_optional_clocks(oh); | 1977 | _disable_optional_clocks(oh); |
diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c index 18f333c440db..810c205d668b 100644 --- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c | |||
@@ -1365,11 +1365,10 @@ static struct omap_hwmod_class_sysconfig dra7xx_spinlock_sysc = { | |||
1365 | .rev_offs = 0x0000, | 1365 | .rev_offs = 0x0000, |
1366 | .sysc_offs = 0x0010, | 1366 | .sysc_offs = 0x0010, |
1367 | .syss_offs = 0x0014, | 1367 | .syss_offs = 0x0014, |
1368 | .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | | 1368 | .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP | |
1369 | SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | | 1369 | SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | |
1370 | SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), | 1370 | SYSS_HAS_RESET_STATUS), |
1371 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | | 1371 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), |
1372 | SIDLE_SMART_WKUP), | ||
1373 | .sysc_fields = &omap_hwmod_sysc_type1, | 1372 | .sysc_fields = &omap_hwmod_sysc_type1, |
1374 | }; | 1373 | }; |
1375 | 1374 | ||
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index 3d5b24dcd9a4..c33e07e2f0d4 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c | |||
@@ -22,6 +22,8 @@ | |||
22 | #include "common-board-devices.h" | 22 | #include "common-board-devices.h" |
23 | #include "dss-common.h" | 23 | #include "dss-common.h" |
24 | #include "control.h" | 24 | #include "control.h" |
25 | #include "omap-secure.h" | ||
26 | #include "soc.h" | ||
25 | 27 | ||
26 | struct pdata_init { | 28 | struct pdata_init { |
27 | const char *compatible; | 29 | const char *compatible; |
@@ -169,6 +171,22 @@ static void __init am3517_evm_legacy_init(void) | |||
169 | omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); | 171 | omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); |
170 | omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ | 172 | omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ |
171 | } | 173 | } |
174 | |||
175 | static void __init nokia_n900_legacy_init(void) | ||
176 | { | ||
177 | hsmmc2_internal_input_clk(); | ||
178 | |||
179 | if (omap_type() == OMAP2_DEVICE_TYPE_SEC) { | ||
180 | if (IS_ENABLED(CONFIG_ARM_ERRATA_430973)) { | ||
181 | pr_info("RX-51: Enabling ARM errata 430973 workaround\n"); | ||
182 | /* set IBE to 1 */ | ||
183 | rx51_secure_update_aux_cr(BIT(6), 0); | ||
184 | } else { | ||
185 | pr_warning("RX-51: Not enabling ARM errata 430973 workaround\n"); | ||
186 | pr_warning("Thumb binaries may crash randomly without this workaround\n"); | ||
187 | } | ||
188 | } | ||
189 | } | ||
172 | #endif /* CONFIG_ARCH_OMAP3 */ | 190 | #endif /* CONFIG_ARCH_OMAP3 */ |
173 | 191 | ||
174 | #ifdef CONFIG_ARCH_OMAP4 | 192 | #ifdef CONFIG_ARCH_OMAP4 |
@@ -239,6 +257,7 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = { | |||
239 | #endif | 257 | #endif |
240 | #ifdef CONFIG_ARCH_OMAP3 | 258 | #ifdef CONFIG_ARCH_OMAP3 |
241 | OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002030, "48002030.pinmux", &pcs_pdata), | 259 | OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002030, "48002030.pinmux", &pcs_pdata), |
260 | OF_DEV_AUXDATA("ti,omap3-padconf", 0x480025a0, "480025a0.pinmux", &pcs_pdata), | ||
242 | OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002a00, "48002a00.pinmux", &pcs_pdata), | 261 | OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002a00, "48002a00.pinmux", &pcs_pdata), |
243 | /* Only on am3517 */ | 262 | /* Only on am3517 */ |
244 | OF_DEV_AUXDATA("ti,davinci_mdio", 0x5c030000, "davinci_mdio.0", NULL), | 263 | OF_DEV_AUXDATA("ti,davinci_mdio", 0x5c030000, "davinci_mdio.0", NULL), |
@@ -259,7 +278,7 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = { | |||
259 | static struct pdata_init pdata_quirks[] __initdata = { | 278 | static struct pdata_init pdata_quirks[] __initdata = { |
260 | #ifdef CONFIG_ARCH_OMAP3 | 279 | #ifdef CONFIG_ARCH_OMAP3 |
261 | { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, }, | 280 | { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, }, |
262 | { "nokia,omap3-n900", hsmmc2_internal_input_clk, }, | 281 | { "nokia,omap3-n900", nokia_n900_legacy_init, }, |
263 | { "nokia,omap3-n9", hsmmc2_internal_input_clk, }, | 282 | { "nokia,omap3-n9", hsmmc2_internal_input_clk, }, |
264 | { "nokia,omap3-n950", hsmmc2_internal_input_clk, }, | 283 | { "nokia,omap3-n950", hsmmc2_internal_input_clk, }, |
265 | { "isee,omap3-igep0020", omap3_igep0020_legacy_init, }, | 284 | { "isee,omap3-igep0020", omap3_igep0020_legacy_init, }, |
diff --git a/arch/arm/mach-omap2/prminst44xx.c b/arch/arm/mach-omap2/prminst44xx.c index 6334b96b4097..280f3c58abe5 100644 --- a/arch/arm/mach-omap2/prminst44xx.c +++ b/arch/arm/mach-omap2/prminst44xx.c | |||
@@ -183,11 +183,11 @@ void omap4_prminst_global_warm_sw_reset(void) | |||
183 | OMAP4_PRM_RSTCTRL_OFFSET); | 183 | OMAP4_PRM_RSTCTRL_OFFSET); |
184 | v |= OMAP4430_RST_GLOBAL_WARM_SW_MASK; | 184 | v |= OMAP4430_RST_GLOBAL_WARM_SW_MASK; |
185 | omap4_prminst_write_inst_reg(v, OMAP4430_PRM_PARTITION, | 185 | omap4_prminst_write_inst_reg(v, OMAP4430_PRM_PARTITION, |
186 | OMAP4430_PRM_DEVICE_INST, | 186 | dev_inst, |
187 | OMAP4_PRM_RSTCTRL_OFFSET); | 187 | OMAP4_PRM_RSTCTRL_OFFSET); |
188 | 188 | ||
189 | /* OCP barrier */ | 189 | /* OCP barrier */ |
190 | v = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, | 190 | v = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, |
191 | OMAP4430_PRM_DEVICE_INST, | 191 | dev_inst, |
192 | OMAP4_PRM_RSTCTRL_OFFSET); | 192 | OMAP4_PRM_RSTCTRL_OFFSET); |
193 | } | 193 | } |
diff --git a/arch/arm/mach-sa1100/include/mach/collie.h b/arch/arm/mach-sa1100/include/mach/collie.h index f33679d2d3ee..50e1d850ee2e 100644 --- a/arch/arm/mach-sa1100/include/mach/collie.h +++ b/arch/arm/mach-sa1100/include/mach/collie.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #ifndef __ASM_ARCH_COLLIE_H | 13 | #ifndef __ASM_ARCH_COLLIE_H |
14 | #define __ASM_ARCH_COLLIE_H | 14 | #define __ASM_ARCH_COLLIE_H |
15 | 15 | ||
16 | #include "hardware.h" /* Gives GPIO_MAX */ | ||
17 | |||
16 | extern void locomolcd_power(int on); | 18 | extern void locomolcd_power(int on); |
17 | 19 | ||
18 | #define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1) | 20 | #define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1) |
diff --git a/arch/arm/mm/dump.c b/arch/arm/mm/dump.c index 2b3a56414271..ef69152f9b52 100644 --- a/arch/arm/mm/dump.c +++ b/arch/arm/mm/dump.c | |||
@@ -264,6 +264,9 @@ static void walk_pmd(struct pg_state *st, pud_t *pud, unsigned long start) | |||
264 | note_page(st, addr, 3, pmd_val(*pmd)); | 264 | note_page(st, addr, 3, pmd_val(*pmd)); |
265 | else | 265 | else |
266 | walk_pte(st, pmd, addr); | 266 | walk_pte(st, pmd, addr); |
267 | |||
268 | if (SECTION_SIZE < PMD_SIZE && pmd_large(pmd[1])) | ||
269 | note_page(st, addr + SECTION_SIZE, 3, pmd_val(pmd[1])); | ||
267 | } | 270 | } |
268 | } | 271 | } |
269 | 272 | ||