Comment 4 for bug 1232975

Revision history for this message
Ivan Hu (ivan.hu) wrote :

 s4: HIGH Kernel message: [322397.481202] ACPI Error: Field [DRQL] at 144 exceeds Buffer [NULL] size 128 (bits) (20121018/dsopcode-236)
 s4: HIGH Kernel message: [322397.481205] ACPI Error: Method parse/execution failed [\_SB_.PCI0.LPCB.SIO1.DSRS] (Node ffff880427c4e7a8), AE_AML_BUFFER_LIMIT (20121018/psparse-537)
 s4: HIGH Kernel message: [322397.481208] ACPI Error: Method parse/execution failed [\_SB_.PCI0.LPCB.UAR1._SRS] (Node ffff880427c4eeb0), AE_AML_BUFFER_LIMIT (20121018/psparse-537)

The error,
 s4: HIGH Kernel message: [322397.481202] ACPI Error: Field [DRQL] at 144 exceeds Buffer [NULL] size 128 (bits) (20121018/dsopcode-236)
 s4: HIGH Kernel message: [322397.481205] ACPI Error: Method parse/execution failed [\_SB_.PCI0.LPCB.SIO1.DSRS] (Node ffff880427c4e7a8), AE_AML_BUFFER_LIMIT (20121018/psparse-537)
 s4: HIGH Kernel message: [322397.481208] ACPI Error: Method parse/execution failed [\_SB_.PCI0.LPCB.UAR1._SRS] (Node ffff880427c4eeb0), AE_AML_BUFFER_LIMIT (20121018/psparse-537)

When s4 resume, will set the resource, first call the _CSR of the UAR1 device to check the current resource, then set the resource via _SRS,
the UART1 _CRS call SIO1.DCRS, then return CRS1 -> buffer size 128 (bits), but _SRS call SIO1.DSRS -> but operate with the buffer size 144(bits)
                        CreateByteField (Arg0, 0x11, DRQL)
                        CreateByteField (Arg0, 0x14, DMAC)
so the error is from, the current resource tell kernel using 128bits, but the set resource operate 144bits.

see the ACPI table,
the _CSR->DCSR always return CRS1,
                    Method (DCRS, 2, NotSerialized)
                    {
                        If (LEqual (Arg0, Zero))
                        {
                            ENFG (0x0C)
                            Store (CR6A, Local0)
                            Store (Local0, IOLO)
                            Store (CR6B, Local0)
                            Store (Local0, IOHI)
                            Store (IOLO, IORL)
                            Store (IOHI, IORH)
                            Store (0x08, LNA1)
                            Store (GIRQ (Arg0), IRQL)
                            EXFG ()
                            Return (CRS1)
                        }

                        Return (CRS1)
                    }

but the _SRS, parse/execution the resoure exceeds the CSR1 buffer,
                     Method (DSRS, 2, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x09, IRQL)
                        CreateByteField (Arg0, 0x11, DRQL)
                        CreateByteField (Arg0, 0x14, DMAC)
                        If (LEqual (Arg1, Zero))
                        {
                            ENFG (0x0C)
                            STIO (0x6A, IOLO, IOHI, Zero)
                            SIRQ (Arg1, IRQL)
                            EXFG ()
                            DCNT (Arg1, One)
                        }
                    }
The errors above seem to cause from a buggy firmware, and need to be checked.
It might impact the UART devices, but driver might take care the UART functions.