[PATCH 3/3] sunxi: H616: Add OrangePi Zero 3 board support

Andre Przywara andre.przywara at arm.com
Sun Nov 26 13:23:42 CET 2023


On Sat, 25 Nov 2023 20:27:05 -0800
Stephen Graf <stephen.graf at gmail.com> wrote:

Hi Stephen,

> I built u-boot with the additional parameter for usb and it works, I think.  There was one message that might be of concern "
> Card did not respond to voltage select! : -110".

This is a normal, though admittedly confusing message if no SD card is
inserted. The code tries to (unconditionally) access the SD card, and
sees that no card is there, the missing respond to the voltage select
command is just the first real proof of this.

> I am not sure of the details of the boot.cmd. The output below came from
> the supplier image on an SD plugged into a USB card reader. The SD slot of the board was empty.
> 
> I was able to install u-boot to the SPI flash memory and there is a warning message from that also: "
> Loading Environment from SPIFlash... jedec_spi_nor flash at 0: unrecognized JEDEC id bytes: 5e, 40, 18
> *** Warning - spi_flash_probe_bus_cs() failed, using default environment"

So for a start there is no environment on the SPI flash yet, so it
wouldn't do anything. But the "unrecognised JEDEC id bytes" message
doesn't sound right. Can you dig into this? Do you have patch 1/3
applied, which tells U-Boot about 0x5e meaning zBIT?

> Thank you for your advice on getting something to boot. None of the Debian installer images were suitable.  Even SID was at 6.1.
> I built the latest Linux 6.6.2 and wrestled with the rootfs before I got it running. I built the tested u-boot with this system,
> as a test of system stability.
> 
> defconfig used + emac patches
> 
> CONFIG_ARM=y
> CONFIG_ARCH_SUNXI=y
> CONFIG_DEFAULT_DEVICE_TREE="sun50i-h618-orangepi-zero3"
> CONFIG_SPL=y
> CONFIG_DRAM_SUN50I_H616_DX_ODT=0x07070707
> CONFIG_DRAM_SUN50I_H616_DX_DRI=0x0e0e0e0e
> CONFIG_DRAM_SUN50I_H616_CA_DRI=0x0e0e
> CONFIG_DRAM_SUN50I_H616_ODT_EN=0xaaaaeeee
> CONFIG_DRAM_SUN50I_H616_TPR6=0x44000000
> CONFIG_DRAM_SUN50I_H616_TPR10=0x402f6663
> CONFIG_DRAM_SUN50I_H616_TPR11=0x24242624
> CONFIG_DRAM_SUN50I_H616_TPR12=0x0f0f100f
> CONFIG_MACH_SUN50I_H616=y
> CONFIG_SUNXI_DRAM_H616_LPDDR4=y
> #
> CONFIG_DRAM_CLK=792
> CONFIG_USB1_VBUS_PIN="PC16"
> #
> CONFIG_R_I2C_ENABLE=y
> CONFIG_SPL_SPI_SUNXI=y
> # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
> CONFIG_SPL_I2C=y
> CONFIG_SPL_SYS_I2C_LEGACY=y
> CONFIG_SYS_I2C_MVTWSI=y
> CONFIG_SYS_I2C_SLAVE=0x7f
> CONFIG_SYS_I2C_SPEED=400000
> CONFIG_SPI_FLASH_ZBIT=y
> CONFIG_PHY_MOTORCOMM=y
> CONFIG_SUN8I_EMAC=y
> CONFIG_AXP313_POWER=y
> CONFIG_SPI=y
> CONFIG_USB_EHCI_HCD=y
> CONFIG_USB_OHCI_HCD=y
> CONFIG_USB_MUSB_GADGET=y
> 
> 
> Console Output:
> 
> U-Boot 2024.01-rc3-00009-g9e53e45292-dirty (Nov 25 2023 - 18:32:16 -0800) Allwinner Technology
> 
> CPU:   Allwinner H616 (SUN50I)
> Model: OrangePi Zero3
> DRAM:  1 GiB
> Core:  57 devices, 25 uclasses, devicetree: separate
> WDT:   Not starting watchdog at 30090a0
> MMC:   mmc at 4020000: 0
> Loading Environment from SPIFlash... jedec_spi_nor flash at 0: unrecognized JEDEC id bytes: 5e, 40, 18
> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
> 
> Loading Environment from FAT... Card did not respond to voltage select! : -110
> ** Bad device specification mmc 0 **
> In:    serial at 5000000
> Out:   serial at 5000000
> Err:   serial at 5000000
> Allwinner mUSB OTG (Peripheral)
> Net:   eth0: ethernet at 5020000using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
> MAC de:ad:be:ef:00:01
> HOST MAC de:ad:be:ef:00:00
> RNDIS ready
> , eth1: usb_ether
> starting USB...
> Bus usb at 5200000: USB EHCI 1.00
> Bus usb at 5200400: USB OHCI 1.0
> scanning bus usb at 5200000 for devices... Device NOT ready
>     Request Sense returned 02 3A 00
> Device NOT ready
>     Request Sense returned 02 3A 00
> Device NOT ready
>     Request Sense returned 02 3A 00
> 2 USB Device(s) found
> scanning bus usb at 5200400 for devices... 1 USB Device(s) found
>         scanning usb for storage devices... 1 Storage Device(s) found
> Hit any key to stop autoboot:  0
> Card did not respond to voltage select! : -110
> 
> Device 0: Vendor: Generic- Rev: 1.00 Prod: SD/MMC
>              Type: Removable Hard Disk
>              Capacity: 15193.5 MB = 14.8 GB (31116288 x 512)
> ... is now current device
> Scanning usb 0:1...
> Found U-Boot script /boot/boot.scr
> 3636 bytes read in 1 ms (3.5 MiB/s)
> ## Executing script at 4fc00000
> U-boot loaded from SD
> Boot script loaded from usb
> 205 bytes read in 1 ms (200.2 KiB/s)
> Failed to load '/boot/dtb/allwinner/sun50i-h618-orangepi-zero3.dtb'
> libfdt fdt_check_header(): FDT_ERR_BADMAGIC
> No FDT memory address configured. Please configure
> the FDT address via "fdt addr <address>" command.
> Aborting!
> 4203 bytes read in 4 ms (1 MiB/s)
> Applying kernel provided DT fixup script (sun50i-h616-fixup.scr)
> ## Executing script at 45000000
> 7088139 bytes read in 325 ms (20.8 MiB/s)
> 9419107 bytes read in 430 ms (20.9 MiB/s)
>     Uncompressing Kernel Image
> Moving Image from 0x40080000 to 0x40200000, end=41800000
> ## Loading init Ramdisk from Legacy Image at 4ff00000 ...
>     Image Name:   uInitrd
>     Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)
>     Data Size:    7088075 Bytes = 6.8 MiB
>     Load Address: 00000000
>     Entry Point:  00000000
>     Verifying Checksum ... OK
> ERROR: Did not find a cmdline Flattened Device Tree

OK, so this is because you don't have the OPi Zero3 DTB on your image.
And this is frankly not needed, because U-Boot carries this very DTB
already.
In general this is some old school boot sequence, with a uImage
wrapped initrd and the DTB loaded from disk. The wrapped initrd is
mostly an small annoyance from a developers point of view, so this is
fine.
But can you tweak the boot script to use "$fdtcontroladdr", instead of
trying load a DTB from "disk"?
So remove (or ignore) the "load .... $fdt_addr_r ..." line, and change
the booti command to use "$fdtcontroladdr" instead of "$fdt_addr_r".
That should be all you need.

Good luck!

Cheers,
Andre
 
> On 2023-11-25 4:23 p.m., Andre Przywara wrote:
> > On Sat, 25 Nov 2023 20:43:12 +0300
> > Mikhail Kalashnikov<iuncuim at gmail.com>  wrote:
> >
> > Hi Mikhail,
> >  
> >> Hi Andre!
> >> Thanks for your patches. I started checking and noticed that USB storage
> >> was not working:
> >>  
> >> => usb reset  
> >> resetting USB...
> >> Bus usb at 5200000: USB EHCI 1.00
> >> Bus usb at 5200400: USB OHCI 1.0
> >> scanning bus usb at 5200000 for devices... 1 USB Device(s) found
> >> scanning bus usb at 5200400 for devices... 1 USB Device(s) found
> >>         scanning usb for storage devices... 0 Storage Device(s) found  
> >> => usb storage  
> >> No storage devices, perhaps not 'usb start'ed..?  
> > Ah, thanks for the report, seems I didn't even test this!
> > So digging around I figured it's working in Linux, and it's the right
> > USB port, but we are missing the VBUS power switch, which is a GPIO
> > controlled regulator. There are pending patches to pick this from the
> > devicetree[1], but we are not there yet, so we need:
> > CONFIG_USB1_VBUS_PIN="PC16"
> > in the defconfig, for now. I will update the file. The same is
> > actually missing from the OrangePi Zero2 defconfig, I will send a patch
> > ASAP.
> >     
> >> Otherwise my OpiZero3 (4GB) board looks working.
> >> Ethernet works with my 10 Mbps usb-dongle.
> >>
> >> sf probe detect spi nor flash:  
> >> => sf probe  
> >> SF: Detected zb25vq128 with page size 256 Bytes, erase size 4 KiB, total
> >> 16 MiB
> >>
> >> Loading the kernel and running the operating system (from microsd) also
> >> without problems.
> >>
> >> Tested-by: Mikhail Kalashnikov<iuncuim at gmail.com>  
> > Great, thanks for the tag!
> >
> > Cheers,
> > Andre
> >  
> >> On 14.11.2023 04:31, Andre Przywara wrote:  
> >>> The OrangePi Zero 3 is a small development board featuring the Allwinner
> >>> H618 SoC, shipping with up to 4GB of DRAM, Gigabit Ethernet, a micro-HDMI
> >>> connector and two USB sockets.
> >>> The board uses LPDDR4 DRAM and an X-Powers AXP313a PMIC, support for
> >>> which was recently added to U-Boot.
> >>>
> >>> Add a defconfig file selecting the right drivers and DRAM options.
> >>> Since the .dts file was synced from the Linux kernel repo already, we
> >>> just need to add one line to the Makefile to actually build the .dtb.
> >>>
> >>> The DRAM parameters were derived from the values found in the BSP DRAM
> >>> drivers on the SPI NOR flash.
> >>>
> >>> Signed-off-by: Andre Przywara<andre.przywara at arm.com>
> >>> ---
> >>>    arch/arm/dts/Makefile            |  1 +
> >>>    board/sunxi/MAINTAINERS          |  5 +++++
> >>>    configs/orangepi_zero3_defconfig | 30 ++++++++++++++++++++++++++++++
> >>>    3 files changed, 36 insertions(+)
> >>>    create mode 100644 configs/orangepi_zero3_defconfig
> >>>
> >>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> >>> index 1be08c5fdc2..5fc888680b3 100644
> >>> --- a/arch/arm/dts/Makefile
> >>> +++ b/arch/arm/dts/Makefile
> >>> @@ -835,6 +835,7 @@ dtb-$(CONFIG_MACH_SUN50I_H6) += \
> >>>    	sun50i-h6-tanix-tx6-mini.dtb
> >>>    dtb-$(CONFIG_MACH_SUN50I_H616) += \
> >>>    	sun50i-h616-orangepi-zero2.dtb \
> >>> +	sun50i-h618-orangepi-zero3.dtb \
> >>>    	sun50i-h616-x96-mate.dtb
> >>>    dtb-$(CONFIG_MACH_SUN50I) += \
> >>>    	sun50i-a64-amarula-relic.dtb \
> >>> diff --git a/board/sunxi/MAINTAINERS b/board/sunxi/MAINTAINERS
> >>> index 00614372119..f556857a391 100644
> >>> --- a/board/sunxi/MAINTAINERS
> >>> +++ b/board/sunxi/MAINTAINERS
> >>> @@ -455,6 +455,11 @@ M:	Jernej Skrabec<jernej.skrabec at siol.net>
> >>>    S:	Maintained
> >>>    F:	configs/orangepi_zero2_defconfig
> >>>    
> >>> +ORANGEPI ZERO 3 BOARD
> >>> +M:	Andre Przywara<andre.przywara at arm.com>
> >>> +S:	Maintained
> >>> +F:	configs/orangepi_zero3_defconfig
> >>> +
> >>>    ORANGEPI PC 2 BOARD
> >>>    M:	Andre Przywara<andre.przywara at arm.com>
> >>>    S:	Maintained
> >>> diff --git a/configs/orangepi_zero3_defconfig b/configs/orangepi_zero3_defconfig
> >>> new file mode 100644
> >>> index 00000000000..e59044f6639
> >>> --- /dev/null
> >>> +++ b/configs/orangepi_zero3_defconfig
> >>> @@ -0,0 +1,30 @@
> >>> +CONFIG_ARM=y
> >>> +CONFIG_ARCH_SUNXI=y
> >>> +CONFIG_DEFAULT_DEVICE_TREE="sun50i-h618-orangepi-zero3"
> >>> +CONFIG_SPL=y
> >>> +CONFIG_DRAM_SUN50I_H616_DX_ODT=0x07070707
> >>> +CONFIG_DRAM_SUN50I_H616_DX_DRI=0x0e0e0e0e
> >>> +CONFIG_DRAM_SUN50I_H616_CA_DRI=0x0e0e
> >>> +CONFIG_DRAM_SUN50I_H616_ODT_EN=0xaaaaeeee
> >>> +CONFIG_DRAM_SUN50I_H616_TPR6=0x44000000
> >>> +CONFIG_DRAM_SUN50I_H616_TPR10=0x402f6663
> >>> +CONFIG_DRAM_SUN50I_H616_TPR11=0x24242624
> >>> +CONFIG_DRAM_SUN50I_H616_TPR12=0x0f0f100f
> >>> +CONFIG_MACH_SUN50I_H616=y
> >>> +CONFIG_SUNXI_DRAM_H616_LPDDR4=y
> >>> +CONFIG_R_I2C_ENABLE=y
> >>> +CONFIG_SPL_SPI_SUNXI=y
> >>> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
> >>> +CONFIG_SPL_I2C=y
> >>> +CONFIG_SPL_SYS_I2C_LEGACY=y
> >>> +CONFIG_SYS_I2C_MVTWSI=y
> >>> +CONFIG_SYS_I2C_SLAVE=0x7f
> >>> +CONFIG_SYS_I2C_SPEED=400000
> >>> +CONFIG_SPI_FLASH_ZBIT=y
> >>> +CONFIG_PHY_MOTORCOMM=y
> >>> +CONFIG_SUN8I_EMAC=y
> >>> +CONFIG_AXP313_POWER=y
> >>> +CONFIG_SPI=y
> >>> +CONFIG_USB_EHCI_HCD=y
> >>> +CONFIG_USB_OHCI_HCD=y
> >>> +CONFIG_USB_MUSB_GADGET=y  



More information about the U-Boot mailing list