[PATCH] discover/platform-powerpc: Handle optional Get Device ID section

Samuel Mendoza-Jonas sam at mendozajonas.com
Wed Jun 14 14:11:07 AEST 2017


The 'auxiliary' section of the 'Get Device ID' response is optional,
and some platforms exclude it from the response entirely. However
Petitboot only recognises the response as valid if it includes the full
16 bytes.
Update get_ipmi_bmc_versions() to also handle responses of only 12 bytes.

Signed-off-by: Samuel Mendoza-Jonas <sam at mendozajonas.com>
---
 discover/platform-powerpc.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index c2e2233..1426078 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -1050,7 +1050,7 @@ static void get_ipmi_bmc_versions(struct platform *p, struct system_info *info)
 		pb_debug("\n");
 	}
 
-	if (rc == 0 && resp_len == 16) {
+	if (rc == 0 && (resp_len == 12 || resp_len == 16)) {
 		info->bmc_current = talloc_array(info, char *, 4);
 		info->n_bmc_current = 4;
 
@@ -1062,9 +1062,13 @@ static void get_ipmi_bmc_versions(struct platform *p, struct system_info *info)
 		bcd += 10 * (resp[4] >> 4);
 		/* rev1.rev2.aux_revision */
 		info->bmc_current[2] = talloc_asprintf(info,
-						"Firmware version: %u.%02u.%x%x%x%x",
-						resp[3], bcd, resp[12],
-						resp[13], resp[14], resp[15]);
+				"Firmware version: %u.%02u",
+				resp[3], bcd);
+		if (resp_len == 16) {
+			info->bmc_current[2] = talloc_asprintf_append(
+					info->bmc_current[2], ".%x%x%x%x",
+					resp[12], resp[13], resp[14], resp[15]);
+		}
 		bcd = resp[5] & 0x0f;
 		bcd += 10 * (resp[5] >> 4);
 		info->bmc_current[3] = talloc_asprintf(info, "IPMI version: %u",
@@ -1089,7 +1093,7 @@ static void get_ipmi_bmc_versions(struct platform *p, struct system_info *info)
 		pb_debug("\n");
 	}
 
-	if (rc == 0 && resp_len == 16) {
+	if (rc == 0 && (resp_len == 12 || resp_len == 16)) {
 		info->bmc_golden = talloc_array(info, char *, 4);
 		info->n_bmc_golden = 4;
 
@@ -1101,9 +1105,13 @@ static void get_ipmi_bmc_versions(struct platform *p, struct system_info *info)
 		bcd += 10 * (resp[4] >> 4);
 		/* rev1.rev2.aux_revision */
 		info->bmc_golden[2] = talloc_asprintf(info,
-						"Firmware version: %u.%02u.%x%x%x%x",
-						resp[3], bcd, resp[12],
-						resp[13], resp[14], resp[15]);
+				"Firmware version: %u.%02u",
+				resp[3], bcd);
+		if (resp_len == 16) {
+			info->bmc_golden[2] = talloc_asprintf_append(
+					info->bmc_golden[2], ".%x%x%x%x",
+					resp[12], resp[13], resp[14], resp[15]);
+		}
 		bcd = resp[5] & 0x0f;
 		bcd += 10 * (resp[5] >> 4);
 		info->bmc_golden[3] = talloc_asprintf(info, "IPMI version: %u",
-- 
2.13.1



More information about the Petitboot mailing list