[U-Boot] [PATCH] riscv: ax25-ae350: Pass dtb address to u-boot with a1 register

Auer, Lukas lukas.auer at aisec.fraunhofer.de
Thu Oct 25 11:22:08 UTC 2018


Hi Rick,

On Thu, 2018-10-25 at 11:28 +0800, Rick Chen wrote:
> Bin Meng <bmeng.cn at gmail.com> 於 2018年10月25日 週四 上午11:16寫道:
> > 
> > Hi Rick,
> > 
> > On Thu, Oct 25, 2018 at 11:11 AM Rick Chen <rickchen36 at gmail.com>
> > wrote:
> > > 
> > > Bin Meng <bmeng.cn at gmail.com> 於 2018年10月25日 週四 上午10:33寫道:
> > > > 
> > > > Hi Rick,
> > > > 
> > > > On Thu, Oct 25, 2018 at 9:20 AM Andes <uboot at andestech.com>
> > > > wrote:
> > > > > 
> > > > > From: Rick Chen <rick at andestech.com>
> > > > > 
> > > > > ax25-ae350 use CONFIG_OF_BOARD which allow the board to
> > > > > override the fdt address. And prior_stage_fdt_address offer
> > > > > a temporary memory address to keep the dtb address which was
> > > > > passed from loader(gdb) to u-boot with a1.
> > > > 
> > > > nits: U-Boot
> > > > 
> > > > > 
> > > > > Signed-off-by: Rick Chen <rick at andestech.com>
> > > > > Cc: Greentime Hu <greentime at andestech.com>
> > > > > ---
> > > > >  board/AndesTech/ax25-ae350/ax25-ae350.c | 3 ++-
> > > > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > > > 
> > > > > diff --git a/board/AndesTech/ax25-ae350/ax25-ae350.c
> > > > > b/board/AndesTech/ax25-ae350/ax25-ae350.c
> > > > > index 5f4ca0f..d343453 100644
> > > > > --- a/board/AndesTech/ax25-ae350/ax25-ae350.c
> > > > > +++ b/board/AndesTech/ax25-ae350/ax25-ae350.c
> > > > > @@ -14,6 +14,7 @@
> > > > > 
> > > > >  DECLARE_GLOBAL_DATA_PTR;
> > > > > 
> > > > > +extern phys_addr_t prior_stage_fdt_address;
> > > > >  /*
> > > > >   * Miscellaneous platform dependent initializations
> > > > >   */
> > > > > @@ -66,7 +67,7 @@ ulong board_flash_get_legacy(ulong base,
> > > > > int banknum, flash_info_t *info)
> > > > > 
> > > > >  void *board_fdt_blob_setup(void)
> > > > >  {
> > > > > -       void **ptr = (void *)CONFIG_SYS_SDRAM_BASE;
> > > > > +       void **ptr = (void *)&prior_stage_fdt_address;
> > > > >         if (fdt_magic(*ptr) == FDT_MAGIC)
> > > > >                         return (void *)*ptr;
> > > > > 
> > > > > --
> > > > 
> > > > board_fdt_blob_setup() should be completely removed. Instead
> > > > the
> > > > simple fix should be add CONFIG_OF_PRIOR_STAGE to your board
> > > > defconfig
> > > > files.
> > > > 
> > > 
> > > Hi Bin
> > > 
> > > I have tried to switch from CONFIG_OF_BOARD to
> > > CONFIG_OF_PRIOR_STAGE.
> > > 
> > > But it will lost the function
> > > that dtb will be pre-burned into designated flash location,
> > > when U-Boot was booting from flash.
> > > 
> > 
> > I don't get it. Do you mean on ae350 board, the DTB is pre-flashed
> > on the flash?
> > 
> 
> Yes
> On ae350 board, the DTB is pre-flashed on the flash in booting from
> rom case.
> 
> u-boot boot from ram case:
> CONFIG_OF_PRIOR_STAGE can achieve u-boot boot from ram and dtb was
> passed by loader with a1(0xf0000).
> 
> u-boot boot from rom case:
> If DTB is pre-flashed on the flash 0x800f0000 (This address can be
> dynamically changed)
> But no one assign a1=0x800f000, how can be gd->fdt_blob changed to
> 0x800f000.
> I am wondering about that ?
> 
> 0xf0000 is ram space
> 0x800f0000 is flash rom space
> 
> Rick
> 

If I understood it correctly and looking at the documentation in U-Boot 
you have two boot methods. The ae350 can either boot from the e-bios or
from external SPI ROM. The e-bios loads U-Boot into RAM, starts it, and
passes the build-in device tree to it. If the ae350 boots from SPI ROM,
the software stored in it will be the first thing to run. There is
therefore nothing, which can pass the built-in device tree to software.
Is this correct?

Would it makes sense to use CONFIG_OF_PRIOR_STAGE and boot using the 
e-bios by default? The SPI ROM could then be documented in the README
with instructions on how to use the built-in device tree.
Another option would be to only use the device tree from U-Boot.

Thanks,
Lukas


More information about the U-Boot mailing list