diff options
| -rw-r--r-- | arch/arm/boot/dts/exynos4.dtsi | 2 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/exynos.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/firmware.c | 9 | ||||
| -rw-r--r-- | drivers/clocksource/exynos_mct.c | 20 |
4 files changed, 27 insertions, 6 deletions
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index fbaf426d2daa..17b22e9cc2aa 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi | |||
| @@ -554,7 +554,7 @@ | |||
| 554 | interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>; | 554 | interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>; |
| 555 | clocks = <&clock CLK_PWM>; | 555 | clocks = <&clock CLK_PWM>; |
| 556 | clock-names = "timers"; | 556 | clock-names = "timers"; |
| 557 | #pwm-cells = <2>; | 557 | #pwm-cells = <3>; |
| 558 | status = "disabled"; | 558 | status = "disabled"; |
| 559 | }; | 559 | }; |
| 560 | 560 | ||
diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index f38cf7c110cc..95cad252eb1b 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c | |||
| @@ -297,7 +297,7 @@ static void __init exynos_dt_machine_init(void) | |||
| 297 | * This is called from smp_prepare_cpus if we've built for SMP, but | 297 | * This is called from smp_prepare_cpus if we've built for SMP, but |
| 298 | * we still need to set it up for PM and firmware ops if not. | 298 | * we still need to set it up for PM and firmware ops if not. |
| 299 | */ | 299 | */ |
| 300 | if (!IS_ENABLED(SMP)) | 300 | if (!IS_ENABLED(CONFIG_SMP)) |
| 301 | exynos_sysram_init(); | 301 | exynos_sysram_init(); |
| 302 | 302 | ||
| 303 | exynos_cpuidle_init(); | 303 | exynos_cpuidle_init(); |
diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c index eb91d2350f8c..e8797bb78871 100644 --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c | |||
| @@ -57,8 +57,13 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) | |||
| 57 | 57 | ||
| 58 | boot_reg = sysram_ns_base_addr + 0x1c; | 58 | boot_reg = sysram_ns_base_addr + 0x1c; |
| 59 | 59 | ||
| 60 | if (!soc_is_exynos4212() && !soc_is_exynos3250()) | 60 | /* |
| 61 | boot_reg += 4*cpu; | 61 | * Almost all Exynos-series of SoCs that run in secure mode don't need |
| 62 | * additional offset for every CPU, with Exynos4412 being the only | ||
| 63 | * exception. | ||
| 64 | */ | ||
| 65 | if (soc_is_exynos4412()) | ||
| 66 | boot_reg += 4 * cpu; | ||
| 62 | 67 | ||
| 63 | __raw_writel(boot_addr, boot_reg); | 68 | __raw_writel(boot_addr, boot_reg); |
| 64 | return 0; | 69 | return 0; |
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c index f71d55f5e6e5..ab51bf20a3ed 100644 --- a/drivers/clocksource/exynos_mct.c +++ b/drivers/clocksource/exynos_mct.c | |||
| @@ -162,7 +162,7 @@ static void exynos4_mct_frc_start(void) | |||
| 162 | exynos4_mct_write(reg, EXYNOS4_MCT_G_TCON); | 162 | exynos4_mct_write(reg, EXYNOS4_MCT_G_TCON); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | static cycle_t exynos4_frc_read(struct clocksource *cs) | 165 | static cycle_t notrace _exynos4_frc_read(void) |
| 166 | { | 166 | { |
| 167 | unsigned int lo, hi; | 167 | unsigned int lo, hi; |
| 168 | u32 hi2 = __raw_readl(reg_base + EXYNOS4_MCT_G_CNT_U); | 168 | u32 hi2 = __raw_readl(reg_base + EXYNOS4_MCT_G_CNT_U); |
| @@ -176,6 +176,11 @@ static cycle_t exynos4_frc_read(struct clocksource *cs) | |||
| 176 | return ((cycle_t)hi << 32) | lo; | 176 | return ((cycle_t)hi << 32) | lo; |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | static cycle_t exynos4_frc_read(struct clocksource *cs) | ||
| 180 | { | ||
| 181 | return _exynos4_frc_read(); | ||
| 182 | } | ||
| 183 | |||
| 179 | static void exynos4_frc_resume(struct clocksource *cs) | 184 | static void exynos4_frc_resume(struct clocksource *cs) |
| 180 | { | 185 | { |
| 181 | exynos4_mct_frc_start(); | 186 | exynos4_mct_frc_start(); |
| @@ -192,13 +197,24 @@ struct clocksource mct_frc = { | |||
| 192 | 197 | ||
| 193 | static u64 notrace exynos4_read_sched_clock(void) | 198 | static u64 notrace exynos4_read_sched_clock(void) |
| 194 | { | 199 | { |
| 195 | return exynos4_frc_read(&mct_frc); | 200 | return _exynos4_frc_read(); |
| 201 | } | ||
| 202 | |||
| 203 | static struct delay_timer exynos4_delay_timer; | ||
| 204 | |||
| 205 | static cycles_t exynos4_read_current_timer(void) | ||
| 206 | { | ||
| 207 | return _exynos4_frc_read(); | ||
| 196 | } | 208 | } |
| 197 | 209 | ||
| 198 | static void __init exynos4_clocksource_init(void) | 210 | static void __init exynos4_clocksource_init(void) |
| 199 | { | 211 | { |
| 200 | exynos4_mct_frc_start(); | 212 | exynos4_mct_frc_start(); |
| 201 | 213 | ||
| 214 | exynos4_delay_timer.read_current_timer = &exynos4_read_current_timer; | ||
| 215 | exynos4_delay_timer.freq = clk_rate; | ||
| 216 | register_current_timer_delay(&exynos4_delay_timer); | ||
| 217 | |||
| 202 | if (clocksource_register_hz(&mct_frc, clk_rate)) | 218 | if (clocksource_register_hz(&mct_frc, clk_rate)) |
| 203 | panic("%s: can't register clocksource\n", mct_frc.name); | 219 | panic("%s: can't register clocksource\n", mct_frc.name); |
| 204 | 220 | ||
