Re: [PATCH 1/3] PCI Hotplug: workaround for Thunderbolt on AcerAspire S5

From: Kirill A. Shutemov
Date: Fri Dec 14 2012 - 05:45:39 EST


On Thu, Dec 13, 2012 at 05:22:25PM -0700, Bjorn Helgaas wrote:
> [+cc Rafael]
>
> On Thu, Dec 13, 2012 at 8:31 AM, Kirill A. Shutemov
> <kirill.shutemov@xxxxxxxxxxxxxxx> wrote:
> > From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx>
> >
> > Correct ACPI PCI hotplug imeplementation should have _RMV method in a
> > PCI slot (device under pci bridge). In Acer Aspire S5 case we have it
> > deeper in hierarchy:
> >
> > Device (RP05)
> > {
> > // ...
> > Device (HRUP)
> > {
> > // ...
> > Device (HRDN)
> > {
> > // ...
> > Device (EPUP)
> > {
> > // ...
> > Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
> > {
> > Return (One)
> > }
> > }
> > }
> > }
> > }
> >
> > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
> > ---
> > drivers/pci/hotplug/acpi_pcihp.c | 13 +++++++++++++
> > 1 file changed, 13 insertions(+)
> >
> > diff --git a/drivers/pci/hotplug/acpi_pcihp.c b/drivers/pci/hotplug/acpi_pcihp.c
> > index 2a47e82..d92ebfb 100644
> > --- a/drivers/pci/hotplug/acpi_pcihp.c
> > +++ b/drivers/pci/hotplug/acpi_pcihp.c
> > @@ -422,6 +422,19 @@ static int pcihp_is_ejectable(acpi_handle handle)
> > status = acpi_evaluate_integer(handle, "_RMV", NULL, &removable);
> > if (ACPI_SUCCESS(status) && removable)
> > return 1;
> > +
> > + /*
> > + * Workaround for Thunderbolt implementation on Acer Aspire S5.
> > + *
> > + * Correct ACPI PCI hotplug imeplementation has _RMV method in a PCI
> > + * slot (device under pci bridge). In Acer Aspire S5 case we have it
> > + * deeper in hierarchy.
> > + */
> > + status = acpi_evaluate_integer(handle, "HRDN.EPUP._RMV", NULL,
> > + &removable);
>
> I don't think encoding an ACPI path from the BIOS of a random machine
> here is the right approach. The path components are completely
> implementation-dependent, and we'll end up carrying this test forever,
> long after the last Aspire S5 is in the landfill.
>
> We need a more generic approach that covers this case. It would be
> interesting to see the rest of the ACPI namespace details under
> RP05.HRUP. I guess we have RP05.HRUP._ADR, at least. I'm not sure
> what the BIOS is trying to tell us by providing
> RP05.HRUP.HRDN.EPUP._RMV, but maybe we could figure it out if we knew
> more about HRDN and EPUP.

My guesses about acronyms:
HRUP -- host router upstream port (connected to PCI root port).
HRDN -- host router downstream port.
EPUP -- end point upstream port.

Looks like BIOS developers tried to be smart and described actual hierarchy
from root port to end point.
The problem is that it doesn't fit to ACPI PCI hotplug. :(

Don't see anything useful in RP05.HRUP:

Device (HRUP)
{
Name (_ADR, Zero) // _ADR: Address
Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x09,
0x04
})
Device (HRDN)
{
Name (_ADR, 0x00040000) // _ADR: Address
Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
{
0x09,
0x04
})
Device (EPUP)
{
Name (_ADR, Zero) // _ADR: Address
Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
{
Return (One)
}
}
}
}

--
Kirill A. Shutemov

Attachment: signature.asc
Description: Digital signature