ACK: [PATCH 17/21] FADT: enhance compliance tests for GPE blocks
Colin Ian King
colin.king at canonical.com
Tue Feb 9 12:27:41 UTC 2016
On 09/02/16 01:32, Al Stone wrote:
> Other parts of the FADT tests check for proper operation of some of the
> address fields, like the PM or GPE blocks. The original GPE test was
> rewritten here to check the fields in more detail.
>
> Signed-off-by: Al Stone <al.stone at linaro.org>
> ---
> src/acpi/fadt/fadt.c | 97 ++++++++++++++++++++++++++++++++--------------------
> 1 file changed, 60 insertions(+), 37 deletions(-)
>
> diff --git a/src/acpi/fadt/fadt.c b/src/acpi/fadt/fadt.c
> index 3b5547f..b349954 100644
> --- a/src/acpi/fadt/fadt.c
> +++ b/src/acpi/fadt/fadt.c
> @@ -1227,50 +1227,72 @@ static void acpi_table_check_fadt_pm_tmr_len(fwts_framework *fw)
> }
> }
>
> -static void acpi_table_check_fadt_gpe(
> - fwts_framework *fw,
> - const fwts_acpi_table_fadt *fadt,
> - bool *passed)
> +static void acpi_table_check_fadt_gpe0_blk_len(fwts_framework *fw)
> {
> - if (fwts_acpi_is_reduced_hardware(fadt)) {
> - if (fadt->gpe0_blk_len != 0) {
> - fwts_warning(fw, "FADT GPE0_BLK_LEN is not zero "
> - "but should be in reduced hardware mode.");
> - }
> - if (fadt->gpe1_blk_len != 0) {
> - fwts_warning(fw, "FADT GPE1_BLK_LEN is not zero but "
> - "should be in reduced hardware mode.");
> - }
> - return;
> - }
> -
> if (fadt->gpe0_blk_len & 1) {
> - *passed = false;
> fwts_failed(fw, LOG_LEVEL_MEDIUM,
> - "FADTBadGPEBLKLEN",
> - "FADT GPE0_BLK_LEN is %" PRIu8
> - ", should a multiple of 2.",
> - fadt->gpe0_blk_len);
> + "FADTBadGPE0BLKLEN",
> + "FADT GPE0_BLK_LEN is %" PRIu8
> + ", should a multiple of 2.",
> + fadt->gpe0_blk_len);
> fwts_advice(fw,
> - "The FADT GPE_BLK_LEN should be a multiple of 2. "
> - "Because it isn't, the ACPI driver will not map in "
> - "the GPE0 region. This could mean that General "
> - "Purpose Events will not function correctly (for "
> - "example lid or ac-power events).");
> + "The FADT GPE0_BLK_LEN should be a multiple of 2. "
> + "Because it isn't, the ACPI driver will not map in "
> + "the GPE0 region. This could mean that General "
> + "Purpose Events will not function correctly (for "
> + "example lid or AC-power events).");
> + } else {
> + if (fadt->gpe0_blk_len)
> + fwts_passed(fw, "FADT GPE0_BLK_LEN non-zero and a "
> + "non-negative multiple of 2: %" PRIu8 ".",
> + fadt->gpe0_blk_len);
> + else
> + fwts_failed(fw, LOG_LEVEL_MEDIUM,
> + "FADTZeroGPE0BlkLen",
> + "FADT GPE0_BLK_LEN is zero, but must be "
> + "set to a non-negative multiple of 2.");
> +
> + }
> +}
> +
> +static void acpi_table_check_fadt_gpe1_blk_len(fwts_framework *fw)
> +{
> + if (fadt->gpe1_blk_len == 0) {
> + if (fadt->gpe1_blk == 0)
> + fwts_passed(fw, "FADT GPE1_BLK_LEN is zero and "
> + "GPE1_BLK is not supported.");
> + else
> + fwts_failed(fw, LOG_LEVEL_MEDIUM,
> + "FADTGPE1BlkLenInconsistent",
> + "FADT GPE1_BLK_LEN must be zero because "
> + "GPE1_BLK is not supported, but is %d.",
> + fadt->gpe1_blk_len);
> + return;
> }
> +
> if (fadt->gpe1_blk_len & 1) {
> - *passed = false;
> fwts_failed(fw, LOG_LEVEL_MEDIUM,
> - "FADTBadGPE1BLKLEN",
> - "FADT GPE1_BLK_LEN is %" PRIu8
> - ", should a multiple of 2.",
> - fadt->gpe1_blk_len);
> + "FADTBadGPE1BLKLEN",
> + "FADT GPE1_BLK_LEN is %" PRIu8
> + ", should a multiple of 2.",
> + fadt->gpe1_blk_len);
> fwts_advice(fw,
> - "The FADT GPE1_BLK_LEN should be a multiple of 2. "
> - "Because it isn't, the ACPI driver will not map in "
> - "the GPE1 region. This could mean that General "
> - "Purpose Events will not function correctly (for "
> - "example lid or ac-power events).");
> + "The FADT GPE1_BLK_LEN should be a multiple of 2. "
> + "Because it isn't, the ACPI driver will not map in "
> + "the GPE1 region. This could mean that General "
> + "Purpose Events will not function correctly (for "
> + "example lid or AC-power events).");
> + } else {
> + if (fadt->gpe1_blk_len)
> + fwts_passed(fw, "FADT GPE1_BLK_LEN non-zero and a "
> + "non-negative multiple of 2: %" PRIu8 ".",
> + fadt->gpe1_blk_len);
> + else
> + fwts_failed(fw, LOG_LEVEL_MEDIUM,
> + "FADTZeroGPE1BlkLen",
> + "FADT GPE1_BLK_LEN is zero, but must be "
> + "set to a non-negative multiple of 2.");
> +
> }
> }
>
> @@ -1308,7 +1330,8 @@ static int fadt_test1(fwts_framework *fw)
> acpi_table_check_fadt_pm1_cnt_len(fw);
> acpi_table_check_fadt_pm2_cnt_len(fw);
> acpi_table_check_fadt_pm_tmr_len(fw);
> - acpi_table_check_fadt_gpe(fw, fadt, &passed);
> + acpi_table_check_fadt_gpe0_blk_len(fw);
> + acpi_table_check_fadt_gpe1_blk_len(fw);
> fwts_log_info(fw, "FADT GPE1_BASE is %" PRIu8, fadt->gpe1_base);
>
> fwts_log_info(fw, "FADT FLUSH_SIZE is %" PRIu16,
>
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the fwts-devel
mailing list