diff mbox series

[PATCH/RFC] ARM: dts: kzm9g: Extend DTS with hints on how to build

Message ID 161632638364.9010.14149594685878279298.sendpatchset@octo (mailing list archive)
State RFC
Delegated to: Geert Uytterhoeven
Headers show
Series [PATCH/RFC] ARM: dts: kzm9g: Extend DTS with hints on how to build | expand

Commit Message

Magnus Damm March 21, 2021, 11:33 a.m. UTC
From: Magnus Damm <damm+renesas@opensource.se>

Include hints in the DTS for KZM9G on how to build a kernel that may be booted
using the old on-board boot loader. Special handling includes:
 - The DTB needs to be appended to the zImage before generating the uImage
 - LOADADDR needs to be set to 0x48008000 to be able to generate an uImage
 - CONFIG_ATAGS=n is needed for the board to boot

Perhaps there is a better place where this kind of information should be
placed? Many years ago the LOADADDR information used to be part of the kernel
makefiles (and make uImage just worked out of the box) but when going DTS
and zImage this seems to have been dropped. So these days special care is
needed to build a uImage file which is required by the boot loader.

Not-Yet-Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
---

 arch/arm/boot/dts/sh73a0-kzm9g.dts |   19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

Comments

Geert Uytterhoeven March 21, 2021, 2:03 p.m. UTC | #1
Hi Magnus,

On Sun, Mar 21, 2021 at 1:06 PM Magnus Damm <damm@opensource.se> wrote:
> From: Magnus Damm <damm+renesas@opensource.se>
> Include hints in the DTS for KZM9G on how to build a kernel that may be booted
> using the old on-board boot loader. Special handling includes:
>  - The DTB needs to be appended to the zImage before generating the uImage
>  - LOADADDR needs to be set to 0x48008000 to be able to generate an uImage
>  - CONFIG_ATAGS=n is needed for the board to boot
>
> Perhaps there is a better place where this kind of information should be
> placed? Many years ago the LOADADDR information used to be part of the kernel
> makefiles (and make uImage just worked out of the box) but when going DTS
> and zImage this seems to have been dropped. So these days special care is
> needed to build a uImage file which is required by the boot loader.
>
> Not-Yet-Signed-off-by: Magnus Damm <damm+renesas@opensource.se>

Thanks for your patch!

