Skip to content

Commit 62371a6

Browse files
committed
[nrf fromlist] drivers: clock_control: nrf54h-hfxo: use values from BICR
The real, applicable and trusted values are the ones flashed into BICR. So, drop DT properties that replicate BICR and use runtime reads to BICR instead. Upstream PR #: 81122 Signed-off-by: Gerard Marull-Paretas <[email protected]> (cherry picked from commit 38e24ede9608666f87aa2a3300b23e0d83fda0a5)
1 parent 22ba5a3 commit 62371a6

File tree

3 files changed

+13
-21
lines changed

3 files changed

+13
-21
lines changed

boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20-common.dtsi

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
&hfxo {
1212
status = "okay";
1313
accuracy-ppm = <30>;
14-
startup-time-us = <850>;
15-
mode = "crystal";
1614
};
1715

1816
&lfxo {

drivers/clock_control/clock_control_nrf2_hfxo.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
LOG_MODULE_DECLARE(clock_control_nrf2, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
1313

1414
#include <soc_lrcconf.h>
15+
#include <hal/nrf_bicr.h>
1516

1617
BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
1718
"multiple instances not supported");
@@ -20,15 +21,16 @@ struct dev_data_hfxo {
2021
struct onoff_manager mgr;
2122
onoff_notify_fn notify;
2223
struct k_timer timer;
23-
sys_snode_t hfxo_node;
24+
k_timeout_t start_up_time;
2425
};
2526

2627
struct dev_config_hfxo {
2728
uint32_t fixed_frequency;
2829
uint16_t fixed_accuracy;
29-
k_timeout_t start_up_time;
3030
};
3131

32+
#define BICR (NRF_BICR_Type *)DT_REG_ADDR(DT_NODELABEL(bicr))
33+
3234
static void hfxo_start_up_timer_handler(struct k_timer *timer)
3335
{
3436
struct dev_data_hfxo *dev_data =
@@ -52,8 +54,6 @@ static void onoff_start_hfxo(struct onoff_manager *mgr, onoff_notify_fn notify)
5254
{
5355
struct dev_data_hfxo *dev_data =
5456
CONTAINER_OF(mgr, struct dev_data_hfxo, mgr);
55-
const struct device *dev = DEVICE_DT_INST_GET(0);
56-
const struct dev_config_hfxo *dev_config = dev->config;
5757

5858
dev_data->notify = notify;
5959

@@ -65,7 +65,7 @@ static void onoff_start_hfxo(struct onoff_manager *mgr, onoff_notify_fn notify)
6565
* unreliable. Hence the timer is used to simply wait the expected
6666
* start-up time. To be removed once the hardware is fixed.
6767
*/
68-
k_timer_start(&dev_data->timer, dev_config->start_up_time, K_NO_WAIT);
68+
k_timer_start(&dev_data->timer, dev_data->start_up_time, K_NO_WAIT);
6969
}
7070

7171
static void onoff_stop_hfxo(struct onoff_manager *mgr, onoff_notify_fn notify)
@@ -159,13 +159,21 @@ static int init_hfxo(const struct device *dev)
159159
.start = onoff_start_hfxo,
160160
.stop = onoff_stop_hfxo
161161
};
162+
uint32_t start_up_time;
162163
int rc;
163164

164165
rc = onoff_manager_init(&dev_data->mgr, &transitions);
165166
if (rc < 0) {
166167
return rc;
167168
}
168169

170+
start_up_time = nrf_bicr_hfxo_startup_time_us_get(BICR);
171+
if (start_up_time == NRF_BICR_HFXO_STARTUP_TIME_UNCONFIGURED) {
172+
return -EINVAL;
173+
}
174+
175+
dev_data->start_up_time = K_USEC(start_up_time);
176+
169177
k_timer_init(&dev_data->timer, hfxo_start_up_timer_handler, NULL);
170178

171179
return 0;
@@ -187,7 +195,6 @@ static struct dev_data_hfxo data_hfxo;
187195
static const struct dev_config_hfxo config_hfxo = {
188196
.fixed_frequency = DT_INST_PROP(0, clock_frequency),
189197
.fixed_accuracy = DT_INST_PROP(0, accuracy_ppm),
190-
.start_up_time = K_USEC(DT_INST_PROP(0, startup_time_us)),
191198
};
192199

193200
DEVICE_DT_INST_DEFINE(0, init_hfxo, NULL,

dts/bindings/clock/nordic,nrf54h-hfxo.yaml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,3 @@ properties:
1515
type: int
1616
description: Clock accuracy in parts per million
1717
required: true
18-
19-
startup-time-us:
20-
type: int
21-
description: Clock startup time in micro seconds
22-
required: true
23-
24-
mode:
25-
type: string
26-
description: HFXO operational mode
27-
required: true
28-
enum:
29-
- "crystal"
30-
- "external-square"

0 commit comments

Comments
 (0)