diff mbox series

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

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

Commit Message

Alex Hung Jan. 26, 2021, 10:05 p.m. UTC
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(-)

Comments

Ivan Hu Feb. 1, 2021, 6:13 a.m. UTC | #1
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>
Colin Ian King Feb. 4, 2021, 8:20 a.m. UTC | #2
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 mbox series

Patch

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;