Skip to content

Commit 45a4e0e

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 74a8fcbd38aa0cc3ce48eebc0b357cc2c7c14ac6)
1 parent 39f8f09 commit 45a4e0e

File tree

3 files changed

+13
-20
lines changed

3 files changed

+13
-20
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 & 5 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");
@@ -21,14 +22,16 @@ struct dev_data_hfxo {
2122
onoff_notify_fn notify;
2223
struct k_timer timer;
2324
sys_snode_t hfxo_node;
25+
k_timeout_t start_up_time;
2426
};
2527

2628
struct dev_config_hfxo {
2729
uint32_t fixed_frequency;
2830
uint16_t fixed_accuracy;
29-
k_timeout_t start_up_time;
3031
};
3132

33+
#define BICR (NRF_BICR_Type *)DT_REG_ADDR(DT_NODELABEL(bicr))
34+
3235
static void hfxo_start_up_timer_handler(struct k_timer *timer)
3336
{
3437
struct dev_data_hfxo *dev_data =
@@ -52,8 +55,6 @@ static void onoff_start_hfxo(struct onoff_manager *mgr, onoff_notify_fn notify)
5255
{
5356
struct dev_data_hfxo *dev_data =
5457
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;
5758

5859
dev_data->notify = notify;
5960

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

7172
static void onoff_stop_hfxo(struct onoff_manager *mgr, onoff_notify_fn notify)
@@ -159,13 +160,21 @@ static int init_hfxo(const struct device *dev)
159160
.start = onoff_start_hfxo,
160161
.stop = onoff_stop_hfxo
161162
};
163+
uint32_t start_up_time;
162164
int rc;
163165

164166
rc = onoff_manager_init(&dev_data->mgr, &transitions);
165167
if (rc < 0) {
166168
return rc;
167169
}
168170

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

171180
return 0;
@@ -187,7 +196,6 @@ static struct dev_data_hfxo data_hfxo;
187196
static const struct dev_config_hfxo config_hfxo = {
188197
.fixed_frequency = DT_INST_PROP(0, clock_frequency),
189198
.fixed_accuracy = DT_INST_PROP(0, accuracy_ppm),
190-
.start_up_time = K_USEC(DT_INST_PROP(0, startup_time_us)),
191199
};
192200

193201
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)