[U-Boot] [PATCH 2/2] dm: pinctrl: introduce PINCONF_RECURSIVE option
Patrick DELAUNAY
patrick.delaunay at st.com
Fri Aug 2 12:50:38 UTC 2019
Hi,
> From: Patrick DELAUNAY <patrick.delaunay at st.com>
> Sent: jeudi 1 août 2019 11:23
> Subject: [PATCH 2/2] dm: pinctrl: introduce PINCONF_RECURSIVE option
> Importance: High
>
> In the Linux pinctrl binding, the pin configuration nodes don't need to be direct
> children of the pin controller device (may be grandchildren for example). This
> behavior is managed with the pinconfig u-class which recursively bind all the sub-
> node of the pin controller.
>
> But for some binding (when pin configuration is only children of pin
> controller) that is not necessary. U-Boot can save memory and reduce the number
> of pinconf instance when this feature is deactivated (for arch stm32mp for
> example for SPL).
>
> This patch allows to control this feature with a new option
> CONFIG_PINCONF_RECURSIVE when it is possible for each individual pin
> controller device.
>
I resent the patch will correct commit message and commit notes
("Commit-note:" => "Commit-notes": for patman)
http://patchwork.ozlabs.org/project/uboot/list/?series=122973&state=*
Sorry for disturbance.
Regards
Patrick
> Hi,
>
> Found her a proposal to have a more clear output of "dm tree" command and to
> reduce the memory footprint of PINCTRL_FULL for the arch stm32mp1 (bdinfo
> "Early malloc usage" is reduced from 2588 to 2144).
>
> On stm32mp157c-ev1, each pin configuration have one other several sub node
> "pins"
>
> pinctrl: pin-controller at 50002000 {
> ...
> adc12_usb_pwr_pins_a: adc12-usb-pwr-pins-0 {
> pins {
> pinmux = <STM32_PINMUX('A', 4, ANALOG)>, /* ADC12 in18 */
> <STM32_PINMUX('A', 5, ANALOG)>; /* ADC12 in19 */
> };
> };
>
> cec_pins_a: cec-0 {
> pins {
> pinmux = <STM32_PINMUX('A', 15, AF4)>;
> bias-disable;
> drive-open-drain;
> slew-rate = <0>;
> };
> };
>
> cec_pins_sleep_a: cec-sleep-0 {
> pins {
> pinmux = <STM32_PINMUX('A', 15, ANALOG)>; /* HDMI_CEC */
> };
> };
> ...
> ethernet0_rgmii_pins_a: rgmii-0 {
> pins1 {
> pinmux = <STM32_PINMUX('G', 5, AF11)>, /*
> ETH_RGMII_CLK125 */
> <STM32_PINMUX('G', 4, AF11)>, /*
> ETH_RGMII_GTX_CLK */
> <STM32_PINMUX('G', 13, AF11)>, /* ETH_RGMII_TXD0
> */
> <STM32_PINMUX('G', 14, AF11)>, /* ETH_RGMII_TXD1
> */
> <STM32_PINMUX('C', 2, AF11)>, /* ETH_RGMII_TXD2 */
> <STM32_PINMUX('E', 2, AF11)>, /* ETH_RGMII_TXD3 */
> <STM32_PINMUX('B', 11, AF11)>, /*
> ETH_RGMII_TX_CTL */
> <STM32_PINMUX('C', 1, AF11)>; /* ETH_MDC */
> bias-disable;
> drive-push-pull;
> slew-rate = <2>;
> };
> pins2 {
> pinmux = <STM32_PINMUX('A', 2, AF11)>; /* ETH_MDIO */
> bias-disable;
> drive-push-pull;
> slew-rate = <0>;
> };
> pins3 {
> pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH_RGMII_RXD0
> */
> <STM32_PINMUX('C', 5, AF11)>, /* ETH_RGMII_RXD1 */
> <STM32_PINMUX('B', 0, AF11)>, /* ETH_RGMII_RXD2 */
> <STM32_PINMUX('B', 1, AF11)>, /* ETH_RGMII_RXD3 */
> <STM32_PINMUX('A', 1, AF11)>, /*
> ETH_RGMII_RX_CLK */
> <STM32_PINMUX('A', 7, AF11)>; /*
> ETH_RGMII_RX_CTL */
> bias-disable;
> };
> };
> ...
>
> before the patch all "pins" subnode are bounded but are unused.
>
> STM32MP> dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> root 0 [ + ] root_driver root_driver
> sysreset 0 [ ] syscon_reboot |-- reboot
> simple_bus 0 [ + ] generic_simple_bus |-- soc
> serial 0 [ + ] serial_stm32 | |-- serial at 40010000
> i2c 0 [ ] stm32f7-i2c | |-- i2c at 40013000
> i2c_generi 0 [ ] stmfx | | `-- stmfx at 42
> i2c 1 [ ] stm32f7-i2c | |-- i2c at 40015000
> usb 0 [ ] dwc2-udc-otg | |-- usb-otg at 49000000
> hwspinlock 0 [ + ] hwspinlock_stm32mp1 | |-- hwspinlock at 4c000000
> mailbox 0 [ ] stm32_ipcc | |-- mailbox at 4c001000
> misc 0 [ + ] stm32-rcc | |-- rcc at 50000000
> clk 0 [ + ] stm32mp1_clk | | |-- stm32mp1_clk
> reset 0 [ + ] stm32_rcc_reset | | `-- stm32_rcc_reset
> syscon 0 [ + ] stmp32mp_syscon | |-- pwr at 50001000
> pmic 0 [ + ] stm32mp_pwr_pmic | | `-- pwr-regulators
> regulator 0 [ + ] stm32mp_pwr_regulato | | |-- reg11
> regulator 1 [ + ] stm32mp_pwr_regulato | | |-- reg18
> regulator 2 [ + ] stm32mp_pwr_regulato | | `-- usb33
> syscon 1 [ ] syscon | |-- interrupt-controller at 5000d000
> syscon 2 [ + ] stmp32mp_syscon | |-- syscon at 50020000
> mtd 0 [ + ] stm32_fmc2_nand | |-- nand-controller at 58002000
> spi 0 [ ] stm32_qspi | |-- spi at 58003000
> spi_flash 0 [ ] spi_flash_std | | |-- mx66l51235l at 0
> spi_flash 1 [ ] spi_flash_std | | `-- mx66l51235l at 1
> mmc 0 [ + ] stm32_sdmmc2 | |-- sdmmc at 58005000
> blk 0 [ + ] mmc_blk | | `-- sdmmc at 58005000.blk
> mmc 1 [ + ] stm32_sdmmc2 | |-- sdmmc at 58007000
> blk 1 [ ] mmc_blk | | `-- sdmmc at 58007000.blk
> eth 0 [ + ] eth_eqos | |-- ethernet at 5800a000
> usb 0 [ ] ehci_generic | |-- usbh-ehci at 5800d000
> phy 0 [ ] stm32-usbphyc | |-- usbphyc at 5a006000
> i2c 2 [ + ] stm32f7-i2c | |-- i2c at 5c002000
> pmic 1 [ + ] stpmic1_pmic | | `-- stpmic at 33
> regulator 3 [ + ] stpmic1_buck | | |-- buck1
> regulator 4 [ + ] stpmic1_buck | | |-- buck2
> regulator 5 [ + ] stpmic1_buck | | |-- buck3
> regulator 6 [ + ] stpmic1_buck | | |-- buck4
> regulator 7 [ + ] stpmic1_ldo | | |-- ldo1
> regulator 8 [ + ] stpmic1_ldo | | |-- ldo2
> regulator 9 [ + ] stpmic1_ldo | | |-- ldo3
> regulator 10 [ + ] stpmic1_ldo | | |-- ldo4
> regulator 11 [ + ] stpmic1_ldo | | |-- ldo5
> regulator 12 [ + ] stpmic1_ldo | | |-- ldo6
> regulator 13 [ + ] stpmic1_vref_ddr | | |-- vref_ddr
> regulator 14 [ + ] stpmic1_boost | | |-- boost
> regulator 15 [ + ] stpmic1_pwr_sw | | |-- pwr_sw1
> regulator 16 [ + ] stpmic1_pwr_sw | | |-- pwr_sw2
> sysreset 1 [ ] stpmic1-sysreset | | `-- stpmic1-sysreset
> rtc 0 [ ] rtc-stm32 | |-- rtc at 5c004000
> misc 1 [ + ] stm32mp_bsec | |-- nvmem at 5c005000
> pinctrl 0 [ + ] pinctrl_stm32 | |-- pin-controller at 50002000
> gpio 0 [ + ] gpio_stm32 | | |-- gpio at 50002000
> gpio 1 [ + ] gpio_stm32 | | |-- gpio at 50003000
> gpio 2 [ + ] gpio_stm32 | | |-- gpio at 50004000
> gpio 3 [ + ] gpio_stm32 | | |-- gpio at 50005000
> gpio 4 [ + ] gpio_stm32 | | |-- gpio at 50006000
> gpio 5 [ + ] gpio_stm32 | | |-- gpio at 50007000
> gpio 6 [ + ] gpio_stm32 | | |-- gpio at 50008000
> gpio 7 [ + ] gpio_stm32 | | |-- gpio at 50009000
> gpio 8 [ ] gpio_stm32 | | |-- gpio at 5000a000
> gpio 9 [ ] gpio_stm32 | | |-- gpio at 5000b000
> gpio 10 [ ] gpio_stm32 | | |-- gpio at 5000c000
> pinconfig 0 [ ] pinconfig | | |-- adc12-usb-pwr-pins-0
> pinconfig 1 [ ] pinconfig | | | `-- pins
> pinconfig 2 [ ] pinconfig | | |-- cec-0
> pinconfig 3 [ ] pinconfig | | | `-- pins
> pinconfig 4 [ ] pinconfig | | |-- cec-sleep-0
> pinconfig 5 [ ] pinconfig | | | `-- pins
> pinconfig 6 [ ] pinconfig | | |-- cec-1
> pinconfig 7 [ ] pinconfig | | | `-- pins
> pinconfig 8 [ ] pinconfig | | |-- cec-sleep-1
> pinconfig 9 [ ] pinconfig | | | `-- pins
> pinconfig 10 [ + ] pinconfig | | |-- rgmii-0
> pinconfig 11 [ ] pinconfig | | | |-- pins1
> pinconfig 12 [ ] pinconfig | | | |-- pins2
> pinconfig 13 [ ] pinconfig | | | `-- pins3
> pinconfig 14 [ ] pinconfig | | |-- rgmii-sleep-0
> pinconfig 15 [ ] pinconfig | | | `-- pins1
> pinconfig 16 [ + ] pinconfig | | |-- fmc-0
> pinconfig 17 [ ] pinconfig | | | |-- pins1
> pinconfig 18 [ ] pinconfig | | | `-- pins2
> pinconfig 19 [ ] pinconfig | | |-- fmc-sleep-0
> pinconfig 20 [ ] pinconfig | | | `-- pins
> pinconfig 21 [ ] pinconfig | | |-- i2c1-0
> pinconfig 22 [ ] pinconfig | | | `-- pins
> pinconfig 23 [ ] pinconfig | | |-- i2c1-1
> pinconfig 24 [ ] pinconfig | | | `-- pins
> pinconfig 25 [ ] pinconfig | | |-- i2c1-2
> pinconfig 26 [ ] pinconfig | | | `-- pins
> pinconfig 27 [ ] pinconfig | | |-- i2c2-0
> pinconfig 28 [ ] pinconfig | | | `-- pins
> pinconfig 29 [ ] pinconfig | | |-- i2c2-1
> pinconfig 30 [ ] pinconfig | | | `-- pins
> pinconfig 31 [ ] pinconfig | | |-- i2c2-2
> pinconfig 32 [ ] pinconfig | | | `-- pins
> pinconfig 33 [ ] pinconfig | | |-- i2c5-0
> pinconfig 34 [ ] pinconfig | | | `-- pins
> pinconfig 35 [ ] pinconfig | | |-- i2c5-1
> pinconfig 36 [ ] pinconfig | | | `-- pins
> pinconfig 37 [ ] pinconfig | | |-- ltdc-a-0
> pinconfig 38 [ ] pinconfig | | | `-- pins
> pinconfig 39 [ ] pinconfig | | |-- ltdc-a-1
> pinconfig 40 [ ] pinconfig | | | `-- pins
> pinconfig 41 [ ] pinconfig | | |-- ltdc-b-0
> pinconfig 42 [ ] pinconfig | | | `-- pins
> pinconfig 43 [ ] pinconfig | | |-- ltdc-b-1
> pinconfig 44 [ ] pinconfig | | | `-- pins
> pinconfig 45 [ ] pinconfig | | |-- m-can1-0
> pinconfig 46 [ ] pinconfig | | | |-- pins1
> pinconfig 47 [ ] pinconfig | | | `-- pins2
> pinconfig 48 [ ] pinconfig | | |-- m_can1-sleep at 0
> pinconfig 49 [ ] pinconfig | | | `-- pins
> pinconfig 50 [ ] pinconfig | | |-- pwm2-0
> pinconfig 51 [ ] pinconfig | | | `-- pins
> pinconfig 52 [ ] pinconfig | | |-- pwm8-0
> pinconfig 53 [ ] pinconfig | | | `-- pins
> pinconfig 54 [ ] pinconfig | | |-- pwm12-0
> pinconfig 55 [ ] pinconfig | | | `-- pins
> pinconfig 56 [ ] pinconfig | | |-- qspi-clk-0
> pinconfig 57 [ ] pinconfig | | | `-- pins
> pinconfig 58 [ ] pinconfig | | |-- qspi-bk1-0
> pinconfig 59 [ ] pinconfig | | | |-- pins1
> pinconfig 60 [ ] pinconfig | | | `-- pins2
> pinconfig 61 [ ] pinconfig | | |-- qspi-bk2-0
> pinconfig 62 [ ] pinconfig | | | |-- pins1
> pinconfig 63 [ ] pinconfig | | | `-- pins2
> pinconfig 64 [ + ] pinconfig | | |-- sdmmc1-b4-0
> pinconfig 65 [ ] pinconfig | | | `-- pins
> pinconfig 66 [ ] pinconfig | | |-- sdmmc1-b4-od-0
> pinconfig 67 [ ] pinconfig | | | |-- pins1
> pinconfig 68 [ ] pinconfig | | | `-- pins2
> pinconfig 69 [ ] pinconfig | | |-- sdmmc1-b4-sleep-0
> pinconfig 70 [ ] pinconfig | | | `-- pins
> pinconfig 71 [ + ] pinconfig | | |-- sdmmc1-dir-0
> pinconfig 72 [ ] pinconfig | | | |-- pins1
> pinconfig 73 [ ] pinconfig | | | `-- pins2
> pinconfig 74 [ ] pinconfig | | |-- sdmmc1-dir-sleep-0
> pinconfig 75 [ ] pinconfig | | | `-- pins
> pinconfig 76 [ ] pinconfig | | |-- sdmmc2-b4-0
> pinconfig 77 [ ] pinconfig | | | `-- pins
> pinconfig 78 [ ] pinconfig | | |-- sdmmc2-d47-0
> pinconfig 79 [ ] pinconfig | | | `-- pins
> pinconfig 80 [ ] pinconfig | | |-- spdifrx-0
> pinconfig 81 [ ] pinconfig | | | `-- pins
> pinconfig 82 [ ] pinconfig | | |-- spdifrx-1
> pinconfig 83 [ ] pinconfig | | | `-- pins
> pinconfig 84 [ ] pinconfig | | |-- spi2-0
> pinconfig 85 [ ] pinconfig | | | |-- pins1
> pinconfig 86 [ ] pinconfig | | | `-- pins2
> pinconfig 87 [ ] pinconfig | | |-- stusb1600-0
> pinconfig 88 [ ] pinconfig | | | `-- pins
> pinconfig 89 [ + ] pinconfig | | |-- uart4-0
> pinconfig 90 [ ] pinconfig | | | |-- pins1
> pinconfig 91 [ ] pinconfig | | | `-- pins2
> pinconfig 92 [ ] pinconfig | | |-- uart4-1
> pinconfig 93 [ ] pinconfig | | | |-- pins1
> pinconfig 94 [ ] pinconfig | | | `-- pins2
> pinconfig 95 [ ] pinconfig | | |-- uart7-0
> pinconfig 96 [ ] pinconfig | | | |-- pins1
> pinconfig 97 [ ] pinconfig | | | `-- pins2
> pinconfig 98 [ ] pinconfig | | `-- usbotg_hs-0
> pinconfig 99 [ ] pinconfig | | `-- pins
> pinctrl 1 [ + ] pinctrl_stm32 | |-- pin-controller-z at 54004000
> gpio 11 [ + ] gpio_stm32 | | |-- gpio at 54004000
> pinconfig 100 [ + ] pinconfig | | |-- i2c4-0
> pinconfig 101 [ ] pinconfig | | | `-- pins
> pinconfig 102 [ ] pinconfig | | |-- i2c4-1
> pinconfig 103 [ ] pinconfig | | | `-- pins
> pinconfig 104 [ ] pinconfig | | `-- spi1-0
> pinconfig 105 [ ] pinconfig | | |-- pins1
> pinconfig 106 [ ] pinconfig | | `-- pins2
> ram 0 [ ] stm32mp1_ddr | `-- ddr at 5A003000
> regulator 17 [ + ] gpio regulator |-- regulator-sd_switch
> led 0 [ + ] gpio_led |-- led
> led 1 [ + ] gpio_led | |-- red
> led 2 [ + ] gpio_led | |-- green
> led 3 [ + ] gpio_led | |-- orange
> led 4 [ ] gpio_led | `-- blue
> clk 1 [ + ] fixed_rate_clock |-- clk-hse
> clk 2 [ + ] fixed_rate_clock |-- clk-hsi
> clk 3 [ + ] fixed_rate_clock |-- clk-lse
> clk 4 [ + ] fixed_rate_clock |-- clk-lsi
> clk 5 [ + ] fixed_rate_clock `-- clk-csi
>
> With the patch only the needed "pinconfig" instances are kept:
>
> STM32MP> dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> root 0 [ + ] root_driver root_driver
> sysreset 0 [ ] syscon_reboot |-- reboot
> simple_bus 0 [ + ] generic_simple_bus |-- soc
> serial 0 [ + ] serial_stm32 | |-- serial at 40010000
> i2c 0 [ ] stm32f7-i2c | |-- i2c at 40013000
> i2c_generi 0 [ ] stmfx | | `-- stmfx at 42
> i2c 1 [ ] stm32f7-i2c | |-- i2c at 40015000
> usb 0 [ ] dwc2-udc-otg | |-- usb-otg at 49000000
> hwspinlock 0 [ + ] hwspinlock_stm32mp1 | |-- hwspinlock at 4c000000
> mailbox 0 [ ] stm32_ipcc | |-- mailbox at 4c001000
> misc 0 [ + ] stm32-rcc | |-- rcc at 50000000
> clk 0 [ + ] stm32mp1_clk | | |-- stm32mp1_clk
> reset 0 [ + ] stm32_rcc_reset | | `-- stm32_rcc_reset
> syscon 0 [ + ] stmp32mp_syscon | |-- pwr at 50001000
> pmic 0 [ + ] stm32mp_pwr_pmic | | `-- pwr-regulators
> regulator 0 [ + ] stm32mp_pwr_regulato | | |-- reg11
> regulator 1 [ + ] stm32mp_pwr_regulato | | |-- reg18
> regulator 2 [ + ] stm32mp_pwr_regulato | | `-- usb33
> syscon 1 [ ] syscon | |-- interrupt-controller at 5000d000
> syscon 2 [ + ] stmp32mp_syscon | |-- syscon at 50020000
> mtd 0 [ + ] stm32_fmc2_nand | |-- nand-controller at 58002000
> spi 0 [ ] stm32_qspi | |-- spi at 58003000
> spi_flash 0 [ ] spi_flash_std | | |-- mx66l51235l at 0
> spi_flash 1 [ ] spi_flash_std | | `-- mx66l51235l at 1
> mmc 0 [ + ] stm32_sdmmc2 | |-- sdmmc at 58005000
> blk 0 [ + ] mmc_blk | | `-- sdmmc at 58005000.blk
> mmc 1 [ + ] stm32_sdmmc2 | |-- sdmmc at 58007000
> blk 1 [ ] mmc_blk | | `-- sdmmc at 58007000.blk
> eth 0 [ + ] eth_eqos | |-- ethernet at 5800a000
> usb 0 [ ] ehci_generic | |-- usbh-ehci at 5800d000
> phy 0 [ ] stm32-usbphyc | |-- usbphyc at 5a006000
> i2c 2 [ + ] stm32f7-i2c | |-- i2c at 5c002000
> pmic 1 [ + ] stpmic1_pmic | | `-- stpmic at 33
> regulator 3 [ + ] stpmic1_buck | | |-- buck1
> regulator 4 [ + ] stpmic1_buck | | |-- buck2
> regulator 5 [ + ] stpmic1_buck | | |-- buck3
> regulator 6 [ + ] stpmic1_buck | | |-- buck4
> regulator 7 [ + ] stpmic1_ldo | | |-- ldo1
> regulator 8 [ + ] stpmic1_ldo | | |-- ldo2
> regulator 9 [ + ] stpmic1_ldo | | |-- ldo3
> regulator 10 [ + ] stpmic1_ldo | | |-- ldo4
> regulator 11 [ + ] stpmic1_ldo | | |-- ldo5
> regulator 12 [ + ] stpmic1_ldo | | |-- ldo6
> regulator 13 [ + ] stpmic1_vref_ddr | | |-- vref_ddr
> regulator 14 [ + ] stpmic1_boost | | |-- boost
> regulator 15 [ + ] stpmic1_pwr_sw | | |-- pwr_sw1
> regulator 16 [ + ] stpmic1_pwr_sw | | |-- pwr_sw2
> sysreset 1 [ ] stpmic1-sysreset | | `-- stpmic1-sysreset
> rtc 0 [ ] rtc-stm32 | |-- rtc at 5c004000
> misc 1 [ + ] stm32mp_bsec | |-- nvmem at 5c005000
> pinctrl 0 [ + ] pinctrl_stm32 | |-- pin-controller at 50002000
> gpio 0 [ + ] gpio_stm32 | | |-- gpio at 50002000
> gpio 1 [ + ] gpio_stm32 | | |-- gpio at 50003000
> gpio 2 [ + ] gpio_stm32 | | |-- gpio at 50004000
> gpio 3 [ + ] gpio_stm32 | | |-- gpio at 50005000
> gpio 4 [ + ] gpio_stm32 | | |-- gpio at 50006000
> gpio 5 [ + ] gpio_stm32 | | |-- gpio at 50007000
> gpio 6 [ + ] gpio_stm32 | | |-- gpio at 50008000
> gpio 7 [ + ] gpio_stm32 | | |-- gpio at 50009000
> gpio 8 [ ] gpio_stm32 | | |-- gpio at 5000a000
> gpio 9 [ ] gpio_stm32 | | |-- gpio at 5000b000
> gpio 10 [ ] gpio_stm32 | | |-- gpio at 5000c000
> pinconfig 0 [ ] pinconfig | | |-- adc12-usb-pwr-pins-0
> pinconfig 1 [ ] pinconfig | | |-- cec-0
> pinconfig 2 [ ] pinconfig | | |-- cec-sleep-0
> pinconfig 3 [ ] pinconfig | | |-- cec-1
> pinconfig 4 [ ] pinconfig | | |-- cec-sleep-1
> pinconfig 5 [ + ] pinconfig | | |-- rgmii-0
> pinconfig 6 [ ] pinconfig | | |-- rgmii-sleep-0
> pinconfig 7 [ + ] pinconfig | | |-- fmc-0
> pinconfig 8 [ ] pinconfig | | |-- fmc-sleep-0
> pinconfig 9 [ ] pinconfig | | |-- i2c1-0
> pinconfig 10 [ ] pinconfig | | |-- i2c1-1
> pinconfig 11 [ ] pinconfig | | |-- i2c1-2
> pinconfig 12 [ ] pinconfig | | |-- i2c2-0
> pinconfig 13 [ ] pinconfig | | |-- i2c2-1
> pinconfig 14 [ ] pinconfig | | |-- i2c2-2
> pinconfig 15 [ ] pinconfig | | |-- i2c5-0
> pinconfig 16 [ ] pinconfig | | |-- i2c5-1
> pinconfig 17 [ ] pinconfig | | |-- ltdc-a-0
> pinconfig 18 [ ] pinconfig | | |-- ltdc-a-1
> pinconfig 19 [ ] pinconfig | | |-- ltdc-b-0
> pinconfig 20 [ ] pinconfig | | |-- ltdc-b-1
> pinconfig 21 [ ] pinconfig | | |-- m-can1-0
> pinconfig 22 [ ] pinconfig | | |-- m_can1-sleep at 0
> pinconfig 23 [ ] pinconfig | | |-- pwm2-0
> pinconfig 24 [ ] pinconfig | | |-- pwm8-0
> pinconfig 25 [ ] pinconfig | | |-- pwm12-0
> pinconfig 26 [ ] pinconfig | | |-- qspi-clk-0
> pinconfig 27 [ ] pinconfig | | |-- qspi-bk1-0
> pinconfig 28 [ ] pinconfig | | |-- qspi-bk2-0
> pinconfig 29 [ + ] pinconfig | | |-- sdmmc1-b4-0
> pinconfig 30 [ ] pinconfig | | |-- sdmmc1-b4-od-0
> pinconfig 31 [ ] pinconfig | | |-- sdmmc1-b4-sleep-0
> pinconfig 32 [ + ] pinconfig | | |-- sdmmc1-dir-0
> pinconfig 33 [ ] pinconfig | | |-- sdmmc1-dir-sleep-0
> pinconfig 34 [ ] pinconfig | | |-- sdmmc2-b4-0
> pinconfig 35 [ ] pinconfig | | |-- sdmmc2-d47-0
> pinconfig 36 [ ] pinconfig | | |-- spdifrx-0
> pinconfig 37 [ ] pinconfig | | |-- spdifrx-1
> pinconfig 38 [ ] pinconfig | | |-- spi2-0
> pinconfig 39 [ ] pinconfig | | |-- stusb1600-0
> pinconfig 40 [ + ] pinconfig | | |-- uart4-0
> pinconfig 41 [ ] pinconfig | | |-- uart4-1
> pinconfig 42 [ ] pinconfig | | |-- uart7-0
> pinconfig 43 [ ] pinconfig | | `-- usbotg_hs-0
> pinctrl 1 [ + ] pinctrl_stm32 | |-- pin-controller-z at 54004000
> gpio 11 [ + ] gpio_stm32 | | |-- gpio at 54004000
> pinconfig 44 [ + ] pinconfig | | |-- i2c4-0
> pinconfig 45 [ ] pinconfig | | |-- i2c4-1
> pinconfig 46 [ ] pinconfig | | `-- spi1-0
> ram 0 [ ] stm32mp1_ddr | `-- ddr at 5A003000
> regulator 17 [ + ] gpio regulator |-- regulator-sd_switch
> led 0 [ + ] gpio_led |-- led
> led 1 [ + ] gpio_led | |-- red
> led 2 [ + ] gpio_led | |-- green
> led 3 [ + ] gpio_led | |-- orange
> led 4 [ ] gpio_led | `-- blue
> clk 1 [ + ] fixed_rate_clock |-- clk-hse
> clk 2 [ + ] fixed_rate_clock |-- clk-hsi
> clk 3 [ + ] fixed_rate_clock |-- clk-lse
> clk 4 [ + ] fixed_rate_clock |-- clk-lsi
> clk 5 [ + ] fixed_rate_clock `-- clk-csi
>
> END
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
> drivers/pinctrl/Kconfig | 25 +++++++++++++++++++++++++
> drivers/pinctrl/pinctrl-uclass.c | 2 ++
> 2 files changed, 27 insertions(+)
>
> diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig index a0ac167..deee924
> 100644
> --- a/drivers/pinctrl/Kconfig
> +++ b/drivers/pinctrl/Kconfig
> @@ -59,6 +59,22 @@ config PINCONF
> This option enables pin configuration through the generic pinctrl
> framework.
>
> +config PINCONF_RECURSIVE
> + bool "Support recursive binding for pin configuration nodes"
> + depends on PINCTRL_FULL
> + default n if ARCH_STM32MP
> + default y
> + help
> + In the Linux pinctrl binding, the pin configuration nodes need not be
> + direct children of the pin controller device (may be grandchildren for
> + example). It is define is each individual pin controller device.
> + Say Y here if you want to keep this behavior with the pinconfig
> + u-class: all sub are recursivelly bounded.
> + If the option is disabled, this behavior is deactivated and only
> + the direct children of pin controller will be assumed as pin
> + configuration; you can save memory footprint when this feature is
> + no needed.
> +
> config SPL_PINCTRL
> bool "Support pin controllers in SPL"
> depends on SPL && SPL_DM
> @@ -104,6 +120,15 @@ config SPL_PINCONF
> This option is an SPL-variant of the PINCONF option.
> See the help of PINCONF for details.
>
> +config SPL_PINCONF_RECURSIVE
> + bool "Support recursive binding for pin configuration nodes in SPL"
> + depends on SPL_PINCTRL_FULL
> + default n if ARCH_STM32MP
> + default y
> + help
> + This option is an SPL-variant of the PINCONF_RECURSIVE option.
> + See the help of PINCONF_RECURSIVE for details.
> +
> if PINCTRL || SPL_PINCTRL
>
> config PINCTRL_AR933X
> diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
> index 5b1cd29..bf799a7 100644
> --- a/drivers/pinctrl/pinctrl-uclass.c
> +++ b/drivers/pinctrl/pinctrl-uclass.c
> @@ -151,7 +151,9 @@ static int pinconfig_post_bind(struct udevice *dev)
>
> UCLASS_DRIVER(pinconfig) = {
> .id = UCLASS_PINCONFIG,
> +#if CONFIG_IS_ENABLED(PINCONFIG_RECURSIVE)
> .post_bind = pinconfig_post_bind,
> +#endif
> .name = "pinconfig",
> };
>
> --
> 2.7.4
More information about the U-Boot
mailing list