@@ -21,6 +21,7 @@ LOG_MODULE_REGISTER(clock_control_bl60x, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
21
21
#include <bouffalolab/bl60x/pds_reg.h>
22
22
#include <bouffalolab/bl60x/l1c_reg.h>
23
23
#include <bouffalolab/bl60x/extra_defines.h>
24
+ #include <zephyr/drivers/clock_control/clock_control_bflb_common.h>
24
25
25
26
#define CLK_SRC_IS (clk , src ) \
26
27
DT_SAME_NODE(DT_CLOCKS_CTLR_BY_IDX(DT_INST_CLOCKS_CTLR_BY_NAME(0, clk), 0), \
@@ -89,39 +90,6 @@ const static uint32_t clock_control_bl60x_crystal_SDMIN_table[5] = {
89
90
0x49D39D ,
90
91
};
91
92
92
- static inline void clock_control_bl60x_clock_settle (void )
93
- {
94
- __asm__ volatile (".rept 15 ; nop ; .endr" );
95
- }
96
-
97
- /* 32 Mhz Oscillator: 0
98
- * crystal: 1
99
- * PLL and 32M: 2
100
- * PLL and crystal: 3
101
- */
102
- static void clock_control_bl60x_set_root_clock (uint32_t clock )
103
- {
104
- uint32_t tmp ;
105
-
106
- /* invalid value, fallback to internal 32M */
107
- if (clock > 3 ) {
108
- clock = 0 ;
109
- }
110
- tmp = sys_read32 (HBN_BASE + HBN_GLB_OFFSET );
111
- tmp = (tmp & HBN_ROOT_CLK_SEL_UMSK ) | (clock << HBN_ROOT_CLK_SEL_POS );
112
- sys_write32 (tmp , HBN_BASE + HBN_GLB_OFFSET );
113
-
114
- clock_control_bl60x_clock_settle ();
115
- }
116
-
117
- static uint32_t clock_control_bl60x_get_root_clock (void )
118
- {
119
- uint32_t tmp ;
120
-
121
- tmp = sys_read32 (HBN_BASE + HBN_GLB_OFFSET );
122
- return (((tmp & HBN_ROOT_CLK_SEL_MSK ) >> HBN_ROOT_CLK_SEL_POS ) & 0x3 );
123
- }
124
-
125
93
static int clock_control_bl60x_deinit_crystal (void )
126
94
{
127
95
uint32_t tmp ;
@@ -132,7 +100,7 @@ static int clock_control_bl60x_deinit_crystal(void)
132
100
tmp = tmp & AON_PU_XTAL_BUF_AON_UMSK ;
133
101
sys_write32 (tmp , AON_BASE + AON_RF_TOP_AON_OFFSET );
134
102
135
- clock_control_bl60x_clock_settle ();
103
+ clock_bflb_settle ();
136
104
return 0 ;
137
105
}
138
106
@@ -149,12 +117,12 @@ static int clock_control_bl60x_init_crystal(void)
149
117
150
118
/* wait for crystal to be powered on */
151
119
do {
152
- clock_control_bl60x_clock_settle ();
120
+ clock_bflb_settle ();
153
121
tmp = sys_read32 (AON_BASE + AON_TSEN_OFFSET );
154
122
count -- ;
155
123
} while (!(tmp & AON_XTAL_RDY_MSK ) && count > 0 );
156
124
157
- clock_control_bl60x_clock_settle ();
125
+ clock_bflb_settle ();
158
126
if (count < 1 ) {
159
127
return -1 ;
160
128
}
@@ -167,11 +135,11 @@ static int clock_control_bl60x_set_root_clock_dividers(uint32_t hclk_div, uint32
167
135
uint32_t tmp ;
168
136
uint32_t old_rootclk ;
169
137
170
- old_rootclk = clock_control_bl60x_get_root_clock ();
138
+ old_rootclk = clock_bflb_get_root_clock ();
171
139
172
140
/* security RC32M */
173
141
if (old_rootclk > 1 ) {
174
- clock_control_bl60x_set_root_clock (0 );
142
+ clock_bflb_set_root_clock (0 );
175
143
}
176
144
177
145
/* set dividers */
@@ -186,16 +154,16 @@ static int clock_control_bl60x_set_root_clock_dividers(uint32_t hclk_div, uint32
186
154
sys_write32 (0x00000001 , 0x40000FFC );
187
155
sys_write32 (0x00000000 , 0x40000FFC );
188
156
189
- clock_control_bl60x_clock_settle ();
157
+ clock_bflb_settle ();
190
158
191
159
/* enable clocks */
192
160
tmp = sys_read32 (GLB_BASE + GLB_CLK_CFG0_OFFSET );
193
161
tmp = (tmp & GLB_REG_BCLK_EN_UMSK ) | (1U << GLB_REG_BCLK_EN_POS );
194
162
tmp = (tmp & GLB_REG_HCLK_EN_UMSK ) | (1U << GLB_REG_HCLK_EN_POS );
195
163
sys_write32 (tmp , GLB_BASE + GLB_CLK_CFG0_OFFSET );
196
164
197
- clock_control_bl60x_set_root_clock (old_rootclk );
198
- clock_control_bl60x_clock_settle ();
165
+ clock_bflb_set_root_clock (old_rootclk );
166
+ clock_bflb_settle ();
199
167
200
168
return 0 ;
201
169
}
@@ -284,11 +252,11 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
284
252
uint32_t tmp ;
285
253
uint32_t old_rootclk ;
286
254
287
- old_rootclk = clock_control_bl60x_get_root_clock ();
255
+ old_rootclk = clock_bflb_get_root_clock ();
288
256
289
257
/* security RC32M */
290
258
if (old_rootclk > 1 ) {
291
- clock_control_bl60x_set_root_clock (0 );
259
+ clock_bflb_set_root_clock (0 );
292
260
}
293
261
294
262
clock_control_bl60x_deinit_pll ();
@@ -356,7 +324,7 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
356
324
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
357
325
tmp = (tmp & PDS_PU_CLKPLL_SFREG_UMSK ) | (1U << PDS_PU_CLKPLL_SFREG_POS );
358
326
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
359
- clock_control_bl60x_clock_settle ();
327
+ clock_bflb_settle ();
360
328
361
329
/* enable PPL clock actual? */
362
330
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
@@ -371,7 +339,7 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
371
339
tmp = (tmp & PDS_CLKPLL_PU_POSTDIV_UMSK ) | (1U << PDS_CLKPLL_PU_POSTDIV_POS );
372
340
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
373
341
374
- clock_control_bl60x_clock_settle ();
342
+ clock_bflb_settle ();
375
343
376
344
/* reset couple things one by one? */
377
345
tmp = sys_read32 (PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
@@ -390,8 +358,8 @@ static void clock_control_bl60x_init_pll(enum bl60x_clkid source, uint32_t cryst
390
358
tmp = (tmp & PDS_CLKPLL_SDM_RESET_UMSK ) | (0U << PDS_CLKPLL_SDM_RESET_POS );
391
359
sys_write32 (tmp , PDS_BASE + PDS_PU_RST_CLKPLL_OFFSET );
392
360
393
- clock_control_bl60x_set_root_clock (old_rootclk );
394
- clock_control_bl60x_clock_settle ();
361
+ clock_bflb_set_root_clock (old_rootclk );
362
+ clock_bflb_settle ();
395
363
}
396
364
397
365
/*
@@ -439,7 +407,7 @@ static int clock_control_bl60x_clock_trim_32M(void)
439
407
tmp = (tmp & PDS_RC32M_CODE_FR_EXT_UMSK ) | trim << PDS_RC32M_CODE_FR_EXT_POS ;
440
408
sys_write32 (tmp , PDS_BASE + PDS_RC32M_CTRL0_OFFSET );
441
409
442
- clock_control_bl60x_clock_settle ();
410
+ clock_bflb_settle ();
443
411
444
412
return 0 ;
445
413
}
@@ -557,9 +525,9 @@ static void clock_control_bl60x_init_root_as_pll(const struct device *dev)
557
525
clock_control_bl60x_select_PLL (data -> root .pll_select );
558
526
559
527
if (data -> pll .source == bl60x_clkid_clk_crystal ) {
560
- clock_control_bl60x_set_root_clock (3 );
528
+ clock_bflb_set_root_clock (3 );
561
529
} else {
562
- clock_control_bl60x_set_root_clock (2 );
530
+ clock_bflb_set_root_clock (2 );
563
531
}
564
532
565
533
if (clock_control_bl60x_get_clk (dev ) > MHZ (120 )) {
@@ -572,7 +540,7 @@ static void clock_control_bl60x_init_root_as_pll(const struct device *dev)
572
540
573
541
static void clock_control_bl60x_init_root_as_crystal (const struct device * dev )
574
542
{
575
- clock_control_bl60x_set_root_clock (1 );
543
+ clock_bflb_set_root_clock (1 );
576
544
sys_write32 (clock_control_bl60x_get_clk (dev ), CORECLOCKREGISTER );
577
545
}
578
546
@@ -590,7 +558,7 @@ static int clock_control_bl60x_update_root(const struct device *dev)
590
558
sys_write32 (tmp , GLB_BASE + GLB_CLK_CFG0_OFFSET );
591
559
592
560
/* set root clock to internal 32MHz Oscillator as failsafe */
593
- clock_control_bl60x_set_root_clock (0 );
561
+ clock_bflb_set_root_clock (0 );
594
562
if (clock_control_bl60x_set_root_clock_dividers (0 , 0 ) != 0 ) {
595
563
return - EIO ;
596
564
}
@@ -627,7 +595,7 @@ static int clock_control_bl60x_update_root(const struct device *dev)
627
595
clock_control_bl60x_set_machine_timer_clock (
628
596
1 , 0 , clock_control_bl60x_mtimer_get_clk_src_div (dev ));
629
597
630
- clock_control_bl60x_clock_settle ();
598
+ clock_bflb_settle ();
631
599
632
600
return ret ;
633
601
}
0 commit comments