Skip to content

Commit e66fc82

Browse files
committed
Merge branch 'bugfix/fixed_possible_i2s_failure_on_p4_v5.5' into 'release/v5.5'
ci(i2s): fixed occationally failure on P4 (v5.5) See merge request espressif/esp-idf!42951
2 parents 2e0f520 + 5dc3eda commit e66fc82

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

components/esp_driver_i2s/i2s_common.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,11 @@ uint32_t i2s_get_source_clk_freq(i2s_clock_src_t clk_src, uint32_t mclk_freq_hz)
563563
if (clk_src == I2S_CLK_SRC_APLL) {
564564
return i2s_set_get_apll_freq(mclk_freq_hz);
565565
}
566+
#endif
567+
#ifdef I2S_LL_DEFAULT_CLK_SRC
568+
if (clk_src == I2S_CLK_SRC_DEFAULT) {
569+
clk_src = I2S_LL_DEFAULT_CLK_SRC;
570+
}
566571
#endif
567572
esp_clk_tree_src_get_freq_hz(clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &clk_freq);
568573
return clk_freq;

components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ TEST_CASE("I2S_loopback_test", "[i2s]")
742742
TEST_ESP_OK(i2s_del_channel(rx_handle));
743743
}
744744

745-
#if SOC_I2S_NUM > 1
745+
#if SOC_I2S_NUM > 1 && !CONFIG_ESP32P4_SELECTS_REV_LESS_V3
746746
TEST_CASE("I2S_master_write_slave_read_test", "[i2s]")
747747
{
748748
i2s_chan_handle_t tx_handle;
@@ -908,8 +908,8 @@ TEST_CASE("I2S_default_PLL_clock_test", "[i2s]")
908908
TEST_ESP_OK(i2s_new_channel(&chan_cfg, NULL, &rx_handle));
909909
TEST_ESP_OK(i2s_channel_init_std_mode(rx_handle, &std_cfg));
910910

911-
#if CONFIG_IDF_TARGET_ESP32P4 && CONFIG_ESP_REV_MIN_FULL >= 300
912-
std_cfg.clk_cfg.clk_src = I2S_CLK_SRC_PLL_160M;
911+
#ifdef I2S_LL_DEFAULT_CLK_SRC
912+
std_cfg.clk_cfg.clk_src = I2S_LL_DEFAULT_CLK_SRC;
913913
#endif
914914
i2s_test_common_sample_rate(rx_handle, &std_cfg.clk_cfg);
915915
#if SOC_I2S_SUPPORTS_XTAL

components/hal/esp32p4/include/hal/i2s_ll.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,14 @@ extern "C" {
4242
#define I2S_LL_SLOT_FRAME_BIT_MAX 512 // Up-to 512 bits in one frame, determined by MAX(half_sample_bits) * 2
4343

4444
#define I2S_LL_XTAL_CLK_FREQ (40 * 1000000) // XTAL_CLK: 40MHz
45-
#define I2S_LL_DEFAULT_CLK_FREQ I2S_LL_XTAL_CLK_FREQ // No PLL clock source on P4, use XTAL as default
45+
#if HAL_CONFIG(CHIP_SUPPORT_MIN_REV) >= 300
46+
#define I2S_LL_DEFAULT_CLK_FREQ (160 * 1000000) // PLL_F160M_CLK: 160MHz
47+
#define I2S_LL_DEFAULT_CLK_SRC I2S_CLK_SRC_PLL_160M
48+
#else
49+
#define I2S_LL_DEFAULT_CLK_FREQ I2S_LL_XTAL_CLK_FREQ // No PLL clock source before version 3, use XTAL as default
50+
#define I2S_LL_DEFAULT_CLK_SRC I2S_CLK_SRC_XTAL
51+
#endif
52+
4653

4754
#define I2S_LL_ETM_EVENT_TABLE(i2s_port, chan_dir, event) \
4855
(uint32_t[SOC_I2S_NUM][2][I2S_ETM_EVENT_MAX]){ \
@@ -415,10 +422,14 @@ static inline uint32_t i2s_ll_get_clk_src(i2s_clock_src_t src)
415422
return 1;
416423
case I2S_CLK_SRC_EXTERNAL:
417424
return 2;
425+
case I2S_CLK_SRC_DEFAULT:
418426
#if HAL_CONFIG(CHIP_SUPPORT_MIN_REV) >= 300
427+
return 3;
419428
// Only support PLL_160M on P4 ver3 and later
420429
case I2S_CLK_SRC_PLL_160M:
421430
return 3;
431+
#else
432+
return 0;
422433
#endif
423434
default:
424435
HAL_ASSERT(false && "unsupported clock source");

components/soc/esp32p4/include/soc/clk_tree_defs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ typedef enum {
341341
* @brief I2S clock source enum
342342
*/
343343
typedef enum {
344-
I2S_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the default source clock */
344+
I2S_CLK_SRC_DEFAULT = 0, /*!< Auto select maximum clock source asdefault source clock */
345345
I2S_CLK_SRC_PLL_160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock (only supported on P4 hw_ver3) */
346346
I2S_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
347347
I2S_CLK_SRC_APLL = SOC_MOD_CLK_APLL, /*!< Select APLL as the source clock */

0 commit comments

Comments
 (0)