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. Michael > > > > > Signed-off-by: Michael Tretter <m.tretter@xxxxxxxxxxxxxx> > > --- > > 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@xxxxxxxxxxxxxx> > > + */ > > +#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@xxxxxxxxxxxxxx> > > + */ > > + > > +#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; > > + } > > + > > + 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@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox