diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/head.S | 21 | ||||
-rw-r--r-- | arch/arm/kernel/psci_smp.c | 1 | ||||
-rw-r--r-- | arch/arm/kernel/time.c | 29 |
3 files changed, 37 insertions, 14 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 2c7cc1e03473..476de57dcef2 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -487,7 +487,26 @@ __fixup_smp: | |||
487 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR | 487 | mrc p15, 0, r0, c0, c0, 5 @ read MPIDR |
488 | and r0, r0, #0xc0000000 @ multiprocessing extensions and | 488 | and r0, r0, #0xc0000000 @ multiprocessing extensions and |
489 | teq r0, #0x80000000 @ not part of a uniprocessor system? | 489 | teq r0, #0x80000000 @ not part of a uniprocessor system? |
490 | moveq pc, lr @ yes, assume SMP | 490 | bne __fixup_smp_on_up @ no, assume UP |
491 | |||
492 | @ Core indicates it is SMP. Check for Aegis SOC where a single | ||
493 | @ Cortex-A9 CPU is present but SMP operations fault. | ||
494 | mov r4, #0x41000000 | ||
495 | orr r4, r4, #0x0000c000 | ||
496 | orr r4, r4, #0x00000090 | ||
497 | teq r3, r4 @ Check for ARM Cortex-A9 | ||
498 | movne pc, lr @ Not ARM Cortex-A9, | ||
499 | |||
500 | @ If a future SoC *does* use 0x0 as the PERIPH_BASE, then the | ||
501 | @ below address check will need to be #ifdef'd or equivalent | ||
502 | @ for the Aegis platform. | ||
503 | mrc p15, 4, r0, c15, c0 @ get SCU base address | ||
504 | teq r0, #0x0 @ '0' on actual UP A9 hardware | ||
505 | beq __fixup_smp_on_up @ So its an A9 UP | ||
506 | ldr r0, [r0, #4] @ read SCU Config | ||
507 | and r0, r0, #0x3 @ number of CPUs | ||
508 | teq r0, #0x0 @ is 1? | ||
509 | movne pc, lr | ||
491 | 510 | ||
492 | __fixup_smp_on_up: | 511 | __fixup_smp_on_up: |
493 | adr r0, 1f | 512 | adr r0, 1f |
diff --git a/arch/arm/kernel/psci_smp.c b/arch/arm/kernel/psci_smp.c index 70ded3fb42d9..570a48cc3d64 100644 --- a/arch/arm/kernel/psci_smp.c +++ b/arch/arm/kernel/psci_smp.c | |||
@@ -14,7 +14,6 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/irqchip/arm-gic.h> | ||
18 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
19 | #include <linux/of.h> | 18 | #include <linux/of.h> |
20 | 19 | ||
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index 98aee3258398..829a96d4a179 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -11,25 +11,26 @@ | |||
11 | * This file contains the ARM-specific time handling details: | 11 | * This file contains the ARM-specific time handling details: |
12 | * reading the RTC at bootup, etc... | 12 | * reading the RTC at bootup, etc... |
13 | */ | 13 | */ |
14 | #include <linux/clk-provider.h> | ||
15 | #include <linux/clocksource.h> | ||
16 | #include <linux/errno.h> | ||
14 | #include <linux/export.h> | 17 | #include <linux/export.h> |
15 | #include <linux/kernel.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/time.h> | ||
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/interrupt.h> | ||
20 | #include <linux/irq.h> | ||
21 | #include <linux/kernel.h> | ||
22 | #include <linux/profile.h> | ||
19 | #include <linux/sched.h> | 23 | #include <linux/sched.h> |
24 | #include <linux/sched_clock.h> | ||
20 | #include <linux/smp.h> | 25 | #include <linux/smp.h> |
26 | #include <linux/time.h> | ||
21 | #include <linux/timex.h> | 27 | #include <linux/timex.h> |
22 | #include <linux/errno.h> | ||
23 | #include <linux/profile.h> | ||
24 | #include <linux/timer.h> | 28 | #include <linux/timer.h> |
25 | #include <linux/clocksource.h> | ||
26 | #include <linux/irq.h> | ||
27 | #include <linux/sched_clock.h> | ||
28 | 29 | ||
29 | #include <asm/thread_info.h> | ||
30 | #include <asm/stacktrace.h> | ||
31 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
32 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
32 | #include <asm/stacktrace.h> | ||
33 | #include <asm/thread_info.h> | ||
33 | 34 | ||
34 | #if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE) || \ | 35 | #if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE) || \ |
35 | defined(CONFIG_NVRAM) || defined(CONFIG_NVRAM_MODULE) | 36 | defined(CONFIG_NVRAM) || defined(CONFIG_NVRAM_MODULE) |
@@ -116,8 +117,12 @@ int __init register_persistent_clock(clock_access_fn read_boot, | |||
116 | 117 | ||
117 | void __init time_init(void) | 118 | void __init time_init(void) |
118 | { | 119 | { |
119 | if (machine_desc->init_time) | 120 | if (machine_desc->init_time) { |
120 | machine_desc->init_time(); | 121 | machine_desc->init_time(); |
121 | else | 122 | } else { |
123 | #ifdef CONFIG_COMMON_CLK | ||
124 | of_clk_init(NULL); | ||
125 | #endif | ||
122 | clocksource_of_init(); | 126 | clocksource_of_init(); |
127 | } | ||
123 | } | 128 | } |