** Description changed:
[Impact]
This bug captures a few issues with the ARM arch_timer driver:
1) Some arm64 systems have hardware defects in their architected timer
implementations that require errata, which we workaround in the kernel.
However, it's possible that this workaround will not be applied if the
timer was reset w/ the user access bit set.
2) The Juno board fails to initialize a timer at boot:
- arch_timer: Unable to map frame @ 0x0000000000000000
- arch_timer: Frame missing phys irq.
- Failed to initialize '/timer@2a810000': -22
+ arch_timer: Unable to map frame @ 0x0000000000000000
+ arch_timer: Frame missing phys irq.
+ Failed to initialize '/timer@2a810000': -22
3) Possible boot warning from arch_timer_mem_of_init():
- 'Trying to vfree() nonexistent vm area'
+ 'Trying to vfree() nonexistent vm area'
4) There's a theoretical problem where the first frame of a timer could
be used even though a better suited timer frame is available.
5) An infinite recursion loop will occur when enabling the function
tracer in builds with CONFIG_PREEMPT_TRACER=y. Ubuntu does not enable
CONFIG_PREEMPT_TRACER, so this will only be a problem if that changes.
[Test Case]
+ I've regression tested this on both a system w/ an errata workaround
(HiSilicon D05) and one that is not (Cavium ThunderX CRB1S). In both cases the
timer was initialized correctly.
[Regression Risk]
+ The regression risk is restricted to ARM systems, as this driver only applies
there. Regressions could lead to a timer failing to initialize, or a system
that requires errata not having the appropriate workaround applied. (Which are
also the conditions that the suggested backports are attempting to fix).
** Description changed:
[Impact]
This bug captures a few issues with the ARM arch_timer driver:
1) Some arm64 systems have hardware defects in their architected timer
implementations that require errata, which we workaround in the kernel.
However, it's possible that this workaround will not be applied if the
timer was reset w/ the user access bit set.
2) The Juno board fails to initialize a timer at boot:
arch_timer: Unable to map frame @ 0x0000000000000000
arch_timer: Frame missing phys irq.
Failed to initialize '/timer@2a810000': -22
3) Possible boot warning from arch_timer_mem_of_init():
'Trying to vfree() nonexistent vm area'
4) There's a theoretical problem where the first frame of a timer could
be used even though a better suited timer frame is available.
5) An infinite recursion loop will occur when enabling the function
tracer in builds with CONFIG_PREEMPT_TRACER=y. Ubuntu does not enable
CONFIG_PREEMPT_TRACER, so this will only be a problem if that changes.
[Test Case]
- I've regression tested this on both a system w/ an errata workaround
(HiSilicon D05) and one that is not (Cavium ThunderX CRB1S). In both cases the
timer was initialized correctly.
+ I've regression tested this on both a system w/ an errata workaround
(HiSilicon D05) and one that is not (Cavium ThunderX CRB1S). In both cases the
timer was initialized correctly. Verified by looking at the boot messages:
+
+ dannf@d05-3:~$ dmesg | grep arch_timer
+ [ 0.000000] arch_timer: Enabling global workaround for HiSilicon erratum
161010101
+ [ 0.000000] arch_timer: CPU0: Trapping CNTVCT access
+ [ 0.000000] arch_timer: cp15 timer(s) running at 50.00MHz (phys).
+ [ 0.194241] arch_timer: CPU1: Trapping CNTVCT access
+ [ 0.197305] arch_timer: CPU2: Trapping CNTVCT access
+ <.....>
+ [ 0.396228] arch_timer: CPU62: Trapping CNTVCT access
+ [ 0.399752] arch_timer: CPU63: Trapping CNTVCT access
+
+ ubuntu@grotrian:~$ dmesg | grep arch_timer
+ [ 0.000000] arch_timer: cp15 timer(s) running at 100.00MHz (phys).
[Regression Risk]
The regression risk is restricted to ARM systems, as this driver only applies
there. Regressions could lead to a timer failing to initialize, or a system
that requires errata not having the appropriate workaround applied. (Which are
also the conditions that the suggested backports are attempting to fix).
** Changed in: linux (Ubuntu)
Assignee: (unassigned) => dann frazier (dannf)
** Changed in: linux (Ubuntu Zesty)
Assignee: (unassigned) => dann frazier (dannf)
** Changed in: linux (Ubuntu)
Status: Confirmed => In Progress
** Changed in: linux (Ubuntu Zesty)
Status: Confirmed => In Progress
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1713821
Title:
arm64 arch_timer fixes
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1713821/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs