Opening the discussion for this issue on the list. See https://github.com/apache/nuttx/issues/1570
I would like to get feedback on the approach see if we can move forward on this. While some solutions were discussed in - Revert "stm32h7 sdmmc: set SDMMC_CK pin to high speed (50 MHz) mode." #5012 <https://github.com/apache/nuttx/pull/5012> I would like to propose a solution for this issue as a request for comment: 1. That will not affect any existing boards 2. Will allow us to fix the issues without forcing massive changes. 3. Eventually after N more releases of NuttX deprecate the solution. Steps to get there: 1. Kconfig for all effected arches will have STM32xxx_USE_LEGACY_PINMAP set to yes as a default. 2. Rework top level pinmap files E.G. hardware/stm32_pinmap.h. 3. The current pinmap file will be renamed with _legacy E.G. hardware/stm32h7x3xx_pinmap_legacy.h 4. Rework chip specific files removing speeds and adding _0 to the previous no-selectable pins with speeds 5. Rework chip specific files adding _0 to the previous no-selectable pins The hardware/stm32_pinmap.h will have the following structure #if defined(STM32H7_USE_LEGACY_PINMAP ) # if defined(CONFIG_STM32H7_STM32H7X3XX) # include "hardware/stm32h7x3xx_pinmap_legacy.h" # elif defined(CONFIG_STM32H7_STM32H7X7XX) # include "hardware/stm32h7x3xx_pinmap_legacy.h" # else # error "Unsupported STM32 H7 Legacy Pin map" # endif #else # if defined(CONFIG_STM32H7_STM32H7X3XX) # include "hardware/stm32h7x3xx_pinmap.h" # elif defined(CONFIG_STM32H7_STM32H7X7XX) # include "hardware/stm32h7x3xx_pinmap.h" # else # error "Unsupported STM32 H7 Pin map" # endif # endif Moving forward boards will turn off STM32xx_USE_LEGACY_PINMAP and update the board.h files to fully define the pins with selected speeds. was: #define GPIO_SDMMC2_CK GPIO_SDMMC2_CK_1 /* PD6 FC_PD6_SDMMC2_CK */ #define GPIO_SDMMC2_CMD GPIO_SDMMC2_CMD_1 /* PD7 FC_PD7_SDMMC2_CMD */ // GPIO_SDMMC2_D0 No Remap /* PB14 FC_PB14_SDMMC2_D0 */ // GPIO_SDMMC2_D1 No Remap /* PB15 FC_PB15_SDMMC2_D1 */ #define GPIO_SDMMC2_D2 GPIO_SDMMC2_D2_1 /* PG11 FC_PG11_SDMMC2_D2 */ // GPIO_SDMMC2_D3 No Remap /* PB4 FC_PB4_SDMMC2_D3 */ is: #define GPIO_SDMMC2_CK (GPIO_SDMMC2_CK_1 | GPIO_SPEED_25MHz) /* PD6 FC_PD6_SDMMC2_CK */ #define GPIO_SDMMC2_CMD (GPIO_SDMMC2_CMD_1 | GPIO_SPEED_2MHz) /* PD7 FC_PD7_SDMMC2_CMD */ #define GPIO_SDMMC2_D0 (GPIO_SDMMC2_D0_0 | GPIO_SPEED_2MHz) /* PB14 FC_PB14_SDMMC2_D0 */ #define GPIO_SDMMC2_D1 (GPIO_SDMMC2_D1_0 | GPIO_SPEED_2MHz)/* PB15 FC_PB15_SDMMC2_D1 */ #define GPIO_SDMMC2_D2 GPIO_SDMMC2_D2_1 | GPIO_SPEED_2MHz) /* PG11 FC_PG11_SDMMC2_D2 */ #define GPIO_SDMMC2_D3 (GPIO_SDMMC2_D3_0 | GPIO_SPEED_2MHz) /* PB4 FC_PB4_SDMMC2_D3 */ To maintain the speed that was set in the legacy files just diff the _legacy file with the non legacy file and use that speed when creating the #define.