On 3/28/22 19:25, Patrick Delaunay wrote: > Add support of UUID for FIP parttion, required by Firmware update > support in TF-A: > - UUID TYPE for FIP partition: 19d5df83-11b0-457b-be2c-7559c13142a5 > - "fip-a" partition UUID: 4fd84c93-54ef-463f-a7ef-ae25ff887087 > - "fip-b" partition UUID: 09c54952-d5bf-45af-acee-335303766fb3 > > This check is done with a new partition type "FIP" associated > at the FIP UUID. > > The A/B partition UUID is detected by the partition name: > "fip-a", "fip-b". > > Signed-off-by: Patrick Delaunay <[email protected]> > --- > > .../mach-stm32mp/cmd_stm32prog/stm32prog.c | 76 ++++++++++++++----- > .../mach-stm32mp/cmd_stm32prog/stm32prog.h | 3 +- > 2 files changed, 59 insertions(+), 20 deletions(-) > > diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c > b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c > index 3e1fdee5b3..d3b3e1ed72 100644 > --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c > +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c > @@ -62,6 +62,28 @@ static const efi_guid_t uuid_mmc[3] = { > ROOTFS_MMC2_UUID > }; > > +/* FIP type partition UUID used by TF-A*/ > +#define FIP_TYPE_UUID "19D5DF83-11B0-457B-BE2C-7559C13142A5" > + > +/* unique partition guid (uuid) for FIP partitions A/B */ > +#define FIP_A_UUID \ > + EFI_GUID(0x4FD84C93, 0x54EF, 0x463F, \ > + 0xA7, 0xEF, 0xAE, 0x25, 0xFF, 0x88, 0x70, 0x87) > + > +#define FIP_B_UUID \ > + EFI_GUID(0x09C54952, 0xD5BF, 0x45AF, \ > + 0xAC, 0xEE, 0x33, 0x53, 0x03, 0x76, 0x6F, 0xB3) > + > +static const char * const fip_part_name[] = { > + "fip-a", > + "fip-b" > +}; > + > +static const efi_guid_t fip_part_uuid[] = { > + FIP_A_UUID, > + FIP_B_UUID > +}; > + > /* order of column in flash layout file */ > enum stm32prog_col_t { > COL_OPTION, > @@ -405,6 +427,8 @@ static int parse_type(struct stm32prog_data *data, > part->bin_nb = > dectoul(&p[7], NULL); > } > + } else if (!strcmp(p, "FIP")) { > + part->part_type = PART_FIP; > } else if (!strcmp(p, "System")) { > part->part_type = PART_SYSTEM; > } else if (!strcmp(p, "FileSystem")) { > @@ -1056,9 +1080,10 @@ static int create_gpt_partitions(struct stm32prog_data > *data) > char uuid[UUID_STR_LEN + 1]; > unsigned char *uuid_bin; > unsigned int mmc_id; > - int i; > + int i, j; > bool rootfs_found; > struct stm32prog_part_t *part; > + const char *type_str; > > buf = malloc(buflen); > if (!buf) > @@ -1100,33 +1125,46 @@ static int create_gpt_partitions(struct > stm32prog_data *data) > part->addr, > part->size); > > - if (part->part_type == PART_BINARY) > - offset += snprintf(buf + offset, > - buflen - offset, > - ",type=" > - LINUX_RESERVED_UUID); > - else > - offset += snprintf(buf + offset, > - buflen - offset, > - ",type=linux"); > + switch (part->part_type) { > + case PART_BINARY: > + type_str = LINUX_RESERVED_UUID; > + break; > + case PART_FIP: > + type_str = FIP_TYPE_UUID; > + break; > + default: > + type_str = "linux"; > + break; > + } > + offset += snprintf(buf + offset, > + buflen - offset, > + ",type=%s", type_str); > > if (part->part_type == PART_SYSTEM) > offset += snprintf(buf + offset, > buflen - offset, > ",bootable"); > > + /* partition UUID */ > + uuid_bin = NULL; > if (!rootfs_found && !strcmp(part->name, "rootfs")) { > mmc_id = part->dev_id; > rootfs_found = true; > - if (mmc_id < ARRAY_SIZE(uuid_mmc)) { > - uuid_bin = > - (unsigned char *)uuid_mmc[mmc_id].b; > - uuid_bin_to_str(uuid_bin, uuid, > - UUID_STR_FORMAT_GUID); > - offset += snprintf(buf + offset, > - buflen - offset, > - ",uuid=%s", uuid); > - } > + if (mmc_id < ARRAY_SIZE(uuid_mmc)) > + uuid_bin = (unsigned char > *)uuid_mmc[mmc_id].b; > + } > + if (part->part_type == PART_FIP) { > + for (j = 0; j < ARRAY_SIZE(fip_part_name); j++) > + if (!strcmp(part->name, > fip_part_name[j])) { > + uuid_bin = (unsigned char > *)fip_part_uuid[j].b; > + break; > + } > + } > + if (uuid_bin) { > + uuid_bin_to_str(uuid_bin, uuid, > UUID_STR_FORMAT_GUID); > + offset += snprintf(buf + offset, > + buflen - offset, > + ",uuid=%s", uuid); > } > > offset += snprintf(buf + offset, buflen - offset, ";"); > diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h > b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h > index 90cdc2ba47..b3e5c74810 100644 > --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h > +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h > @@ -94,9 +94,10 @@ struct stm32_header_v2 { > /* partition type in flashlayout file */ > enum stm32prog_part_type { > PART_BINARY, > + PART_FIP, > PART_SYSTEM, > PART_FILESYSTEM, > - RAW_IMAGE > + RAW_IMAGE, > }; > > /* device information */ Applied to u-boot-stm32 Thanks Patrice

