summaryrefslogtreecommitdiffstats
path: root/arm64-socionext-96b-enablement.patch
diff options
context:
space:
mode:
Diffstat (limited to 'arm64-socionext-96b-enablement.patch')
-rw-r--r--arm64-socionext-96b-enablement.patch110
1 files changed, 0 insertions, 110 deletions
diff --git a/arm64-socionext-96b-enablement.patch b/arm64-socionext-96b-enablement.patch
index 0a7df3a19..721383ec6 100644
--- a/arm64-socionext-96b-enablement.patch
+++ b/arm64-socionext-96b-enablement.patch
@@ -1,113 +1,3 @@
-From 58be18a7bbf9dca67f4260ac172a44baa59d0ee9 Mon Sep 17 00:00:00 2001
-From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Mon, 21 Aug 2017 10:47:48 +0100
-Subject: arm64: acpi/gtdt: validate CNTFRQ after having enabled the frame
-
-The ACPI GTDT code validates the CNTFRQ field of each MMIO timer
-frame against the CNTFRQ system register of the current CPU, to
-ensure that they are equal, which is mandated by the architecture.
-
-However, reading the CNTFRQ field of a frame is not possible until
-the RFRQ bit in the frame's CNTACRn register is set, and doing so
-before that willl produce the following error:
-
- arch_timer: [Firmware Bug]: CNTFRQ mismatch: frame @ 0x00000000e0be0000: (0x00000000), CPU: (0x0ee6b280)
- arch_timer: Disabling MMIO timers due to CNTFRQ mismatch
- arch_timer: Failed to initialize memory-mapped timer.
-
-The reason is that the CNTFRQ field is RES0 if access is not enabled.
-
-So move the validation of CNTFRQ into the loop that iterates over the
-timers to find the best frame, but defer it until after we have selected
-the best frame, which should also have enabled the RFRQ bit.
-
-Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
----
- drivers/clocksource/arm_arch_timer.c | 38 ++++++++++++++++++++----------------
- 1 file changed, 21 insertions(+), 17 deletions(-)
-
-diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
-index fd4b7f6..14e2419 100644
---- a/drivers/clocksource/arm_arch_timer.c
-+++ b/drivers/clocksource/arm_arch_timer.c
-@@ -1268,10 +1268,6 @@ arch_timer_mem_find_best_frame(struct arch_timer_mem *timer_mem)
-
- iounmap(cntctlbase);
-
-- if (!best_frame)
-- pr_err("Unable to find a suitable frame in timer @ %pa\n",
-- &timer_mem->cntctlbase);
--
- return best_frame;
- }
-
-@@ -1372,6 +1368,8 @@ static int __init arch_timer_mem_of_init(struct device_node *np)
-
- frame = arch_timer_mem_find_best_frame(timer_mem);
- if (!frame) {
-+ pr_err("Unable to find a suitable frame in timer @ %pa\n",
-+ &timer_mem->cntctlbase);
- ret = -EINVAL;
- goto out;
- }
-@@ -1420,7 +1418,7 @@ arch_timer_mem_verify_cntfrq(struct arch_timer_mem *timer_mem)
- static int __init arch_timer_mem_acpi_init(int platform_timer_count)
- {
- struct arch_timer_mem *timers, *timer;
-- struct arch_timer_mem_frame *frame;
-+ struct arch_timer_mem_frame *frame, *best_frame = NULL;
- int timer_count, i, ret = 0;
-
- timers = kcalloc(platform_timer_count, sizeof(*timers),
-@@ -1432,14 +1430,6 @@ static int __init arch_timer_mem_acpi_init(int platform_timer_count)
- if (ret || !timer_count)
- goto out;
-
-- for (i = 0; i < timer_count; i++) {
-- ret = arch_timer_mem_verify_cntfrq(&timers[i]);
-- if (ret) {
-- pr_err("Disabling MMIO timers due to CNTFRQ mismatch\n");
-- goto out;
-- }
-- }
--
- /*
- * While unlikely, it's theoretically possible that none of the frames
- * in a timer expose the combination of feature we want.
-@@ -1448,12 +1438,26 @@ static int __init arch_timer_mem_acpi_init(int platform_timer_count)
- timer = &timers[i];
-
- frame = arch_timer_mem_find_best_frame(timer);
-- if (frame)
-- break;
-+ if (!best_frame)
-+ best_frame = frame;
-+
-+ ret = arch_timer_mem_verify_cntfrq(timer);
-+ if (ret) {
-+ pr_err("Disabling MMIO timers due to CNTFRQ mismatch\n");
-+ goto out;
-+ }
-+
-+ if (!best_frame) /* implies !frame */
-+ /*
-+ * Only complain about missing suitable frames if we
-+ * haven't already found one in a previous iteration.
-+ */
-+ pr_err("Unable to find a suitable frame in timer @ %pa\n",
-+ &timer->cntctlbase);
- }
-
-- if (frame)
-- ret = arch_timer_mem_frame_register(frame);
-+ if (best_frame)
-+ ret = arch_timer_mem_frame_register(best_frame);
- out:
- kfree(timers);
- return ret;
---
-cgit v1.1
-
From 33d983b5bb2929ae242606925e708092b1dfdd8f Mon Sep 17 00:00:00 2001
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date: Sat, 2 Sep 2017 11:01:22 +0100