blob: 2c0ad250777145d5367057226716181f583c3011 [file] [log] [blame]
Andrew Geisslerea144b032023-01-27 16:03:57 -06001From 323df950c63af6d1a9ba5bd16f4f9d9348e9afc2 Mon Sep 17 00:00:00 2001
Patrick Williams92b42cb2022-09-03 06:53:57 -05002From: Vishnu Banavath <vishnu.banavath@arm.com>
3Date: Fri, 17 Dec 2021 19:50:25 +0000
Andrew Geisslerea144b032023-01-27 16:03:57 -06004Subject: [PATCH 17/25] efi_firmware: add get_image_info for corstone1000
Patrick Williams92b42cb2022-09-03 06:53:57 -05005
6This change is to populate get_image_info which eventually
7will be populated in ESRT table
8
9Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
Patrick Williams92b42cb2022-09-03 06:53:57 -050010Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Patrick Williams8dd68482022-10-04 07:57:18 -050011Upstream-Status: Pending [Not submitted to upstream yet]
Patrick Williams92b42cb2022-09-03 06:53:57 -050012---
13 lib/efi_loader/efi_firmware.c | 71 ++++++++++++++++++++++++++++++++++-
14 1 file changed, 70 insertions(+), 1 deletion(-)
15
16diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
Patrick Williams8dd68482022-10-04 07:57:18 -050017index 30cafd15ca..af43d4502f 100644
Patrick Williams92b42cb2022-09-03 06:53:57 -050018--- a/lib/efi_loader/efi_firmware.c
19+++ b/lib/efi_loader/efi_firmware.c
20@@ -17,11 +17,69 @@
21
22 #define FMP_PAYLOAD_HDR_SIGNATURE SIGNATURE_32('M', 'S', 'S', '1')
23
24+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
25+#define EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID \
26+ EFI_GUID(0xe2bb9c06, 0x70e9, 0x4b14, 0x97, 0xa3, \
27+ 0x5a, 0x79, 0x13, 0x17, 0x6e, 0x3f)
28+
29+ const efi_guid_t efi_firmware_image_type_uboot_raw =
30+ EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID;
31+
32+static efi_status_t efi_corstone1000_img_info_get (
33+ efi_uintn_t *image_info_size,
34+ struct efi_firmware_image_descriptor *image_info,
35+ u32 *descriptor_version,
36+ u8 *descriptor_count,
37+ efi_uintn_t *descriptor_size,
38+ u32 *package_version,
39+ u16 **package_version_name,
40+ const efi_guid_t *image_type)
41+{
42+ int i = 0;
43+
44+ *image_info_size = sizeof(*image_info);
45+ *descriptor_version = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
46+ *descriptor_count = 1;//dfu_num;
47+ *descriptor_size = sizeof(*image_info);
48+ if (package_version)
49+ *package_version = 0xffffffff; /* not supported */
50+ if(package_version_name)
51+ *package_version_name = NULL; /* not supported */
52+
53+ if(image_info == NULL) {
54+ log_warning("image_info is null\n");
55+ return EFI_BUFFER_TOO_SMALL;
56+ }
57+
58+ image_info[i].image_index = i;
59+ image_info[i].image_type_id = *image_type;
60+ image_info[i].image_id = 0;
61+ image_info[i].image_id_name = "wic";
62+ image_info[i].version = 1;
63+ image_info[i].version_name = NULL;
64+ image_info[i].size = 0x1000;
65+ image_info[i].attributes_supported = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
66+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
67+ image_info[i].attributes_setting = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE;
68+ /* Check if the capsule authentication is enabled */
69+ if (IS_ENABLED(CONFIG_EFI_CAPSULE_AUTHENTICATE))
70+ image_info[0].attributes_setting |=
71+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
72+ image_info[i].lowest_supported_image_version = 0;
73+ image_info[i].last_attempt_version = 0;
74+ image_info[i].last_attempt_status = LAST_ATTEMPT_STATUS_SUCCESS;
75+ image_info[i].hardware_instance = 1;
76+ image_info[i].dependencies = NULL;
77+
78+ return EFI_SUCCESS;
79+}
80+#endif
81+
82 /**
83 * struct fmp_payload_header - EDK2 header for the FMP payload
84 *
85 * This structure describes the header which is preprended to the
86- * FMP payload by the edk2 capsule generation scripts.
87+ * FMP payload by the edk1 capsule generation scripts.
88 *
89 * @signature: Header signature used to identify the header
90 * @header_size: Size of the structure
91@@ -285,10 +343,18 @@ efi_status_t EFIAPI efi_firmware_get_image_info(
92 !descriptor_size || !package_version || !package_version_name))
93 return EFI_EXIT(EFI_INVALID_PARAMETER);
94
95+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
96+ ret = efi_corstone1000_img_info_get(image_info_size, image_info,
97+ descriptor_version, descriptor_count,
98+ descriptor_size,
99+ package_version, package_version_name,
100+ &efi_firmware_image_type_uboot_raw);
101+#else
102 ret = efi_fill_image_desc_array(image_info_size, image_info,
103 descriptor_version, descriptor_count,
104 descriptor_size, package_version,
105 package_version_name);
106+#endif
107
108 return EFI_EXIT(ret);
109 }
110@@ -401,6 +467,9 @@ efi_status_t EFIAPI efi_firmware_raw_set_image(
111 if (status != EFI_SUCCESS)
112 return EFI_EXIT(status);
113
114+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
115+ return EFI_EXIT(EFI_SUCCESS);
116+#endif
117 if (dfu_write_by_alt(image_index - 1, (void *)image, image_size,
118 NULL, NULL))
119 return EFI_EXIT(EFI_DEVICE_ERROR);
120--
Patrick Williams8dd68482022-10-04 07:57:18 -05001212.17.1
Patrick Williams92b42cb2022-09-03 06:53:57 -0500122