[PATCH][V2] acpi: srat/hmat: update fields of sub-structures (mantis 1991)

Alex Hung alex.hung at canonical.com
Tue Jan 26 22:05:10 UTC 2021


Also fixed incorrect flag size output in SRAT

Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
 src/acpi/hmat/hmat.c        | 14 +++++++++++---
 src/acpi/srat/srat.c        |  2 +-
 src/lib/include/fwts_acpi.h |  3 ++-
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/acpi/hmat/hmat.c b/src/acpi/hmat/hmat.c
index 307adcfd..066a484d 100644
--- a/src/acpi/hmat/hmat.c
+++ b/src/acpi/hmat/hmat.c
@@ -51,6 +51,7 @@ static void hmat_proximity_domain_test(fwts_framework *fw, const fwts_acpi_table
 static void hmat_locality_test(fwts_framework *fw, const fwts_acpi_table_hmat_locality *entry, bool *passed)
 {
 	uint32_t pd_size;
+	uint16_t reserved1 = (entry->reserved1 << 8) + entry->min_transfer_size;
 
 	fwts_log_info_verbatim(fw, "  System Locality Latency and Bandwidth Information (Type 1):");
 	fwts_log_info_simp_int(fw, "    Type:                           ", entry->header.type);
@@ -58,14 +59,18 @@ static void hmat_locality_test(fwts_framework *fw, const fwts_acpi_table_hmat_lo
 	fwts_log_info_simp_int(fw, "    Length:                         ", entry->header.length);
 	fwts_log_info_simp_int(fw, "    Flags:                          ", entry->flags);
 	fwts_log_info_simp_int(fw, "    Data Type:                      ", entry->data_type);
-	fwts_log_info_simp_int(fw, "    Reserved:                       ", entry->reserved1);
+	if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_64) {
+		fwts_log_info_simp_int(fw, "    MinTransferSize:                ", entry->min_transfer_size);
+		fwts_log_info_simp_int(fw, "    Reserved:                       ", entry->reserved1);
+	} else
+		fwts_log_info_simp_int(fw, "    Reserved:                       ", reserved1);
 	fwts_log_info_simp_int(fw, "    Number of Initiator PDs:        ", entry->num_initiator);
 	fwts_log_info_simp_int(fw, "    Number of Target PDs:           ", entry->num_target);
 	fwts_log_info_simp_int(fw, "    Reserved:                       ", entry->reserved2);
 	fwts_log_info_simp_int(fw, "    Entry Base Unit:                ", entry->entry_base_unit);
 
 	fwts_acpi_reserved_zero_check(fw, "HMAT", "Reserved", entry->header.reserved, sizeof(entry->header.reserved), passed);
-	fwts_acpi_reserved_bits_check(fw, "HMAT", "Flags", entry->flags, sizeof(entry->flags), 4, 7, passed);
+	fwts_acpi_reserved_bits_check(fw, "HMAT", "Flags", entry->flags, sizeof(entry->flags), 6, 7, passed);
 
 	if (entry->data_type > 5) {
 		*passed = false;
@@ -75,7 +80,10 @@ static void hmat_locality_test(fwts_framework *fw, const fwts_acpi_table_hmat_lo
 			"0x%2.2" PRIx8 " instead", entry->data_type);
 	}
 
-	fwts_acpi_reserved_zero_check(fw, "HMAT", "Reserved", entry->reserved1, sizeof(entry->reserved1), passed);
+	if (fwts_get_acpi_version(fw) >= FWTS_ACPI_VERSION_64)
+		fwts_acpi_reserved_zero_check(fw, "HMAT", "Reserved", entry->reserved1, sizeof(entry->reserved1), passed);
+	else
+		fwts_acpi_reserved_zero_check(fw, "HMAT", "Reserved", reserved1, sizeof(reserved1), passed);
 	fwts_acpi_reserved_zero_check(fw, "HMAT", "Reserved", entry->reserved2, sizeof(entry->reserved2), passed);
 
 	pd_size = (entry->num_initiator + entry->num_target) * 4 +
diff --git a/src/acpi/srat/srat.c b/src/acpi/srat/srat.c
index 3c0abdb7..65513e37 100644
--- a/src/acpi/srat/srat.c
+++ b/src/acpi/srat/srat.c
@@ -329,7 +329,7 @@ static void srat_check_initiator_affinity(
 			h_reserved += affinity->device_handle[i];
 	}
 	fwts_acpi_reserved_zero_check(fw, "SRAT", "Initiator Affinity Device Handle Reserve", h_reserved, sizeof(uint32_t), passed);
-	fwts_acpi_reserved_bits_check(fw, "SRAT", "Initiator Affinity Flags", affinity->flags, sizeof(affinity->flags), 1, 15, passed);
+	fwts_acpi_reserved_bits_check(fw, "SRAT", "Initiator Affinity Flags", affinity->flags, sizeof(affinity->flags), 2, 31, passed);
 	fwts_acpi_reserved_zero_check(fw, "SRAT", "Initiator Affinity Reserved", affinity->reserved2, sizeof(affinity->reserved2), passed);
 
 done:
diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index 6c759a2a..a00b0660 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -1382,7 +1382,8 @@ typedef struct {
 	fwts_acpi_table_hmat_header	header;
 	uint8_t		flags;
 	uint8_t		data_type;
-	uint16_t	reserved1;
+	uint8_t         min_transfer_size;
+	uint8_t         reserved1;
 	uint32_t	num_initiator;
 	uint32_t	num_target;
 	uint32_t	reserved2;
-- 
2.25.1




More information about the fwts-devel mailing list