Hi, 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? > > 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; > +} > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox