dm driver probe and dm question

Greetings,
I've got an octeontx board which uses driver model (CONFIG_DM/CONFIG_DM_I2C) but I find that the 'i2c_octeon' driver does not probe automatically on boot until I do something like an 'i2c dev 0 && i2c probe'.
What would cause the i2c_octeon driver to not automatically probe?
Here is a dm tree of the board: Marvell> dm tree Class Index Probed Driver Name ----------------------------------------------------------- root 0 [ + ] root_driver root_driver rsa_mod_ex 0 [ ] mod_exp_sw |-- mod_exp_sw firmware 0 [ ] psci |-- psci regulator 0 [ + ] regulator_fixed |-- mmc_supply_3v3 simple_bus 0 [ + ] simple_bus `-- soc@0 clk 0 [ + ] fixed_clock |-- refclkuaa clk 1 [ + ] fixed_clock |-- sclk clk 2 [ ] fixed_clock |-- can20m serial 0 [ + ] serial_pl01x |-- serial@87e028000000 serial 1 [ ] serial_pl01x |-- serial@87e029000000 serial 2 [ ] serial_pl01x |-- serial@87e02a000000 serial 3 [ ] serial_pl01x |-- serial@87e02b000000 watchdog 0 [ + ] sbsa_gwdt |-- watch-dog@8440000a0000 pci 0 [ + ] pci_octeontx `-- pci@848000000000 pci 1 [ + ] pci_bridge_drv |-- mrml-bridge0@1,0 misc 0 [ + ] octeontx_smi | |-- mdio-nexus@1,3 misc 1 [ + ] octeontx_hsmmc_host | |-- mmc@1,4 mmc 0 [ + ] octeontx_hsmmc_slot | | `-- octeontx-mmc0 blk 0 [ + ] mmc_blk | | `-- octeontx-mmc0.blk i2c 0 [ ] i2c_octeon | |-- i2c@9,0 misc 2 [ ] gsc | | `-- gsc@20 i2c 1 [ ] i2c_octeon | |-- i2c@9,1 pci_generi 5 [ ] pci_generic_drv | |-- pci_1:0.0 pci_generi 6 [ ] pci_generic_drv | |-- pci_1:0.1 pci_generi 7 [ ] pci_generic_drv | |-- pci_1:1.7 pci_generi 8 [ ] pci_generic_drv | |-- pci_1:2.0 pci_generi 9 [ ] pci_generic_drv | |-- pci_1:6.0 pci_generi 10 [ ] pci_generic_drv | |-- pci_1:7.0 pci_generi 11 [ ] pci_generic_drv | |-- pci_1:7.4 pci_generi 12 [ ] pci_generic_drv | |-- pci_1:a.0 pci_generi 13 [ ] pci_generic_drv | |-- pci_1:c.0 pci_generi 14 [ ] pci_generic_drv | |-- pci_1:c.1 pci_generi 15 [ ] pci_generic_drv | |-- pci_1:d.0 misc 3 [ + ] octeontx_bgx | |-- octeontx_bgx misc 4 [ + ] octeontx_bgx | `-- octeontx_bgx gpio 0 [ + ] octeon_gpio |-- gpio0@6,0 pci_generi 0 [ ] pci_generic_drv |-- pci_0:7.0 pci_generi 1 [ ] pci_generic_drv |-- pci_0:8.0 pci 2 [ + ] pci_bridge_drv |-- pci_0:9.0 pci_generi 16 [ ] pci_generic_drv | `-- pci_2:0.0 pci 3 [ + ] pci_bridge_drv |-- pci_0:a.0 pci_generi 17 [ ] pci_generic_drv | `-- pci_3:0.0 pci_generi 2 [ ] pci_generic_drv |-- pci_0:b.0 pci 4 [ + ] pci_bridge_drv |-- pci_0:c.0 pci_generi 18 [ ] pci_generic_drv | `-- pci_4:0.0 pci_generi 3 [ ] pci_generic_drv |-- pci_0:d.0 pci_generi 4 [ ] pci_generic_drv |-- pci_0:e.0 pci 5 [ + ] pci_bridge_drv |-- pci_0:f.0 misc 5 [ + ] octeontx_nic | |-- octeontx_nic ethernet 0 [ + ] vnic | |-- vnic0 ethernet 1 [ + ] vnic | `-- vnic1 usb 0 [ ] xhci_pci |-- xhci_pci usb 1 [ ] xhci_pci `-- xhci_pci
Best regards,
Tim

On 2/26/22 02:51, Tim Harvey wrote:
Greetings,
I've got an octeontx board which uses driver model (CONFIG_DM/CONFIG_DM_I2C) but I find that the 'i2c_octeon' driver does not probe automatically on boot until I do something like an 'i2c dev 0 && i2c probe'.
What would cause the i2c_octeon driver to not automatically probe?
It is the general design of U-Boot's driver model to use late probing. This reduces the boot time.
Cf. https://u-boot.readthedocs.io/en/latest/develop/driver-model/design.html#dri...
Best regards
Heinrich
Here is a dm tree of the board: Marvell> dm tree Class Index Probed Driver Name
root 0 [ + ] root_driver root_driver rsa_mod_ex 0 [ ] mod_exp_sw |-- mod_exp_sw firmware 0 [ ] psci |-- psci regulator 0 [ + ] regulator_fixed |-- mmc_supply_3v3 simple_bus 0 [ + ] simple_bus `-- soc@0 clk 0 [ + ] fixed_clock |-- refclkuaa clk 1 [ + ] fixed_clock |-- sclk clk 2 [ ] fixed_clock |-- can20m serial 0 [ + ] serial_pl01x |-- serial@87e028000000 serial 1 [ ] serial_pl01x |-- serial@87e029000000 serial 2 [ ] serial_pl01x |-- serial@87e02a000000 serial 3 [ ] serial_pl01x |-- serial@87e02b000000 watchdog 0 [ + ] sbsa_gwdt |-- watch-dog@8440000a0000 pci 0 [ + ] pci_octeontx `-- pci@848000000000 pci 1 [ + ] pci_bridge_drv |-- mrml-bridge0@1,0 misc 0 [ + ] octeontx_smi | |-- mdio-nexus@1,3 misc 1 [ + ] octeontx_hsmmc_host | |-- mmc@1,4 mmc 0 [ + ] octeontx_hsmmc_slot | | `-- octeontx-mmc0 blk 0 [ + ] mmc_blk | | `-- octeontx-mmc0.blk i2c 0 [ ] i2c_octeon | |-- i2c@9,0 misc 2 [ ] gsc | | `-- gsc@20 i2c 1 [ ] i2c_octeon | |-- i2c@9,1 pci_generi 5 [ ] pci_generic_drv | |-- pci_1:0.0 pci_generi 6 [ ] pci_generic_drv | |-- pci_1:0.1 pci_generi 7 [ ] pci_generic_drv | |-- pci_1:1.7 pci_generi 8 [ ] pci_generic_drv | |-- pci_1:2.0 pci_generi 9 [ ] pci_generic_drv | |-- pci_1:6.0 pci_generi 10 [ ] pci_generic_drv | |-- pci_1:7.0 pci_generi 11 [ ] pci_generic_drv | |-- pci_1:7.4 pci_generi 12 [ ] pci_generic_drv | |-- pci_1:a.0 pci_generi 13 [ ] pci_generic_drv | |-- pci_1:c.0 pci_generi 14 [ ] pci_generic_drv | |-- pci_1:c.1 pci_generi 15 [ ] pci_generic_drv | |-- pci_1:d.0 misc 3 [ + ] octeontx_bgx | |-- octeontx_bgx misc 4 [ + ] octeontx_bgx | `-- octeontx_bgx gpio 0 [ + ] octeon_gpio |-- gpio0@6,0 pci_generi 0 [ ] pci_generic_drv |-- pci_0:7.0 pci_generi 1 [ ] pci_generic_drv |-- pci_0:8.0 pci 2 [ + ] pci_bridge_drv |-- pci_0:9.0 pci_generi 16 [ ] pci_generic_drv | `-- pci_2:0.0 pci 3 [ + ] pci_bridge_drv |-- pci_0:a.0 pci_generi 17 [ ] pci_generic_drv | `-- pci_3:0.0 pci_generi 2 [ ] pci_generic_drv |-- pci_0:b.0 pci 4 [ + ] pci_bridge_drv |-- pci_0:c.0 pci_generi 18 [ ] pci_generic_drv | `-- pci_4:0.0 pci_generi 3 [ ] pci_generic_drv |-- pci_0:d.0 pci_generi 4 [ ] pci_generic_drv |-- pci_0:e.0 pci 5 [ + ] pci_bridge_drv |-- pci_0:f.0 misc 5 [ + ] octeontx_nic | |-- octeontx_nic ethernet 0 [ + ] vnic | |-- vnic0 ethernet 1 [ + ] vnic | `-- vnic1 usb 0 [ ] xhci_pci |-- xhci_pci usb 1 [ ] xhci_pci `-- xhci_pci
Best regards,
Tim

