Re: [PATCH] ACPI/PCI: pci_link: remove error messages when no _PRS methods

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 31, 2018 at 8:39 PM, Alex Hung <alex.hung@xxxxxxxxxxxxx> wrote:
> On Wed, Jan 31, 2018 at 1:20 AM, Rafael J. Wysocki <rjw@xxxxxxxxxxxxx> wrote:
>> On Wednesday, January 31, 2018 6:52:19 AM CET Alex Hung wrote:
>>> In recent Intel hardware the IRQs become non-configurable after BIOS
>>> initializes them in PEI phase and _PRS objects are no longer included in
>>> ASL.
>>>
>>> This is the same as "static (non-configurable) devices do not
>>> specify a _PRS object" in ACPI spec. As a result, error messages
>>> saying "ACPI Exception: AE_NOT_FOUND, Evaluating _PRS" are not
>>> needed.
>>
>> That's questionable at best.
>>
>> The errors basically indicate that _PRT entries corresponding to these
>> IRQs are messed up (because they should contain the value of 0 instead of
>> a NamePath in the Source column), so we are now going to paper over bugs
>> in ACPI tables as someone in the firmware land cannot be bothered with
>> putting correct values into them. :-/
>
> Rafael,
>
> Thanks for quick reply and sharing the information
>
> It seems static (non-configurable) devices on ACPI are discussed in
> both _PRS and _PRT as below:
>
> 6.2.12 _PRS (Possible Resource Settings)
> "... Static (non-configurable) devices do not specify a _PRS object... "
>
> 6.2.13 _PRT (PCI Routing Table)
> "In the second model, the PCI interrupts are hardwired to specific
> interrupt inputs on the interrupt controller and are not configurable.
> In this case, the Source field in _PRT does not reference a device,
> but instead contains the value zero, and the Source Index field
> contains the global system interrupt to which the PCI interrupt is
> hardwired."
>
> My interpretation is the both are true from ACPI's perspective, and
> both should be implemented by system firmware. On this particular
> system I am debugging remotely, it does the _PRS part but not _PRT,
> and I will follow up with firmware engineers.

I made a mistake saying firmware's _PRT part is not done. In the DSDT,
the _PRT is as below:


            Method (_PRT, 0, NotSerialized)  // _PRT: PCI Routing Table
            {
                If (PICM)
                {
                    Return (AR00) /* \_SB_.AR00 */
                }

                Return (PK00) /* \_SB_.PK00 */
            }

When I used acpiexec to load *.dat from acpidump, it returns _SB.PK00;
however, actual system should return _SB.AR00 which is defined as
below:

        Name (AR00, Package (0x2E)
        {
            Package (0x04)
            {
                0x0004FFFF,
                Zero,
                Zero,
                0x10
            },

            Package (0x04)
            {
                0x0005FFFF,
                Zero,
                Zero,
                0x10
            },

            Package (0x04)
            {
                0x001EFFFF,
                Zero,
                Zero,
                0x14
            },

            Package (0x04)
            {
                0x001EFFFF,
                One,
                Zero,
                0x15
            },
            ... // skips more

The third elements, Source, are zero and it meets ACPI's requirement.

>
> On the other hand, it may not be unreasonable to remove AE_NOT_FOUND
> as defined in 6.2.12 in ACPI spec. I also did a code trace and it
> seems that the AE_NOT_FOUND in _PRS cannot be removed by a value of
> zero in Source field in _PRT.
>
> Finally, this seems to be a confusing topic in ACPI spec (to the
> firmware engineers and I at least). If we can figure this out, we may
> want to clarify the wording with ASWG.
>
>>
>>> Signed-off-by: Alex Hung <alex.hung@xxxxxxxxxxxxx>
>>> ---
>>>  drivers/acpi/pci_link.c | 4 +---
>>>  1 file changed, 1 insertion(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
>>> index 85ad679390e3..f98215971f30 100644
>>> --- a/drivers/acpi/pci_link.c
>>> +++ b/drivers/acpi/pci_link.c
>>> @@ -172,10 +172,8 @@ static int acpi_pci_link_get_possible(struct acpi_pci_link *link)
>>>
>>>       status = acpi_walk_resources(link->device->handle, METHOD_NAME__PRS,
>>>                                    acpi_pci_link_check_possible, link);
>>> -     if (ACPI_FAILURE(status)) {
>>> -             ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRS"));
>>> +     if (ACPI_FAILURE(status))
>>>               return -ENODEV;
>>> -     }
>>>
>>>       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
>>>                         "Found %d possible IRQs\n",
>>>
>>
>>
>
>
>
> --
> Cheers,
> Alex Hung



-- 
Cheers,
Alex Hung
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux