Applying DTB Overlays from ATF on RZ/G2

Adam Ford aford173 at gmail.com
Tue Jan 10 14:19:00 CET 2023


On Tue, Jan 10, 2023 at 7:02 AM Marek Vasut <marex at denx.de> wrote:
>
> On 1/7/23 13:01, Adam Ford wrote:
> > On Wed, Jan 4, 2023 at 5:55 PM Marek Vasut <marex at denx.de> wrote:
> >>
> >> On 1/5/23 00:48, Heinrich Schuchardt wrote:
> >>> Am 5. Januar 2023 00:19:36 MEZ schrieb Adam Ford <aford173 at gmail.com>:
> >>>> On Wed, Jan 4, 2023 at 5:15 PM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>>>>
> >>>>> On 1/4/23 22:35, Adam Ford wrote:
> >>>>>> ATF generates a couple memory nodes based on how it's compiled and
> >>>>>> generates a reserved-memory node, and I want to overlay it with the
> >>>>>> device tree so Linux knows about this reserved memory.
> >>>>>>
> >>>>>> When I boot U-Boot, I can read the reserved-memory node:
> >>>>>>
> >>>>>> => fdt addr 0xe631e588
> >>>>>> Working FDT set to e631e588
> >>>>>> => fdt print /reserved-memory
> >>>>>> reserved-memory {
> >>>>>> lossy-decompression at 54000000 {
> >>>>>> renesas,formats = <0x00000000>;
> >>>>>> no-map;
> >>>>>> reg = <0x00000000 0x54000000 0x00000000 0x03000000>;
> >>>>>> compatible = "renesas,lossy-decompression", "shared-dma-pool";
> >>>>>> };
> >>>>>> };
> >>>>>> =>
> >>>>>>
> >>>>>> I attempt to overlay it with the following:
> >>>>>>
> >>>>>> => run loadfdt
> >>>>>> 65932 bytes read in 6 ms (10.5 MiB/s)
> >>>>>> => fdt addr $load_addr
> >>>>>
> >>>>> When actually setting the address you will see a message "Working FDT
> >>>>> set to %lx\n". So I assume $load_addr is empty.
> >>>>>
> >>>>> Did you mean $loadaddr or $fileaddr?
> >>>>
> >>>> Opps, that was a copy-paste error.  Even with that, I still get the
> >>>> failure to overlay:
> >>>>
> >>>
> >>> Did you load a .dtbo file to apply? You cannot apply a devicetree.
> >>>
> >>> Is the fdt that you want to apply the overlay to built with symbols (dtc parameter -@)?
> >>
> >> Note that the fragment passed to U-Boot by upstream ATF is already
> >> automatically merged into the U-Boot control DT (see
> >> board/renesas/rcar-common/common.c ) . U-Boot should pass that on to
> >> Linux automatically.
> >
> > I ran some tests, and it appears the function fdtdec_board_setup is
> > never getting called.  That looks like the code that grabs the blob
> > from ATF.  I intentionally removed the memory nodes from the kernel
> > device tree expecting the memory nodes to get added from ATF, but when
> > I booted it, it promptly hung.  That implied to me that the memory
> > nodes didn't get added from ATF.
> >
> > I added some debug code and noticed that ft_board_setup did not get
> > executed, so I created a call to fdtdec_board_setup from
> > ft_board_setup and my board booted just fine.  I am curious to know if
> > other rcar/rzg2 boards are seeing something similar?  Is calling
> > fdtdec_board_setup from ft_board_setup appropriate?
>
> Note that fdtdec_board_setup() is called very early on when U-Boot
> itself starts up and it is used to patch the fragment passed from ATF
> into U-Boot control DT. The ft_board_setup() is called before booting
> OS, i.e. at much later stage.
>
> Can you maybe summarize what exactly it is that you're trying to pass
> through , and from where to where ?

There is a reserved-memory node generated by ATF and I want to pass
that node to the Linux Kernel, so the memory is reserved, because
accessing the memory will cause Linux to crash.  I wanted to put the
reserved-memory node into the kernel dts file, but Geert asked me to
pass the blob from ATF instead of hard-coding it into the dts.
I am just trying to figure out how to make that happen, because it
appears the memory isn't being reserved.

adam


More information about the U-Boot mailing list