[RFC PATCH 04/18] aarch64: stub hpclock hooks for current master's clock subsystem

Paulo Duarte <[email protected]>
Newsgroups gmane.os.hurd.bugs
Message-ID <[email protected]>
bugaevc/wip-aarch64 branched off gnumach master in early 2024.  Since
then upstream's kern/clock.c gained references to two per-arch hooks
that read the ARMv8 generic timer's CNTPCT_EL0 directly:

  uint32_t hpclock_read_counter(void);
  uint32_t hpclock_get_counter_period_nsec(void);

wip-aarch64 predates them, so the previous commit (the verbatim
import) doesn't link against current master:

  undefined reference to `hpclock_read_counter'
  undefined reference to `hpclock_get_counter_period_nsec'

Add the two functions to aarch64/arm/timer.c.  Both are trivial
wrappers: read CNTPCT_EL0 for the counter, derive the period from
cnt_freq (set during cnt_init from the DTB's clock-frequency
property).

After this commit, gnumach links cleanly on aarch64 against current
savannah master.  Two subsequent commits address early-boot bugs
that prevent it from running.
---
 aarch64/arm/timer.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/aarch64/arm/timer.c b/aarch64/arm/timer.c
index ac0114f0..1aff1d19 100644
--- a/aarch64/arm/timer.c
+++ b/aarch64/arm/timer.c
@@ -101,3 +101,15 @@ void cnt_init(dtb_node_t node)
 		}
 	}
 }
+
+uint32_t hpclock_read_counter(void)
+{
+	uint64_t v;
+	asm volatile("mrs %0, CNTPCT_EL0" : "=r"(v));
+	return (uint32_t) v;
+}
+
+uint32_t hpclock_get_counter_period_nsec(void)
+{
+	return cnt_freq ? (uint32_t)(1000000000UL / cnt_freq) : 0;
+}
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.