blob: 8f86b653bf7c12b7deea84738fd14662073f434a [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001From fcd1dc670d83bd7e7528370d0d6f168bfb44054d 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 21/24] 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 | 71 ++++++++++++++++++++++++++++++++++-
16 1 file changed, 70 insertions(+), 1 deletion(-)
17
18diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
19index 30cafd15caac..af43d4502f92 100644
20--- a/lib/efi_loader/efi_firmware.c
21+++ b/lib/efi_loader/efi_firmware.c
22@@ -17,11 +17,69 @@
23
24 #define FMP_PAYLOAD_HDR_SIGNATURE SIGNATURE_32('M', 'S', 'S', '1')
25
26+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
27+#define EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID \
28+ EFI_GUID(0xe2bb9c06, 0x70e9, 0x4b14, 0x97, 0xa3, \
29+ 0x5a, 0x79, 0x13, 0x17, 0x6e, 0x3f)
30+
31+ const efi_guid_t efi_firmware_image_type_uboot_raw =
32+ EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID;
33+
34+static efi_status_t efi_corstone1000_img_info_get (
35+ efi_uintn_t *image_info_size,
36+ struct efi_firmware_image_descriptor *image_info,
37+ u32 *descriptor_version,
38+ u8 *descriptor_count,
39+ efi_uintn_t *descriptor_size,
40+ u32 *package_version,
41+ u16 **package_version_name,
42+ const efi_guid_t *image_type)
43+{
44+ int i = 0;
45+
46+ *image_info_size = sizeof(*image_info);
47+ *descriptor_version = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
48+ *descriptor_count = 1;//dfu_num;
49+ *descriptor_size = sizeof(*image_info);
50+ if (package_version)
51+ *package_version = 0xffffffff; /* not supported */
52+ if(package_version_name)
53+ *package_version_name = NULL; /* not supported */
54+
55+ if(image_info == NULL) {
56+ log_warning("image_info is null\n");
57+ return EFI_BUFFER_TOO_SMALL;
58+ }
59+
60+ image_info[i].image_index = i;
61+ image_info[i].image_type_id = *image_type;
62+ image_info[i].image_id = 0;
63+ image_info[i].image_id_name = "wic";
64+ image_info[i].version = 1;
65+ image_info[i].version_name = NULL;
66+ image_info[i].size = 0x1000;
67+ image_info[i].attributes_supported = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
68+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
69+ image_info[i].attributes_setting = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE;
70+ /* Check if the capsule authentication is enabled */
71+ if (IS_ENABLED(CONFIG_EFI_CAPSULE_AUTHENTICATE))
72+ image_info[0].attributes_setting |=
73+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
74+ image_info[i].lowest_supported_image_version = 0;
75+ image_info[i].last_attempt_version = 0;
76+ image_info[i].last_attempt_status = LAST_ATTEMPT_STATUS_SUCCESS;
77+ image_info[i].hardware_instance = 1;
78+ image_info[i].dependencies = NULL;
79+
80+ return EFI_SUCCESS;
81+}
82+#endif
83+
84 /**
85 * struct fmp_payload_header - EDK2 header for the FMP payload
86 *
87 * This structure describes the header which is preprended to the
88- * FMP payload by the edk2 capsule generation scripts.
89+ * FMP payload by the edk1 capsule generation scripts.
90 *
91 * @signature: Header signature used to identify the header
92 * @header_size: Size of the structure
93@@ -285,10 +343,18 @@ efi_status_t EFIAPI efi_firmware_get_image_info(
94 !descriptor_size || !package_version || !package_version_name))
95 return EFI_EXIT(EFI_INVALID_PARAMETER);
96
97+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
98+ ret = efi_corstone1000_img_info_get(image_info_size, image_info,
99+ descriptor_version, descriptor_count,
100+ descriptor_size,
101+ package_version, package_version_name,
102+ &efi_firmware_image_type_uboot_raw);
103+#else
104 ret = efi_fill_image_desc_array(image_info_size, image_info,
105 descriptor_version, descriptor_count,
106 descriptor_size, package_version,
107 package_version_name);
108+#endif
109
110 return EFI_EXIT(ret);
111 }
112@@ -401,6 +467,9 @@ efi_status_t EFIAPI efi_firmware_raw_set_image(
113 if (status != EFI_SUCCESS)
114 return EFI_EXIT(status);
115
116+#if CONFIG_IS_ENABLED(TARGET_CORSTONE1000)
117+ return EFI_EXIT(EFI_SUCCESS);
118+#endif
119 if (dfu_write_by_alt(image_index - 1, (void *)image, image_size,
120 NULL, NULL))
121 return EFI_EXIT(EFI_DEVICE_ERROR);
122--
1232.37.1
124