diff options
author | Joseph Lo <josephl@nvidia.com> | 2013-05-20 06:39:25 -0400 |
---|---|---|
committer | Stephen Warren <swarren@nvidia.com> | 2013-05-22 17:19:22 -0400 |
commit | f6d06f33664756cfa8bce3494e586be32b213bdd (patch) | |
tree | daeb1a5839ece049ef3159cf07c5a2b60647a9a9 /arch/arm/mach-tegra/sleep.h | |
parent | 4b3e2edacf4344cdf7863b6fae64ccb8b02fe9f5 (diff) |
ARM: tegra: skip SCU and PL310 code when CPU is not Cortex-A9
For supporting single image on all Tegra series, we need to skip some HW
support code for Cortex-A9 only.
Signed-off-by: Joseph Lo <josephl@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/sleep.h')
-rw-r--r-- | arch/arm/mach-tegra/sleep.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/sleep.h b/arch/arm/mach-tegra/sleep.h index f9f2164a2fc7..2269c0d6fa67 100644 --- a/arch/arm/mach-tegra/sleep.h +++ b/arch/arm/mach-tegra/sleep.h | |||
@@ -70,19 +70,31 @@ | |||
70 | movt \reg, #:upper16:\val | 70 | movt \reg, #:upper16:\val |
71 | .endm | 71 | .endm |
72 | 72 | ||
73 | /* Marco to check CPU part num */ | ||
74 | .macro check_cpu_part_num part_num, tmp1, tmp2 | ||
75 | mrc p15, 0, \tmp1, c0, c0, 0 | ||
76 | ubfx \tmp1, \tmp1, #4, #12 | ||
77 | mov32 \tmp2, \part_num | ||
78 | cmp \tmp1, \tmp2 | ||
79 | .endm | ||
80 | |||
73 | /* Macro to exit SMP coherency. */ | 81 | /* Macro to exit SMP coherency. */ |
74 | .macro exit_smp, tmp1, tmp2 | 82 | .macro exit_smp, tmp1, tmp2 |
75 | mrc p15, 0, \tmp1, c1, c0, 1 @ ACTLR | 83 | mrc p15, 0, \tmp1, c1, c0, 1 @ ACTLR |
76 | bic \tmp1, \tmp1, #(1<<6) | (1<<0) @ clear ACTLR.SMP | ACTLR.FW | 84 | bic \tmp1, \tmp1, #(1<<6) | (1<<0) @ clear ACTLR.SMP | ACTLR.FW |
77 | mcr p15, 0, \tmp1, c1, c0, 1 @ ACTLR | 85 | mcr p15, 0, \tmp1, c1, c0, 1 @ ACTLR |
78 | isb | 86 | isb |
79 | cpu_id \tmp1 | 87 | #ifdef CONFIG_HAVE_ARM_SCU |
80 | mov \tmp1, \tmp1, lsl #2 | 88 | check_cpu_part_num 0xc09, \tmp1, \tmp2 |
81 | mov \tmp2, #0xf | 89 | mrceq p15, 0, \tmp1, c0, c0, 5 |
82 | mov \tmp2, \tmp2, lsl \tmp1 | 90 | andeq \tmp1, \tmp1, #0xF |
83 | mov32 \tmp1, TEGRA_ARM_PERIF_VIRT + 0xC | 91 | moveq \tmp1, \tmp1, lsl #2 |
84 | str \tmp2, [\tmp1] @ invalidate SCU tags for CPU | 92 | moveq \tmp2, #0xf |
93 | moveq \tmp2, \tmp2, lsl \tmp1 | ||
94 | ldreq \tmp1, =(TEGRA_ARM_PERIF_VIRT + 0xC) | ||
95 | streq \tmp2, [\tmp1] @ invalidate SCU tags for CPU | ||
85 | dsb | 96 | dsb |
97 | #endif | ||
86 | .endm | 98 | .endm |
87 | 99 | ||
88 | /* Macro to check Tegra revision */ | 100 | /* Macro to check Tegra revision */ |