Skip to content

Commit 8afb0fb

Browse files
committed
Merge branch 'fix/drop_pm_code_if_not_need' into 'master'
fix(drivers): only call esp_pm APIs when CONFIG_PM_ENABLE is enabled Closes IDFGH-15263 See merge request espressif/esp-idf!39045
2 parents 9d0d1d2 + 91f92b0 commit 8afb0fb

File tree

78 files changed

+355
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+355
-75
lines changed

components/driver/twai/twai.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ typedef struct twai_obj_t {
100100
SemaphoreHandle_t alert_semphr;
101101
uint32_t alerts_enabled;
102102
uint32_t alerts_triggered;
103+
#ifdef CONFIG_PM_ENABLE
103104
//Power Management Lock
104105
esp_pm_lock_handle_t pm_lock;
106+
#endif
105107
portMUX_TYPE spinlock;
106108
} twai_obj_t;
107109

components/esp_adc/adc_continuous.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,11 @@ esp_err_t adc_continuous_start(adc_continuous_handle_t handle)
264264
adc_ll_reset_register();
265265
}
266266

267+
#if CONFIG_PM_ENABLE
267268
if (handle->pm_lock) {
268269
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(handle->pm_lock), ADC_TAG, "acquire pm_lock failed");
269270
}
271+
#endif
270272

271273
handle->fsm = ADC_FSM_STARTED;
272274
sar_periph_ctrl_adc_continuous_power_acquire();
@@ -369,10 +371,12 @@ esp_err_t adc_continuous_stop(adc_continuous_handle_t handle)
369371
}
370372
sar_periph_ctrl_adc_continuous_power_release();
371373

374+
#if CONFIG_PM_ENABLE
372375
//release power manager lock
373376
if (handle->pm_lock) {
374377
ESP_RETURN_ON_ERROR(esp_pm_lock_release(handle->pm_lock), ADC_TAG, "release pm_lock failed");
375378
}
379+
#endif
376380

377381
ANALOG_CLOCK_DISABLE();
378382

@@ -422,9 +426,11 @@ esp_err_t adc_continuous_deinit(adc_continuous_handle_t handle)
422426
free(handle->ringbuf_struct);
423427
}
424428

429+
#if CONFIG_PM_ENABLE
425430
if (handle->pm_lock) {
426431
esp_pm_lock_delete(handle->pm_lock);
427432
}
433+
#endif
428434

429435
free(handle->rx_dma_buf);
430436
free(handle->hal.rx_desc);

