[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