ACK: [PATCH] acp: nfit: add platform capability according to manit 1831 (ACPI 6.2a)
ivanhu
ivan.hu at canonical.com
Wed Oct 11 10:00:08 UTC 2017
On 10/11/2017 06:19 AM, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
> src/acpi/nfit/nfit.c | 31 +++++++++++++++++++++++++++++--
> src/lib/include/fwts_acpi.h | 11 ++++++++++-
> 2 files changed, 39 insertions(+), 3 deletions(-)
>
> diff --git a/src/acpi/nfit/nfit.c b/src/acpi/nfit/nfit.c
> index e1a4815..b87f040 100644
> --- a/src/acpi/nfit/nfit.c
> +++ b/src/acpi/nfit/nfit.c
> @@ -322,12 +322,39 @@ static int nfit_test1(fwts_framework *fw)
> if (reserved != 0)
> reserved_passed = reserved;
>
> + } else if (entry->type == FWTS_ACPI_NFIT_TYPE_PLATFORM_CAPABILITY) {
> + fwts_acpi_table_nfit_platform_cap *nfit_struct = (fwts_acpi_table_nfit_platform_cap *) entry;
> + uint32_t reserved1;
> +
> + reserved1 = (uint32_t) nfit_struct->reserved1[0] + ((uint32_t) nfit_struct->reserved1[1] << 8) +
> + ((uint32_t) nfit_struct->reserved1[2] << 16);
> +
> + fwts_log_info_verbatim(fw, " Highest Valid Capability: 0x%2.2" PRIx8, nfit_struct->highest_valid_cap);
> + fwts_log_info_verbatim(fw, " Reserved1: 0x%8.8" PRIx32, reserved1);
> + fwts_log_info_verbatim(fw, " Capabilities: 0x%8.8" PRIx32, nfit_struct->cap);
> + fwts_log_info_verbatim(fw, " Reserved2: 0x%8.8" PRIx32, nfit_struct->reserved2);
> +
> + fwts_acpi_reserved_zero_check(fw, "NFIT", "Reserved1", reserved1, sizeof(reserved1), &passed);
> + fwts_acpi_reserved_bits_check(fw, "NFIT", "Capabilities", nfit_struct->cap, sizeof(nfit_struct->cap), 3, 31, &passed);
> +
> + if ((nfit_struct->cap & 0x1) && !(nfit_struct->cap & 0x2)) {
> + passed = false;
> + fwts_failed(fw, LOG_LEVEL_CRITICAL,
> + "NFITBadCapabilities",
> + "NFIT Capabilities[1] must be set and if Capabilities[0] is set, got "
> + "0x%8.8" PRIx32 " instead", nfit_struct->cap);
> + }
> +
> + if (nfit_struct->reserved2 != 0)
> + reserved_passed = nfit_struct->reserved2;
> +
> } else {
> passed = false;
> fwts_failed(fw, LOG_LEVEL_HIGH,
> "NFITBadSubType",
> - "NFIT Structure supports type 0..6, got "
> - "0x%4.4" PRIx16 " instead", entry->type);
> + "NFIT Structure supports type 0..%" PRId8 ", got "
> + "0x%4.4" PRIx16 " instead", FWTS_ACPI_NFIT_TYPE_RESERVED - 1,
> + entry->type);
> }
>
> fwts_acpi_reserved_zero_check(fw, "NFIT", "Reserved", reserved_passed, sizeof(reserved_passed), &passed);
> diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
> index d919aa8..e22e1af 100644
> --- a/src/lib/include/fwts_acpi.h
> +++ b/src/lib/include/fwts_acpi.h
> @@ -1166,7 +1166,8 @@ typedef enum {
> FWTS_ACPI_NFIT_TYPE_CONTROL_REGION = 4,
> FWTS_ACPI_NFIT_TYPE_DATA_REGION = 5,
> FWTS_ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
> - FWTS_ACPI_NFIT_TYPE_RESERVED = 7 /* >= 7 are reserved */
> + FWTS_ACPI_NFIT_TYPE_PLATFORM_CAPABILITY = 7,
> + FWTS_ACPI_NFIT_TYPE_RESERVED = 8 /* >= 8 are reserved */
> } fwts_acpi_nfit_type;
>
> typedef struct {
> @@ -1255,6 +1256,14 @@ typedef struct {
> uint64_t hint_address[];
> } __attribute__ ((packed)) fwts_acpi_table_nfit_flush_addr;
>
> +typedef struct {
> + fwts_acpi_table_nfit_struct_header header;
> + uint8_t highest_valid_cap;
> + uint8_t reserved1[3];
> + uint32_t cap;
> + uint32_t reserved2;
> +} __attribute__ ((packed)) fwts_acpi_table_nfit_platform_cap;
> +
> /*
> * ACPI HMAT (Heterogeneous Memory Attribute Table), 5.2.27
> */
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list