Fastboot

Jonas Vautherin jonas.vautherin at gmail.com
Sat Mar 13 01:15:00 CET 2021


Finally made it work!

I was editing the wrong file: am335x-evm.dts instead of
am335x-pocketbeagle.dts. Because in the defconfig, "am335x-evm" was defined
as the "default", I thought it would boot there. But there is apparently a
mechanism that makes it choose am335x-pocketbeagle.dts instead. I applied
the following patch and it just worked:

```
diff --git a/arch/arm/dts/am335x-pocketbeagle.dts
b/arch/arm/dts/am335x-pocketbeagle.dts
index 62fe5cab9f..3ba1c9c950 100644
--- a/arch/arm/dts/am335x-pocketbeagle.dts
+++ b/arch/arm/dts/am335x-pocketbeagle.dts
@@ -220,7 +220,7 @@

 &usb0 {
  status = "okay";
- dr_mode = "otg";
+ dr_mode = "peripheral";
 };

 &usb1_phy {
```

I struggled with it, but that was a learning experience. Thanks a lot for
the help!

On Thu, Mar 11, 2021 at 1:56 AM Jonas Vautherin <jonas.vautherin at gmail.com>
wrote:

> Thanks a lot, Sean!
>
> From you answer, it seems like what I am trying to do (i.e. applying that
> patch to am335x.dts to set dr_mode to "peripheral") makes sense, though for
> some reason it does not get applied.
>
> I have been careful in checking that the dts file disappears after I
> cleansstate u-boot, and that it gets patched in the do_patch step. I have
> also checked that u-boot.img disappears from the deploy folder when I
> cleansstate, and gets rebuilt after the patch is applied. And finally, I
> have made sure that the cleansstate on my image removed it from the deploy
> folder.
>
> Moreover, I have `find build | grep am335x.dts` to check if I was patching
> the right file (which should be ensured by the fact that I patch it in the
> bbappend of the u-boot recipe).
>
> My fear is that for some reason, it does not use am335x.dts to build the
> device tree but something else entirely, which would mean that I am
> patching something that is not used.
>
> From u-boot.img, or ideally even from my final image I flash on the
> sdcard, is there a way for me to see what is used to define the device tree?
>
> Best,
>
> On Thu, 11 Mar 2021, 00:44 Sean Anderson, <seanga2 at gmail.com> wrote:
>
>> On 3/10/21 12:43 PM, Jonas Vautherin wrote:
>> > Hello!
>> >
>> > I've made some more tests, but I am stuck and I don't really know what
>> > I am missing. Would love to get some insights, if somebody has an idea
>> > :-). So my root problem is that I would like to run my pocketbeagle in
>> > fastboot mode so that I can flash an image from my laptop over USB
>> > (it's a learning experience, I'm new to u-boot).
>> >
>> > When I go into the u-boot prompt and run `fastboot usb 0` (after I set
>> > `log level 7`), I get:
>> >
>> > ```
>> > => fastboot usb 0
>> > uclass_find_device_by_seq() 0 0
>> > uclass_find_device_by_seq()    - not found
>> > uclass_find_device_by_seq() 1 0
>> > uclass_find_device_by_seq()    - not found
>> > cmd_call() Command failed, result=1
>> > ```
>> >
>> > Similar for `fastboot usb 1` (I don't know which one is the microB on
>> > the pocketbeagle), except the numbers are `0 1` and `1 1` in the log
>> > output.
>>
>> The numbers come from /aliases in the device tree. You should read the
>> datasheet/schematic to figure out which is which :)
>>
>> >
>> > If I `dm tree`, for some reason I see only usb1 at 47401800 (according to
>> > the `.dts`, usb0 is @47401000).
>> >
>> > ```
>> >   misc          0  [ + ]   ti-musb-wrapper           `-- usb at 47400000
>> >   usb           0  [   ]   ti-musb-host                  `--
>> usb at 47401800
>> > ```
>> >
>> > Looking at the defconfig (I use Yocto, so `bitbake -c menuconfig
>> > u-boot), I see that "Default Device Tree for DT control" is
>> > (am335x-evm). Opening
>> >
>> ./build/tmp/work/pocketbeagle-poky-linux-gnueabi/u-boot/1_2020.07-r0/git/arch/arm/dts/am335x-evm.dts
>> > (which I believe is the one corresponding to `am335x-evm` in my
>> > defconfig), I see the following for usb:
>> >
>> > ```
>> > &usb {
>> > status = "okay";
>> > };
>> >
>> > &usb_ctrl_mod {
>> > status = "okay";
>> > };
>> >
>> > &usb0_phy {
>> > status = "okay";
>> > };
>> >
>> > &usb1_phy {
>> > status = "okay";
>> > };
>> >
>> > &usb0 {
>> > status = "okay";
>> > };
>> >
>> > &usb1 {
>> > status = "okay";
>> > dr_mode = "host";
>> > };
>> > ```
>> >
>> > And showing usb0 and usb1 with `fdt print` (after I get the value of
>> > $fdt_blob with `bdinfo` and use it with `fdt addr $fdt_blob`), I get:
>> >
>> > ```
>> > => fdt print /ocp/usb at 47400000/usb at 47401000
>> > usb at 47401000 {
>> >          compatible = "ti,musb-am33xx";
>> >          status = "okay";
>> >          reg = <0x47401400 0x00000400 0x47401000 0x00000200>;
>> >          reg-names = "mc", "control";
>> >          interrupts = <0x00000012>;
>> >          interrupt-names = "mc";
>> >          dr_mode = "otg";
>> >          mentor,multipoint = <0x00000001>;
>> >          mentor,num-eps = <0x00000010>;
>> >          mentor,ram-bits = <0x0000000c>;
>> >          mentor,power = <0x000001f4>;
>> >          phys = <0x00000037>;
>> >          dmas = * 0x9df20aa8 [0x00000168];
>> >          dma-names = "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
>> "rx8", "rx
>> > 9", "rx10", "rx11", "rx12", "rx13", "rx14", "rx15", "tx1", "tx2",
>> "tx3", "tx4", "tx5", "tx6", "tx7", "tx8", "tx9", "tx10", "tx11", "tx12",
>> "tx13", "tx14", "tx15";
>> > };
>> > ```
>> >
>> > and
>> >
>> > ```
>> > => fdt print /ocp/usb at 47400000/usb at 47401800
>> > usb at 47401800 {
>> >          compatible = "ti,musb-am33xx";
>> >          status = "okay";
>> >          reg = <0x47401c00 0x00000400 0x47401800 0x00000200>;
>> >          reg-names = "mc", "control";
>> >          interrupts = <0x00000013>;
>> >          interrupt-names = "mc";
>> >          dr_mode = "host";
>> >          mentor,multipoint = <0x00000001>;
>> >          mentor,num-eps = <0x00000010>;
>> >          mentor,ram-bits = <0x0000000c>;
>> >          mentor,power = <0x000001f4>;
>> >          phys = <0x00000039>;
>> >          dmas = * 0x9df20e50 [0x00000168];
>> >          dma-names = "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
>> "rx8", "rx9", "rx10", "rx11", "rx12", "rx13", "rx14", "rx15", "tx1", "tx2",
>> "tx3", "tx4", "tx5", "tx6", "tx7", "tx8", "tx9", "tx10", "tx11", "tx12",
>> "tx13", "tx14", "tx
>> > 15";
>> > };
>> > ```
>> >
>> > My understanding is therefore that `usb0` is in "otg" mode, and `usb1`
>> > is in "host" mode. But that does not really tell me why `fastboot usb
>> > 0` and `fastboot usb 1` failed.
>>
>> Yes. The U-Boot driver only supports host and peripheral modes, so no
>> otg device is created. And fastboot cannot work with a USB host.
>>
>> >
>> > I have also tried to edit `am335x-evm.dts` and set both to
>> > "peripheral" (I do that in a Yocto patch step and make sure I `bitbake
>> > -c cleansstate u-boot` and `bitbake -c clean <my-image>` before I
>> > rebuild):
>> >
>> > ```
>> > &usb0 {
>> > status = "okay";
>> > dr_mode = "peripheral";
>> > };
>> >
>> > &usb1 {
>> > status = "okay";
>> > dr_mode = "peripheral";
>> > };
>> > ```
>> >
>> > But that does not change anything in the `fdt print` output: usb0 is
>> > still "otg" and usb1 is still "host". Which makes me guess I may be
>> > modifying the wrong `am335x-evm.dts`, but I really don't know how I
>> > could check that.
>>
>> Does cleaning wipe your changes? There should be some yocto way to apply
>> patches; perhaps someone else can comment on that.
>>
>> --Sean
>>
>> >
>> > Again, any hints are appreciated, I'm happy to DuckDuckGo some new
>> keywords or ideas as my goal is to learn about u-boot, but right now I'm
>> just stuck :-).
>> >
>> > Best Regards,
>> > Jonas
>> >
>> > On Sun, Mar 7, 2021 at 7:31 PM Jonas Vautherin <
>> jonas.vautherin at gmail.com <mailto:jonas.vautherin at gmail.com>> wrote:
>> >
>> >     Yes that was it! I had used `log help`, but misunderstood the
>> output. My bad... Below is the debug output I receive, where I don't really
>> get what's happening except for those two lines:
>> >
>> >     ```
>> >     uclass_find_device_by_seq() - 1 -1 'usb at 47401800'
>> >     uclass_find_device_by_seq() - not found
>> >     ```
>> >
>> >     But I don't really understand what it means. I spent a lot of time
>> reading the available options in menuconfig, and at that point I cannot say
>> what I am doing wrong. Note that I am using the `am335x_evm_defconfig`
>> defconfig, which I changed to get more logging outputs.
>> >
>> >     Here is the output of `usb start`, let me know if I am missing
>> something obvious from there:
>> >
>> >     ```
>> >     => usb start
>> >     starting USB...
>> >     Bus usb at 47401800: __of_translate_address() OF: ** translation for
>> device usb at 47401800 **
>> >     __of_translate_address() OF: bus is default (na=1, ns=1) on
>> usb at 47400000
>> >     __of_translate_address() OF: parent bus is default (na=1, ns=1) on
>> ocp
>> >     of_translate_one() OF: no ranges, 1:1 translation
>> >     of_translate_one() OF: with offset: 1195382784
>> >     __of_translate_address() OF: parent bus is default (na=1, ns=1) on
>> >     of_translate_one() OF: no ranges, 1:1 translation
>> >     of_translate_one() OF: with offset: 1195382784
>> >     __of_translate_address() OF: reached root node
>> >     fdtdec_lookup_phandle() fdtdec_lookup_phandle: phys
>> >     fdtdec_lookup_phandle() fdtdec_lookup_phandle: ti,ctrl_mod
>> >     fdtdec_get_addr_size_fixed() fdtdec_get_addr_size_fixed: reg:
>> fdtdec_get_addr_size_fixed() addr=44e10620
>> >     fdtdec_get_int() fdtdec_get_int: mentor,multipoint:
>> fdtdec_get_int() 0x1 (1)
>> >     fdtdec_get_int() fdtdec_get_int: mentor,num-eps: fdtdec_get_int()
>> 0x10 (16)
>> >     fdtdec_get_int() fdtdec_get_int: mentor,ram-bits: fdtdec_get_int()
>> 0xc (12)
>> >     fdtdec_get_int() fdtdec_get_int: mentor,power: fdtdec_get_int()
>> 0x1f4 (500)
>> >     uclass_find_device_by_seq() 0 1
>> >     uclass_find_device_by_seq() - 1 -1 'usb at 47401800'
>> >     uclass_find_device_by_seq() - not found
>> >     clk_set_defaults() clk_set_defaults(usb at 47401800)
>> >     clk_set_default_parents() clk_set_default_parents: could not read
>> assigned-clock-parents for 9df24d30
>> >     ofnode_read_prop() ofnode_read_prop: assigned-clock-rates:
>> ofnode_read_prop() <not found>
>> >     musb_core_init() musb-hdrc: hw_ep 0shared, max 64
>> >     musb_core_init() musb-hdrc: hw_ep 1tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 1rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 2tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 2rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 3tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 3rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 4tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 4rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 5tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 5rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 6tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 6rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 7tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 7rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 8tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 8rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 9tx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 9rx, max 512
>> >     musb_core_init() musb-hdrc: hw_ep 10tx, max 256
>> >     musb_core_init() musb-hdrc: hw_ep 10rx, max 64
>> >     musb_core_init() musb-hdrc: hw_ep 11tx, max 256
>> >     musb_core_init() musb-hdrc: hw_ep 11rx, max 64
>> >     musb_core_init() musb-hdrc: hw_ep 12tx, max 256
>> >     musb_core_init() musb-hdrc: hw_ep 12rx, max 64
>> >     musb_core_init() musb-hdrc: hw_ep 13shared, max 4096
>> >     musb_core_init() musb-hdrc: hw_ep 14shared, max 1024
>> >     musb_core_init() musb-hdrc: hw_ep 15shared, max 1024
>> >     musb_start() <== devctl 80
>> >     musb_stop() HDRC disabled
>> >     Port not available.
>> >     usb_init() scan end
>> >     ```
>> >
>> >     Best,
>> >
>> >     On Sun, Mar 7, 2021 at 3:04 AM Sean Anderson <seanga2 at gmail.com
>> <mailto:seanga2 at gmail.com>> wrote:
>> >
>> >         On 3/6/21 8:38 PM, Jonas Vautherin wrote:
>> >          > Thanks a lot Sean!
>> >          >
>> >          > I tried to enable logging by using the following CONFIG_:
>> >          >
>> >          > ```
>> >          > CONFIG_LOG=y
>> >          > CONFIG_SPL_LOG=y
>> >          > CONFIG_TPL_LOG=y
>> >          > CONFIG_LOG_MAX_LEVEL=5
>> >
>> >         You need to increase this. Log levels are only compiled-in if
>> they are
>> >         less than the max log level.
>> >
>> >          > CONFIG_SPL_LOG_MAX_LEVEL=3
>> >          > CONFIG_TPL_LOG_MAX_LEVEL=3
>> >          > CONFIG_LOG_DEFAULT_LEVEL=7
>> >          > CONFIG_LOG_CONSOLE=y
>> >          > CONFIG_SPL_LOG_CONSOLE=y
>> >          > CONFIG_TPL_LOG_CONSOLE=y
>> >          >
>> >          > CONFIG_CMD_LOG=y
>> >          > ```
>> >          >
>> >          > And I got the "log" function indeed. But it did not have the
>> effect I was hoping for:
>> >          >
>> >          > ```
>> >          > => log level set 7
>> >
>> >         Use the help function ;)
>> >
>> >         The correct syntax is "log level 7"
>> >
>> >         If you use a newer U-Boot (newer than 2021.01) then the output
>> will be
>> >         more verbose. E.g.
>> >
>> >         => log level
>> >         EMERG
>> >         ALERT
>> >         CRIT
>> >         ERR
>> >         WARNING
>> >         NOTICE
>> >         INFO (default)
>> >         DEBUG
>> >
>> >         --Sean
>> >
>> >          > => log level
>> >          > Default log level: 0
>> >          > => usb start
>> >          > starting USB...
>> >          > Bus usb at 47401800: Port not available.
>> >          > ```
>> >          >
>> >          > First, I don't get why it says "Default log level: 0" after
>> I set it (to whatever number, apparently). And second, it does not seem to
>> bring me more output about the usb issue :-/.
>> >          >
>> >          > Am I missing something?
>> >          >
>> >          > Best,
>> >          > Jonas
>> >          >
>> >          > On Sat, Mar 6, 2021 at 3:20 AM Sean Anderson <
>> seanga2 at gmail.com <mailto:seanga2 at gmail.com> <mailto:seanga2 at gmail.com
>> <mailto:seanga2 at gmail.com>>> wrote:
>> >          >
>> >          >     On 3/5/21 7:10 PM, Jonas Vautherin wrote:
>> >          >      > Hello!
>> >          >      >
>> >          >      > I am learning about Fastboot, and I would like to run
>> it from u-boot and
>> >          >      > detect it from my host computer (I have the tools on
>> my host, that's
>> >          >      > working with other devices).
>> >          >      >
>> >          >      > I am using a pocketbeagle and I built an image using
>> Yocto. I can get into
>> >          >      > the u-boot prompt at boot time, and I get the
>> following output:
>> >          >      >
>> >          >      > ```
>> >          >      > Rebooting... reboot: Restarting system
>> >          >      >
>> >          >      > U-Boot SPL 2020.07 (Jul 06 2020 - 19:22:53 +0000)
>> >          >      > Trying to boot from MMC1
>> >          >      >
>> >          >      >
>> >          >      > U-Boot 2020.07 (Jul 06 2020 - 19:22:53 +0000)
>> >          >      >
>> >          >      > CPU  : AM335X-GP rev 2.1
>> >          >      > Model: TI AM335x PocketBeagle
>> >          >      > DRAM:  512 MiB
>> >          >      > WDT:   Started with servicing (60s timeout)
>> >          >      > NAND:  0 MiB
>> >          >      > MMC:   OMAP SD/MMC: 0
>> >          >      > Loading Environment from FAT... *** Warning - bad
>> CRC, using default
>> >          >      > environment
>> >          >      >
>> >          >      > <ethaddr> not set. Validating first E-fuse MAC
>> >          >      > Net:   No ethernet found.
>> >          >      > Hit any key to stop autoboot:  2
>> >          >      > ```
>> >          >      >
>> >          >      > If I hit a key here, I get the u-boot prompt (`=>`)
>> where I find
>> >          >      > "fastboot". The thing is that none of the fastboot
>> commands I run have any
>> >          >      > output:
>> >          >
>> >          >     This is normal. There will be output only when you issue
>> commands.
>> >          >
>> >          >      >
>> >          >      > * fastboot usb 0
>> >          >      > * fastboot usb
>> >          >      > * fastboot udp
>> >          >      >
>> >          >      > Now, fastboot udp is not enabled in my defconfig, but
>> the udp gadget
>> >          >      > support is, and the usb fastboot gadget is enabled,
>> too. From my host, I
>> >          >      > just don't see anything in the `dmesg` output.
>> >          >      >
>> >          >      > Here are a few questions:
>> >          >      >
>> >          >      > * Does fastboot usb go over ethernet? If yes, I guess
>> that the "Net: No
>> >          >      > ethernet found." message is an issue that I need to
>> fix such that a new usb
>> >          >      > network interface is created by my host, but from my
>> tests with this
>> >          >      > proprietary device I own, it does not seem to be
>> enumerated as a network
>> >          >      > interface.
>> >          >
>> >          >     Only udp goes over ethernet (though I suppose you could
>> use a
>> >          >     usb-ethernet gadget/dongle).
>> >          >
>> >          >      > * In readthedocs [1], it mentions that "The
>> CONFIG_USB_GADGET_VENDOR_NUM
>> >          >      > must be one of the numbers supported by the fastboot
>> client." In my setup,
>> >          >      > it is set to 0x0451, and I did not find what is
>> supposed to be supported in
>> >          >      > fastboot.cpp [2]. So from the host, I also tried
>> `fastboot -i 0x0451
>> >          >      > devices`. Is that an issue?
>> >          >
>> >          >     The fastboot client detects devices with two bulk
>> endpoints and the
>> >          >     correct interface (see match_fastboot and
>> filter_usb_device). Generally,
>> >          >     you will only have to specify the vid/pid/serial if you
>> have multiple
>> >          >     devices plugged in at once.
>> >          >
>> >          >      > * I thought that maybe I should start USB, because
>> the output of `usb tree`
>> >          >      > says "USB is stopped. Please issue 'usb start'
>> first.". But running `usb
>> >          >      > start` errors with "Bus usb at 47401800: Port not
>> available.". Is that related
>> >          >      > to fastboot at all, i.e. should I be concerned about
>> that? And how can I
>> >          >      > debug it?
>> >          >
>> >          >     That's probably why your fastboot isn't working :)
>> >          >
>> >          >     You can try debugging it by enabling debug messages. If
>> you want less than
>> >          >     a firehose, you can try setting the default log level to
>> info, and then
>> >          >     setting it to debug before running usb start. See [1]
>> for details.
>> >          >
>> >          >     [1]
>> https://u-boot.readthedocs.io/en/latest/develop/logging.html
>> >          >
>> >          >     --Sean
>> >          >
>> >          >      > Thanks in advance for the help!
>> >          >      > Jonas
>> >          >      >
>> >          >      > [1]:
>> https://u-boot.readthedocs.io/en/latest/android/fastboot.html
>> >          >      > [2]:
>> >          >      >
>> https://android.googlesource.com/platform/system/core/+/master/fastboot/fastboot.cpp
>> >          >      >
>> >          >
>> >
>>
>>


More information about the U-Boot mailing list