Bug: qemu_arm64: Cannot access the second flash bank

Matthias Brugger mbrugger at suse.com
Thu Jan 9 15:57:31 CET 2020


[adding Stefan as the maintainer of drivers/mtd/cfi_*]

On 09/01/2020 14:11, Robin Randhawa wrote:
> Hi Matthias.
> 
> On Thu, 2020-01-09 at 12:12 +0100, Matthias Brugger wrote:
> 
> [...]
> 
>> Can you pinpoint me to where I can find the DTS used by U-boot.
> 
> As per my understanding the DTB for this virtual platform is generated
> by qemu and handed to u-boot.
> 
> I dumped the DTB to the host filesystem using GDB and 'dump mem' then
> dtc'd it to get the DTS. 

Site note, I think you can do that in U-Boot like this:
fdt addr <address-of-your-dtb>
fdt print

> 
> It's at:
> https://pastebin.ubuntu.com/p/2KzPKdxddx/
> 

Ok, what I found so far:
in hw/arm/virt.c virt_flash_fdt() it creates the reg property like this [0]:
qemu_fdt_setprop_sized_cells(vms->fdt, nodename, "reg",
          2, flashbase, 2, flashsize,
          2, flashbase + flashsize, 2, flashsize);

Which creates the flash node we see in the dts you shared:
reg = <0x0 0x0 0x0 0x4000000 0x0 0x4000000 0x0 0x4000000>;

Which is:
Bank1: Flashbase 0x0 0x0         Flashsize 0x0 0x4000000
Bank2: Flashbase 0x0 0x4000000   Flashsize 0x0 0x4000000

The property expects size-cells to be two, but U-Boot will use one cell if no
size-cells are defined in the device node (which is not the case) and therefor
will see

Bank1: Flashbase 0x0 0x0         Flashsize 0x4000000
Bank2: Flashbase 0x4000000 0x0   Flashsize 0x4000000

Which maches with the flinfo you mentioned.

Now the question is if this is a problem of U-Boots implementation of cfi_flash,
which expects size-cells to be present in the flash node as it otherwise assumes
one [1]. Or if this is a problem of qemu which creates a device tree specifying
the size-cells only in the parent node.

Unfortunately the device tree specification as I understand it, is not clear [2]
on this.

Peter, Stefan any thoughts?

Regards,
Matthias

[0]
https://git.qemu.org/?p=qemu.git;a=blob;f=hw/arm/virt.c;h=39ab5f47e0bdc33b9bcb6320fdc10d35396579b1;hb=HEAD#l991
[1] https://gitlab.denx.de/u-boot/u-boot/blob/master/drivers/mtd/cfi_flash.c#L2472
[2]
https://github.com/devicetree-org/devicetree-specification/blob/master/source/devicetree-basics.rst#address-cells-and-size-cells

> 
>> I tried to run that myself but wasn't able to see any output. Which
>> U-Boot
>> config do you use? rpi_3_defconfig?
> 
> I hit this problem for the qemu_arm64 u-boot platform target for which
> I used qemu_arm64_defconfig [1].
> 
> Let me know if you need more info.
> 
> Cheers,
> Robin
> 
> [1]: https://github.com/u-boot/u-boot/blob/master/configs/qemu_arm64_defconfig
> 
> 
> 


More information about the U-Boot mailing list