Jump to content

RK3318/28 All USB-OTG Bootrom -> U-Boot -> kernel boot hang issue


Recommended Posts

Posted

Hi team,

 

This is not exactly Armbian related, however I hope to find some help here, also it can be useful for someone else in custom board development (my case).

 

For testing I have Olimex RK3328-SOM-EVB and RK3318 TV box boards. They both behave the same way.

 

As summary I'm trying to boot Linux using the Bootrom and USB OTG only, in other words without any external boot NVM attached.

To archive this I build U-Boot SPL (u-boot-spl.bin), which support SDP protocol via USB OTG. For SDP file transfer I'm using imx_usb tool.

 

The binaries used in the process are:

  • rk3328_uboot_v1.19.250.bin - consists of u-boot-tpl.bin and u-boot-spl.bin created with boot_merger tool.
  • u-boot.itb - FIT image (ATF, u-boot.bin and dtb), mainline U-Boot v2023.10
  • kernel.itb - FIT image (Image.gz and dtb), mainline kernel v6.1

 

I also prepared a proper sdcard image, from above binaries and wrote it to an SD card.

My test setup consists of two booting paths, note the binaries in both are the same:

 

With boot path 1, u-boot-tpl, u-boot-spl loaded via USB OTG:

  1. RK3328 in Mask ROM mode, SD card removed
  2. rkdeveloptool db rk3328_uboot_v1.19.250.bin
  3. insert SD card
  4. imx_usb - u-boot.itb
  5. boot kernel from U-boot prompt:
setenv bootargs root=/dev/mmcblk1p2 console=ttyS2,1500000 earlycon ro rootwait; mmc dev 1; load mmc 1 0x800800 kernel.itb; bootm 0x800800

 

With boot path 2, u-boot-tpl, u-boot-spl loaded from SD card:

  1. insert SD card, power on (or reset) the board
  2. imx_usb - u-boot.itb
  3. boot kernel from U-boot prompt:
setenv bootargs root=/dev/mmcblk1p2 console=ttyS2,1500000 earlycon ro rootwait; mmc dev 1; load mmc 1 0x800800 kernel.itb; bootm 0x800800


The overall description of two boot paths is as follow:

boot path 1: rk3328_uboot_v1.19.250.bin (bootrom via OTG)-+
                                                          +- -> uboot.itb (imx_usb) -> kernel.itb (from SD card)
boot path 2: rk3328_uboot_v1.19.250.bin (bootrom via SD) -+


The issues I have:

When the SoC is booted through boot path 1 the kernel hangs soon after starting
 

...
[    0.016620] smp: Bringing up secondary CPUs ...

 

If boot path 2 is used - The kernel boots and everything works as expected.

 

The Bootrom in RK3318/28 first tries eMMC, SPI NOR, SPI NAND and SD card, if those boot devices failed then USB OTG is used for booting.

 

Since the only difference between two boot paths is the way the TPL/SPL is loaded from the Bootrom - USB OTG or SD card, the only logical explanation I can think of is that there is some "leftover" in SoC state after OTG boot, which causes the kernel to hang.

 

Does anyone have any idea how I can narrow down and eventually find the cause for this issue?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines