Hi Michal,
Thanks for your script, I tried it, it can extract the PMU config object
from the FSBL generated by Vitis, but the SD card I prepare this way
still doesn't boot.
It does one thing differently than before, though: the line
### ERROR ### Please RESET the board ###
appears EVERY time, not just occasionally.
Any ideas what I'm doing wrong?
Cheers,
András
On 24/04/2020 14:14, Michal Simek wrote:
Hi,
On 23. 04. 20 11:02, Major A wrote:
Hi Michal,
I've had to take a break because, as it turned out, my ZCU102 was
defective. Now that I have a working one, I can go on with my
frustrating quest for a bootable image.
So now that the patches to u-boot for the ZCU102 Rev. 1.1 are in git
master, I started again from scratch, building ATF, PMUFW with patch and
config object, and u-boot.
Once the builds finish, I place the files
spl/boot.bin
and
u-boot.itb
on the SD card and try to boot. Sadly, as before, the only result I get
on the first UART channel is a line
Debug uart enabled
sometimes followed by
### ERROR ### Please RESET the board ###
but nothing else.
My suspicion is that the PMUFW or its configuration object isn't right.
I use Luca's code from here to build both:
https://github.com/lucaceresoli/zynqmp-pmufw-builder.git
I also found an issue here:
https://forums.xilinx.com/t5/ACAP-and-SoC-Boot-and/Booting-ZCU-102-from-SD-Card/td-p/926649
It appears that there are at least two incompatible subrevisions of the
board, both labeled Rev. 1.1. Could it be that the current PMUFW (or
whatever) just won't work with the current revision?
How do I figure out what the h*** is going on?
That boards should have just different DDR memory because origin was EOL.
Take a look at this mainline commit.
commit 47cc45a91ccc86c718fef7e8a00188e1047cf3dd
arm64: zynqmp Add support for zcu102 rev1.1
You need to also add pmu.bin and pmu_obj.bin
CONFIG_PMUFW_INIT_FILE="pmu.bin"
CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE="pmu_obj.bin"
pmu.bin is just binary from pmu.elf which you can take from petalinux or
build it yourself.
pmu_obj.bin based on Luca's way. I personally is taking it from
petalinux fsbl.
I didn't try it for a while but this was sort of latest version.
$ cat extract-pmufw
#!/bin/bash
# Written by Michal Simek
FSBL=fsbl
PMCFG=pmu_obj.bin
PM_END=`aarch64-linux-gnu-objdump -D ${FSBL}.elf | sed -n
'/<XPm_ConfigObject>:/,/^$/p' | tail -n 2 | head -n 1 | cut -c 5-12 |
awk '{printf ("0x%s",$1)}'`
PM_START=`aarch64-linux-gnu-objdump -D ${FSBL}.elf | sed -n
'/<XPm_ConfigObject>:/,/^$/p' | head -n 1 | awk '{printf ("0x%s",$1)}'`
FSBL_START=`aarch64-linux-gnu-readelf -a ${FSBL}.elf | grep "Entry point
address" | awk '{print $4}'`
PM_OBJECT_START=`echo $((${PM_START} - ${FSBL_START}))`
PM_OBJECT_SIZE=`echo $((${PM_END} - ${PM_START}))`
PM_OBJECT_SIZE=`echo $((${PM_OBJECT_SIZE} + 4))`
echo "FSBL starting address ${FSBL_START}"
echo "FSBL object addresses ${PM_START} ${PM_END}"
echo "OBJECT start ${PM_OBJECT_START} size ${PM_OBJECT_SIZE}"
aarch64-linux-gnu-objcopy -O binary ${FSBL}.elf ${FSBL}.bin
# Extracting config object
dd if=${FSBL}.bin of=${PMCFG} bs=1 skip=${PM_OBJECT_START}
count=${PM_OBJECT_SIZE} > /dev/null 2>&1
And then simply build it like this.
export DEVICE_TREE=zynqmp-zcu102-rev1.1
make xilinx_zynqmp_virt_defconfig
make -j8
If you want to have ATF just copy bl31.bin to u-boot root ro use BL31
variable to generate u-boot.itb with it.
And that should be it.
Thanks,
Michal