> --- 0001/arch/arm/boot/dts/sh73a0-kzm9g.dts
> +++ work/arch/arm/boot/dts/sh73a0-kzm9g.dts     2021-03-21 18:10:53.515741849 +0900
> @@ -2,9 +2,24 @@
>  /*
>   * Device Tree Source for the KZM-A9-GT board
>   *
> - * Copyright (C) 2012 Horms Solutions Ltd.
> + * The KZM9G board comes with on-board out-of-tree U-Boot from 2012 with:
> + *  uImage support but without zImage support

Funny, mine (which I never upgraded) has:

    U-Boot 2013.01.-rc1 (Nov 15 2012 - 11:13:00)

and does boot zImage, with appended DTB.

> + *  one way or the other busted ATAGs
> + *
> + * Generate an uImage at the correct load address with apppended DTB like this:

appended

> + *  make ARCH=arm CROSS_COMPILE=_ uImage LOADADDR=0x48008000
> + *  rm arch/arm/boot/zImage
> + *  make ARCH=arm CROSS_COMPILE=_ dtbs zImage
> + *  cat arch/arm/boot/dts/sh73a0-kzm9g.dtb >> arch/arm/boot/zImage
> + *  $(cut -f 3- -d ' ' < arch/arm/boot/.uImage.cmd)
> + *
> + * For a working recent kernel (v5.10+) the following configuration is needed:
> + *  CONFIG_ARM_APPENDED_DTB=y
> + *  CONFIG_ATAGS=n
>   *
> - * Based on sh73a0-kzm9g.dts
> + * The shmobile_defconfig works well after setting CONFIG_ATAGS=n

Why CONFIG_ATAGS=n? I have CONFIG_ATAGS=y in my .config.

IIRC, shmobile_defconfig works, if I change CONFIG_CMDLINE to match
what I need, as U-Boot cannot update chosen/cmdline in an appended DTB.

Gr{oetje,eeting}s,

                        Geert
Magnus Damm March 22, 2021, 2:21 a.m. UTC | #2
Hi Geert,

On Sun, Mar 21, 2021 at 11:03 PM Geert Uytterhoeven
<geert@linux-m68k.org> wrote:
>
> Hi Magnus,
>
> On Sun, Mar 21, 2021 at 1:06 PM Magnus Damm <damm@opensource.se> wrote:
> > From: Magnus Damm <damm+renesas@opensource.se>
> > Include hints in the DTS for KZM9G on how to build a kernel that may be booted
> > using the old on-board boot loader. Special handling includes:
> >  - The DTB needs to be appended to the zImage before generating the uImage
> >  - LOADADDR needs to be set to 0x48008000 to be able to generate an uImage
> >  - CONFIG_ATAGS=n is needed for the board to boot
> >
> > Perhaps there is a better place where this kind of information should be
> > placed? Many years ago the LOADADDR information used to be part of the kernel
> > makefiles (and make uImage just worked out of the box) but when going DTS
> > and zImage this seems to have been dropped. So these days special care is
> > needed to build a uImage file which is required by the boot loader.
> >
> > Not-Yet-Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
>
> Thanks for your patch!

Thanks for your review!

> > --- 0001/arch/arm/boot/dts/sh73a0-kzm9g.dts
> > +++ work/arch/arm/boot/dts/sh73a0-kzm9g.dts     2021-03-21 18:10:53.515741849 +0900
> > @@ -2,9 +2,24 @@
> >  /*
> >   * Device Tree Source for the KZM-A9-GT board
> >   *
> > - * Copyright (C) 2012 Horms Solutions Ltd.
> > + * The KZM9G board comes with on-board out-of-tree U-Boot from 2012 with:
> > + *  uImage support but without zImage support
>
> Funny, mine (which I never upgraded) has:
>
>     U-Boot 2013.01.-rc1 (Nov 15 2012 - 11:13:00)
>
> and does boot zImage, with appended DTB.

My board has serial number k0000019 and gives the following printout at boot:

U-Boot 2012.04.01-00384-g4398d55-dirty (June 05 2012 - 19:45:48)

This is also the original bootloader, but it might just happen to be
an early development snapshot.

In the U-Boot git repo I notice the files and directory
"configs/kzm9g/defconfig" and "board/kmc/kzm9g". Maybe those can be
used to improve the situation.

Perhaps this is a good opportunity to hook up J-Link/ST-Link/Olimex to
OpenOCD and update the boot loader?

> > + *  one way or the other busted ATAGs
> > + *
> > + * Generate an uImage at the correct load address with apppended DTB like this:
>
> appended

Indeed, thanks.

> > + *  make ARCH=arm CROSS_COMPILE=_ uImage LOADADDR=0x48008000
> > + *  rm arch/arm/boot/zImage
> > + *  make ARCH=arm CROSS_COMPILE=_ dtbs zImage
> > + *  cat arch/arm/boot/dts/sh73a0-kzm9g.dtb >> arch/arm/boot/zImage
> > + *  $(cut -f 3- -d ' ' < arch/arm/boot/.uImage.cmd)
> > + *
> > + * For a working recent kernel (v5.10+) the following configuration is needed:
> > + *  CONFIG_ARM_APPENDED_DTB=y
> > + *  CONFIG_ATAGS=n
> >   *
> > - * Based on sh73a0-kzm9g.dts
> > + * The shmobile_defconfig works well after setting CONFIG_ATAGS=n
>
> Why CONFIG_ATAGS=n? I have CONFIG_ATAGS=y in my .config.

I tried various boot-related options to see if it would unbreak the
situation. And deselecting ATAGS happened to fix the issue.

By the way, on this board it seems the bootloader environment comes
without bootargs set.

> IIRC, shmobile_defconfig works, if I change CONFIG_CMDLINE to match
> what I need, as U-Boot cannot update chosen/cmdline in an appended DTB.

So I've locally modified .config from shmobile_defconfig default:
CONFIG_CMDLINE=""
to:
CONFIG_CMDLINE="ignore_loglevel"
CONFIG_CMDLINE_FROM_BOOTLOADER=y

This also seems to fix the issue - thank you!

Related to ATAGS or not, on the console I get the following on v5.10:
[   0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x4800000

This is similar to the output on from the old v3.18 kernel I happen to
have around:
Ignoring memory range 0x41000000 - 0x48000000

Does the kzm9g boot all the way to user space for you? Perhaps my
board is busted but I seem to get some oopses and freeze.

For anyone with an old bootloader, what do you think about documenting
the LOADADDR and how to build an uImage?

Is there some way we can make the kernel boot out-of-the-box with
shmobile_defconfig?

Cheers,

/ magnus
Geert Uytterhoeven March 22, 2021, 8:16 a.m. UTC | #3
Hi Magnus,

On Mon, Mar 22, 2021 at 3:22 AM Magnus Damm <magnus.damm@gmail.com> wrote:
> On Sun, Mar 21, 2021 at 11:03 PM Geert Uytterhoeven
> <geert@linux-m68k.org> wrote:
> > On Sun, Mar 21, 2021 at 1:06 PM Magnus Damm <damm@opensource.se> wrote:
> > > From: Magnus Damm <damm+renesas@opensource.se>
> > > Include hints in the DTS for KZM9G on how to build a kernel that may be booted
> > > using the old on-board boot loader. Special handling includes:
> > >  - The DTB needs to be appended to the zImage before generating the uImage
> > >  - LOADADDR needs to be set to 0x48008000 to be able to generate an uImage
> > >  - CONFIG_ATAGS=n is needed for the board to boot
> > >
> > > Perhaps there is a better place where this kind of information should be
> > > placed? Many years ago the LOADADDR information used to be part of the kernel
> > > makefiles (and make uImage just worked out of the box) but when going DTS
> > > and zImage this seems to have been dropped. So these days special care is
> > > needed to build a uImage file which is required by the boot loader.
> > >
> > > Not-Yet-Signed-off-by: Magnus Damm <damm+renesas@opensource.se>

> > > --- 0001/arch/arm/boot/dts/sh73a0-kzm9g.dts
> > > +++ work/arch/arm/boot/dts/sh73a0-kzm9g.dts     2021-03-21 18:10:53.515741849 +0900
> > > @@ -2,9 +2,24 @@
> > >  /*
> > >   * Device Tree Source for the KZM-A9-GT board
> > >   *
> > > - * Copyright (C) 2012 Horms Solutions Ltd.
> > > + * The KZM9G board comes with on-board out-of-tree U-Boot from 2012 with:
> > > + *  uImage support but without zImage support
> >
> > Funny, mine (which I never upgraded) has:
> >
> >     U-Boot 2013.01.-rc1 (Nov 15 2012 - 11:13:00)
> >
> > and does boot zImage, with appended DTB.
>
> My board has serial number k0000019 and gives the following printout at boot:
>
> U-Boot 2012.04.01-00384-g4398d55-dirty (June 05 2012 - 19:45:48)
>
> This is also the original bootloader, but it might just happen to be
> an early development snapshot.

Mine was used by Uli before.  Perhaps he upgraded the boot loader?

> > > + *  make ARCH=arm CROSS_COMPILE=_ uImage LOADADDR=0x48008000
> > > + *  rm arch/arm/boot/zImage
> > > + *  make ARCH=arm CROSS_COMPILE=_ dtbs zImage
> > > + *  cat arch/arm/boot/dts/sh73a0-kzm9g.dtb >> arch/arm/boot/zImage
> > > + *  $(cut -f 3- -d ' ' < arch/arm/boot/.uImage.cmd)
> > > + *
> > > + * For a working recent kernel (v5.10+) the following configuration is needed:
> > > + *  CONFIG_ARM_APPENDED_DTB=y
> > > + *  CONFIG_ATAGS=n
> > >   *
> > > - * Based on sh73a0-kzm9g.dts
> > > + * The shmobile_defconfig works well after setting CONFIG_ATAGS=n
> >
> > Why CONFIG_ATAGS=n? I have CONFIG_ATAGS=y in my .config.
>
> I tried various boot-related options to see if it would unbreak the
> situation. And deselecting ATAGS happened to fix the issue.
>
> By the way, on this board it seems the bootloader environment comes
> without bootargs set.
>
> > IIRC, shmobile_defconfig works, if I change CONFIG_CMDLINE to match
> > what I need, as U-Boot cannot update chosen/cmdline in an appended DTB.
>
> So I've locally modified .config from shmobile_defconfig default:
> CONFIG_CMDLINE=""
> to:
> CONFIG_CMDLINE="ignore_loglevel"
> CONFIG_CMDLINE_FROM_BOOTLOADER=y
>
> This also seems to fix the issue - thank you!

I just realized that for passing the kernel command line to an appended
DTB, you need CONFIG_ARM_ATAG_DTB_COMPAT=y, too.
Unfortunately that doesn't seem to help: the kernel doesn't boot (no
output, haven't tried DEBUG_LL).
However, ever plain shmobile_defconfig seems to be very flaky on
kzm9g: the kernel locks up in the middle of the boot.

> Related to ATAGS or not, on the console I get the following on v5.10:
> [   0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x4800000
>
> This is similar to the output on from the old v3.18 kernel I happen to
> have around:
> Ignoring memory range 0x41000000 - 0x48000000

That's normal, you cannot use memory below the kernel load address.

> Does the kzm9g boot all the way to user space for you? Perhaps my
> board is busted but I seem to get some oopses and freeze.

My own kernel works well (I test it after each renesas-drivers release),
albeit with an "irq nobody cared" warning (which has been there forever,
and might explain the lock-up).  I've sent its config by PM.
Other known issues on kzm9g are that secondary CPU bringup is a bit
unreliable, especially during resume from s2ram, and that switching to
DT-based l2c-310 would break secondary CPU bringup completely (still the
case last time I tried).

> For anyone with an old bootloader, what do you think about documenting
> the LOADADDR and how to build an uImage?

https://elinux.org/R-Mobile/Boards/KZM-A9-GT
Feel free to update!

> Is there some way we can make the kernel boot out-of-the-box with
> shmobile_defconfig?

Upgrade to a modern U-Boot, everywhere?

Thanks!

Gr{oetje,eeting}s,

                        Geert
diff mbox series

Patch

--- 0001/arch/arm/boot/dts/sh73a0-kzm9g.dts
+++ work/arch/arm/boot/dts/sh73a0-kzm9g.dts	2021-03-21 18:10:53.515741849 +0900
@@ -2,9 +2,24 @@ 
 /*
  * Device Tree Source for the KZM-A9-GT board
  *
- * Copyright (C) 2012 Horms Solutions Ltd.
+ * The KZM9G board comes with on-board out-of-tree U-Boot from 2012 with:
+ *  uImage support but without zImage support
+ *  one way or the other busted ATAGs
+ *
+ * Generate an uImage at the correct load address with apppended DTB like this:
+ *  make ARCH=arm CROSS_COMPILE=_ uImage LOADADDR=0x48008000
+ *  rm arch/arm/boot/zImage
+ *  make ARCH=arm CROSS_COMPILE=_ dtbs zImage
+ *  cat arch/arm/boot/dts/sh73a0-kzm9g.dtb >> arch/arm/boot/zImage
+ *  $(cut -f 3- -d ' ' < arch/arm/boot/.uImage.cmd)
+ *
+ * For a working recent kernel (v5.10+) the following configuration is needed:
+ *  CONFIG_ARM_APPENDED_DTB=y
+ *  CONFIG_ATAGS=n
  *
- * Based on sh73a0-kzm9g.dts
+ * The shmobile_defconfig works well after setting CONFIG_ATAGS=n
+ *
+ * Copyright (C) 2012 Horms Solutions Ltd.
  * Copyright (C) 2012 Renesas Solutions Corp.
  */