From: Kever Yang <kever.yang@rock-chips.com>
To: Jonas Karlman <jonas@kwiboo.se>, Simon Glass <sjg@chromium.org>,
Philipp Tomsich <philipp.tomsich@vrull.eu>,
Tom Rini <trini@konsulko.com>
Cc: Christopher Obbard <chris.obbard@collabora.com>, u-boot@lists.denx.de
Subject: Re: [PATCH] rockchip: spl: Cache boot source id for later use
Date: Tue, 19 Mar 2024 17:15:09 +0800 [thread overview]
Message-ID: <5263b2e7-7660-45bc-be5d-cd99647be486@rock-chips.com> (raw)
In-Reply-To: <20240315173454.2672509-1-jonas@kwiboo.se>
On 2024/3/16 01:34, Jonas Karlman wrote:
> Rockchip BROM write a boot source id at CFG_IRAM_BASE + 0x10, the id
> indicate from what storage media TPL/SPL was loaded from.
>
> SPL use this value to determine what device "same-as-spl" represent when
> determining from where FIT should be loaded. This works as long as the
> boot_devices array contain a matching id <-> node path entry.
>
> However, SPL typically load a small part of TF-A into SRAM and on RK3399
> this overwrites the CFG_IRAM_BASE + 0x10 addr used for boot source id.
>
> Here boot source id is 3 before FIT images is loaded, and 0 after:
>
> U-Boot SPL 2024.04-rc4 (Mar 15 2024 - 17:26:19 +0000)
> board_spl_was_booted_from: brom_bootdevice_id 3 maps to '/spi@ff1d0000/flash@0'
> Trying to boot from SPI
> ## Checking hash(es) for config config-1 ... OK
> ## Checking hash(es) for Image atf-1 ... sha256+ OK
> ## Checking hash(es) for Image u-boot ... sha256+ OK
> ## Checking hash(es) for Image fdt-1 ... sha256+ OK
> ## Checking hash(es) for Image atf-2 ... sha256+ OK
> ## Checking hash(es) for Image atf-3 ... sha256+ OK
> board_spl_was_booted_from: failed to resolve brom_bootdevice_id 0
> spl_decode_boot_device: could not find udevice for /mmc@fe330000
> spl_decode_boot_device: could not find udevice for /mmc@fe320000
> spl_perform_fixups: could not map boot_device to ofpath: -19
>
> Use a static bootdevice_brom_id to cache the boot source id after an
> initial read from SRAM to fix this, this allow spl_perform_fixups() to
> resolve correct boot source path for "same-as-spl" after SPL have loaded
> TF-A related FIT images into memory.
>
> With this the spl-boot-device prop can correctly be resolved to the
> SPI flash node in the control FDT:
>
> => fdt addr ${fdtcontroladdr}
> Working FDT set to f1ee6710
> => fdt list /chosen
> chosen {
> u-boot,spl-boot-device = "/spi@ff1d0000/flash@0";
> stdout-path = "serial2:1500000n8";
> u-boot,spl-boot-order = "same-as-spl", "/mmc@fe330000", "/mmc@fe320000";
> };
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
Thanks,
- Kever
> ---
> arch/arm/mach-rockchip/spl.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
> index 1586a093fc37..27e996b504e7 100644
> --- a/arch/arm/mach-rockchip/spl.c
> +++ b/arch/arm/mach-rockchip/spl.c
> @@ -32,9 +32,17 @@ __weak const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = {
>
> const char *board_spl_was_booted_from(void)
> {
> - u32 bootdevice_brom_id = readl(BROM_BOOTSOURCE_ID_ADDR);
> + static u32 bootdevice_brom_id;
> const char *bootdevice_ofpath = NULL;
>
> + if (!bootdevice_brom_id)
> + bootdevice_brom_id = readl(BROM_BOOTSOURCE_ID_ADDR);
> + if (!bootdevice_brom_id) {
> + debug("%s: unknown brom_bootdevice_id %x\n",
> + __func__, bootdevice_brom_id);
> + return NULL;
> + }
> +
> if (bootdevice_brom_id < ARRAY_SIZE(boot_devices))
> bootdevice_ofpath = boot_devices[bootdevice_brom_id];
>
next prev parent reply other threads:[~2024-03-19 9:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-15 17:34 [PATCH] rockchip: spl: Cache boot source id for later use Jonas Karlman
2024-03-19 9:15 ` Kever Yang [this message]
2024-03-19 9:44 ` Dragan Simic
2024-03-19 15:59 ` Jonas Karlman
2024-03-19 16:08 ` Dragan Simic
2024-03-19 10:19 ` Quentin Schulz
2024-03-19 10:33 ` Dragan Simic
2024-03-19 16:52 ` Jonas Karlman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5263b2e7-7660-45bc-be5d-cd99647be486@rock-chips.com \
--to=kever.yang@rock-chips.com \
--cc=chris.obbard@collabora.com \
--cc=jonas@kwiboo.se \
--cc=philipp.tomsich@vrull.eu \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.