@@ -364,17 +364,13 @@ uint32_t EspClass::getFlashChipSpeed(void) {
364364 return magicFlashChipSpeed (fhdr.spi_speed );
365365}
366366
367- // FIXME for P4
368- #if !defined(CONFIG_IDF_TARGET_ESP32P4)
369367FlashMode_t EspClass::getFlashChipMode (void ) {
370- #if CONFIG_IDF_TARGET_ESP32S2
368+ #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32P4
371369 uint32_t spi_ctrl = REG_READ (PERIPHS_SPI_FLASH_CTRL);
372- #else
373- #if CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
370+ #elif CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5
374371 uint32_t spi_ctrl = REG_READ (DR_REG_SPI0_BASE + 0x8 );
375372#else
376373 uint32_t spi_ctrl = REG_READ (SPI_CTRL_REG (0 ));
377- #endif
378374#endif
379375 /* Not all of the following constants are already defined in older versions of spi_reg.h, so do it manually for now*/
380376 if (spi_ctrl & BIT (24 )) { // SPI_FREAD_QIO
@@ -390,9 +386,7 @@ FlashMode_t EspClass::getFlashChipMode(void) {
390386 } else {
391387 return (FM_SLOW_READ);
392388 }
393- return (FM_DOUT);
394389}
395- #endif // if !defined(CONFIG_IDF_TARGET_ESP32P4)
396390
397391uint32_t EspClass::magicFlashChipSize (uint8_t flashByte) {
398392 /*
@@ -557,13 +551,19 @@ uint8_t EspClass::getFlashSourceFrequencyMHz(void) {
557551 */
558552uint8_t EspClass::getFlashClockDivider (void ) {
559553#if CONFIG_IDF_TARGET_ESP32
560- // ESP32 classic: Use SPI0 structure
554+ // ESP32 classic: Use SPI0 structure (no 'mem_' prefix)
561555 if (SPI0.clock .clk_equ_sysclk ) {
562556 return 1 ; // 1:1 clock (no divider)
563557 }
564558 return SPI0.clock .clkcnt_n + 1 ;
559+ #elif CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32C5
560+ // ESP32-P4 and ESP32-C5: Use SPIMEM0 structure with 'mem_' prefix
561+ if (SPIMEM0.clock .mem_clk_equ_sysclk ) {
562+ return 1 ; // 1:1 clock (no divider)
563+ }
564+ return SPIMEM0.clock .mem_clkcnt_n + 1 ;
565565#else
566- // Modern chips ( S2, S3, C2, C3, C5, C6, H2, P4) : Use SPIMEM0 structure
566+ // ESP32- S2, S3, C2, C3, C6, H2: Use SPIMEM0 structure without 'mem_' prefix
567567 if (SPIMEM0.clock .clk_equ_sysclk ) {
568568 return 1 ; // 1:1 clock (no divider)
569569 }
0 commit comments