diff options
author | Arnd Bergmann <arnd@arndb.de> | 2013-04-09 09:26:51 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2013-04-09 09:26:51 -0400 |
commit | 5be8f6368800d9e3e570373d2aaff8a48be36574 (patch) | |
tree | 1a874b8668abbf9cfa24fdf917a9c4468acb468f /arch/arm | |
parent | f199ab1aab9d790bee6c84bdb476f1e4911b8011 (diff) | |
parent | eebd1fda2342014a50ed3fd132e5dc6e8b5251e8 (diff) |
Merge branch 'tegra/fixes' into next/cleanup
This is a dependency for tegra/cleanups
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/boot/dts/tegra20-colibri-512.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-harmony.dts | 4 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-paz00.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-seaboard.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-tamonten.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-trimslice.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-ventana.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra20-whistler.dts | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra30-beaver.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/tegra30-cardhu.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board-harmony-pcie.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-tegra/cpuidle-tegra30.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-tegra/headsmp.S | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/platsmp.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-tegra/pm.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-tegra/powergate.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-tegra/reset-handler.S | 48 |
17 files changed, 63 insertions, 48 deletions
diff --git a/arch/arm/boot/dts/tegra20-colibri-512.dtsi b/arch/arm/boot/dts/tegra20-colibri-512.dtsi index 444162090042..cb73e62d61a9 100644 --- a/arch/arm/boot/dts/tegra20-colibri-512.dtsi +++ b/arch/arm/boot/dts/tegra20-colibri-512.dtsi | |||
@@ -444,7 +444,7 @@ | |||
444 | }; | 444 | }; |
445 | 445 | ||
446 | sdhci@c8000600 { | 446 | sdhci@c8000600 { |
447 | cd-gpios = <&gpio 23 0>; /* gpio PC7 */ | 447 | cd-gpios = <&gpio 23 1>; /* gpio PC7 */ |
448 | }; | 448 | }; |
449 | 449 | ||
450 | sound { | 450 | sound { |
diff --git a/arch/arm/boot/dts/tegra20-harmony.dts b/arch/arm/boot/dts/tegra20-harmony.dts index 61d027f03617..1f79c0debb05 100644 --- a/arch/arm/boot/dts/tegra20-harmony.dts +++ b/arch/arm/boot/dts/tegra20-harmony.dts | |||
@@ -437,7 +437,7 @@ | |||
437 | 437 | ||
438 | sdhci@c8000200 { | 438 | sdhci@c8000200 { |
439 | status = "okay"; | 439 | status = "okay"; |
440 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 440 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ |
441 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 441 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
442 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | 442 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ |
443 | bus-width = <4>; | 443 | bus-width = <4>; |
@@ -445,7 +445,7 @@ | |||
445 | 445 | ||
446 | sdhci@c8000600 { | 446 | sdhci@c8000600 { |
447 | status = "okay"; | 447 | status = "okay"; |
448 | cd-gpios = <&gpio 58 0>; /* gpio PH2 */ | 448 | cd-gpios = <&gpio 58 1>; /* gpio PH2 */ |
449 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ | 449 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ |
450 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | 450 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
451 | bus-width = <8>; | 451 | bus-width = <8>; |
diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts index 54d6fce00a59..9db36da8e023 100644 --- a/arch/arm/boot/dts/tegra20-paz00.dts +++ b/arch/arm/boot/dts/tegra20-paz00.dts | |||
@@ -436,7 +436,7 @@ | |||
436 | 436 | ||
437 | sdhci@c8000000 { | 437 | sdhci@c8000000 { |
438 | status = "okay"; | 438 | status = "okay"; |
439 | cd-gpios = <&gpio 173 0>; /* gpio PV5 */ | 439 | cd-gpios = <&gpio 173 1>; /* gpio PV5 */ |
440 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 440 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
441 | power-gpios = <&gpio 169 0>; /* gpio PV1 */ | 441 | power-gpios = <&gpio 169 0>; /* gpio PV1 */ |
442 | bus-width = <4>; | 442 | bus-width = <4>; |
diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts index 37b3a57ec0f1..715a8b8dd9cd 100644 --- a/arch/arm/boot/dts/tegra20-seaboard.dts +++ b/arch/arm/boot/dts/tegra20-seaboard.dts | |||
@@ -584,7 +584,7 @@ | |||
584 | 584 | ||
585 | sdhci@c8000400 { | 585 | sdhci@c8000400 { |
586 | status = "okay"; | 586 | status = "okay"; |
587 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 587 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ |
588 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 588 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
589 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | 589 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
590 | bus-width = <4>; | 590 | bus-width = <4>; |
diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi index 4766abae7a72..6e9d91fc6195 100644 --- a/arch/arm/boot/dts/tegra20-tamonten.dtsi +++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi | |||
@@ -465,7 +465,7 @@ | |||
465 | }; | 465 | }; |
466 | 466 | ||
467 | sdhci@c8000600 { | 467 | sdhci@c8000600 { |
468 | cd-gpios = <&gpio 58 0>; /* gpio PH2 */ | 468 | cd-gpios = <&gpio 58 1>; /* gpio PH2 */ |
469 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ | 469 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ |
470 | bus-width = <4>; | 470 | bus-width = <4>; |
471 | status = "okay"; | 471 | status = "okay"; |
diff --git a/arch/arm/boot/dts/tegra20-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts index 5d79e4fc49a6..98f3e44f2a51 100644 --- a/arch/arm/boot/dts/tegra20-trimslice.dts +++ b/arch/arm/boot/dts/tegra20-trimslice.dts | |||
@@ -325,7 +325,7 @@ | |||
325 | 325 | ||
326 | sdhci@c8000600 { | 326 | sdhci@c8000600 { |
327 | status = "okay"; | 327 | status = "okay"; |
328 | cd-gpios = <&gpio 121 0>; /* gpio PP1 */ | 328 | cd-gpios = <&gpio 121 1>; /* gpio PP1 */ |
329 | wp-gpios = <&gpio 122 0>; /* gpio PP2 */ | 329 | wp-gpios = <&gpio 122 0>; /* gpio PP2 */ |
330 | bus-width = <4>; | 330 | bus-width = <4>; |
331 | }; | 331 | }; |
diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts index 425c89000c20..4aef56f2d96a 100644 --- a/arch/arm/boot/dts/tegra20-ventana.dts +++ b/arch/arm/boot/dts/tegra20-ventana.dts | |||
@@ -520,7 +520,7 @@ | |||
520 | 520 | ||
521 | sdhci@c8000400 { | 521 | sdhci@c8000400 { |
522 | status = "okay"; | 522 | status = "okay"; |
523 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 523 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ |
524 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 524 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
525 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | 525 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
526 | bus-width = <4>; | 526 | bus-width = <4>; |
diff --git a/arch/arm/boot/dts/tegra20-whistler.dts b/arch/arm/boot/dts/tegra20-whistler.dts index ea57c0f6dcce..5762188c60ad 100644 --- a/arch/arm/boot/dts/tegra20-whistler.dts +++ b/arch/arm/boot/dts/tegra20-whistler.dts | |||
@@ -510,6 +510,7 @@ | |||
510 | 510 | ||
511 | sdhci@c8000400 { | 511 | sdhci@c8000400 { |
512 | status = "okay"; | 512 | status = "okay"; |
513 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ | ||
513 | wp-gpios = <&gpio 173 0>; /* gpio PV5 */ | 514 | wp-gpios = <&gpio 173 0>; /* gpio PV5 */ |
514 | bus-width = <8>; | 515 | bus-width = <8>; |
515 | }; | 516 | }; |
diff --git a/arch/arm/boot/dts/tegra30-beaver.dts b/arch/arm/boot/dts/tegra30-beaver.dts index 8ff2ff20e4a3..0a2cd24df853 100644 --- a/arch/arm/boot/dts/tegra30-beaver.dts +++ b/arch/arm/boot/dts/tegra30-beaver.dts | |||
@@ -257,7 +257,7 @@ | |||
257 | 257 | ||
258 | sdhci@78000000 { | 258 | sdhci@78000000 { |
259 | status = "okay"; | 259 | status = "okay"; |
260 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 260 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ |
261 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ | 261 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ |
262 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ | 262 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ |
263 | bus-width = <4>; | 263 | bus-width = <4>; |
diff --git a/arch/arm/boot/dts/tegra30-cardhu.dtsi b/arch/arm/boot/dts/tegra30-cardhu.dtsi index 17499272a4ef..3e2d21018a5b 100644 --- a/arch/arm/boot/dts/tegra30-cardhu.dtsi +++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi | |||
@@ -311,7 +311,7 @@ | |||
311 | 311 | ||
312 | sdhci@78000000 { | 312 | sdhci@78000000 { |
313 | status = "okay"; | 313 | status = "okay"; |
314 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 314 | cd-gpios = <&gpio 69 1>; /* gpio PI5 */ |
315 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ | 315 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ |
316 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ | 316 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ |
317 | bus-width = <4>; | 317 | bus-width = <4>; |
diff --git a/arch/arm/mach-tegra/board-harmony-pcie.c b/arch/arm/mach-tegra/board-harmony-pcie.c index 3cdc1bb8254c..d195db09ea32 100644 --- a/arch/arm/mach-tegra/board-harmony-pcie.c +++ b/arch/arm/mach-tegra/board-harmony-pcie.c | |||
@@ -62,7 +62,11 @@ int __init harmony_pcie_init(void) | |||
62 | goto err_reg; | 62 | goto err_reg; |
63 | } | 63 | } |
64 | 64 | ||
65 | regulator_enable(regulator); | 65 | err = regulator_enable(regulator); |
66 | if (err) { | ||
67 | pr_err("%s: regulator_enable failed: %d\n", __func__, err); | ||
68 | goto err_en; | ||
69 | } | ||
66 | 70 | ||
67 | err = tegra_pcie_init(true, true); | 71 | err = tegra_pcie_init(true, true); |
68 | if (err) { | 72 | if (err) { |
@@ -74,6 +78,7 @@ int __init harmony_pcie_init(void) | |||
74 | 78 | ||
75 | err_pcie: | 79 | err_pcie: |
76 | regulator_disable(regulator); | 80 | regulator_disable(regulator); |
81 | err_en: | ||
77 | regulator_put(regulator); | 82 | regulator_put(regulator); |
78 | err_reg: | 83 | err_reg: |
79 | gpio_free(en_vdd_1v05); | 84 | gpio_free(en_vdd_1v05); |
diff --git a/arch/arm/mach-tegra/cpuidle-tegra30.c b/arch/arm/mach-tegra/cpuidle-tegra30.c index 8b50cf4ddd6f..80445ed33d95 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra30.c +++ b/arch/arm/mach-tegra/cpuidle-tegra30.c | |||
@@ -102,12 +102,8 @@ static bool tegra30_cpu_core_power_down(struct cpuidle_device *dev, | |||
102 | 102 | ||
103 | smp_wmb(); | 103 | smp_wmb(); |
104 | 104 | ||
105 | save_cpu_arch_register(); | ||
106 | |||
107 | cpu_suspend(0, tegra30_sleep_cpu_secondary_finish); | 105 | cpu_suspend(0, tegra30_sleep_cpu_secondary_finish); |
108 | 106 | ||
109 | restore_cpu_arch_register(); | ||
110 | |||
111 | clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu); | 107 | clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu); |
112 | 108 | ||
113 | return true; | 109 | return true; |
diff --git a/arch/arm/mach-tegra/headsmp.S b/arch/arm/mach-tegra/headsmp.S index fd473f2b4c3d..045c16f2dd51 100644 --- a/arch/arm/mach-tegra/headsmp.S +++ b/arch/arm/mach-tegra/headsmp.S | |||
@@ -7,8 +7,5 @@ | |||
7 | 7 | ||
8 | ENTRY(tegra_secondary_startup) | 8 | ENTRY(tegra_secondary_startup) |
9 | bl v7_invalidate_l1 | 9 | bl v7_invalidate_l1 |
10 | /* Enable coresight */ | ||
11 | mov32 r0, 0xC5ACCE55 | ||
12 | mcr p14, 0, r0, c7, c12, 6 | ||
13 | b secondary_startup | 10 | b secondary_startup |
14 | ENDPROC(tegra_secondary_startup) | 11 | ENDPROC(tegra_secondary_startup) |
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 9348d3c496a9..fb86a00ce254 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c | |||
@@ -83,7 +83,7 @@ static int tegra30_power_up_cpu(unsigned int cpu) | |||
83 | if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) { | 83 | if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) { |
84 | timeout = jiffies + msecs_to_jiffies(50); | 84 | timeout = jiffies + msecs_to_jiffies(50); |
85 | do { | 85 | do { |
86 | if (!tegra_powergate_is_powered(pwrgateid)) | 86 | if (tegra_powergate_is_powered(pwrgateid)) |
87 | goto remove_clamps; | 87 | goto remove_clamps; |
88 | udelay(10); | 88 | udelay(10); |
89 | } while (time_before(jiffies, timeout)); | 89 | } while (time_before(jiffies, timeout)); |
@@ -116,6 +116,9 @@ remove_clamps: | |||
116 | 116 | ||
117 | /* Remove I/O clamps. */ | 117 | /* Remove I/O clamps. */ |
118 | ret = tegra_powergate_remove_clamping(pwrgateid); | 118 | ret = tegra_powergate_remove_clamping(pwrgateid); |
119 | if (ret) | ||
120 | return ret; | ||
121 | |||
119 | udelay(10); | 122 | udelay(10); |
120 | 123 | ||
121 | /* Clear flow controller CSR. */ | 124 | /* Clear flow controller CSR. */ |
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c index 523604de666f..0494f739c95f 100644 --- a/arch/arm/mach-tegra/pm.c +++ b/arch/arm/mach-tegra/pm.c | |||
@@ -46,26 +46,11 @@ | |||
46 | #define PMC_CPUPWROFF_TIMER 0xcc | 46 | #define PMC_CPUPWROFF_TIMER 0xcc |
47 | 47 | ||
48 | #ifdef CONFIG_PM_SLEEP | 48 | #ifdef CONFIG_PM_SLEEP |
49 | static unsigned int g_diag_reg; | ||
50 | static DEFINE_SPINLOCK(tegra_lp2_lock); | 49 | static DEFINE_SPINLOCK(tegra_lp2_lock); |
51 | static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE); | 50 | static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE); |
52 | static struct clk *tegra_pclk; | 51 | static struct clk *tegra_pclk; |
53 | void (*tegra_tear_down_cpu)(void); | 52 | void (*tegra_tear_down_cpu)(void); |
54 | 53 | ||
55 | void save_cpu_arch_register(void) | ||
56 | { | ||
57 | /* read diagnostic register */ | ||
58 | asm("mrc p15, 0, %0, c15, c0, 1" : "=r"(g_diag_reg) : : "cc"); | ||
59 | return; | ||
60 | } | ||
61 | |||
62 | void restore_cpu_arch_register(void) | ||
63 | { | ||
64 | /* write diagnostic register */ | ||
65 | asm("mcr p15, 0, %0, c15, c0, 1" : : "r"(g_diag_reg) : "cc"); | ||
66 | return; | ||
67 | } | ||
68 | |||
69 | static void set_power_timers(unsigned long us_on, unsigned long us_off) | 54 | static void set_power_timers(unsigned long us_on, unsigned long us_off) |
70 | { | 55 | { |
71 | unsigned long long ticks; | 56 | unsigned long long ticks; |
@@ -119,8 +104,6 @@ static void restore_cpu_complex(void) | |||
119 | tegra_cpu_clock_resume(); | 104 | tegra_cpu_clock_resume(); |
120 | 105 | ||
121 | flowctrl_cpu_suspend_exit(cpu); | 106 | flowctrl_cpu_suspend_exit(cpu); |
122 | |||
123 | restore_cpu_arch_register(); | ||
124 | } | 107 | } |
125 | 108 | ||
126 | /* | 109 | /* |
@@ -145,8 +128,6 @@ static void suspend_cpu_complex(void) | |||
145 | tegra_cpu_clock_suspend(); | 128 | tegra_cpu_clock_suspend(); |
146 | 129 | ||
147 | flowctrl_cpu_suspend_enter(cpu); | 130 | flowctrl_cpu_suspend_enter(cpu); |
148 | |||
149 | save_cpu_arch_register(); | ||
150 | } | 131 | } |
151 | 132 | ||
152 | void tegra_clear_cpu_in_lp2(int phy_cpu_id) | 133 | void tegra_clear_cpu_in_lp2(int phy_cpu_id) |
diff --git a/arch/arm/mach-tegra/powergate.c b/arch/arm/mach-tegra/powergate.c index c6bc8f85759c..af9067e2867c 100644 --- a/arch/arm/mach-tegra/powergate.c +++ b/arch/arm/mach-tegra/powergate.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/debugfs.h> | 22 | #include <linux/debugfs.h> |
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
25 | #include <linux/export.h> | ||
25 | #include <linux/init.h> | 26 | #include <linux/init.h> |
26 | #include <linux/io.h> | 27 | #include <linux/io.h> |
27 | #include <linux/seq_file.h> | 28 | #include <linux/seq_file.h> |
@@ -75,7 +76,7 @@ static int tegra_powergate_set(int id, bool new_state) | |||
75 | 76 | ||
76 | if (status == new_state) { | 77 | if (status == new_state) { |
77 | spin_unlock_irqrestore(&tegra_powergate_lock, flags); | 78 | spin_unlock_irqrestore(&tegra_powergate_lock, flags); |
78 | return -EINVAL; | 79 | return 0; |
79 | } | 80 | } |
80 | 81 | ||
81 | pmc_write(PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE); | 82 | pmc_write(PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE); |
@@ -168,6 +169,7 @@ err_clk: | |||
168 | err_power: | 169 | err_power: |
169 | return ret; | 170 | return ret; |
170 | } | 171 | } |
172 | EXPORT_SYMBOL(tegra_powergate_sequence_power_up); | ||
171 | 173 | ||
172 | int tegra_cpu_powergate_id(int cpuid) | 174 | int tegra_cpu_powergate_id(int cpuid) |
173 | { | 175 | { |
diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S index 54382ceade4a..1676aba5e7b8 100644 --- a/arch/arm/mach-tegra/reset-handler.S +++ b/arch/arm/mach-tegra/reset-handler.S | |||
@@ -41,9 +41,6 @@ | |||
41 | */ | 41 | */ |
42 | ENTRY(tegra_resume) | 42 | ENTRY(tegra_resume) |
43 | bl v7_invalidate_l1 | 43 | bl v7_invalidate_l1 |
44 | /* Enable coresight */ | ||
45 | mov32 r0, 0xC5ACCE55 | ||
46 | mcr p14, 0, r0, c7, c12, 6 | ||
47 | 44 | ||
48 | cpu_id r0 | 45 | cpu_id r0 |
49 | cmp r0, #0 @ CPU0? | 46 | cmp r0, #0 @ CPU0? |
@@ -99,6 +96,8 @@ ENTRY(__tegra_cpu_reset_handler_start) | |||
99 | * | 96 | * |
100 | * Register usage within the reset handler: | 97 | * Register usage within the reset handler: |
101 | * | 98 | * |
99 | * Others: scratch | ||
100 | * R6 = SoC ID << 8 | ||
102 | * R7 = CPU present (to the OS) mask | 101 | * R7 = CPU present (to the OS) mask |
103 | * R8 = CPU in LP1 state mask | 102 | * R8 = CPU in LP1 state mask |
104 | * R9 = CPU in LP2 state mask | 103 | * R9 = CPU in LP2 state mask |
@@ -114,6 +113,40 @@ ENTRY(__tegra_cpu_reset_handler_start) | |||
114 | ENTRY(__tegra_cpu_reset_handler) | 113 | ENTRY(__tegra_cpu_reset_handler) |
115 | 114 | ||
116 | cpsid aif, 0x13 @ SVC mode, interrupts disabled | 115 | cpsid aif, 0x13 @ SVC mode, interrupts disabled |
116 | |||
117 | mov32 r6, TEGRA_APB_MISC_BASE | ||
118 | ldr r6, [r6, #APB_MISC_GP_HIDREV] | ||
119 | and r6, r6, #0xff00 | ||
120 | #ifdef CONFIG_ARCH_TEGRA_2x_SOC | ||
121 | t20_check: | ||
122 | cmp r6, #(0x20 << 8) | ||
123 | bne after_t20_check | ||
124 | t20_errata: | ||
125 | # Tegra20 is a Cortex-A9 r1p1 | ||
126 | mrc p15, 0, r0, c1, c0, 0 @ read system control register | ||
127 | orr r0, r0, #1 << 14 @ erratum 716044 | ||
128 | mcr p15, 0, r0, c1, c0, 0 @ write system control register | ||
129 | mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register | ||
130 | orr r0, r0, #1 << 4 @ erratum 742230 | ||
131 | orr r0, r0, #1 << 11 @ erratum 751472 | ||
132 | mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register | ||
133 | b after_errata | ||
134 | after_t20_check: | ||
135 | #endif | ||
136 | #ifdef CONFIG_ARCH_TEGRA_3x_SOC | ||
137 | t30_check: | ||
138 | cmp r6, #(0x30 << 8) | ||
139 | bne after_t30_check | ||
140 | t30_errata: | ||
141 | # Tegra30 is a Cortex-A9 r2p9 | ||
142 | mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register | ||
143 | orr r0, r0, #1 << 6 @ erratum 743622 | ||
144 | orr r0, r0, #1 << 11 @ erratum 751472 | ||
145 | mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register | ||
146 | b after_errata | ||
147 | after_t30_check: | ||
148 | #endif | ||
149 | after_errata: | ||
117 | mrc p15, 0, r10, c0, c0, 5 @ MPIDR | 150 | mrc p15, 0, r10, c0, c0, 5 @ MPIDR |
118 | and r10, r10, #0x3 @ R10 = CPU number | 151 | and r10, r10, #0x3 @ R10 = CPU number |
119 | mov r11, #1 | 152 | mov r11, #1 |
@@ -129,16 +162,13 @@ ENTRY(__tegra_cpu_reset_handler) | |||
129 | 162 | ||
130 | #ifdef CONFIG_ARCH_TEGRA_2x_SOC | 163 | #ifdef CONFIG_ARCH_TEGRA_2x_SOC |
131 | /* Are we on Tegra20? */ | 164 | /* Are we on Tegra20? */ |
132 | mov32 r6, TEGRA_APB_MISC_BASE | 165 | cmp r6, #(0x20 << 8) |
133 | ldr r0, [r6, #APB_MISC_GP_HIDREV] | ||
134 | and r0, r0, #0xff00 | ||
135 | cmp r0, #(0x20 << 8) | ||
136 | bne 1f | 166 | bne 1f |
137 | /* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */ | 167 | /* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */ |
138 | mov32 r6, TEGRA_PMC_BASE | 168 | mov32 r5, TEGRA_PMC_BASE |
139 | mov r0, #0 | 169 | mov r0, #0 |
140 | cmp r10, #0 | 170 | cmp r10, #0 |
141 | strne r0, [r6, #PMC_SCRATCH41] | 171 | strne r0, [r5, #PMC_SCRATCH41] |
142 | 1: | 172 | 1: |
143 | #endif | 173 | #endif |
144 | 174 | ||