[PATCH v2 2/2] arm64: zynqmp: Add MTD partition handling for dfu_alt_info generation
Michal Simek
michal.simek at amd.com
Tue Apr 2 15:08:17 CEST 2024
On 3/22/24 13:09, Michal Simek wrote:
> Generate dfu_alt_info generation based on information from MTD partitions.
> mtd_found_part() is trying to identify MTD partition which code is running
> from. If partitions are not defined and location is not found it is going
> to previous behavior.
>
> Signed-off-by: Michal Simek <michal.simek at amd.com>
> ---
>
> Changes in v2:
> - Update logic based on 1/2 patch
>
> board/xilinx/zynqmp/zynqmp.c | 55 ++++++++++++++++++++++++++++++------
> 1 file changed, 46 insertions(+), 9 deletions(-)
>
> diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> index 3844a9c9a8ff..2522024b4082 100644
> --- a/board/xilinx/zynqmp/zynqmp.c
> +++ b/board/xilinx/zynqmp/zynqmp.c
> @@ -626,6 +626,31 @@ enum env_location env_get_location(enum env_operation op, int prio)
>
> #define DFU_ALT_BUF_LEN SZ_1K
>
> +static void mtd_found_part(u32 *base, u32 *size)
> +{
> + struct mtd_info *part, *mtd;
> +
> + mtd_probe_devices();
> +
> + mtd = get_mtd_device_nm("nor0");
> + if (!IS_ERR_OR_NULL(mtd)) {
> + list_for_each_entry(part, &mtd->partitions, node) {
> + debug("0x%012llx-0x%012llx : \"%s\"\n",
> + part->offset, part->offset + part->size,
> + part->name);
> +
> + if (*base >= part->offset &&
> + *base < part->offset + part->size) {
> + debug("Found my partition: %d/%s\n",
> + part->index, part->name);
> + *base = part->offset;
> + *size = part->size;
> + break;
> + }
> + }
> + }
> +}
> +
> void set_dfu_alt_info(char *interface, char *devstr)
> {
> int multiboot, bootseq = 0, len = 0;
> @@ -670,17 +695,29 @@ void set_dfu_alt_info(char *interface, char *devstr)
> break;
> case QSPI_MODE_24BIT:
> case QSPI_MODE_32BIT:
> - len += snprintf(buf + len, DFU_ALT_BUF_LEN,
> - "sf 0:0=boot.bin raw %x 0x1500000",
> - multiboot * SZ_32K);
> -#if defined(CONFIG_SPL_FS_LOAD_PAYLOAD_NAME) && defined(CONFIG_SYS_SPI_U_BOOT_OFFS)
> - if (strlen(CONFIG_SPL_FS_LOAD_PAYLOAD_NAME))
> + {
> + u32 base = multiboot * SZ_32K;
> + u32 size = 0x1500000;
> + u32 limit = size;
> +
> + mtd_found_part(&base, &limit);
> +
> +#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS)
> + size = limit;
> + limit = CONFIG_SYS_SPI_U_BOOT_OFFS;
> +#endif
> +
> len += snprintf(buf + len, DFU_ALT_BUF_LEN,
> - ";%s raw 0x%x 0x500000",
> - CONFIG_SPL_FS_LOAD_PAYLOAD_NAME,
> - multiboot * SZ_32K +
> - CONFIG_SYS_SPI_U_BOOT_OFFS);
> + "sf 0:0=boot.bin raw 0x%x 0x%x",
> + base, limit);
> +#if defined(CONFIG_SPL_FS_LOAD_PAYLOAD_NAME) && defined(CONFIG_SYS_SPI_U_BOOT_OFFS)
> + if (strlen(CONFIG_SPL_FS_LOAD_PAYLOAD_NAME))
> + len += snprintf(buf + len, DFU_ALT_BUF_LEN,
> + ";%s raw 0x%x 0x%x",
> + CONFIG_SPL_FS_LOAD_PAYLOAD_NAME,
> + base + limit, size - limit);
> #endif
> + }
> break;
> default:
> return;
Applied.
M
More information about the U-Boot
mailing list