28
28
#include <zephyr/dt-bindings/clock/esp32s3_clock.h>
29
29
#include <esp32s3/rom/rtc.h>
30
30
#include <soc/dport_reg.h>
31
- #elif CONFIG_SOC_SERIES_ESP32C3
31
+ #elif defined(CONFIG_SOC_SERIES_ESP32C2 )
32
+ #define DT_CPU_COMPAT espressif_riscv
33
+ #include <zephyr/dt-bindings/clock/esp32c2_clock.h>
34
+ #include <esp32c2/rom/rtc.h>
35
+ #elif defined(CONFIG_SOC_SERIES_ESP32C3 )
32
36
#define DT_CPU_COMPAT espressif_riscv
33
37
#include <zephyr/dt-bindings/clock/esp32c3_clock.h>
34
38
#include <esp32c3/rom/rtc.h>
35
- #elif CONFIG_SOC_SERIES_ESP32C6
39
+ #elif defined( CONFIG_SOC_SERIES_ESP32C6 )
36
40
#define DT_CPU_COMPAT espressif_riscv
37
41
#include <zephyr/dt-bindings/clock/esp32c6_clock.h>
38
42
#include <soc/lp_clkrst_reg.h>
@@ -71,7 +75,7 @@ static bool reset_reason_is_cpu_reset(void)
71
75
72
76
if ((rst_reason == RESET_REASON_CPU0_MWDT0 || rst_reason == RESET_REASON_CPU0_SW ||
73
77
rst_reason == RESET_REASON_CPU0_RTC_WDT
74
- #if !defined (CONFIG_SOC_SERIES_ESP32 )
78
+ #if !defined (CONFIG_SOC_SERIES_ESP32 ) && ! defined ( CONFIG_SOC_SERIES_ESP32C2 )
75
79
|| rst_reason == RESET_REASON_CPU0_MWDT1
76
80
#endif
77
81
)) {
@@ -153,7 +157,9 @@ static void esp32_clock_perip_init(void)
153
157
* that have been enabled before reset.
154
158
*/
155
159
if (reset_reason_is_cpu_reset ()) {
156
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
160
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
161
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
162
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
157
163
common_perip_clk = ~READ_PERI_REG (SYSTEM_PERIP_CLK_EN0_REG );
158
164
hwcrypto_perip_clk = ~READ_PERI_REG (SYSTEM_PERIP_CLK_EN1_REG );
159
165
wifi_bt_sdio_clk = ~READ_PERI_REG (SYSTEM_WIFI_CLK_EN_REG );
@@ -168,7 +174,18 @@ static void esp32_clock_perip_init(void)
168
174
#endif
169
175
} else {
170
176
common_perip_clk =
171
- #if (defined (CONFIG_SOC_SERIES_ESP32C3 ) || defined (CONFIG_SOC_SERIES_ESP32S3 ))
177
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
178
+ SYSTEM_SPI2_CLK_EN |
179
+ #if ESP_CONSOLE_UART_NUM != 0
180
+ SYSTEM_UART_CLK_EN |
181
+ #endif
182
+ #if ESP_CONSOLE_UART_NUM != 1
183
+ SYSTEM_UART1_CLK_EN |
184
+ #endif
185
+ SYSTEM_LEDC_CLK_EN |
186
+ SYSTEM_I2C_EXT0_CLK_EN |
187
+ SYSTEM_LEDC_CLK_EN ;
188
+ #elif (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
172
189
SYSTEM_WDG_CLK_EN |
173
190
SYSTEM_I2S0_CLK_EN |
174
191
#if ESP_CONSOLE_UART_NUM != 0
@@ -224,7 +241,7 @@ static void esp32_clock_perip_init(void)
224
241
DPORT_SPI3_DMA_CLK_EN |
225
242
#endif /* CONFIG_SOC_SERIES_ESP32S2 */
226
243
DPORT_PWM3_CLK_EN ;
227
- #endif /* CONFIG_SOC_SERIES_ESP32C3 || CONFIG_SOC_SERIES_ESP32S3 */
244
+ #endif
228
245
229
246
#if !defined(CONFIG_SOC_SERIES_ESP32 )
230
247
common_perip_clk1 = 0 ;
@@ -241,14 +258,22 @@ static void esp32_clock_perip_init(void)
241
258
DPORT_CRYPTO_SHA_CLK_EN |
242
259
DPORT_CRYPTO_RSA_CLK_EN ;
243
260
#endif /* CONFIG_SOC_SERIES_ESP32S2 */
261
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
262
+ SYSTEM_CRYPTO_SHA_CLK_EN ;
263
+ #endif
244
264
#if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
245
265
SYSTEM_CRYPTO_AES_CLK_EN |
246
266
SYSTEM_CRYPTO_SHA_CLK_EN |
247
267
SYSTEM_CRYPTO_RSA_CLK_EN ;
248
268
#endif /* CONFIG_SOC_SERIES_ESP32C3 || CONFIG_SOC_SERIES_ESP32S3 */
249
269
250
270
wifi_bt_sdio_clk =
251
- #if (defined (CONFIG_SOC_SERIES_ESP32C3 ) || defined (CONFIG_SOC_SERIES_ESP32S3 ))
271
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
272
+ SYSTEM_WIFI_CLK_WIFI_EN |
273
+ SYSTEM_WIFI_CLK_BT_EN_M |
274
+ SYSTEM_WIFI_CLK_UNUSED_BIT5 |
275
+ SYSTEM_WIFI_CLK_UNUSED_BIT12 ;
276
+ #elif (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
252
277
SYSTEM_WIFI_CLK_WIFI_EN |
253
278
SYSTEM_WIFI_CLK_BT_EN_M |
254
279
SYSTEM_WIFI_CLK_I2C_CLK_EN |
@@ -269,7 +294,16 @@ static void esp32_clock_perip_init(void)
269
294
270
295
/* Reset peripherals like I2C, SPI, UART, I2S and bring them to known state */
271
296
common_perip_clk |=
272
- #if (defined (CONFIG_SOC_SERIES_ESP32C3 ) || defined (CONFIG_SOC_SERIES_ESP32S3 ))
297
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
298
+ SYSTEM_SPI2_CLK_EN |
299
+ #if ESP_CONSOLE_UART_NUM != 0
300
+ SYSTEM_UART_CLK_EN |
301
+ #endif
302
+ #if ESP_CONSOLE_UART_NUM != 1
303
+ SYSTEM_UART1_CLK_EN |
304
+ #endif
305
+ SYSTEM_I2C_EXT0_CLK_EN ;
306
+ #elif (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
273
307
SYSTEM_I2S0_CLK_EN |
274
308
#if ESP_CONSOLE_UART_NUM != 0
275
309
SYSTEM_UART_CLK_EN |
@@ -354,7 +388,9 @@ static void esp32_clock_perip_init(void)
354
388
#endif /* CONFIG_SOC_SERIES_ESP32S2 */
355
389
356
390
/* Disable some peripheral clocks. */
357
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
391
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
392
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
393
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
358
394
CLEAR_PERI_REG_MASK (SYSTEM_PERIP_CLK_EN0_REG , common_perip_clk );
359
395
SET_PERI_REG_MASK (SYSTEM_PERIP_RST_EN0_REG , common_perip_clk );
360
396
@@ -371,7 +407,9 @@ static void esp32_clock_perip_init(void)
371
407
#endif
372
408
373
409
/* Disable hardware crypto clocks. */
374
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
410
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
411
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
412
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
375
413
CLEAR_PERI_REG_MASK (SYSTEM_PERIP_CLK_EN1_REG , hwcrypto_perip_clk );
376
414
SET_PERI_REG_MASK (SYSTEM_PERIP_RST_EN1_REG , hwcrypto_perip_clk );
377
415
#elif defined(CONFIG_SOC_SERIES_ESP32 )
@@ -391,7 +429,9 @@ static void esp32_clock_perip_init(void)
391
429
#endif /* CONFIG_SOC_SERIES_ESP32S3 */
392
430
393
431
/* Disable WiFi/BT/SDIO clocks. */
394
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
432
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
433
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
434
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
395
435
CLEAR_PERI_REG_MASK (SYSTEM_WIFI_CLK_EN_REG , wifi_bt_sdio_clk );
396
436
SET_PERI_REG_MASK (SYSTEM_WIFI_CLK_EN_REG , SYSTEM_WIFI_CLK_EN );
397
437
#else /* CONFIG_SOC_SERIES_ESP32 || CONFIG_SOC_SERIES_ESP32S2 */
@@ -403,7 +443,9 @@ static void esp32_clock_perip_init(void)
403
443
DPORT_SET_PERI_REG_MASK (DPORT_WIFI_CLK_EN_REG , DPORT_WIFI_CLK_WIFI_EN );
404
444
#endif
405
445
406
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
446
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
447
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
448
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
407
449
/* Set WiFi light sleep clock source to RTC slow clock */
408
450
REG_SET_FIELD (SYSTEM_BT_LPCK_DIV_INT_REG , SYSTEM_BT_LPCK_DIV_NUM , 0 );
409
451
CLEAR_PERI_REG_MASK (SYSTEM_BT_LPCK_DIV_FRAC_REG , SYSTEM_LPCLK_SEL_8M );
@@ -418,7 +460,9 @@ static void esp32_clock_perip_init(void)
418
460
/* Enable RNG clock. */
419
461
periph_module_enable (PERIPH_RNG_MODULE );
420
462
421
- #if (defined(CONFIG_SOC_SERIES_ESP32C3 ) || defined(CONFIG_SOC_SERIES_ESP32S3 ))
463
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 ) || \
464
+ defined(CONFIG_SOC_SERIES_ESP32C3 ) || \
465
+ defined(CONFIG_SOC_SERIES_ESP32S3 )
422
466
periph_module_enable (PERIPH_TIMG0_MODULE );
423
467
#endif
424
468
}
@@ -494,6 +538,17 @@ static int esp32_select_rtc_slow_clk(uint8_t slow_clk)
494
538
int retry_32k_xtal = 3 ;
495
539
496
540
do {
541
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
542
+ if (rtc_slow_clk_src == ESP32_RTC_SLOW_CLK_SRC_OSC_SLOW ) {
543
+ /* external clock needs to be connected to PIN0 before it can
544
+ * be used. Here we use rtc_clk_cal function to count
545
+ * the number of ext clk cycles in the given number of ext clk
546
+ * cycles. If the ext clk has not started up, calibration
547
+ * will time out, returning 0.
548
+ */
549
+ LOG_DBG ("waiting for external clock by pin0 to start up" );
550
+ rtc_clk_32k_enable_external ();
551
+ #else
497
552
if (rtc_slow_clk_src == ESP32_RTC_SLOW_CLK_SRC_XTAL32K ) {
498
553
/* 32k XTAL oscillator needs to be enabled and running before it can
499
554
* be used. Hardware doesn't have a direct way of checking if the
@@ -508,11 +563,17 @@ static int esp32_select_rtc_slow_clk(uint8_t slow_clk)
508
563
} else if (slow_clk == ESP32_RTC_SLOW_CLK_32K_EXT_OSC ) {
509
564
rtc_clk_32k_enable_external ();
510
565
}
566
+ #endif
511
567
/* When CONFIG_RTC_CLK_CAL_CYCLES is set to 0, clock calibration will not be
512
568
* performed at startup.
513
569
*/
514
570
if (CONFIG_RTC_CLK_CAL_CYCLES > 0 ) {
571
+ #if defined(CONFIG_SOC_SERIES_ESP32C2 )
572
+ cal_val = rtc_clk_cal (RTC_CAL_32K_OSC_SLOW ,
573
+ CONFIG_RTC_CLK_CAL_CYCLES );
574
+ #else
515
575
cal_val = rtc_clk_cal (RTC_CAL_32K_XTAL , CONFIG_RTC_CLK_CAL_CYCLES );
576
+ #endif
516
577
if (cal_val == 0 ) {
517
578
if (retry_32k_xtal -- > 0 ) {
518
579
continue ;
@@ -624,7 +685,7 @@ static int esp32_cpu_clock_configure(const struct esp32_cpu_clock_config *cpu_cf
624
685
esp_cpu_set_cycle_count ((uint64_t )esp_cpu_get_cycle_count () * rtc_clk_cfg .cpu_freq_mhz /
625
686
old_config .freq_mhz );
626
687
627
- #if !defined(CONFIG_SOC_SERIES_ESP32C6 )
688
+ #if !defined(CONFIG_SOC_SERIES_ESP32C2 ) && !defined( CONFIG_SOC_SERIES_ESP32C6 )
628
689
#if ESP_ROM_UART_CLK_IS_XTAL
629
690
uart_clock_src_hz = (uint32_t )rtc_clk_xtal_freq_get () * MHZ (1 );
630
691
#else
0 commit comments