ACK: [PATCH 5/5] acpi: srat: add new type 4 according to ACPI 6.2 (mantis 1656)

Colin Ian King colin.king at canonical.com
Tue Jun 20 08:46:50 UTC 2017


On 20/06/17 02:39, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
>  src/acpi/srat/srat.c        | 56 ++++++++++++++++++++++++++++++++++++++++++++-
>  src/lib/include/fwts_acpi.h |  8 +++++++
>  2 files changed, 63 insertions(+), 1 deletion(-)
> 
> diff --git a/src/acpi/srat/srat.c b/src/acpi/srat/srat.c
> index 33890bc..aee49f8 100644
> --- a/src/acpi/srat/srat.c
> +++ b/src/acpi/srat/srat.c
> @@ -266,7 +266,7 @@ static void srat_check_gicc_affinity(
>  	fwts_log_info_verbatim(fw, "SRAT GICC Affinity Structure:");
>  	fwts_log_info_verbatim(fw, "  Type:                     0x%2.2" PRIx8, affinity->type);
>  	fwts_log_info_verbatim(fw, "  Length:                   0x%2.2" PRIx8, affinity->length);
> -	fwts_log_info_verbatim(fw, "  Proximity Domain:         0x%4.4" PRIx32, affinity->proximity_domain);
> +	fwts_log_info_verbatim(fw, "  Proximity Domain:         0x%8.8" PRIx32, affinity->proximity_domain);
>  	fwts_log_info_verbatim(fw, "  ACPI Processor UID:       0x%8.8" PRIx32, affinity->acpi_processor_uid);
>  	fwts_log_info_verbatim(fw, "  Flags:                    0x%8.8" PRIx32, affinity->flags);
>  	fwts_log_info_verbatim(fw, "  Clock Domain              0x%8.8" PRIx32, affinity->clock_domain);
> @@ -290,6 +290,57 @@ done:
>  	*data += sizeof(fwts_acpi_table_gicc_affinity);
>  }
>  
> +static void srat_check_its_affinity(
> +	fwts_framework *fw,
> +	ssize_t		*length,
> +	uint8_t		**data,
> +	bool		*passed)
> +{
> +	fwts_acpi_table_its_affinity *affinity =
> +		(fwts_acpi_table_its_affinity *)*data;
> +
> +	if ((ssize_t)sizeof(fwts_acpi_table_its_affinity) > *length) {
> +		fwts_failed(fw, LOG_LEVEL_MEDIUM,
> +			"SRATITSAffinityShort",
> +			"SRAT ITS Affinity structure too short, got "
> +			"%zu bytes, expecting %zu bytes",
> +			*length, sizeof(fwts_acpi_table_its_affinity));
> +		*passed = false;
> +		goto done;
> +	}
> +
> +	if (affinity->length != sizeof(fwts_acpi_table_its_affinity)) {
> +		fwts_failed(fw, LOG_LEVEL_MEDIUM,
> +			"SRATITSAffinityLength",
> +			"SRAT ITS Affinity Length incorrect, got "
> +			"%" PRIu8 ", expecting %zu",
> +			affinity->length, sizeof(fwts_acpi_table_its_affinity));
> +		*passed = false;
> +		goto done;
> +	}
> +
> +	fwts_log_info_verbatim(fw, "SRAT ITS Affinity Structure:");
> +	fwts_log_info_verbatim(fw, "  Type:                     0x%2.2" PRIx8, affinity->type);
> +	fwts_log_info_verbatim(fw, "  Length:                   0x%2.2" PRIx8, affinity->length);
> +	fwts_log_info_verbatim(fw, "  Proximity Domain:         0x%8.8" PRIx32, affinity->proximity_domain);
> +	fwts_log_info_verbatim(fw, "  Reserved:                 0x%4.4" PRIx16, affinity->reserved);
> +	fwts_log_info_verbatim(fw, "  ITS ID                    0x%8.8" PRIx32, affinity->its_id);
> +	fwts_log_nl(fw);
> +
> +	if (affinity->reserved) {
> +		fwts_failed(fw, LOG_LEVEL_MEDIUM,
> +			"SRATITSBadReserved",
> +			"ITS Affinity Reserved field should be zero, got "
> +			"0x%" PRIx16,
> +			affinity->reserved);
> +		*passed = false;
> +	}
> +
> +done:
> +	*length -= sizeof(fwts_acpi_table_its_affinity);
> +	*data += sizeof(fwts_acpi_table_its_affinity);
> +}
> +
>  /*
>   *  See ACPI 6.0, Section 5.2.16
>   */
> @@ -325,6 +376,9 @@ static int srat_test1(fwts_framework *fw)
>  		case 0x03:
>  			srat_check_gicc_affinity(fw, &length, &data, &passed);
>  			break;
> +		case 0x04:
> +			srat_check_its_affinity(fw, &length, &data, &passed);
> +			break;
>  		default:
>  			fwts_failed(fw, LOG_LEVEL_HIGH,
>  				"SRATInvalidType",
> diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
> index d22f1f4..f04d37a 100644
> --- a/src/lib/include/fwts_acpi.h
> +++ b/src/lib/include/fwts_acpi.h
> @@ -410,6 +410,14 @@ typedef struct {
>  	uint32_t	clock_domain;
>  } __attribute__ ((packed)) fwts_acpi_table_gicc_affinity;
>  
> +typedef struct {
> +	uint8_t		type;
> +	uint8_t		length;
> +	uint32_t	proximity_domain;
> +	uint16_t	reserved;
> +	uint32_t	its_id;
> +} __attribute__ ((packed)) fwts_acpi_table_its_affinity;
> +
>  /*
>   * ACPI HPET (HPET IA-PC High Precision Event Timer Table),
>   *    3.2.4 The ACPI 2.0 HPET Description Table (HPET)
> 
Acked-by: Colin Ian King <colin.king at canonical.com>



More information about the fwts-devel mailing list