
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.ganu@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/).
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" \