@@ -82,14 +82,9 @@ static bool s_core_idle[portNUM_PROCESSORS];
8282extern uint32_t g_ticks_per_us_pro ;
8383
8484/* Lookup table of CPU frequencies to be used in each mode.
85- * Modified by esp_pm_configure.
85+ * Initialized by esp_pm_impl_init and modified by esp_pm_configure.
8686 */
87- rtc_cpu_freq_t s_cpu_freq_by_mode [PM_MODE_COUNT ] = {
88- [PM_MODE_LIGHT_SLEEP ] = (rtc_cpu_freq_t ) - 1 , /* unused */
89- [PM_MODE_APB_MIN ] = RTC_CPU_FREQ_XTAL ,
90- [PM_MODE_APB_MAX ] = RTC_CPU_FREQ_80M ,
91- [PM_MODE_CPU_MAX ] = RTC_CPU_FREQ_80M ,
92- };
87+ rtc_cpu_freq_t s_cpu_freq_by_mode [PM_MODE_COUNT ];
9388
9489/* Lookup table of CPU ticks per microsecond for each RTC_CPU_FREQ_ value.
9590 * Essentially the same as returned by rtc_clk_cpu_freq_value(), but without
@@ -192,6 +187,7 @@ esp_err_t esp_pm_configure(const void* vconfig)
192187 s_cpu_freq_by_mode [PM_MODE_CPU_MAX ] = max_freq ;
193188 s_cpu_freq_by_mode [PM_MODE_APB_MAX ] = apb_max_freq ;
194189 s_cpu_freq_by_mode [PM_MODE_APB_MIN ] = min_freq ;
190+ s_cpu_freq_by_mode [PM_MODE_LIGHT_SLEEP ] = min_freq ;
195191 s_light_sleep_en = config -> light_sleep_enable ;
196192 portEXIT_CRITICAL (& s_switch_lock );
197193
@@ -430,9 +426,15 @@ void esp_pm_impl_dump_stats(FILE* out)
430426
431427 time_in_mode [cur_mode ] += now - last_mode_change_time ;
432428
429+ fprintf (out , "Mode stats:\n" );
433430 for (int i = 0 ; i < PM_MODE_COUNT ; ++ i ) {
434- fprintf (out , "%8s %12lld %2d%%\n" ,
431+ if (i == PM_MODE_LIGHT_SLEEP && !s_light_sleep_en ) {
432+ /* don't display light sleep mode if it's not enabled */
433+ continue ;
434+ }
435+ fprintf (out , "%8s %6s %12lld %2d%%\n" ,
435436 s_mode_names [i ],
437+ s_freq_names [s_cpu_freq_by_mode [i ]],
436438 time_in_mode [i ],
437439 (int ) (time_in_mode [i ] * 100 / now ));
438440 }
@@ -452,5 +454,14 @@ void esp_pm_impl_init()
452454 ESP_ERROR_CHECK (esp_pm_lock_create (ESP_PM_CPU_FREQ_MAX , 0 , "rtos1" ,
453455 & s_rtos_lock_handle [1 ]));
454456 ESP_ERROR_CHECK (esp_pm_lock_acquire (s_rtos_lock_handle [1 ]));
457+
458+ /* Configure all modes to use the default CPU frequency.
459+ * This will be modified later by a call to esp_pm_configure.
460+ */
461+ rtc_cpu_freq_t default_freq ;
462+ assert (rtc_clk_cpu_freq_from_mhz (CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ , & default_freq ));
463+ for (size_t i = 0 ; i < PM_MODE_COUNT ; ++ i ) {
464+ s_cpu_freq_by_mode [i ] = default_freq ;
465+ }
455466#endif // portNUM_PROCESSORS == 2
456467}
0 commit comments