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.

Reply via email to