From: Michael Tretter <m.tretter@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 4/7] ARM: zynqmp: add update handler
Date: Fri, 25 Jun 2021 11:05:17 +0200 [thread overview]
Message-ID: <20210625090517.GA23960@pengutronix.de> (raw)
In-Reply-To: <b638d4fe-d6bb-5551-9ea2-443db13dcb97@pengutronix.de>
On Thu, 24 Jun 2021 15:34:33 +0200, Ahmad Fatoum wrote:
> On 24.06.21 15:24, Michael Tretter wrote:
> > On Thu, 24 Jun 2021 12:52:58 +0200, Ahmad Fatoum wrote:
> >> On 24.06.21 12:23, Michael Tretter wrote:
> >>> The ZynqMP boots from an SDHCI device by reading a boot.bin file from
> >>> the FAT16/32 partition, which is the first partition in the MBR.
> >>>
> >>> The update handler copies a boot.bin image to this partition, which
> >>> might be board specific.
> >>
> >> Is barebox the boot.bin or is that a separate first stage bootloader?
> >
> > Both. The boot.bin contains at least the first stage bootloader, TF-A, and
> > Barebox. You cannot boot a "standalone" Barebox image on the ZynqMP.
> >
> > I also documented this in the zynqmp documentation as part of this patch
> > series.
>
> I saw that after writing the mail here. Thanks for clarifying.
>
> >
> > Michael
> >
> >>
> >>>
> >>> Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
> >>> ---
> >>> arch/arm/mach-zynqmp/Makefile | 1 +
> >>> .../arm/mach-zynqmp/include/mach/zynqmp-bbu.h | 21 ++++++++
> >>> arch/arm/mach-zynqmp/zynqmp-bbu.c | 48 +++++++++++++++++++
> >>> 3 files changed, 70 insertions(+)
> >>> create mode 100644 arch/arm/mach-zynqmp/include/mach/zynqmp-bbu.h
> >>> create mode 100644 arch/arm/mach-zynqmp/zynqmp-bbu.c
> >>>
> >>> diff --git a/arch/arm/mach-zynqmp/Makefile b/arch/arm/mach-zynqmp/Makefile
> >>> index 14b8a4e46b87..e24a43c0d59f 100644
> >>> --- a/arch/arm/mach-zynqmp/Makefile
> >>> +++ b/arch/arm/mach-zynqmp/Makefile
> >>> @@ -1,3 +1,4 @@
> >>> # SPDX-License-Identifier: GPL-2.0-or-later
> >>> obj-y += firmware-zynqmp.o
> >>> obj-y += zynqmp.o
> >>> +obj-$(CONFIG_BAREBOX_UPDATE) += zynqmp-bbu.o
> >>> diff --git a/arch/arm/mach-zynqmp/include/mach/zynqmp-bbu.h b/arch/arm/mach-zynqmp/include/mach/zynqmp-bbu.h
> >>> new file mode 100644
> >>> index 000000000000..8502791ee0f7
> >>> --- /dev/null
> >>> +++ b/arch/arm/mach-zynqmp/include/mach/zynqmp-bbu.h
> >>> @@ -0,0 +1,21 @@
> >>> +/* SPDX-License-Identifier: GPL-2.0-only */
> >>> +/*
> >>> + * Copyright (C) 2020 Michael Tretter <m.tretter@pengutronix.de>
> >>> + */
> >>> +#ifndef __MACH_ZYNQMP_BBU_H
> >>> +#define __MACH_ZYNQMP_BBU_H
> >>> +
> >>> +#include <bbu.h>
> >>> +
> >>> +#ifdef CONFIG_BAREBOX_UPDATE
> >>> +int zynqmp_bbu_register_handler(const char *name, char *devicefile,
> >>> + unsigned long flags);
> >>> +#else
> >>> +static int zynqmp_bbu_register_handler(const char *name, char *devicefile,
> >>> + unsigned long flags)
> >>> +{
> >>> + return 0;
> >>> +};
> >>> +#endif
> >>> +
> >>> +#endif /* __MACH_ZYNQMP_BBU_H */
> >>> diff --git a/arch/arm/mach-zynqmp/zynqmp-bbu.c b/arch/arm/mach-zynqmp/zynqmp-bbu.c
> >>> new file mode 100644
> >>> index 000000000000..d1197c01dc41
> >>> --- /dev/null
> >>> +++ b/arch/arm/mach-zynqmp/zynqmp-bbu.c
> >>> @@ -0,0 +1,48 @@
> >>> +// SPDX-License-Identifier: GPL-2.0-only
> >>> +/*
> >>> + * Copyright (C) 2020 Michael Tretter <m.tretter@pengutronix.de>
> >>> + */
> >>> +
> >>> +#include <common.h>
> >>> +#include <libfile.h>
> >>> +#include <mach/zynqmp-bbu.h>
> >>> +
> >>> +static int zynqmp_bbu_handler(struct bbu_handler *handler,
> >>> + struct bbu_data *data)
> >>> +{
> >>> + int ret = 0;
> >>> +
> >>> + ret = bbu_confirm(data);
> >>> + if (ret)
> >>> + return ret;
> >>> +
> >>> + ret = copy_file(data->imagefile, data->devicefile, 1);
> >>> + if (ret < 0) {
> >>> + pr_err("update failed: %s", strerror(-ret));
> >>> + return ret;
> >>> + }
>
> EFI also registers an barebox update handler for a file: /boot/EFI/BOOT/BOOTx64.EFI,
> but there apparently bbu_register_std_file_update suffices.
>
> Did you check if that would work for you as well?
>
> It's still a good idea to have a zynqmp specific wrapper for bbu_register_std_file_update,
> but I am not sure you need to duplicate the copy_file stuff.
I didn't know about the handler and haven't checked this. If this can work,
I'll sent another patch to replace the copy_file stuff with use of the
existing functions.
>
> Also, this seems SD-specific. I assume eMMC would boot from boot partitions?
> If so, zynqmp_bbu_register_sd_handler may be a more apt name.
No, eMMC boot partitions are not supported by the ROM code. The handler is the
same for SD and eMMC.
Michael
>
>
> >>> +
> >>> + return ret;
> >>> +}
> >>> +
> >>> +int zynqmp_bbu_register_handler(const char *name, char *devicefile,
> >>> + unsigned long flags)
> >>> +{
> >>> + struct bbu_handler *handler;
> >>> + int ret = 0;
> >>> +
> >>> + if (!name || !devicefile)
> >>> + return -EINVAL;
> >>> +
> >>> + handler = xzalloc(sizeof(*handler));
> >>> + handler->name = name;
> >>> + handler->devicefile = devicefile;
> >>> + handler->flags = flags;
> >>> + handler->handler = zynqmp_bbu_handler;
> >>> +
> >>> + ret = bbu_register_handler(handler);
> >>> + if (ret)
> >>> + free(handler);
> >>> +
> >>> + return ret;
> >>> +}
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2021-06-25 10:05 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-24 10:23 [PATCH 0/7] ZynqMP: Cleanup and extend board support Michael Tretter
2021-06-24 10:23 ` [PATCH 1/7] ARM: zynqmp: set reset source Michael Tretter
2021-06-24 10:48 ` Ahmad Fatoum
2021-06-24 13:20 ` Michael Tretter
2021-06-24 13:30 ` Ahmad Fatoum
2021-06-24 10:23 ` [PATCH 2/7] clk: zynqmp: do not enable already enabled clocks Michael Tretter
2021-06-24 10:23 ` [PATCH 3/7] dts: zcu104: add Barebox environment Michael Tretter
2021-06-24 10:23 ` [PATCH 4/7] ARM: zynqmp: add update handler Michael Tretter
2021-06-24 10:52 ` Ahmad Fatoum
2021-06-24 13:24 ` Michael Tretter
2021-06-24 13:34 ` Ahmad Fatoum
2021-06-25 9:05 ` Michael Tretter [this message]
2021-06-24 10:23 ` [PATCH 5/7] ARM: zynqmp: zcu104: register " Michael Tretter
2021-06-24 10:23 ` [PATCH 6/7] ARM: zynqmp: defconfig: enable more features Michael Tretter
2021-06-24 10:23 ` [PATCH 7/7] Documentation: zynqmp: add some documentation Michael Tretter
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=20210625090517.GA23960@pengutronix.de \
--to=m.tretter@pengutronix.de \
--cc=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
/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.