[PATCH v2] Porting barebox to a new SoC

Lior Weintraub liorw at pliops.com
Tue Jun 13 05:39:06 PDT 2023


Hi Ahmad,

As usual, your comments are spot on :-)

After fixing the DT, devinfo command shows correct flash node:
   `-- 20000000.flash at 0.of
      `-- mtdrom0
         `-- 0x00000000-0x0fffffff (   256 MiB): /dev/mtdrom0
         `-- mtdrom0.kernel
            `-- 0x00000000-0x00ff7fff (    16 MiB): /dev/mtdrom0.kernel
         `-- mtdrom0.oftree
            `-- 0x00000000-0x00007fff (    32 KiB): /dev/mtdrom0.oftree
         `-- mtdrom0.rootfs
            `-- 0x00000000-0x007fffff (     8 MiB): /dev/mtdrom0.rootfs

As can be seen above, we chose to map this "flash" node on DRAM address 0x20000000 (offset 512MB).
The BL1 code correctly copy the 3 artifacts into those location (verified the content via "md -l -s /dev/mtdrom0.kernel").
Running "drvinfo" shows:
mtdram
        20000000.flash at 0.of

Now when I try to run "bootm -o /dev/mtdrom0.oftree -r /dev/mtdrom0.rootfs /dev/mtdrom0.kernel" I am getting this error:

barebox:/ bootm -o /dev/mtdrom0.oftree -r /dev/mtdrom0.rootfs /dev/mtdrom0.kernel
getopt: optindex: 1 nonopts: 0 optind: 1
getopt: optindex: 1 nonopts: 0 optind: 3
getopt: optindex: 1 nonopts: 0 optind: 5
mtdrom0.kernel: read ofs: 0x00000000 count: 0x00001000

Loading ARM aarch64 Linux image '/dev/mtdrom0.kernel'
header 00000000: 4d 5a 40 fa 3f 1a 23 14 00 00 00 00 00 00 00 00  MZ at .?.#.........
header 00000010: 00 00 b3 00 00 00 00 00 0a 00 00 00 00 00 00 00  ................
header 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
header 00000030: 00 00 00 00 00 00 00 00 41 52 4d 64 40 00 00 00  ........ARMd at ...
header 00000040: 50 45 00 00 64 aa 02 00 00 00 00 00 00 00 00 00  PE..d...........
booti: Kernel to be loaded to 8000000+b30000
__request_region ok: 0x08000000:0x0801ffff flags=0x200
mtdrom0.kernel: read ofs: 0x00000000 count: 0x00020000
__request_region ok: 0x08000000:0x0803ffff flags=0x200
mtdrom0.kernel: read ofs: 0x00020000 count: 0x00020000
.
.
mtdrom0.kernel: read ofs: 0x00fe0000 count: 0x00018000
__request_region ok: 0x08000000:0x08ff7fff flags=0x200
mtdrom0.rootfs: read ofs: 0x00000000 count: 0x00000800
__request_region: 0x08b30000:0x08b4ffff (image) conflicts with 0x08000000:0x08ff7fff (image)
unable to request SDRAM 0x08b30000-0x08b4ffff
handler failed with: Out of memory

Appreciate your advice,
Cheers,
Lior. 


> -----Original Message-----
> From: Ahmad Fatoum <a.fatoum at pengutronix.de>
> Sent: Monday, June 12, 2023 6:08 PM
> To: Lior Weintraub <liorw at pliops.com>; Ahmad Fatoum <ahmad at a3f.at>;
> barebox at lists.infradead.org
> Subject: Re: [PATCH v2] Porting barebox to a new SoC
> 
> CAUTION: External Sender
> 
> Hi,
> 
> On 12.06.23 16:59, Lior Weintraub wrote:
> > Hello Ahmad,
> >
> > Just for simple simulations we make the ROM size 192MB so it can include all
> needed artifacts.
> 
> I am not convinced that this is much of a simplification over having
> your Qemu machine provide cfi-flash.
> 
> > When we get this simple system to work we will move the relevant parts  to
> BL2.
> 
> Ok.
> 
> > DRAM is also simulated now as SRAM so we are not worried about
> initializations.
> >
> > So if I understand correctly, we can decide that address 0x10000000 will be
> reserved for "flash" and add the following node:
> > flash at 0 {
> 
> flash at 10000000, but that's just for informational purposes.
> 
> >     compatible = "mtd-rom";
> >     probe-type = "map_rom";
> >     reg = <0x10000000 0x10000000>;
> >     bank-width = <4>;
> >     device-width = <1>;
> >
> >     #address-cells = <1>;
> >     #size-cells = <1>;
> >     kernel at 0 {
> >         label = "kernel";
> >         reg = <0x0 0x01000000>;
> >     };
> >     rootfs at 1000000 {
> >         label = "rootfs";
> >         reg = <0x01000000 0x00800000>;
> >     };
> > };
> >
> > When I use this node on our DT I see the following devinfo:
> > barebox:/ devinfo
> > `-- global
> > `-- nv
> > `-- platform
> >    `-- machine
> >    `-- psci.of
> >    `-- 1000000010000000.flash at 0.of
> 
> As you can see the address is wrong. That's because you have
> #address-cells = <2>;
> #size-cells = <2>;
> 
> Yet, you wrote reg as if it was <1>/<1>. Change it to
> 
>   reg = <0x0 0x10000000 0x0 0x10000000>;
> 
> Remember all device tree integers are 32-bit big endian.
> 
> >    `-- soc.of
> >       `-- c000000000.sram at c000000000.of
> >       `-- soc:pmu.of
> >       `-- soc:timer.of
> >       `-- e000000000.interrupt-controller at E000000000.of
> >    `-- mem0
> >       `-- 0x00000000-0x0fffffff (   256 MiB): /dev/ram0
> >    `-- mem1
> >       `-- 0x00000000-0xffffffffffffffff (   0 Bytes): /dev/mem
> > `-- amba
> >    `-- d000307000.serial at d000307000.of
> >       `-- cs0
> >          `-- 0x00000000-0xffffffffffffffff (   0 Bytes): /dev/cs0
> > `-- spi
> > `-- fs
> >    `-- ramfs0
> >    `-- devfs0
> >    `-- pstore0
> >
> > Not sure how to proceed from here...
> 
> Type drvinfo command to see what drivers are bound to what devices.
> If you see no driver bound to your flash device, then maybe you need
> to enable the correct driver, that would be CONFIG_MTD_MTDRAM (which
> handles both read-only and read-write memory mapped MTD).
> 
> Cheers,
> Ahmad
> 
> > Cheers,
> > Lior.
> >
> >> -----Original Message-----
> >> From: Ahmad Fatoum <a.fatoum at pengutronix.de>
> >> Sent: Monday, June 12, 2023 3:29 PM
> >> To: Lior Weintraub <liorw at pliops.com>; Ahmad Fatoum <ahmad at a3f.at>;
> >> barebox at lists.infradead.org
> >> Subject: Re: [PATCH v2] Porting barebox to a new SoC
> >>
> >> CAUTION: External Sender
> >>
> >> Hello Lior,
> >>
> >> On 12.06.23 11:27, Lior Weintraub wrote:
> >>> Hi Ahmad,
> >>>
> >>> Regarding the rootfs and Linux run question:
> >>> Our board doesn't include eMMC\SD card.
> >>> We only have our NOR Flash to store the binaries and our BL1 code will
> make
> >> sure to copy those blobs into DRAM.
> >>
> >> How could BL1 copy artifacts in DRAM when BL2 first needs to set up
> DRAM?
> >>
> >>> The use of QEMU needs to be as simple as possible so no hidden virtio
> >> drivers and such because we would like to simulate the real HW flow.
> >>
> >> cfi-flash is just memory-mapped flash, which is the next simplest thing
> >> after BL1 copies stuff into (limited-to-4M) on-chip SRAM.
> >>
> >>> Our DTS file now includes the GIC, timer and arm,psci-1.0.
> >>> We have an initial build of Linux kernel Image (using buildroot) and a
> >> rootfs.cpio.xz.
> >>> I assume we can somehow reserve a portion of the DRAM to store those
> >> binaries and let barebox boot this Linux.
> >>
> >> You can make this work, but this is not how your actual system will
> >> look like and trying to make this work is harder than it needs to be.
> >>
> >> Just add a cfi-flash that corresponds to the Linux/rootfs flash in
> >> your actual system, then boot with bootm (type help bootm for info
> >> on how to use it). You don't need to hardcode the load addresses,
> >> barebox will determine them automatically.
> >>
> >>> Can you please advise how to make it work?
> >>
> >> For completion's sake, if you have 64M of RAM that's preloaded with
> >> boot images:
> >>
> >>   - Remove the 64M from the barebox /memory node. You can use a
> different
> >>     DT for kernel, but if you have memory that barebox shouldn't override,
> >>     you need to tell it that.
> >>
> >>   - Add a mtd-rom node that describes these 64M that you have. You can
> >>     add partitions for the region used for kernel and oftree
> >>
> >>   - boot with bootm -o /dev/mtdrom0.oftree -r /dev/mtdrom0.initrd \
> >>     /dev/mtdrom0.kernel
> >>
> >> That's admittedly cumbersome, but necessary, so barebox knows what
> >> memory
> >> it may use for itself and what memory may be used for boot.
> >>
> >> Correct solution is to use cfi-flash or similar.
> >>
> >> Cheers,
> >> Ahmad
> >> --
> >> Pengutronix e.K.                           |                             |
> >> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> >> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> >> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> >
> 
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list