aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2016-10-03 10:32:52 +0100
committerJon Medhurst <tixy@linaro.org>2016-10-03 10:32:52 +0100
commit69e7a3cdb274b50f9612260cb3816dceddb6c109 (patch)
tree3984c914b2541c2bd59c8c572ad121da90fc1fb5
parent3c685fecc04305ca83fd26e9a3a2083ef213cdc4 (diff)
parent746e02665551840e9b1b590d0312519748aebade (diff)
Merge branch 'lsk-3.18-armlt-juno-cpuidle' into lsk-3.18-armlt
Conflicts: linaro/configs/vexpress64.conf
-rw-r--r--Documentation/devicetree/bindings/arm/arch_timer.txt3
-rw-r--r--arch/arm64/boot/dts/arm/juno-base.dtsi2
-rw-r--r--drivers/clocksource/arm_arch_timer.c16
-rw-r--r--linaro/configs/vexpress64.conf1
4 files changed, 14 insertions, 8 deletions
diff --git a/Documentation/devicetree/bindings/arm/arch_timer.txt b/Documentation/devicetree/bindings/arm/arch_timer.txt
index 37b2cafa4e52..271483595a19 100644
--- a/Documentation/devicetree/bindings/arm/arch_timer.txt
+++ b/Documentation/devicetree/bindings/arm/arch_timer.txt
@@ -42,6 +42,9 @@ Example:
- reg : The control frame base address.
+- arm,cnttidr : The value of the CNTTIDR register if not accessible from
+ the level the kernel is running at. To be used only in extreme cases.
+
Note that #address-cells, #size-cells, and ranges shall be present to ensure
the CPU can address a frame's registers.
diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
index df60a8a1dc6d..50707888483e 100644
--- a/arch/arm64/boot/dts/arm/juno-base.dtsi
+++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
@@ -5,11 +5,11 @@
memtimer: timer@2a810000 {
compatible = "arm,armv7-timer-mem";
reg = <0x0 0x2a810000 0x0 0x10000>;
+ arm,cnttidr = <0x1>;
clock-frequency = <50000000>;
#address-cells = <2>;
#size-cells = <2>;
ranges;
- status = "disabled";
frame@2a830000 {
frame-number = <1>;
interrupts = <0 60 4>;
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 84b4c8b7fbd1..b593b98d7005 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -738,14 +738,16 @@ static void __init arch_timer_mem_init(struct device_node *np)
u32 cnttidr;
arch_timers_present |= ARCH_MEM_TIMER;
- cntctlbase = of_iomap(np, 0);
- if (!cntctlbase) {
- pr_err("arch_timer: Can't find CNTCTLBase\n");
- return;
- }
+ if (of_property_read_u32(np, "arm,cnttidr", &cnttidr)) {
+ cntctlbase = of_iomap(np, 0);
+ if (!cntctlbase) {
+ pr_err("arch_timer: Can't find CNTCTLBase\n");
+ return;
+ }
- cnttidr = readl_relaxed(cntctlbase + CNTTIDR);
- iounmap(cntctlbase);
+ cnttidr = readl_relaxed(cntctlbase + CNTTIDR);
+ iounmap(cntctlbase);
+ }
/*
* Try to find a virtual capable frame. Otherwise fall back to a
diff --git a/linaro/configs/vexpress64.conf b/linaro/configs/vexpress64.conf
index 33bd87cbf8c1..c9383b4ab3c8 100644
--- a/linaro/configs/vexpress64.conf
+++ b/linaro/configs/vexpress64.conf
@@ -66,3 +66,4 @@ CONFIG_SKY2=y
CONFIG_TEE=y
CONFIG_OPTEE=y
CONFIG_DEVMEM=y
+CONFIG_ARM64_CPUIDLE=y