Message ID | 20210126220512.194272-1-alex.hung@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | [V2] acpi: srat/hmat: update fields of sub-structures (mantis 1991) | expand |
On 1/27/21 6:05 AM, Alex Hung wrote: > Also fixed incorrect flag size output in SRAT > > Signed-off-by: Alex Hung <alex.hung@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; > Acked-by: Ivan Hu <ivan.hu@canonical.com>
On 26/01/2021 22:05, Alex Hung wrote: > Also fixed incorrect flag size output in SRAT > > Signed-off-by: Alex Hung <alex.hung@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; > Please ignore my ack on V1 of this patch Acked-by: Colin Ian King <colin.king@canonical.com>
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;
Also fixed incorrect flag size output in SRAT Signed-off-by: Alex Hung <alex.hung@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(-)