* [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script
@ 2016-11-27 6:37 Jonathan Liu
2016-11-27 20:51 ` Tom Rini
2016-11-29 20:39 ` Paul Barker
0 siblings, 2 replies; 5+ messages in thread
From: Jonathan Liu @ 2016-11-27 6:37 UTC (permalink / raw)
To: yocto
A patch is backported to check if the firmware loaded a device tree blob
into memory and set the fdt_addr variable if it is found. The U-Boot
script will then read the command line arguments generated by the
firmware from the device tree and boot the kernel with the command
line arguments and the loaded device tree.
This allows things like MAC address, board revision and serial number
to be correctly configured and options in config.txt to be used.
Signed-off-by: Jonathan Liu <net147@gmail.com>
---
Changes in v4:
- Backport patch from upstream instead of using own patch
Changes in v3:
- Removed incorrect check if fdt_addr_r is already set. The check
condition was inverted and fdt_addr_r variable is always set to
0x100 by default.
Changes in v2:
- Instead of setting device_tree_address to 0x100 in config.txt, patch
U-Boot to detect the device tree blob address if it was loaded.
recipes-bsp/rpi-u-boot-scr/files/boot.cmd | 3 +
.../rpi-u-boot-scr/files/raspberrypi/boot.cmd | 6 -
.../rpi-u-boot-scr/files/raspberrypi0/boot.cmd | 6 -
.../rpi-u-boot-scr/files/raspberrypi2/boot.cmd | 6 -
.../rpi-u-boot-scr/files/raspberrypi3/boot.cmd | 6 -
...through-of-the-firmware-provided-FDT-blob.patch | 156 +++++++++++++++++++++
recipes-bsp/u-boot/u-boot_%.bbappend | 2 +
7 files changed, 161 insertions(+), 24 deletions(-)
create mode 100644 recipes-bsp/rpi-u-boot-scr/files/boot.cmd
delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd
delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd
delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd
delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd
create mode 100644 recipes-bsp/u-boot/files/rpi-passthrough-of-the-firmware-provided-FDT-blob.patch
diff --git a/recipes-bsp/rpi-u-boot-scr/files/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd
new file mode 100644
index 0000000..2e8452e
--- /dev/null
+++ b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd
@@ -0,0 +1,3 @@
+fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
+fatload mmc 0:1 ${kernel_addr_r} uImage
+bootm ${kernel_addr_r} - ${fdt_addr}
diff --git a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd
deleted file mode 100644
index c86c758..0000000
--- a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd
+++ /dev/null
@@ -1,6 +0,0 @@
-setenv fdtfile bcm2708-rpi-b.dtb
-setenv bootargs 'earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd'
-mmc dev 0
-fatload mmc 0:1 ${kernel_addr_r} uImage
-fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
-bootm ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd
deleted file mode 100644
index c86c758..0000000
--- a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd
+++ /dev/null
@@ -1,6 +0,0 @@
-setenv fdtfile bcm2708-rpi-b.dtb
-setenv bootargs 'earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd'
-mmc dev 0
-fatload mmc 0:1 ${kernel_addr_r} uImage
-fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
-bootm ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd
deleted file mode 100644
index aa4ea64..0000000
--- a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd
+++ /dev/null
@@ -1,6 +0,0 @@
-setenv fdtfile bcm2709-rpi-2-b.dtb
-setenv bootargs 'earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd'
-mmc dev 0
-fatload mmc 0:1 ${kernel_addr_r} uImage
-fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
-bootm ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd
deleted file mode 100644
index 2950856..0000000
--- a/recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd
+++ /dev/null
@@ -1,6 +0,0 @@
-setenv fdtfile bcm2710-rpi-3-b.dtb
-setenv bootargs 'earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd'
-mmc dev 0
-fatload mmc 0:1 ${kernel_addr_r} uImage
-fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
-bootm ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/recipes-bsp/u-boot/files/rpi-passthrough-of-the-firmware-provided-FDT-blob.patch b/recipes-bsp/u-boot/files/rpi-passthrough-of-the-firmware-provided-FDT-blob.patch
new file mode 100644
index 0000000..323b7ab
--- /dev/null
+++ b/recipes-bsp/u-boot/files/rpi-passthrough-of-the-firmware-provided-FDT-blob.patch
@@ -0,0 +1,156 @@
+From ade243a211d62327e9ebadce27bbbff7981e37f0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?C=C3=A9dric=20Schieli?= <cschieli@gmail.com>
+Date: Fri, 11 Nov 2016 11:59:07 +0100
+Subject: [PATCH] rpi: passthrough of the firmware provided FDT blob
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Raspberry firmware used to pass a FDT blob at a fixed address (0x100),
+but this is not true anymore. The address now depends on both the
+memory size and the blob size [1].
+
+If one wants to passthrough this FDT blob to the kernel, the most
+reliable way is to save its address from the r2/x0 register in the
+U-Boot entry point and expose it in a environment variable for
+further processing.
+
+This patch just does this:
+- save the provided address in the global variable fw_dtb_pointer
+- expose it in ${fdt_addr} if it points to a a valid FDT blob
+
+There are many different ways to use it. One can, for example, use
+the following script which will extract from the tree the command
+line built by the firmware, then hand over the blob to a previously
+loaded kernel:
+
+fdt addr ${fdt_addr}
+fdt get value bootargs /chosen bootargs
+bootz ${kernel_addr_r} - ${fdt_addr}
+
+Alternatively, users relying on sysboot/pxe can simply omit any FDT
+statement in their extlinux.conf file, U-Boot will automagically pick
+${fdt_addr} and pass it to the kernel.
+
+[1] https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018
+
+Upstream-Status: Backport
+
+Signed-off-by: Cédric Schieli <cschieli@gmail.com>
+Acked-by: Stephen Warren <swarren@nvidia.com>
+Signed-off-by: Jonathan Liu <net147@gmail.com>
+---
+ board/raspberrypi/rpi/Makefile | 1 +
+ board/raspberrypi/rpi/lowlevel_init.S | 36 +++++++++++++++++++++++++++++++++++
+ board/raspberrypi/rpi/rpi.c | 29 ++++++++++++++++++++++++++++
+ 3 files changed, 66 insertions(+)
+ create mode 100644 board/raspberrypi/rpi/lowlevel_init.S
+
+diff --git a/board/raspberrypi/rpi/Makefile b/board/raspberrypi/rpi/Makefile
+index 4ce2c98..dcb25ac 100644
+--- a/board/raspberrypi/rpi/Makefile
++++ b/board/raspberrypi/rpi/Makefile
+@@ -5,3 +5,4 @@
+ #
+
+ obj-y := rpi.o
++obj-y += lowlevel_init.o
+diff --git a/board/raspberrypi/rpi/lowlevel_init.S b/board/raspberrypi/rpi/lowlevel_init.S
+new file mode 100644
+index 0000000..cdbd8e1
+--- /dev/null
++++ b/board/raspberrypi/rpi/lowlevel_init.S
+@@ -0,0 +1,36 @@
++/*
++ * (C) Copyright 2016
++ * Cédric Schieli <cschieli@gmail.com>
++ *
++ * SPDX-License-Identifier: GPL-2.0+
++ */
++
++#include <config.h>
++
++.align 8
++.global fw_dtb_pointer
++fw_dtb_pointer:
++#ifdef CONFIG_ARM64
++ .dword 0x0
++#else
++ .word 0x0
++#endif
++
++/*
++ * Routine: save_boot_params (called after reset from start.S)
++ * Description: save ATAG/FDT address provided by the firmware at boot time
++ */
++
++.global save_boot_params
++save_boot_params:
++
++ /* The firmware provided ATAG/FDT address can be found in r2/x0 */
++#ifdef CONFIG_ARM64
++ adr x8, fw_dtb_pointer
++ str x0, [x8]
++#else
++ str r2, fw_dtb_pointer
++#endif
++
++ /* Returns */
++ b save_boot_params_ret
+diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
+index 6245b36..ffd6d31 100644
+--- a/board/raspberrypi/rpi/rpi.c
++++ b/board/raspberrypi/rpi/rpi.c
+@@ -25,6 +25,9 @@
+
+ DECLARE_GLOBAL_DATA_PTR;
+
++/* From lowlevel_init.S */
++extern unsigned long fw_dtb_pointer;
++
+ static const struct bcm2835_gpio_platdata gpio_platdata = {
+ .base = BCM2835_GPIO_BASE,
+ };
+@@ -285,6 +288,31 @@ static void set_fdtfile(void)
+ setenv("fdtfile", fdtfile);
+ }
+
++/*
++ * If the firmware provided a valid FDT at boot time, let's expose it in
++ * ${fdt_addr} so it may be passed unmodified to the kernel.
++ */
++static void set_fdt_addr(void)
++{
++ if (getenv("fdt_addr"))
++ return;
++
++ if (fdt_magic(fw_dtb_pointer) != FDT_MAGIC)
++ return;
++
++ setenv_hex("fdt_addr", fw_dtb_pointer);
++}
++
++/*
++ * Prevent relocation from stomping on a firmware provided FDT blob.
++ */
++unsigned long board_get_usable_ram_top(unsigned long total_size)
++{
++ if ((gd->ram_top - fw_dtb_pointer) > SZ_64M)
++ return gd->ram_top;
++ return fw_dtb_pointer & ~0xffff;
++}
++
+ static void set_usbethaddr(void)
+ {
+ ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_mac_address, msg, 1);
+@@ -356,6 +384,7 @@ static void set_serial_number(void)
+
+ int misc_init_r(void)
+ {
++ set_fdt_addr();
+ set_fdtfile();
+ set_usbethaddr();
+ #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+--
+2.10.2
+
diff --git a/recipes-bsp/u-boot/u-boot_%.bbappend b/recipes-bsp/u-boot/u-boot_%.bbappend
index 3781666..645547f 100644
--- a/recipes-bsp/u-boot/u-boot_%.bbappend
+++ b/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -1 +1,3 @@
+FILESEXTRAPATHS_prepend_rpi := "${THISDIR}/files:"
RDEPENDS_${PN}_append_rpi = " rpi-u-boot-scr"
+SRC_URI_append_rpi = " file://rpi-passthrough-of-the-firmware-provided-FDT-blob.patch"
--
2.10.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script
2016-11-27 6:37 [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script Jonathan Liu
@ 2016-11-27 20:51 ` Tom Rini
2016-11-29 20:39 ` Paul Barker
1 sibling, 0 replies; 5+ messages in thread
From: Tom Rini @ 2016-11-27 20:51 UTC (permalink / raw)
To: Jonathan Liu; +Cc: yocto
On Sun, Nov 27, 2016 at 05:37:53PM +1100, Jonathan Liu wrote:
> A patch is backported to check if the firmware loaded a device tree blob
> into memory and set the fdt_addr variable if it is found. The U-Boot
> script will then read the command line arguments generated by the
> firmware from the device tree and boot the kernel with the command
> line arguments and the loaded device tree.
>
> This allows things like MAC address, board revision and serial number
> to be correctly configured and options in config.txt to be used.
>
> Signed-off-by: Jonathan Liu <net147@gmail.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
--
Tom
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script
2016-11-27 6:37 [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script Jonathan Liu
2016-11-27 20:51 ` Tom Rini
@ 2016-11-29 20:39 ` Paul Barker
2016-11-29 23:14 ` Jonathan Liu
1 sibling, 1 reply; 5+ messages in thread
From: Paul Barker @ 2016-11-29 20:39 UTC (permalink / raw)
To: Jonathan Liu; +Cc: yocto
On Sun, 27 Nov 2016 17:37:53 +1100
Jonathan Liu <net147@gmail.com> wrote:
> A patch is backported to check if the firmware loaded a device tree blob
> into memory and set the fdt_addr variable if it is found. The U-Boot
> script will then read the command line arguments generated by the
> firmware from the device tree and boot the kernel with the command
> line arguments and the loaded device tree.
>
> This allows things like MAC address, board revision and serial number
> to be correctly configured and options in config.txt to be used.
>
> Signed-off-by: Jonathan Liu <net147@gmail.com>
> ---
> Changes in v4:
> - Backport patch from upstream instead of using own patch
I had to make a few additional changes on top of this patch to get a
successful compile with u-boot v2016.03. These changes can be seen here:
https://gitlab.com/pbarker/meta-raspberrypi/commit/f880569e62d431cbead1555cf6c47342fe79c969
After those changes though, everything worked as expected on both an
original rpi B+ and an rpi3.
Does your patch work cleanly on a later version of u-boot? I know
oe-core is likely to upgrade to v2016.11 any day now. We could either
apply the changes I've linked to above or hold off until v2016.11 is
merged to oe-core if that's what you've tested with.
Thanks,
Paul
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script
2016-11-29 20:39 ` Paul Barker
@ 2016-11-29 23:14 ` Jonathan Liu
2016-11-30 20:57 ` Paul Barker
0 siblings, 1 reply; 5+ messages in thread
From: Jonathan Liu @ 2016-11-29 23:14 UTC (permalink / raw)
To: Paul Barker; +Cc: Yocto Project
[-- Attachment #1: Type: text/plain, Size: 1835 bytes --]
Hi Paul,
On 30 November 2016 at 07:39, Paul Barker <paul@paulbarker.me.uk> wrote:
> On Sun, 27 Nov 2016 17:37:53 +1100
> Jonathan Liu <net147@gmail.com> wrote:
>
> > A patch is backported to check if the firmware loaded a device tree blob
> > into memory and set the fdt_addr variable if it is found. The U-Boot
> > script will then read the command line arguments generated by the
> > firmware from the device tree and boot the kernel with the command
> > line arguments and the loaded device tree.
> >
> > This allows things like MAC address, board revision and serial number
> > to be correctly configured and options in config.txt to be used.
> >
> > Signed-off-by: Jonathan Liu <net147@gmail.com>
> > ---
> > Changes in v4:
> > - Backport patch from upstream instead of using own patch
>
> I had to make a few additional changes on top of this patch to get a
> successful compile with u-boot v2016.03. These changes can be seen here:
>
> https://gitlab.com/pbarker/meta-raspberrypi/commit/
> f880569e62d431cbead1555cf6c47342fe79c969
>
> After those changes though, everything worked as expected on both an
> original rpi B+ and an rpi3.
>
> Does your patch work cleanly on a later version of u-boot? I know
> oe-core is likely to upgrade to v2016.11 any day now. We could either
> apply the changes I've linked to above or hold off until v2016.11 is
> merged to oe-core if that's what you've tested with.
>
Yes, my patch applies cleanly to v2016.11 as well. I only tested with
Raspberry Pi 3 as I didn't have a Raspberry Pi 2 around at the time.
The upstream commits landed in master after v2016.11 so backports will be
needed until at least v2017.01.
Are you able to squash your changes into this patch and submit a v5 with
your Signed-off-by tag?
Thanks.
Regards,
Jonathan
[-- Attachment #2: Type: text/html, Size: 2606 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script
2016-11-29 23:14 ` Jonathan Liu
@ 2016-11-30 20:57 ` Paul Barker
0 siblings, 0 replies; 5+ messages in thread
From: Paul Barker @ 2016-11-30 20:57 UTC (permalink / raw)
To: Jonathan Liu; +Cc: Yocto Project
On Wed, 30 Nov 2016 10:14:01 +1100
Jonathan Liu <net147@gmail.com> wrote:
> Hi Paul,
>
> On 30 November 2016 at 07:39, Paul Barker <paul@paulbarker.me.uk> wrote:
>
> > On Sun, 27 Nov 2016 17:37:53 +1100
> > Jonathan Liu <net147@gmail.com> wrote:
> >
> > > A patch is backported to check if the firmware loaded a device tree blob
> > > into memory and set the fdt_addr variable if it is found. The U-Boot
> > > script will then read the command line arguments generated by the
> > > firmware from the device tree and boot the kernel with the command
> > > line arguments and the loaded device tree.
> > >
> > > This allows things like MAC address, board revision and serial number
> > > to be correctly configured and options in config.txt to be used.
> > >
> > > Signed-off-by: Jonathan Liu <net147@gmail.com>
> > > ---
> > > Changes in v4:
> > > - Backport patch from upstream instead of using own patch
> >
> > I had to make a few additional changes on top of this patch to get a
> > successful compile with u-boot v2016.03. These changes can be seen here:
> >
> > https://gitlab.com/pbarker/meta-raspberrypi/commit/
> > f880569e62d431cbead1555cf6c47342fe79c969
> >
> > After those changes though, everything worked as expected on both an
> > original rpi B+ and an rpi3.
> >
> > Does your patch work cleanly on a later version of u-boot? I know
> > oe-core is likely to upgrade to v2016.11 any day now. We could either
> > apply the changes I've linked to above or hold off until v2016.11 is
> > merged to oe-core if that's what you've tested with.
> >
>
> Yes, my patch applies cleanly to v2016.11 as well. I only tested with
> Raspberry Pi 3 as I didn't have a Raspberry Pi 2 around at the time.
> The upstream commits landed in master after v2016.11 so backports will be
> needed until at least v2017.01.
>
> Are you able to squash your changes into this patch and submit a v5 with
> your Signed-off-by tag?
>
Will do. Currently in progress, will send once I've given it a quick
test.
Thanks,
Paul Barker
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-11-30 21:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-27 6:37 [meta-raspberrypi][PATCH v4] u-boot: Simplify boot script Jonathan Liu
2016-11-27 20:51 ` Tom Rini
2016-11-29 20:39 ` Paul Barker
2016-11-29 23:14 ` Jonathan Liu
2016-11-30 20:57 ` Paul Barker
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.