2013-03-15 19:57:10

by Linn Crosetto

[permalink] [raw]
Subject: [PATCH] acpi: remove length check for large registers

The legacy bit width field in the Generic Address Structure is 1 byte,
limiting the reportable register width to 255 bits. Larger registers
will cause a length mismatch warning to be printed in
acpi_tb_validate_fadt().

To avoid the warning, disable the length mismatch check for registers
larger than 255 bits.

Signed-off-by: Linn Crosetto <[email protected]>
---
drivers/acpi/acpica/tbfadt.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
index 74181bf..e87abcd 100644
--- a/drivers/acpi/acpica/tbfadt.c
+++ b/drivers/acpi/acpica/tbfadt.c
@@ -561,6 +561,7 @@ static void acpi_tb_validate_fadt(void)
* legacy length field and the corresponding 64-bit X length field.
*/
if (address64->address &&
+ ACPI_MUL_8(length) <= ACPI_UINT8_MAX &&
(address64->bit_width != ACPI_MUL_8(length))) {
ACPI_BIOS_WARNING((AE_INFO,
"32/64X length mismatch in FADT/%s: %u/%u",
--
1.7.11.3


2013-03-15 20:50:49

by Moore, Robert

[permalink] [raw]
Subject: RE: [PATCH] acpi: remove length check for large registers

Linn,

Can you explain in a bit more detail what brings this up?

I'm aware of the limitation of the generic address structure, but we are forced by the (current) ACPI specification to use it if it is present for a given register.

Thanks,
Bob


> -----Original Message-----
> From: Linn Crosetto [mailto:[email protected]]
> Sent: Friday, March 15, 2013 12:56 PM
> To: [email protected]; Moore, Robert; [email protected]; Zheng, Lv; linux-
> [email protected]
> Cc: [email protected]; Linn Crosetto
> Subject: [PATCH] acpi: remove length check for large registers
>
> The legacy bit width field in the Generic Address Structure is 1 byte,
> limiting the reportable register width to 255 bits. Larger registers will
> cause a length mismatch warning to be printed in acpi_tb_validate_fadt().
>
> To avoid the warning, disable the length mismatch check for registers
> larger than 255 bits.
>
> Signed-off-by: Linn Crosetto <[email protected]>
> ---
> drivers/acpi/acpica/tbfadt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
> index 74181bf..e87abcd 100644
> --- a/drivers/acpi/acpica/tbfadt.c
> +++ b/drivers/acpi/acpica/tbfadt.c
> @@ -561,6 +561,7 @@ static void acpi_tb_validate_fadt(void)
> * legacy length field and the corresponding 64-bit X length
> field.
> */
> if (address64->address &&
> + ACPI_MUL_8(length) <= ACPI_UINT8_MAX &&
> (address64->bit_width != ACPI_MUL_8(length))) {
> ACPI_BIOS_WARNING((AE_INFO,
> "32/64X length mismatch in FADT/%s:
> %u/%u",
> --
> 1.7.11.3

2013-03-15 21:18:48

by Linn Crosetto

[permalink] [raw]
Subject: Re: [PATCH] acpi: remove length check for large registers

On Fri, Mar 15, 2013 at 08:50:45PM +0000, Moore, Robert wrote:
> Can you explain in a bit more detail what brings this up?
>
> I'm aware of the limitation of the generic address structure, but we are forced by the (current) ACPI specification to use it if it is present for a given register.

A system with a GPE block bit_width of 256 triggers it. In this case, the length
check can never succeed.

Thanks,
Linn

2013-03-19 18:49:18

by Moore, Robert

[permalink] [raw]
Subject: RE: [PATCH] acpi: remove length check for large registers

Linn,

We will integrate this change into ACPICA for the next release, later in March 2013.
Thanks,
Bob


> -----Original Message-----
> From: Linn Crosetto [mailto:[email protected]]
> Sent: Friday, March 15, 2013 12:56 PM
> To: [email protected]; Moore, Robert; [email protected]; Zheng, Lv; linux-
> [email protected]
> Cc: [email protected]; Linn Crosetto
> Subject: [PATCH] acpi: remove length check for large registers
>
> The legacy bit width field in the Generic Address Structure is 1 byte,
> limiting the reportable register width to 255 bits. Larger registers will
> cause a length mismatch warning to be printed in acpi_tb_validate_fadt().
>
> To avoid the warning, disable the length mismatch check for registers
> larger than 255 bits.
>
> Signed-off-by: Linn Crosetto <[email protected]>
> ---
> drivers/acpi/acpica/tbfadt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
> index 74181bf..e87abcd 100644
> --- a/drivers/acpi/acpica/tbfadt.c
> +++ b/drivers/acpi/acpica/tbfadt.c
> @@ -561,6 +561,7 @@ static void acpi_tb_validate_fadt(void)
> * legacy length field and the corresponding 64-bit X length
> field.
> */
> if (address64->address &&
> + ACPI_MUL_8(length) <= ACPI_UINT8_MAX &&
> (address64->bit_width != ACPI_MUL_8(length))) {
> ACPI_BIOS_WARNING((AE_INFO,
> "32/64X length mismatch in FADT/%s:
> %u/%u",
> --
> 1.7.11.3