components/esp_adc/adc_continuous_internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ struct adc_continuous_ctx_t {
8989
adc_hal_digi_ctrlr_cfg_t hal_digi_ctrlr_cfg; //Hal digital controller configuration
9090
adc_continuous_evt_cbs_t cbs; //Callbacks
9191
void *user_data; //User context
92+
#if CONFIG_PM_ENABLE
9293
esp_pm_lock_handle_t pm_lock; //For power management
94+
#endif
9395
struct {
9496
uint32_t flush_pool: 1; //Flush the internal pool when the pool is full. With this flag, the `on_pool_ovf` event will not happen.
9597
} flags;

components/esp_driver_ana_cmpr/ana_cmpr.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ struct ana_cmpr_t {
2727
uint32_t intr_mask; /*!< Interrupt mask */
2828
int intr_priority; /*!< Interrupt priority */
2929
uint32_t src_clk_freq_hz; /*!< Source clock frequency of the Analog Comparator unit */
30+
#if CONFIG_PM_ENABLE
3031
esp_pm_lock_handle_t pm_lock; /*!< The Power Management lock that used to avoid unexpected power down of the clock domain */
32+
#endif
3133
};
3234

3335
/* Helper macros */
@@ -80,9 +82,11 @@ static esp_err_t s_ana_cmpr_init_gpio(ana_cmpr_handle_t cmpr, bool is_external_r
8082

8183
static void ana_cmpr_destroy_unit(ana_cmpr_handle_t cmpr)
8284
{
85+
#if CONFIG_PM_ENABLE
8386
if (cmpr->pm_lock) {
8487
esp_pm_lock_delete(cmpr->pm_lock);
8588
}
89+
#endif
8690
if (cmpr->intr_handle) {
8791
esp_intr_free(cmpr->intr_handle);
8892
}
@@ -274,9 +278,11 @@ esp_err_t ana_cmpr_enable(ana_cmpr_handle_t cmpr)
274278
ANA_CMPR_NULL_POINTER_CHECK(cmpr);
275279
ana_cmpr_fsm_t expected_fsm = ANA_CMPR_FSM_INIT;
276280
if (atomic_compare_exchange_strong(&cmpr->fsm, &expected_fsm, ANA_CMPR_FSM_WAIT)) {
281+
#if CONFIG_PM_ENABLE
277282
if (cmpr->pm_lock) {
278283
esp_pm_lock_acquire(cmpr->pm_lock);
279284
}
285+
#endif
280286

281287
// the underlying register may be accessed by different threads at the same time, so use spin lock to protect it
282288
portENTER_CRITICAL(&s_spinlock);
@@ -305,9 +311,11 @@ esp_err_t ana_cmpr_disable(ana_cmpr_handle_t cmpr)
305311
analog_cmpr_ll_enable(cmpr->dev, false);
306312
portEXIT_CRITICAL(&s_spinlock);
307313

314+
#if CONFIG_PM_ENABLE
308315
if (cmpr->pm_lock) {
309316
esp_pm_lock_release(cmpr->pm_lock);
310317
}
318+
#endif
311319

312320
// switch the state machine to init state
313321
atomic_store(&cmpr->fsm, ANA_CMPR_FSM_INIT);

components/esp_driver_gpio/src/gpio_flex_glitch_filter.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -28,8 +28,8 @@ struct gpio_flex_glitch_filter_t {
2828
gpio_glitch_filter_t base;
2929
gpio_flex_glitch_filter_group_t *group;
3030
uint32_t filter_id;
31-
esp_pm_lock_handle_t pm_lock;
3231
#if CONFIG_PM_ENABLE
32+
esp_pm_lock_handle_t pm_lock;
3333
char pm_lock_name[GLITCH_FILTER_PM_LOCK_NAME_LEN_MAX]; // pm lock name
3434
#endif
3535
};
@@ -72,9 +72,11 @@ static esp_err_t gpio_filter_destroy(gpio_flex_glitch_filter_t *filter)
7272
portEXIT_CRITICAL(&group->spinlock);
7373
}
7474

75+
#if CONFIG_PM_ENABLE
7576
if (filter->pm_lock) {
7677
esp_pm_lock_delete(filter->pm_lock);
7778
}
79+
#endif
7880

7981
free(filter);
8082
return ESP_OK;
@@ -92,10 +94,12 @@ static esp_err_t gpio_flex_glitch_filter_enable(gpio_glitch_filter_t *filter)
9294
ESP_RETURN_ON_FALSE(filter->fsm == GLITCH_FILTER_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "filter not in init state");
9395
gpio_flex_glitch_filter_t *flex_filter = __containerof(filter, gpio_flex_glitch_filter_t, base);
9496

97+
#if CONFIG_PM_ENABLE
9598
// acquire pm lock
9699
if (flex_filter->pm_lock) {
97100
esp_pm_lock_acquire(flex_filter->pm_lock);
98101
}
102+
#endif
99103

100104
int filter_id = flex_filter->filter_id;
101105
gpio_ll_glitch_filter_enable(s_gpio_glitch_filter_group.hw, filter_id, true);
@@ -111,10 +115,12 @@ static esp_err_t gpio_flex_glitch_filter_disable(gpio_glitch_filter_t *filter)
111115
int filter_id = flex_filter->filter_id;
112116
gpio_ll_glitch_filter_enable(s_gpio_glitch_filter_group.hw, filter_id, false);
113117

118+
#if CONFIG_PM_ENABLE
114119
// release pm lock
115120
if (flex_filter->pm_lock) {
116121
esp_pm_lock_release(flex_filter->pm_lock);
117122
}
123+
#endif
118124

119125
filter->fsm = GLITCH_FILTER_FSM_INIT;
120126
return ESP_OK;

components/esp_driver_gpio/src/gpio_pin_glitch_filter.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -20,17 +20,19 @@ static const char *TAG = "gpio-filter";
2020
*/
2121
typedef struct gpio_pin_glitch_filter_t {
2222
gpio_glitch_filter_t base;
23-
esp_pm_lock_handle_t pm_lock;
2423
#if CONFIG_PM_ENABLE
24+
esp_pm_lock_handle_t pm_lock;
2525
char pm_lock_name[GLITCH_FILTER_PM_LOCK_NAME_LEN_MAX]; // pm lock name
2626
#endif
2727
} gpio_pin_glitch_filter_t;
2828

2929
static esp_err_t gpio_filter_destroy(gpio_pin_glitch_filter_t *filter)
3030
{
31+
#if CONFIG_PM_ENABLE
3132
if (filter->pm_lock) {
3233
esp_pm_lock_delete(filter->pm_lock);
3334
}
35+
#endif
3436

3537
free(filter);
3638
return ESP_OK;
@@ -46,12 +48,14 @@ static esp_err_t gpio_pin_glitch_filter_del(gpio_glitch_filter_t *filter)
4648
static esp_err_t gpio_pin_glitch_filter_enable(gpio_glitch_filter_t *filter)
4749
{
4850
ESP_RETURN_ON_FALSE(filter->fsm == GLITCH_FILTER_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "filter not in init state");
49-
gpio_pin_glitch_filter_t *pin_filter = __containerof(filter, gpio_pin_glitch_filter_t, base);
51+
[[maybe_unused]] gpio_pin_glitch_filter_t *pin_filter = __containerof(filter, gpio_pin_glitch_filter_t, base);
5052

53+
#if CONFIG_PM_ENABLE
5154
// acquire pm lock
5255
if (pin_filter->pm_lock) {
5356
esp_pm_lock_acquire(pin_filter->pm_lock);
5457
}
58+
#endif
5559

5660
gpio_ll_pin_filter_enable(NULL, filter->gpio_num);
5761
filter->fsm = GLITCH_FILTER_FSM_ENABLE;
@@ -61,14 +65,16 @@ static esp_err_t gpio_pin_glitch_filter_enable(gpio_glitch_filter_t *filter)
6165
static esp_err_t gpio_pin_glitch_filter_disable(gpio_glitch_filter_t *filter)
6266
{
6367
ESP_RETURN_ON_FALSE(filter->fsm == GLITCH_FILTER_FSM_ENABLE, ESP_ERR_INVALID_STATE, TAG, "filter not in enable state");
64-
gpio_pin_glitch_filter_t *pin_filter = __containerof(filter, gpio_pin_glitch_filter_t, base);
68+
[[maybe_unused]] gpio_pin_glitch_filter_t *pin_filter = __containerof(filter, gpio_pin_glitch_filter_t, base);
6569

6670
gpio_ll_pin_filter_disable(NULL, filter->gpio_num);
6771

72+
#if CONFIG_PM_ENABLE
6873
// release pm lock
6974
if (pin_filter->pm_lock) {
7075
esp_pm_lock_release(pin_filter->pm_lock);
7176
}
77+
#endif
7278

7379
filter->fsm = GLITCH_FILTER_FSM_INIT;
7480
return ESP_OK;

components/esp_driver_gptimer/src/gptimer.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,11 @@ static void gptimer_unregister_from_group(gptimer_t *timer)
108108

109109
static esp_err_t gptimer_destroy(gptimer_t *timer)
110110
{
111+
#if CONFIG_PM_ENABLE
111112
if (timer->pm_lock) {
112113
ESP_RETURN_ON_ERROR(esp_pm_lock_delete(timer->pm_lock), TAG, "delete pm_lock failed");
113114
}
115+
#endif
114116
if (timer->intr) {
115117
ESP_RETURN_ON_ERROR(esp_intr_free(timer->intr), TAG, "delete interrupt service failed");
116118
}
@@ -347,10 +349,12 @@ esp_err_t gptimer_enable(gptimer_handle_t timer)
347349
ESP_RETURN_ON_FALSE(atomic_compare_exchange_strong(&timer->fsm, &expected_fsm, GPTIMER_FSM_ENABLE),
348350
ESP_ERR_INVALID_STATE, TAG, "timer not in init state");
349351

352+
#if CONFIG_PM_ENABLE
350353
// acquire power manager lock
351354
if (timer->pm_lock) {
352355
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(timer->pm_lock), TAG, "acquire pm_lock failed");
353356
}
357+
#endif
354358

355359
// enable interrupt service
356360
if (timer->intr) {
@@ -373,10 +377,12 @@ esp_err_t gptimer_disable(gptimer_handle_t timer)
373377
ESP_RETURN_ON_ERROR(esp_intr_disable(timer->intr), TAG, "disable interrupt service failed");
374378
}
375379

380+
#if CONFIG_PM_ENABLE
376381
// release power manager lock
377382
if (timer->pm_lock) {
378383
ESP_RETURN_ON_ERROR(esp_pm_lock_release(timer->pm_lock), TAG, "release pm_lock failed");
379384
}
385+
#endif
380386

381387
return ESP_OK;
382388
}

components/esp_driver_gptimer/src/gptimer_common.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ esp_err_t gptimer_select_periph_clock(gptimer_t *timer, gptimer_clock_source_t s
134134
#endif // CONFIG_IDF_TARGET_ESP32C2
135135

136136
if (need_pm_lock) {
137-
sprintf(timer->pm_lock_name, "gptimer_%d_%d", group_id, timer_id); // e.g. gptimer_0_0
138-
ESP_RETURN_ON_ERROR(esp_pm_lock_create(pm_lock_type, 0, timer->pm_lock_name, &timer->pm_lock),
137+
ESP_RETURN_ON_ERROR(esp_pm_lock_create(pm_lock_type, 0, timer_group_periph_signals.groups[group_id].module_name[timer_id], &timer->pm_lock),
139138
TAG, "create pm lock failed");
140139
}
141140
#endif // CONFIG_PM_ENABLE
@@ -165,12 +164,14 @@ esp_err_t gptimer_get_intr_handle(gptimer_handle_t timer, intr_handle_t *ret_int
165164
return ESP_OK;
166165
}
167166

167+
#if CONFIG_PM_ENABLE
168168
esp_err_t gptimer_get_pm_lock(gptimer_handle_t timer, esp_pm_lock_handle_t *ret_pm_lock)
169169
{
170170
ESP_RETURN_ON_FALSE(timer && ret_pm_lock, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
171171
*ret_pm_lock = timer->pm_lock;
172172
return ESP_OK;
173173
}
174+
#endif // CONFIG_PM_ENABLE
174175

175176
int gptimer_get_group_id(gptimer_handle_t timer, int *group_id)
176177
{

components/esp_driver_gptimer/src/gptimer_priv.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ extern "C" {
5151

5252
#define GPTIMER_ALLOW_INTR_PRIORITY_MASK ESP_INTR_FLAG_LOWMED
5353

54-
#define GPTIMER_PM_LOCK_NAME_LEN_MAX 16
55-
5654
#define GPTIMER_USE_RETENTION_LINK (SOC_TIMER_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP)
5755

5856
#if SOC_PERIPH_CLK_CTRL_SHARED
@@ -95,9 +93,8 @@ struct gptimer_t {
9593
gptimer_alarm_cb_t on_alarm;
9694
void *user_ctx;
9795
gptimer_clock_source_t clk_src;
98-
esp_pm_lock_handle_t pm_lock; // power management lock
9996
#if CONFIG_PM_ENABLE
100-
char pm_lock_name[GPTIMER_PM_LOCK_NAME_LEN_MAX]; // pm lock name
97+
esp_pm_lock_handle_t pm_lock; // power management lock
10198
#endif
10299
struct {
103100
uint32_t intr_shared: 1;

components/esp_driver_i2c/i2c_common.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,11 @@ esp_err_t i2c_release_bus_handle(i2c_bus_handle_t i2c_bus)
211211
if (i2c_bus->intr_handle) {
212212
ESP_RETURN_ON_ERROR(esp_intr_free(i2c_bus->intr_handle), TAG, "delete interrupt service failed");
213213
}
214+
#if CONFIG_PM_ENABLE
214215
if (i2c_bus->pm_lock) {
215216
ESP_RETURN_ON_ERROR(esp_pm_lock_delete(i2c_bus->pm_lock), TAG, "delete pm_lock failed");
216217
}
218+
#endif
217219
// Disable I2C module
218220
if (!i2c_bus->is_lp_i2c) {
219221
I2C_RCC_ATOMIC() {
@@ -306,8 +308,7 @@ esp_err_t i2c_select_periph_clock(i2c_bus_handle_t handle, soc_module_clk_t clk_
306308
}
307309

308310
if (need_pm_lock) {
309-
sprintf(handle->pm_lock_name, "I2C_%d", handle->port_num); // e.g. PORT_0
310-
ret = esp_pm_lock_create(pm_lock_type, 0, handle->pm_lock_name, &handle->pm_lock);
311+
ret = esp_pm_lock_create(pm_lock_type, 0, i2c_periph_signal[handle->port_num].module_name, &handle->pm_lock);
311312
ESP_RETURN_ON_ERROR(ret, TAG, "create pm lock failed");
312313
}
313314
#endif // CONFIG_PM_ENABLE

0 commit comments

Comments
 (0)