Bug 2778

Summary: Linux ignores ACPI-reported resource usage
Product: ACPI Reporter: Len Brown (lenb)
Component: Config-OtherAssignee: Shaohua (shaohua.li)
Status: REJECTED WILL_NOT_FIX    
Severity: normal CC: acpi-bugzilla, areversat
Priority: P2    
Hardware: i386   
OS: Linux   
Kernel Version: 2.6 Subsystem:
Regression: --- Bisected commit-id:

Description Len Brown 2004-05-26 21:59:13 UTC
Linux pays no attention to the resource consumption reported 
for legacy devices in the DSDT 
 
Each of these devices each contain _CRS specifying the IO, DMA, and IRQ 
resources consumed by the device.  For example, the mouse: 
 
                Device (PS2M) 
                { 
                    Name (_HID, EisaId ("PNP0F03")) 
                    Name (_CID, 0x130FD041) 
                    Method (_STA, 0, NotSerialized) 
                    { 
                        ShiftLeft (0x01, 0x0C, Local0) 
                        If (And (IOST, Local0)) 
                        { 
                            Return (0x0F) 
                        } 
 
                        If (OSFL ()) 
                        { 
                            Return (0x0B) 
                        } 
                        Else 
                        { 
                            Return (0x00) 
                        } 
                    } 
 
                    Name (CRS1, ResourceTemplate () 
                    { 
                        IRQNoFlags () {12} 
                    }) 
                    Name (CRS2, ResourceTemplate () 
                    { 
                        IO (Decode16, 0x0060, 0x0060, 0x00, 0x01) 
                        IO (Decode16, 0x0064, 0x0064, 0x00, 0x01) 
                        IRQNoFlags () {12} 
                    }) 
                    Method (_CRS, 0, NotSerialized) 
                    { 
                        ShiftLeft (0x01, 0x0A, Local0) 
                        If (And (IOST, Local0)) 
                        { 
                            Return (CRS1) 
                        } 
                        Else 
                        { 
                            Return (CRS2) 
                        } 
                    } 
                } 
 
There are three potential benefits to mining this information. 
1. correct resource values can be used. 
    For legacy devices with hard-coded values, this 
    'ain't broke, so don't fix it'. 
    However, if additional resources are added to the motherboard, 
    this method would recognized that while the hard-coded drivers 
    would not. 
 
2. resource conflicts can be avoided. 
    Again, Linux already skirts this issue by other methods. 
    We'll come re-open this bug only when those methods 
    start to fail... 
 
3. free resources can be freed. 
    In the example above, if the PS2 mouse is not present, 
    the OS could realized, for example, that IRQ12 is available 
    for other uses.  This could be useful on a PIC-mode IRQ-starved 
    system.... 
 
Here are the other south bridge devices listed in the DSDT for my D875PBZ: 
 
            Device (SBRG) 
                Device (PIC) 
                    Name (_HID, EisaId ("PNP0000")) 
                Device (DMAD) 
                    Name (_HID, EisaId ("PNP0200")) 
                Device (TMR) 
                    Name (_HID, EisaId ("PNP0100")) 
                Device (RTC0) 
                    Name (_HID, EisaId ("PNP0B00")) 
                Device (PS2K) 
                    Name (_HID, EisaId ("PNP0303")) 
                Device (PS2M) 
                    Name (_HID, EisaId ("PNP0F03")) 
                Device (SPKR) 
                    Name (_HID, EisaId ("PNP0800")) 
                Device (COPR) 
                    Name (_HID, EisaId ("PNP0C04")) 
                Device (\_SB.PCI0.SBRG.FDC0) 
                    Name (_HID, EisaId ("PNP0700")) 
                Device (\_SB.PCI0.SBRG.UAR1) 
                    Name (_HID, EisaId ("PNP0501")) 
                Device (\_SB.PCI0.SBRG.LPT) 
                    Name (_HID, EisaId ("PNP0400")) 
                Device (\_SB.PCI0.SBRG.ECP) 
                    Name (_HID, EisaId ("PNP0401")) 
                Device (SYSR) 
                    Name (_HID, EisaId ("PNP0C02")) 
                Device (FWH) 
                    Name (_HID, EisaId ("INT0800")) 
                Device (OSYS) 
                    Name (_HID, EisaId ("PNP0C02")) 
                Device (\_SB.SYSM) 
                    Name (_HID, EisaId ("PNP0C01"))
Comment 1 Len Brown 2004-08-13 21:38:46 UTC
*** Bug 2733 has been marked as a duplicate of this bug. ***
Comment 2 Shaohua 2005-08-16 18:05:08 UTC
Current PNPACPI can penalize legacy irqs, so if pci devices will not use 
legacy devices' interrupt.
>1. correct resource values can be used. 
I think PNPACPI can do it if legacy drivers use PNPACPI

>3. free resources can be freed. 
>    In the example above, if the PS2 mouse is not present, 
>    the OS could realized, for example, that IRQ12 is available 
>    for other uses.  This could be useful on a PIC-mode IRQ-starved 
>    system.... 
This is hard. you can hotplug PS2 mouse in Linux. Besides, PNP layer has some 
mechanism to assign free resources to legacy devices.
Comment 3 Len Brown 2007-08-17 20:28:49 UTC
is this still a problem with linux-2.6.22.stable?
Comment 4 Shaohua 2007-09-19 00:48:06 UTC
issue 1 is sloved. issue 2 and 3 are the same issue - Linux don't check if PNP resources are in use. But the issues don't make sense, as PNP resources are basically some io ports and the ports are below 1k, hotplug PCI devices don't use it. for pnp irq, we already penalize it, so we have no issue.  I thought the issue doesn't exist in practice. I'd mark the track closed.