On Fri, Feb 25, 2022 at 11:31 PM Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 2/26/22 02:51, Tim Harvey wrote:
Greetings,
I've got an octeontx board which uses driver model (CONFIG_DM/CONFIG_DM_I2C) but I find that the 'i2c_octeon' driver does not probe automatically on boot until I do something like an 'i2c dev 0 && i2c probe'.
What would cause the i2c_octeon driver to not automatically probe?
It is the general design of U-Boot's driver model to use late probing. This reduces the boot time.
Cf. https://u-boot.readthedocs.io/en/latest/develop/driver-model/design.html#dri...
Heinrich,
Thanks for the explanation. Is there any way to make a dm driver force its probe in the case of being vital for board startup? How does this work for UCLASS_PMIC devices that are vital to board operation?
Best regards,
Tim

On 2/26/22 20:11, Tim Harvey wrote:
On Fri, Feb 25, 2022 at 11:31 PM Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 2/26/22 02:51, Tim Harvey wrote:
Greetings,
I've got an octeontx board which uses driver model (CONFIG_DM/CONFIG_DM_I2C) but I find that the 'i2c_octeon' driver does not probe automatically on boot until I do something like an 'i2c dev 0 && i2c probe'.
What would cause the i2c_octeon driver to not automatically probe?
It is the general design of U-Boot's driver model to use late probing. This reduces the boot time.
Cf. https://u-boot.readthedocs.io/en/latest/develop/driver-model/design.html#dri...
Heinrich,
Thanks for the explanation. Is there any way to make a dm driver force its probe in the case of being vital for board startup? How does this work for UCLASS_PMIC devices that are vital to board operation?
Many board files call pmic_get() and pmic_probe() which triggers probing the PMIC driver, e.g.
board/freescale/common/mc34vr500.c:
p = pmic_get("MC34VR500"); ... ret = pmic_probe(p);
Drivers may set .flags = DM_FLAG_PRE_RELOC
In the device-tree you could use u-boot,dm-pre-reloc.
See https://u-boot.readthedocs.io/en/latest/develop/driver-model/fdt-fixup.html?...
Best regards
Heinrich
participants (2)
-
Heinrich Schuchardt
-
Tim Harvey