From: Pierre Gondois <pierre.gondois@arm.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org
Subject: Re: [Bug 215560] New: _PRS/_SRS methods should be optional
Date: Thu, 3 Feb 2022 10:10:19 +0100 [thread overview]
Message-ID: <b0a94d3d-b91f-6c54-3a02-91e053ce1ddf@arm.com> (raw)
In-Reply-To: <20220202174255.GA22220@bhelgaas>
Hi Bjorn
On 2/2/22 6:42 PM, Bjorn Helgaas wrote:
> Hi Pierre,
>
> Thanks a lot for the report!
>
> On Wed, Feb 02, 2022 at 10:20:44AM +0000, bugzilla-daemon@kernel.org wrote:
>> https://bugzilla.kernel.org/show_bug.cgi?id=215560
>>
>> Bug ID: 215560
>> Summary: _PRS/_SRS methods should be optional
>> Product: Drivers
>> Version: 2.5
>> Kernel Version: v5.17-rc2
>> Hardware: All
>> OS: Linux
>> Tree: Mainline
>> Status: NEW
>> Severity: enhancement
>> Priority: P1
>> Component: PCI
>> Assignee: drivers_pci@kernel-bugs.osdl.org
>> Reporter: pierre.gondois@arm.com
>> Regression: No
>>
>> The PCI legacy interrupts can be described with link devices, cf ACPI 6.4,
>> s6.2.13 "_PRT (PCI Routing Table)".
>> Link devices can have optional _SRS/_PRS methods to set the interrupt.
>
> Is this a direct quote? I don't see text similar to this in ACPI
> v6.4.
>
No it was not a direct quote. However from ACPI 6.4, s6.2.12 "_PRS
(Possible Resource Settings)":
'''This optional object evaluates [...]'''
and similarly at s6.2.16 "_SRS (Set Resource Settings)"
'''This optional control method [...]'''
> I do see this in sec 6.2.13:
>
> There are two ways that _PRT can be used. Typically, the interrupt
> input that a given PCI interrupt is on is configurable. For
> example, a given PCI interrupt might be configured for either IRQ 10
> or 11 on an 8259 interrupt controller. In this model, each interrupt
> is represented in the ACPI namespace as a PCI Interrupt Link Device.
>
> These objects have _PRS, _CRS, _SRS, and _DIS control methods to
> allocate the interrupt. Then, OSPM handles the interrupts not as
> interrupt inputs on the interrupt controller, but as PCI interrupt
> pins. The driver looks up the device’s pins in the _PRT to determine
> which device objects allocate the interrupts. To move the PCI
> interrupt to a different interrupt input on the interrupt
> controller, OSPM uses _PRS, _CRS, _SRS, and _DIS control methods for
> the PCI Interrupt Link Device.
>
> 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.
>
> For the first model (configurable inputs), it says "These objects have
> _PRS, _CRS, _SRS, and _DIS," which could be read as requiring those
> objects.
>
> For the second model (hardwired inputs), the interrupts are not
> configurable, and I don't think there would be any reason to have an
> interrupt link device at all.
>
>> In PCI Firmware Specification Revision 3.3, s4.3.2.1. "Resource Setting":
>> """
>> A non-configurable device only specifies _CRS. However, if they are
>> configurable, devices include
>> _PRS to indicate the possible resource setting and _SRS to allow OSPM to
>> specify a new resource
>> allocation for the device.
>> """
>
> My copy of the PCI Firmware spec r3.3 (dated Jan 20, 2021), sec
> 4.3.2.1 says:
>
> Host bridges resources programming is communicated to the operating
> system using ACPI methods _CRS, _SRS, and _PRS. _CRS indicates the
> current resource setting for the host bridge. This includes I/O
> space, memory space, and bus range assigned to the bridge by
> platform firmware.
>
> A non-configurable device only specifies _CRS. However, if they are
> configurable, devices include _PRS to indicate the possible resource
> setting and _SRS to allow OSPM to specify a new resource allocation
> for the device.
>
> So this is specifically talking about methods of a PCI host bridge
> (PNP0A03 or PNP0A08), not about methods of an interrupt link device
> (PNP0C0F).
>
Yes indeed, this quote was not relevant.
>> However, _PRS/_SRS methods are checked in drivers/acpi/pci_link.c, and the
>> driver aborts if they are absent.
>> E.g.: When _PRS is missing:
>> ACPI: \_SB_.PCI0.LNKA: _CRS 36 not found in _PRS
>> ACPI: \_SB_.PCI0.LNKA: No IRQ available. Try pci=noacpi or acpi=off
>
> I assume this bug report is because something isn't working. Can you
> update the bugzilla with a note about what specifically isn't working
> and also attach a complete dmesg log and acpidump?
>
The question arose while writing link devices code, so there is no platform
with missing _PRS/_SRS methods that I know.
The question was more about spec compliance and the necessity to have these
methods when legacy interrupts are not configurable.
The message above (_CRS XXX not found in _PRS) can be generated for a Juno
for instance, and the ACPI tables are at:
https://github.com/tianocore/edk2-platforms/blob/master/Platform/ARM/JunoPkg/AcpiTables/AcpiSsdtRootPci.asl
The ACPI table need to be modified (remove _PRS and set _CRS correctly).
If the conclusion is that _PRS/_SRS are mandatory, even for hard-wired
interrupts, then the bugzilla can be closed.
Thanks for the quick answer,
Pierre
> Bjorn
>
next prev parent reply other threads:[~2022-02-03 9:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bug-215560-41252@https.bugzilla.kernel.org/>
2022-02-02 17:42 ` [Bug 215560] New: _PRS/_SRS methods should be optional Bjorn Helgaas
2022-02-03 9:10 ` Pierre Gondois [this message]
2022-02-03 16:32 ` Bjorn Helgaas
2022-02-03 17:12 ` Pierre Gondois
2022-02-03 17:50 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b0a94d3d-b91f-6c54-3a02-91e053ce1ddf@arm.com \
--to=pierre.gondois@arm.com \
--cc=helgaas@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox