aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCristian Marussi <cristian.marussi@arm.com>2023-12-10 22:14:21 +0000
committerAndrew Turner <andrew@FreeBSD.org>2024-09-02 08:46:27 +0000
commit4047cec13239e2bfa5b4fbd98de56bdb214e15bc (patch)
treeee8e0c991e3c727741792221634753dc3860d789
parent519141de7e6639e4df3485073d2521dc95b60207 (diff)
scmi: Implement scmi_clknode_recalc_freq method
Allow the SCMI clock frequency to be queried back, useful for testing the IRQ path via sysctl access. Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D43038 (cherry picked from commit ecd8cc84dcee7d08be8663f721f0502dc5b65808)
-rw-r--r--sys/dev/firmware/arm/scmi_clk.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/dev/firmware/arm/scmi_clk.c b/sys/dev/firmware/arm/scmi_clk.c
index 30d630c8ef57..48259d81a60a 100644
--- a/sys/dev/firmware/arm/scmi_clk.c
+++ b/sys/dev/firmware/arm/scmi_clk.c
@@ -56,7 +56,7 @@ struct scmi_clknode_softc {
int clock_id;
};
-static int __unused
+static int
scmi_clk_get_rate(struct scmi_clk_softc *sc, int clk_id, uint64_t *rate)
{
struct scmi_clk_rate_get_out out;
@@ -155,8 +155,18 @@ scmi_clknode_init(struct clknode *clk, device_t dev)
static int
scmi_clknode_recalc_freq(struct clknode *clk, uint64_t *freq)
{
+ struct scmi_clknode_softc *clk_sc;
+ struct scmi_clk_softc *sc;
+ uint64_t rate;
+ int ret;
- return (0);
+ clk_sc = clknode_get_softc(clk);
+ sc = device_get_softc(clk_sc->dev);
+ ret = scmi_clk_get_rate(sc, clk_sc->clock_id, &rate);
+ if (ret == 0)
+ *freq = rate;
+
+ return (ret);
}
static int