arm64: switch to clockintr(9)
authorcheloha <cheloha@openbsd.org>
Tue, 8 Nov 2022 17:56:38 +0000 (17:56 +0000)
committercheloha <cheloha@openbsd.org>
Tue, 8 Nov 2022 17:56:38 +0000 (17:56 +0000)
commite3d8572a3ca8a988fcd6e6a6cbf3b919097c9288
tree7e3131f01b0490ac98aced29e26482e38c4989ad
parente7d82d9536149741a5f8c6b25af3f15d2ab00518
arm64: switch to clockintr(9)

Switch arm64 to the clockintr(9) subsystem.

- Remove the custom per-CPU clock interrupt schedule from agtimer(4).
- Remove the custom randomized statclock() pieces from agtimer(4).
- Add agtimer_rearm(), agtimer_trigger(), and wire up agtimer_intrclock.

There is one wart:

- The AArch64 spec says that a value written to CNTV_TVAL_EL0 is
  "treated as a signed 32-bit integer" [1].  kettenis@ doesn't know
  what to make of this.  I'm capping the value at INT32_MAX for
  now.  It's possible I am misreading this, though.

Tested by kettenis@ on his Apple M1 mini.  Tested by me on my
Raspberry Pi 4B.

Link: https://marc.info/?l=openbsd-tech&m=166776342503304&w=2
[1] "Arm Architecture Reference Manual for A-profile architecture"
    issue I.a, section D17.11.27 ("CNTV_TVAL_EL0").

ok kettenis@
sys/arch/arm64/dev/agtimer.c
sys/arch/arm64/include/_types.h
sys/arch/arm64/include/cpu.h