mb/google/brya/acpi: Update GPIO polling method
The preferred way of polling in ACPI I've seen is usually to just divide the sleep into N chunks, and ignore the time taken in between. This works in practice (validated with Timer calls before and after). Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Change-Id: I4a2cd82cea05c539eff30b9b9d6ef18550d17686 Reviewed-on: https://review.coreboot.org/c/coreboot/+/65484 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Robert Zieba <robertzieba@google.com> Reviewed-by: Subrata Banik <subratabanik@google.com> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
This commit is contained in:
parent
58f80bac47
commit
7c97e1255c
|
@ -8,14 +8,22 @@
|
||||||
*/
|
*/
|
||||||
Method (GPPL, 3, Serialized)
|
Method (GPPL, 3, Serialized)
|
||||||
{
|
{
|
||||||
Local0 = GRXS (Arg0)
|
Local0 = 0
|
||||||
Local7 = Arg2 * 10000
|
While (Local0 < Arg2)
|
||||||
Local7 = Timer + Local7
|
|
||||||
While (Local0 != Arg1 && Timer < Local7)
|
|
||||||
{
|
{
|
||||||
Stall (10)
|
If (\_SB.PCI0.GRXS (Arg0) == Arg1) {
|
||||||
Local0 = \_SB.PCI0.GRXS (Arg0)
|
Return (0)
|
||||||
|
} Else {
|
||||||
|
Local0++
|
||||||
}
|
}
|
||||||
|
Sleep (1)
|
||||||
|
}
|
||||||
|
|
||||||
|
If (Local0 == Arg2) {
|
||||||
|
Printf("[ERROR] GPPL for %o timed out", Arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Return (0xFF)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert from 32-bit integer to 4-byte buffer (little-endian) */
|
/* Convert from 32-bit integer to 4-byte buffer (little-endian) */
|
||||||
|
|
Loading…
Reference in New Issue