-----Original Message----- From: Sebastien Lorquet <sebast...@lorquet.fr> Sent: Friday, April 7, 2023 9:58 AM To: dev@nuttx.apache.org Subject: Re: Hardcoded Pin mux, pad control and Drive Strength (AKA Slew-rate and Frequency) Settings #1570
Thanks for the notification. [DBS] Thank you for your response. Your proposal is mostly OK for me, I hope others will send reactions too. I have just one concern. If I attempt to rephrase the proposal: Starting from a commit in a future, stm32h7 GPIO definitions will not include speed indications anymore, and these will have to be added manually in board.h, but ONLY if the LEGACY_PINMAP is not set? [DBS] Yes. This is correct. But also previously non suffixed pin. E.G. Where there were not ALT settings to choose which GPIO to use will contain a _0 suffix. Here is my concern: What will happen if a user (me, probably) builds a NuttX with this new commit from a full stored defconfig, but does not regenerate its config prior to rebuilding ? the LEGACY_PINMAP setting will not be present when building in that case. [DBS] Correct, but one should always run 'make oldconfig' when changing versions of NuttX. If you do not do this. Then the compile will fail with errors that resemble chip/stm32_serial.c:1231:20: error: 'GPIO_UART5_CTS' undeclared here (not in a function); did you mean 'GPIO_UART7_CTS'? 1231 | .cts_gpio = GPIO_UART5_CTS, | ^~~~~~~~~~~~~~ | GPIO_UART7_CTS chip/stm32_serial.c:1235:20: error: 'GPIO_UART5_RTS' undeclared here (not in a function); did you mean 'GPIO_UART7_RTS'? 1235 | .rts_gpio = GPIO_UART5_RTS, | ^~~~~~~~~~~~~~ | GPIO_UART7_RTS Can we force a config update before starting the build, so the LEGACY_PINMAP setting will be set to Y automatically in all cases? [DBS] Yes `make oldconfig` Also, this has to be documented very clearly, not just the official release notes for the next release! [DBS] Yes. I have created a tool. It will update the pinmaps, create a legacy map and given a board.h Will tell you what to add/change. Aditionnally, if LEGACY_PINMAP is set in user config, maybe we can add a compile time warning in stm32h7/stm32_gpio.c that in the future, users are required to update their board.h and once done, disable LEGACY_PINMAP ? [DBS] We can do this with a message pragma, so as not to kill CI. Sebastien Le 07/04/2023 à 15:34, David Sidrane a écrit : > 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. >