Hi Tim On 2/15/22 17:09, Tim Harvey wrote: > On Tue, Feb 15, 2022 at 5:29 AM Patrice CHOTARD > <patrice.chot...@foss.st.com> wrote: >> >> Hi Tim >> >> On 2/10/22 18:04, Tim Harvey wrote: >>> Greetings, >>> >>> I'm trying to understand how to use the U-Boot bind command to bind >>> the usb_ether driver to the usb class to register a USB ethernet >>> gadget network device as referenced in: >>> commit 02291d83fdaaf ("doc: add bind/unbind command documentation") >>> commit 49c752c93a78 ("cmd: Add bind/unbind commands to bind a device >>> to a driver from the command line") >>> >> >> For example, i made some trial on STM32MP1 platform: >> >> At boot, we got : >> >> STM32MP> dm tree >> Class Index Probed Driver Name >> ----------------------------------------------------------- >> root 0 [ + ] root_driver root_driver >> firmware 0 [ ] psci |-- psci >> sysreset 0 [ ] psci-sysreset | `-- psci-sysreset >> ..... >> blk 0 [ + ] mmc_blk | | `-- m...@58005000.blk >> ethernet 0 [ + ] eth_eqos | |-- ethernet@5800a000 >> eth_phy_ge 0 [ + ] eth_phy_generic_drv | | `-- ethernet-phy@0 >> usb 0 [ ] ehci_generic | |-- usb@5800d000 >> video 0 [ ] stm32_display | |-- >> display-controller@5a001000 >> ..... >> >> >> As you can see, there is already an ethernet interface used. >> We unbind the ethernet interface before binding the usb_ether gadget to the >> usb class. >> First unbind the generic ethernet phy (eth_phy_generic_drv) and the ethernet >> driver >> (eth_eqos). >> >> >> STM32MP> unbind eth_phy_generic 0 >> STM32MP> unbind ethernet 0 >> STM32MP> dm tree >> Class Index Probed Driver Name >> ----------------------------------------------------------- >> root 0 [ + ] root_driver root_driver >> firmware 0 [ ] psci |-- psci >> sysreset 0 [ ] psci-sysreset | `-- psci-sysreset >> .... >> blk 0 [ + ] mmc_blk | | `-- m...@58005000.blk >> usb 0 [ ] ehci_generic | |-- usb@5800d000 >> video 0 [ ] stm32_display | |-- >> display-controller@5a001000 >> .... >> >> Ethernet and phy driver are both unbinded. >> Now we can bind the usb_eher to the usb class >> >> STM32MP> bind usb 0 usb_ether >> STM32MP> dm tree >> Class Index Probed Driver Name >> ----------------------------------------------------------- >> root 0 [ + ] root_driver root_driver >> firmware 0 [ ] psci |-- psci >> sysreset 0 [ ] psci-sysreset | `-- psci-sysreset >> .... >> blk 0 [ + ] mmc_blk | | `-- m...@58005000.blk >> usb 0 [ ] ehci_generic | |-- usb@5800d000 >> ethernet 0 [ ] usb_ether | | `-- usb_ether >> video 0 [ ] stm32_display | |-- >> display-controller@5a001000 >> .... >> >> usb_ether is now binded. >> As example, if you can then use some ethernet command as dhcp or ping : >> >> STM32MP> dhcp >> using dwc2-udc, OUT ep2out-bulk IN ep1in-bulk STATUS ep3in-int >> MAC de:ad:be:ef:00:01 >> HOST MAC de:ad:be:ef:00:00 >> RNDIS ready >> high speed config #2: 2 mA, Ethernet Gadget, using RNDIS >> USB RNDIS network up! >> BOOTP broadcast 1 >> >>> I have enabled: >>> CONFIG_DM_USB=y >>> CONFIG_USB_GADGET=y >>> CONFIG_USB_ETHER=y >>> >> In my case i enabled also CONFIG_USB_ETH_RNDIS=y >> > > Patrice, > > In my case when I try to bind to usb_ether the device can not be found > (as it is never registered in the first place): > Ventana > unbind ethernet 0 > Ventana > bind usb 0 usb_ether > Cannot find device 0 of class usb
weird, because below, in the dm tree output, we can see : > usb 0 [ ] ehci_mx6 | | |-- usb@2184000 > usb 1 [ ] ehci_mx6 | | |-- usb@2184200 so it should find a usb class device ..... Patrice > Ventana > dm tree > Class Index Probed Driver Name > ----------------------------------------------------------- > root 0 [ + ] root_driver root_driver > thermal 0 [ ] imx_thermal |-- imx_thermal > simple_bus 0 [ + ] simple_bus |-- soc > pci 0 [ ] imx_pcie | |-- pcie@1ffc000 > simple_bus 1 [ + ] simple_bus | |-- bus@2000000 > simple_bus 2 [ ] simple_bus | | |-- spba-bus@2000000 > serial 0 [ ] serial_mxc | | | `-- serial@2020000 > gpio 0 [ + ] gpio_mxc | | |-- gpio@209c000 > gpio 1 [ + ] gpio_mxc | | |-- gpio@20a0000 > gpio 2 [ + ] gpio_mxc | | |-- gpio@20a4000 > gpio 3 [ + ] gpio_mxc | | |-- gpio@20a8000 > gpio 4 [ + ] gpio_mxc | | |-- gpio@20ac000 > gpio 5 [ ] gpio_mxc | | |-- gpio@20b0000 > gpio 6 [ ] gpio_mxc | | |-- gpio@20b4000 > watchdog 0 [ + ] imx_wdt | | |-- wdog@20bc000 > simple_bus 3 [ ] simple_bus | | |-- anatop@20c8000 > simple_bus 4 [ ] simple_bus | | |-- snvs@20cc000 > simple_bus 5 [ ] simple_bus | | |-- iomuxc-gpr@20e0000 > pinctrl 0 [ + ] fsl_imx6q_iomuxc | | `-- iomuxc@20e0000 > pinconfig 0 [ + ] pinconfig | | |-- enetgrp > pinconfig 1 [ ] pinconfig | | |-- gpioledsgrp > pinconfig 2 [ + ] pinconfig | | |-- i2c1grp > pinconfig 3 [ + ] pinconfig | | |-- i2c2grp > pinconfig 4 [ ] pinconfig | | |-- i2c3grp > pinconfig 5 [ ] pinconfig | | |-- imugrp > pinconfig 6 [ ] pinconfig | | |-- maggrp > pinconfig 7 [ + ] pinconfig | | |-- pciegrp > pinconfig 8 [ ] pinconfig | | |-- pmicgrp > pinconfig 9 [ ] pinconfig | | |-- ppsgrp > pinconfig 10 [ ] pinconfig | | |-- pwm2grp > pinconfig 11 [ ] pinconfig | | |-- pwm3grp > pinconfig 12 [ ] pinconfig | | |-- pwm4grp > pinconfig 13 [ ] pinconfig | | |-- uart1grp > pinconfig 14 [ + ] pinconfig | | |-- uart2grp > pinconfig 15 [ ] pinconfig | | |-- uart3grp > pinconfig 16 [ ] pinconfig | | |-- uart4grp > pinconfig 17 [ ] pinconfig | | |-- uart5grp > pinconfig 18 [ ] pinconfig | | |-- usbh1grp > pinconfig 19 [ ] pinconfig | | |-- usbotggrp > pinconfig 20 [ + ] pinconfig | | |-- usdhc3grp > pinconfig 21 [ ] pinconfig | | |-- > usdhc3grp100mhz > pinconfig 22 [ ] pinconfig | | |-- > usdhc3grp200mhz > pinconfig 23 [ + ] pinconfig | | `-- wdoggrp > simple_bus 6 [ + ] simple_bus | |-- bus@2100000 > usb 0 [ ] ehci_mx6 | | |-- usb@2184000 > usb 1 [ ] ehci_mx6 | | |-- usb@2184200 > mmc 0 [ + ] fsl_esdhc | | |-- usdhc@2198000 > blk 0 [ + ] mmc_blk | | | `-- > us...@2198000.blk > i2c 0 [ + ] i2c_mxc | | |-- i2c@21a0000 > i2c_generi 0 [ + ] i2c_generic_chip_drv | | | |-- generic_51 > i2c_generi 2 [ + ] i2c_generic_chip_drv | | | |-- generic_20 > i2c_generi 3 [ + ] i2c_generic_chip_drv | | | |-- generic_29 > i2c_generi 4 [ + ] i2c_generic_chip_drv | | | `-- generic_68 > i2c 1 [ + ] i2c_mxc | | |-- i2c@21a4000 > i2c_generi 1 [ + ] i2c_generic_chip_drv | | | `-- generic_3c > i2c 2 [ ] i2c_mxc | | |-- i2c@21a8000 > serial 1 [ + ] serial_mxc | | |-- serial@21e8000 > serial 2 [ ] serial_mxc | | |-- serial@21ec000 > serial 3 [ ] serial_mxc | | |-- serial@21f0000 > serial 4 [ ] serial_mxc | | `-- serial@21f4000 > video 0 [ + ] fsl_imx6q_ipu | `-- ipu@2400000 > vidconsole 0 [ + ] vidconsole0 | `-- > ipu@2400000.vidconsole0 > led 0 [ ] gpio_led |-- leds > led 1 [ ] gpio_led | |-- user1 > led 2 [ ] gpio_led | |-- user2 > led 3 [ ] gpio_led | `-- user3 > regulator 0 [ ] regulator_fixed |-- regulator-1p0v > regulator 1 [ + ] regulator_fixed |-- regulator-3p3v > regulator 2 [ ] regulator_fixed |-- regulator-usb-h1-vbus > regulator 3 [ ] regulator_fixed `-- regulator-usb-otg-vbus > Ventana > > > I'm not clear how for your board usb_ether is registered in the first place. > > Best Regards, > > Tim