ARM: 8955/1: virt: Relax arch timer version check during early boot
authorVladimir Murzin <vladimir.murzin@arm.com>
Mon, 20 Jan 2020 14:07:46 +0000 (15:07 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Wed, 22 Jan 2020 19:12:07 +0000 (19:12 +0000)
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>
arch/arm/kernel/hyp-stub.S

index ae5020302de496baf1e1f14b7ece8021a52cb828..6607fa817bba9a5510ac0a0c2de88342a80dfdb9 100644 (file)
@@ -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