blob: c86b658158975b00136814f96e12ac2996b2f9da [file] [log] [blame]
Brad Bishopbec4ebc2022-08-03 09:55:16 -04001From 34fadec4f659248a6020676f5894895977ccf79d Mon Sep 17 00:00:00 2001
2From: Vishnu Banavath <vishnu.banavath@arm.com>
3Date: Fri, 17 Dec 2021 19:50:25 +0000
4Subject: [PATCH 23/27] efi_firmware: add get_image_info for corstone1000
5
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>
10
11%% original patch: 0047-efi_firmware-add-get_image_info-for-corstone1000.patch
12
13Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
14---
15 lib/efi_loader/efi_firmware.c | 64 ++++++++++++++++++++++++++++++++++-
16 1 file changed, 63 insertions(+), 1 deletion(-)
17
18diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
19index a5ff32f121f4..9eb89849b28d 100644
20--- a/lib/efi_loader/efi_firmware.c
21+++ b/lib/efi_loader/efi_firmware.c
22@@ -241,6 +241,7 @@ const efi_guid_t efi_firmware_image_type_uboot_fit =
23 *
24 * Return status code
25 */
26+
27 static
28 efi_status_t EFIAPI efi_firmware_fit_get_image_info(
29 struct efi_firmware_management_protocol *this,
30@@ -332,6 +333,56 @@ const struct efi_firmware_management_protocol efi_fmp_fit = {
31 const efi_guid_t efi_firmware_image_type_uboot_raw =
32 EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID;
33
34+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
35+static efi_status_t efi_corstone1000_img_info_get (
36+ efi_uintn_t *image_info_size,
37+ struct efi_firmware_image_descriptor *image_info,
38+ u32 *descriptor_version,
39+ u8 *descriptor_count,
40+ efi_uintn_t *descriptor_size,
41+ u32 *package_version,
42+ u16 **package_version_name,
43+ const efi_guid_t *image_type)
44+{
45+ int i = 0;
46+
47+ *image_info_size = sizeof(*image_info);
48+ *descriptor_version = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
49+ *descriptor_count = 1;//dfu_num;
50+ *descriptor_size = sizeof(*image_info);
51+ if (package_version)
52+ *package_version = 0xffffffff; /* not supported */
53+ if(package_version_name)
54+ *package_version_name = NULL; /* not supported */
55+
56+ if(image_info == NULL) {
57+ log_warning("image_info is null\n");
58+ return EFI_BUFFER_TOO_SMALL;
59+ }
60+
61+ image_info[i].image_index = i;
62+ image_info[i].image_type_id = *image_type;
63+ image_info[i].image_id = 0;
64+ image_info[i].image_id_name = "wic";
65+ image_info[i].version = 1;
66+ image_info[i].version_name = NULL;
67+ image_info[i].size = 0x1000;
68+ image_info[i].attributes_supported = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
69+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
70+ image_info[i].attributes_setting = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE;
71+ /* Check if the capsule authentication is enabled */
72+ if (IS_ENABLED(CONFIG_EFI_CAPSULE_AUTHENTICATE))
73+ image_info[0].attributes_setting |=
74+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
75+ image_info[i].lowest_supported_image_version = 0;
76+ image_info[i].last_attempt_version = 0;
77+ image_info[i].last_attempt_status = LAST_ATTEMPT_STATUS_SUCCESS;
78+ image_info[i].hardware_instance = 1;
79+ image_info[i].dependencies = NULL;
80+
81+ return EFI_SUCCESS;
82+}
83+#endif
84 /**
85 * efi_firmware_raw_get_image_info - return information about the current
86 firmware image
87@@ -376,12 +427,20 @@ efi_status_t EFIAPI efi_firmware_raw_get_image_info(
88 !descriptor_size || !package_version || !package_version_name))
89 return EFI_EXIT(EFI_INVALID_PARAMETER);
90
91- ret = efi_get_dfu_info(image_info_size, image_info,
92+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
93+ ret = efi_corstone1000_img_info_get(image_info_size, image_info,
94 descriptor_version, descriptor_count,
95 descriptor_size,
96 package_version, package_version_name,
97 &efi_firmware_image_type_uboot_raw);
98+#else
99
100+ ret = efi_get_dfu_info(image_info_size, image_info,
101+ descriptor_version, descriptor_count,
102+ descriptor_size,
103+ package_version, package_version_name,
104+ &efi_firmware_image_type_uboot_raw);
105+#endif
106 return EFI_EXIT(ret);
107 }
108
109@@ -462,6 +521,9 @@ efi_status_t EFIAPI efi_firmware_raw_set_image(
110
111 }
112
113+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
114+ return EFI_EXIT(EFI_SUCCESS);
115+#endif
116 if (dfu_write_by_alt(image_index - 1, (void *)image, image_size,
117 NULL, NULL))
118 return EFI_EXIT(EFI_DEVICE_ERROR);
119--
1202.30.2
121