| From 2aa6260e1695579dd76d4bd2c13438f0ae0a227f Mon Sep 17 00:00:00 2001 |
| From: Vladimir Murzin <vladimir.murzin@arm.com> |
| Date: Mon, 20 Jan 2020 15:07:46 +0100 |
| Subject: [PATCH] ARM: 8955/1: virt: Relax arch timer version check during |
| early boot |
| |
| commit 6849b5eba1965ceb0cad3a75877ef4569dd3638e upstream. |
| |
| Updates to the Generic Timer architecture allow ID_PFR1.GenTimer to |
| have values other than 0 or 1 while still preserving backward |
| compatibility. At the moment, Linux is quite strict in the way it |
| handles this field at early boot and will not configure arch timer if |
| it doesn't find the value 1. |
| |
| Since here use ubfx for arch timer version extraction (hyb-stub build |
| with -march=armv7-a, so it is safe) |
| |
| To help backports (even though the code was correct at the time of writing) |
| |
| Fixes: 8ec58be9f3ff ("ARM: virt: arch_timers: enable access to physical timers") |
| Acked-by: Marc Zyngier <maz@kernel.org> |
| Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com> |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S |
| index ae5020302de4..6607fa817bba 100644 |
| --- a/arch/arm/kernel/hyp-stub.S |
| +++ b/arch/arm/kernel/hyp-stub.S |
| @@ -146,10 +146,9 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE |
| #if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER) |
| @ make CNTP_* and CNTPCT accessible from PL1 |
| mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1 |
| - lsr r7, #16 |
| - and r7, #0xf |
| - cmp r7, #1 |
| - bne 1f |
| + ubfx r7, r7, #16, #4 |
| + teq r7, #0 |
| + beq 1f |
| mrc p15, 4, r7, c14, c1, 0 @ CNTHCTL |
| orr r7, r7, #3 @ PL1PCEN | PL1PCTEN |
| mcr p15, 4, r7, c14, c1, 0 @ CNTHCTL |
| -- |
| 2.7.4 |
| |