Skip to content

Commit b680587

Browse files
lidt-codernashif
authored andcommitted
counter: cmsdk_apb_dualtimer: Use clock freq from DT clocks
Previously, the CMSDK APB dual timer driver hardcoded the counter clock frequency to 24 MHz, which limits reuse across SoCs and boards with different timer clock sources. This patch replaces the hardcoded frequency with a value derived from the device tree's `clocks` phandle, using the `clock-frequency` property of the referenced clock controller node. If the property is missing, it falls back to a default 24 MHz. Signed-off-by: Lidor T <[email protected]>
1 parent 5ef8a57 commit b680587

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

drivers/counter/timer_dtmr_cmsdk_apb.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@
1919

2020
#include "dualtimer_cmsdk_apb.h"
2121

22+
#define DTIMER_NODE(inst) DT_INST(inst, arm_cmsdk_dtimer)
23+
#define CLOCK_NODE(inst) DT_PHANDLE(DTIMER_NODE(inst), clocks)
24+
25+
#define HAS_DTIMER_CLOCK(inst) DT_NODE_HAS_PROP(DTIMER_NODE(inst), clocks)
26+
#define HAS_CLOCK_FREQUENCY(inst) DT_NODE_HAS_PROP(CLOCK_NODE(inst), clock_frequency)
27+
28+
#if HAS_DTIMER_CLOCK(inst) && HAS_CLOCK_FREQUENCY(inst)
29+
#define DTIMER_CMSDK_FREQ(inst) \
30+
DT_INST_PROP_BY_PHANDLE(inst, clocks, clock_frequency)
31+
#else
32+
#define DTIMER_CMSDK_FREQ(inst) \
33+
24000000U /* fallback default */
34+
#endif /* HAS_DTIMER_CLOCK(inst) && HAS_CLOCK_FREQUENCY(inst) */
35+
2236
typedef void (*dtimer_config_func_t)(const struct device *dev);
2337

2438
struct dtmr_cmsdk_apb_cfg {
@@ -176,7 +190,7 @@ static int dtmr_cmsdk_apb_init(const struct device *dev)
176190
dtmr_cmsdk_apb_cfg_##inst = { \
177191
.info = { \
178192
.max_top_value = UINT32_MAX, \
179-
.freq = 24000000U, \
193+
.freq = DTIMER_CMSDK_FREQ(inst), \
180194
.flags = COUNTER_CONFIG_INFO_COUNT_UP, \
181195
.channels = 0U, \
182196
}, \

0 commit comments

Comments
 (0)