On Sat, 5 Dec 2020 at 16:00, Heinrich Schuchardt <xypron.g...@gmx.de> wrote:
> On 11/26/20 7:41 PM, Sughosh Ganu wrote: > > Add support for setting the default values for mtd partitions on the > > platform for the nor flash. This would be used for updating the > > firmware image using uefi capsule update with the dfu mtd backend > > driver. > > > > Signed-off-by: Sughosh Ganu <sughosh.g...@linaro.org> > > --- > > board/emulation/qemu-arm/qemu-arm.c | 70 +++++++++++++++++++++++++++++ > > include/configs/qemu-arm.h | 7 +++ > > 2 files changed, 77 insertions(+) > > > > diff --git a/board/emulation/qemu-arm/qemu-arm.c > b/board/emulation/qemu-arm/qemu-arm.c > > index b3d5b3d5c2..d5ed3eebaf 100644 > > --- a/board/emulation/qemu-arm/qemu-arm.c > > +++ b/board/emulation/qemu-arm/qemu-arm.c > > Is this development really QEMU specific or is it something we would > could reuse for other systems too? If yes, we should put it into another > directory (drivers/mtd/ or drivers/dfu/). > I think the functionality added in this patch is specific for a particular board, given that the number and type of mtd devices would be specific to a board. Even if the mtd device detection can be done dynamically, it would be required to get the partition information from the board specific files. Merging all the functionality under a common directory like drivers/mtd/, if done, should be taken up as a separate effort. Thanks. -sughosh > Best regards > > Heinrich > > > @@ -197,3 +197,73 @@ void flash_write32(u32 value, void *addr) > > { > > asm("str %" __W "1, %0" : "=m"(*(u32 *)addr) : "r"(value)); > > } > > + > > +#if defined(CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT) > > + > > +#include <mtd.h> > > + > > +static void board_get_mtdparts(const char *dev, const char *partition, > > + char *mtdids, char *mtdparts) > > +{ > > + /* mtdids: "<dev>=<dev>, ...." */ > > + if (mtdids[0] != '\0') > > + strcat(mtdids, ","); > > + strcat(mtdids, dev); > > + strcat(mtdids, "="); > > + strcat(mtdids, dev); > > + > > + /* mtdparts: "mtdparts=<dev>:<mtdparts_<dev>>;..." */ > > + if (mtdparts[0] != '\0') > > + strncat(mtdparts, ";", MTDPARTS_LEN); > > + else > > + strcat(mtdparts, "mtdparts="); > > + > > + strncat(mtdparts, dev, MTDPARTS_LEN); > > + strncat(mtdparts, ":", MTDPARTS_LEN); > > + strncat(mtdparts, partition, MTDPARTS_LEN); > > +} > > + > > +void board_mtdparts_default(const char **mtdids, const char **mtdparts) > > +{ > > + struct mtd_info *mtd; > > + struct udevice *dev; > > + const char *mtd_partition; > > + static char parts[3 * MTDPARTS_LEN + 1]; > > + static char ids[MTDIDS_LEN + 1]; > > + static bool mtd_initialized; > > + > > + if (mtd_initialized) { > > + *mtdids = ids; > > + *mtdparts = parts; > > + return; > > + } > > + > > + memset(parts, 0, sizeof(parts)); > > + memset(ids, 0, sizeof(ids)); > > + > > + /* probe all MTD devices */ > > + for (uclass_first_device(UCLASS_MTD, &dev); dev; > > + uclass_next_device(&dev)) { > > + debug("mtd device = %s\n", dev->name); > > + } > > + > > + mtd = get_mtd_device_nm("nor0"); > > + if (!IS_ERR_OR_NULL(mtd)) { > > + mtd_partition = MTDPARTS_NOR0; > > + board_get_mtdparts("nor0", mtd_partition, ids, parts); > > + put_mtd_device(mtd); > > + } > > + > > + mtd = get_mtd_device_nm("nor1"); > > + if (!IS_ERR_OR_NULL(mtd)) { > > + mtd_partition = MTDPARTS_NOR1; > > + board_get_mtdparts("nor1", mtd_partition, ids, parts); > > + put_mtd_device(mtd); > > + } > > + > > + mtd_initialized = true; > > + *mtdids = ids; > > + *mtdparts = parts; > > + debug("%s:mtdids=%s & mtdparts=%s\n", __func__, ids, parts); > > +} > > +#endif /* CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT */ > > diff --git a/include/configs/qemu-arm.h b/include/configs/qemu-arm.h > > index 273fa1a7d7..69ff329434 100644 > > --- a/include/configs/qemu-arm.h > > +++ b/include/configs/qemu-arm.h > > @@ -32,6 +32,13 @@ > > > > #include <config_distro_bootcmd.h> > > > > +#if defined(CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT) > > +#define CONFIG_SYS_MTDPARTS_RUNTIME > > +#endif > > + > > +#define MTDPARTS_NOR0 "64m(u-boot)\0" > > +#define MTDPARTS_NOR1 "64m(u-boot-env)\0" > > + > > #define CONFIG_EXTRA_ENV_SETTINGS \ > > "fdt_high=0xffffffff\0" \ > > "initrd_high=0xffffffff\0" \ > > > >