Trouble running u-boot and SPL on Digilent Genesys ZU

Michal Simek monstr at monstr.eu
Tue Jun 22 15:20:35 CEST 2021


Hi,

On 6/22/21 2:43 PM, Alvaro Gamez wrote:
> Hi Michal,
> 
> El mar, 22 jun 2021 a las 13:16, Michal Simek (<monstr at monstr.eu>) escribió:
>>
>>
>>
>> On 6/22/21 12:42 PM, Alvaro Gamez wrote:
>>> Hi again
>>>
>>> El jue, 17 jun 2021 a las 15:07, Alvaro Gamez
>>> (<alvaro.gamez at hazent.com>) escribió:
>>>>
>>>> Hi!
>>>>
>>>> I'm trying to use buildroot to generate a system for the Digilent
>>>> Genesys ZU board, which is based on the zynqmp SOC.
>>>> I'm having trouble getting it to boot, and I was hoping I could get
>>>> some guidance on what to do next. My issue is basically that
>>>> nothing seems to work, since I don't have an output at all on the
>>>> serial console.
>>>>
>>>> I'm using u-boot version 2021.04, which has the latest patches from
>>>> Luca Ceresoli that should allow booting completely via u-boot and
>>>> u-boot SPL, without using Xilinx' FSBL. My method of cross compiling
>>>> is via buildroot version 2021.05, which eases the process of gathering
>>>> also Arm Trusted Firmware, building the linux kernel and filesystem, etc.
>>>>
>>>> Out of Digilent's reference design, Vivado/Vitis generates for me
>>>> configuration object pm_cfg_obj.c and PSU init file psu_init_gpl.c,
>>>> which shall be fed to u-boot. Alongside these files, I use PMU firmware
>>>> built by Luca at
>>>> https://github.com/lucaceresoli/zynqmp-pmufw-binaries/raw/master/bin/pmufw-v2018.3.bin
>>>>
>>>> To provide Arm Trusted Firmware, I'm passing buildroot the same
>>>> configuration as already exists on configs/zynqmp_zcu106_defconfig
>>>> which is version 1.5 of :
>>>> https://github.com/ARM-software/arm-trusted-firmware.git
>>>> but I don't think my board has reached the state of needing this firmware yet,
>>>> since I don't get any SPL serial console output.
>>>>
>>>> The device tree I'm using is extracted from Digilent's kernel image,
>>>> and matches perfectly with the one generated by petalinux for this
>>>> Digilent's Vivado design, so it should be correct
>>>>
>>>> Provided image by Digilent follows the Xilinx' booting workflow, so
>>>> only a BOOT.BIN file is on the sdcard which includes xilinx' FSBL, PMU
>>>> firmware with configuration object, u-boot, kernel, device tree, etc,
>>>> so at least I know that the board is fine as this firmware works
>>>> flawlessly. I also was able to load the kernel and device tree as
>>>> built by buildroot over this instance of u-boot, so at least I can
>>>> load my own kernel, but I can't progress deeper than that.
>>>
>>> I've been able to load u-boot proper via Xilinx FSBL, so it seems that my u-boot
>>> configuration is not very far from what should be, but I'm still
>>> unable to see any
>>> reaction when trying to load SPL. I'm attaching my u-boot configuration, just
>>> in case any of you can provide any guidance on this.
>>>
>>> CONFIG_ARM=y
>>> CONFIG_ARCH_ZYNQMP=y
>>> CONFIG_SYS_TEXT_BASE=0x8000000
>>> CONFIG_SYS_MALLOC_F_LEN=0x8000
>>> CONFIG_ENV_OFFSET=0x100000
>>> CONFIG_ENV_SECT_SIZE=0x20000
>>> CONFIG_DM_GPIO=y
>>> CONFIG_SPL=y
>>> CONFIG_DEBUG_UART_BASE=0xFF000000
>>> CONFIG_DEBUG_UART_CLOCK=100000000
>>> CONFIG_XILINX_PS_INIT_FILE="/tmp/psu_init_gpl.c"
>>> CONFIG_PMUFW_INIT_FILE="/tmp/pmufw-v2018.3.bin"
>>> CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE="/tmp/pm_cfg_obj.bin"
>>> CONFIG_ZYNQMP_USB=y
>>> CONFIG_DEFAULT_DEVICE_TREE="zynqmp-zcu102-rev1.0"
>>
>> please make sure that default DT points to DT file for your board.
> 
> I am using my own DT file, orig.dts, which is copied to arch/arm/dts and
> its Makefile modified to include it as a target of ZYNQMP.
> 
> Does it matter what's here in that case? In any case, I've just
> changed it to my DT,
> but nothing different happens.
> 
>>
>>
>>> CONFIG_DEBUG_UART=y
>>> CONFIG_DISTRO_DEFAULTS=y
>>> CONFIG_FIT=y
>>> CONFIG_FIT_VERBOSE=y
>>> CONFIG_LOG=y
>>> # CONFIG_DISPLAY_CPUINFO is not set
>>> CONFIG_BOARD_EARLY_INIT_R=y
>>> CONFIG_CMD_BOOTMENU=y
>>> CONFIG_CMD_THOR_DOWNLOAD=y
>>> CONFIG_CMD_MEMTEST=y
>>> CONFIG_SYS_ALT_MEMTEST=y
>>> CONFIG_CMD_CLK=y
>>> CONFIG_CMD_DFU=y
>>> CONFIG_CMD_FPGA_LOADBP=y
>>> CONFIG_CMD_FPGA_LOADP=y
>>> CONFIG_CMD_FPGA_LOAD_SECURE=y
>>> CONFIG_CMD_GPIO=y
>>> CONFIG_CMD_GPT=y
>>> CONFIG_CMD_I2C=y
>>> CONFIG_CMD_MMC=y
>>> CONFIG_CMD_SDRAM=y
>>> CONFIG_CMD_SPI=y
>>> CONFIG_CMD_USB=y
>>> CONFIG_CMD_TFTPPUT=y
>>> CONFIG_CMD_TIME=y
>>> CONFIG_CMD_TIMER=y
>>> CONFIG_CMD_EXT4_WRITE=y
>>> CONFIG_CMD_UBI=y
>>> CONFIG_SPL_OF_CONTROL=y
>>> CONFIG_OF_EMBED=y
>>> CONFIG_ENV_IS_NOWHERE=y
>>> CONFIG_ENV_IS_IN_FAT=y
>>> CONFIG_ENV_IS_IN_SPI_FLASH=y
>>> CONFIG_NET_RANDOM_ETHADDR=y
>>> CONFIG_CLK_ZYNQMP=y
>>> CONFIG_DFU_MMC=y
>>> CONFIG_DFU_RAM=y
>>> CONFIG_USB_FUNCTION_FASTBOOT=y
>>> CONFIG_FASTBOOT_FLASH=y
>>> CONFIG_FASTBOOT_FLASH_MMC_DEV=0
>>> CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
>>> CONFIG_FPGA_XILINX=y
>>> CONFIG_FPGA_ZYNQMPPL=y
>>> CONFIG_XILINX_GPIO=y
>>> CONFIG_DM_I2C=y
>>> CONFIG_SYS_I2C_CADENCE=y
>>> CONFIG_I2C_MUX=y
>>> CONFIG_I2C_MUX_PCA954x=y
>>> CONFIG_LED=y
>>> CONFIG_LED_GPIO=y
>>> CONFIG_MISC=y
>>> CONFIG_MMC_IO_VOLTAGE=y
>>> CONFIG_MMC_UHS_SUPPORT=y
>>> CONFIG_MMC_SDHCI=y
>>> CONFIG_MMC_SDHCI_ZYNQ=y
>>> CONFIG_MTD=y
>>> CONFIG_SPI_FLASH_BAR=y
>>> CONFIG_SPI_FLASH_ISSI=y
>>> CONFIG_SPI_FLASH_MACRONIX=y
>>> CONFIG_SPI_FLASH_SPANSION=y
>>> CONFIG_SPI_FLASH_STMICRO=y
>>> CONFIG_SPI_FLASH_WINBOND=y
>>> # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
>>> CONFIG_MTD_UBI_BEB_LIMIT=0
>>> CONFIG_PHY_MARVELL=y
>>> CONFIG_PHY_REALTEK=y
>>> CONFIG_PHY_TI=y
>>> CONFIG_PHY_VITESSE=y
>>> CONFIG_PHY_FIXED=y
>>> CONFIG_PHY_GIGE=y
>>> CONFIG_MII=y
>>> CONFIG_ZYNQ_GEM=y
>>> CONFIG_DEBUG_UART_ANNOUNCE=y
>>> CONFIG_ZYNQ_SERIAL=y
>>> CONFIG_SPI=y
>>> CONFIG_ZYNQMP_GQSPI=y
>>> CONFIG_USB=y
>>> CONFIG_USB_XHCI_HCD=y
>>> CONFIG_USB_XHCI_DWC3=y
>>> CONFIG_USB_DWC3=y
>>> CONFIG_USB_DWC3_GENERIC=y
>>> CONFIG_USB_ULPI_VIEWPORT=y
>>> CONFIG_USB_ULPI=y
>>> CONFIG_USB_GADGET=y
>>> CONFIG_USB_GADGET_MANUFACTURER="Xilinx"
>>> CONFIG_USB_GADGET_VENDOR_NUM=0x03FD
>>> CONFIG_USB_GADGET_PRODUCT_NUM=0x0300
>>> CONFIG_USB_FUNCTION_THOR=y
>>> CONFIG_PANIC_HANG=y
>>> # CONFIG_EFI_LOADER is not set
>>
>> And you should normally just add psu_init_gpl.c/h to
>> board/xilinx/zynqmp/<dt_name>/* and run export DEVICE_TREE=<dt_name> and
>> add dt file to arch/arm/dts + wiring in Makefile.
> 
> I should have mentioned that I am building uboot via Buildroot, so buildroot
> is taking care of this, by compiling my own dts, which I did in fact
> had to manually add
> under dtb-$(CONFIG_ARCH_ZYNQMP) += \ (as explained above too).
> 
> The same happens with psu_init_gpl.* files, which are managed by Buildroot too,
> so I can be relatively sure that these steps are correct. The fact
> that uboot proper
> boots also seems to confirm this.
> 
>> The rest should be done automatically.
>> If you export link to BL31 (atf)
>> export BL31=/tmp/bl31.bin
> 
> Buildroot already manages that for me too, thankfully
> 
>> after make you will get spl/boot.bin and u-boot.itb. And just copy them
>> to SD card and boot from it. If you use different boot medium just check
>> that addresses which u-boot SPL is looking for.
> 
> Ah, things are different here. I am using u-boot.elf file. Trying to
> compile itb results in the following error:
> 
>   HOSTCC  scripts/basic/fixdep
>   HOSTCC  scripts/kconfig/conf.o
>   HOSTCC  scripts/kconfig/zconf.tab.o
>   HOSTLD  scripts/kconfig/conf
> scripts/kconfig/conf  --syncconfig Kconfig
>   GEN     include/autoconf.mk.dep
>   CFG     u-boot.cfg
>   CFG     spl/u-boot.cfg
>   GEN     include/autoconf.mk
>   GEN     spl/include/autoconf.mk
> ===================== WARNING ======================
> CONFIG_OF_EMBED is enabled. This option should only
> be used for debugging purposes. Please use

I would recommend you to ignore buildroot configurations. I don't think
anybody is keeping it up2date. Definitely not Xilinx that's why couple
of issues can come from there. Just simply use toolchain and build
things directly from u-boot source code.

Thanks,
Michal


More information about the U-Boot mailing list