Question about rsdp test?
Colin Ian King
colin.king at canonical.com
Wed Jul 20 16:09:20 UTC 2016
On 20/07/16 17:02, Al Stone wrote:
> On 07/20/2016 01:02 AM, Dong, Eric wrote:
>> Hi Alex,
>>
>> We are using the UEFI code. In UEFI code, it uses both Rsdt and Xsdt. I check the ACPI spec and found below info: (Excerpt from ACPI spec 6.0 page 113)
>> Platforms provide the RSDT to enable compatibility with ACPI 1.0 operating systems. The XSDT, described in the next section, supersedes RSDT functionality.
>>
>> So base on this, I think UEFI code is ok and Fwts should not do such check.
>
> Right. That is what the spec says. I think Alex's question was different,
> though, and something the spec does not address.
>
> The test being referred to below is saying that the RSDT and XSDT addresses
> are different. It is okay to use both addresses. But, if they are different,
> which one is the correct one for the OS? There is no way to know, and the
> spec does not tell us, so this is an error.
I 100% agree with that viewpoint; that's the intent of the test.
>
> As a practical matter, in the firmware I have seen, either RSDT is used, or
> XSDT is used, or both are used and have exactly the same value.
I've seen firmware in the wild with different RSDT and XSDT (ugh). I
can't recall what it was now, I've seen too many buggy tables to make
that detail fuzzy in my memory.
Colin
>
>> Thanks,
>> Eric
>>> -----Original Message-----
>>> From: Alex Hung [mailto:alex.hung at canonical.com]
>>> Sent: Wednesday, July 20, 2016 1:44 PM
>>> To: Dong, Eric
>>> Cc: Al Stone; fwts-devel at lists.ubuntu.com
>>> Subject: Re: Question about rsdp test?
>>>
>>> FWTS only generates this error message when both are RSDT and XSDT
>>> aren't zero && they aren't not pointing to the same address, as below.
>>> Is there any reason why your firmware to point to different two
>>> differently? Recent 64 bit OS will have no problem choosing XSDT, but
>>> older 32 bit OS may pick RSDT which is never tested and that can
>>> potentially cause problems.
>>>
>>> if (rsdp->rsdt_address != 0 && rsdp->xsdt_address != 0)
>>> if ((uint64_t)rsdp->rsdt_address == rsdp->xsdt_address) {
>>> fwts_warning(fw,
>>> "Both RSDT and XSDT addresses are set. "
>>> "Since they are the same address, this "
>>> "is unambiguous to the OS.");
>>> fwts_advice(fw,
>>> "Set only one of the 32-bit RSDT or the "
>>> "64-bit XSDT addresses. Recent versions "
>>> "of the spec require that only one of "
>>> "these be used but as a practical matter, "
>>> "many vendors do use both. If both "
>>> "fields must be used, make sure they at "
>>> "least contain the same value so that "
>>> "the OS can unambiguously determine "
>>> "which address is the correct one.");
>>> } else {
>>> fwts_failed(fw, LOG_LEVEL_MEDIUM,
>>> "RSDPBothAddressesFound",
>>> "RSDP: only one of RsdtAddress or "
>>> "XsdtAddress should be non-zero. Both "
>>> "fields are non-zero.");
>>> }
>>> else
>>> fwts_passed(fw,
>>> "RSDP: only one of RsdtAddress or XsdtAddress "
>>> "is non-zero.");
>>>
>>> On Wed, Jul 20, 2016 at 9:39 AM, Dong, Eric <eric.dong at intel.com> wrote:
>>>>> On 07/18/2016 06:06 AM, Dong, Eric wrote:
>>>>>> When I do the Fwts test, I got below error for the rsdp test.
>>>>>>
>>>>>> rsdp ;HED rsdp: RSDP Root System Description Pointer test.
>>>>>>
>>>>>> rsdp ;SEP ------------------------------------------------------------
>>>>>>
>>>>>> rsdp ;INF Test 1 of 1: RSDP Root System Description Pointer test.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP first checksum is correct
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: oem_id contains only printable
>>>>>>
>>>>>> rsdp ;PAS characters.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: revision is 2.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: at least one of RsdtAddress or
>>>>>>
>>>>>> rsdp ;PAS XsdtAddress is non-zero.
>>>>>>
>>>>>> rsdp ;FAL FAILED [MEDIUM] RSDPBothAddressesFound: Test 1, RSDP: only
>>>>>>
>>>>>> rsdp ;FAL one of RsdtAddress or XsdtAddress should be non-zero. Both
>>>>>>
>>>>>> rsdp ;FAL fields are non-zero.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: the correct RSDT/XSDT address is being
>>>>>>
>>>>>> rsdp ;PAS used.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: the table is the correct length.
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP second checksum is correct
>>>>>>
>>>>>> rsdp ;PAS PASSED: Test 1, RSDP: the reserved field is zero.
>>>>>>
>>>>>> rsdp ;NLN
>>>>>>
>>>>>> rsdp ;SEP ============================================================
>>>>>>
>>>>>> rsdp ;SUM 8 passed, 1 failed, 0 warning, 0 aborted, 0 skipped, 0 info
>>>>>>
>>>>>> rsdp ;SUM only.
>>>>>>
>>>>>> rsdp ;SEP ============================================================
>>>>>>
>>>>>>
>>>>>>
>>>>>> I think it caused by both Rsdt and Xsdt address are not zero. But From ACPI 6.0
>>>>>> spec: (page 115)
>>>>>>
>>>>>> Notice that both the XSDT and the RSDT can be pointed to by the RSDP structure.
>>>>>> An ACPI-compatible OS must use the XSDT if present.
>>>>>>
>>>>>>
>>>>>>
>>>>>> From the above description, I think the spec allowed the case of both Xsdt and
>>>>>> Rsdt are not zero. So I think Fwts tool should not report error for this case,
>>>>>> am I correct?
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Eric
>>>>>
>>>>> On what architecture? If this is on ARMv8, we should not be using an RSDT,
>>>>> according to SBSA/SBBR specifications. If this is on x86, or perhaps ia64,
>>>>> then the test probably needs to allow for that, if it doesn't already.
>>>>>
>>>>> Personally, I'd really like to discourage new systems from using the 32-bit
>>>>> tables.
>>>>>
>>>>
>>>> Yes, I use the x86 system. I think it's an optional choice, Fwts should not report it as an error, maybe a warning is ok.
>>>>
>>>>> --
>>>>> ciao,
>>>>> al
>>>>> -----------------------------------
>>>>> Al Stone
>>>>> Software Engineer
>>>>> Linaro Enterprise Group
>>>>> al.stone at linaro.org
>>>>> -----------------------------------
>>>>
>>>> --
>>>> fwts-devel mailing list
>>>> fwts-devel at lists.ubuntu.com
>>>> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/fwts-devel
>>>
>>>
>>>
>>> --
>>> Cheers,
>>> Alex Hung
>
>
More information about the fwts-devel
mailing list