ACK: [PATCH 5/5] acpi: srat: add new type 4 according to ACPI 6.2 (mantis 1656)
ivanhu
ivan.hu at canonical.com
Thu Jun 22 07:15:47 UTC 2017
On 06/20/2017 09:39 AM, 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: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list