From 7c97e1255c9cdff4f0cf64f5215b4fe2dfa4b37e Mon Sep 17 00:00:00 2001 From: Tim Wawrzynczak Date: Tue, 28 Jun 2022 12:06:22 -0600 Subject: 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 Change-Id: I4a2cd82cea05c539eff30b9b9d6ef18550d17686 Reviewed-on: https://review.coreboot.org/c/coreboot/+/65484 Tested-by: build bot (Jenkins) Reviewed-by: Robert Zieba Reviewed-by: Subrata Banik Reviewed-by: Eric Lai --- src/mainboard/google/brya/acpi/utility.asl | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/mainboard') diff --git a/src/mainboard/google/brya/acpi/utility.asl b/src/mainboard/google/brya/acpi/utility.asl index 4fc03e83e1..1999d33348 100644 --- a/src/mainboard/google/brya/acpi/utility.asl +++ b/src/mainboard/google/brya/acpi/utility.asl @@ -8,14 +8,22 @@ */ Method (GPPL, 3, Serialized) { - Local0 = GRXS (Arg0) - Local7 = Arg2 * 10000 - Local7 = Timer + Local7 - While (Local0 != Arg1 && Timer < Local7) + Local0 = 0 + While (Local0 < Arg2) { - Stall (10) - Local0 = \_SB.PCI0.GRXS (Arg0) + If (\_SB.PCI0.GRXS (Arg0) == Arg1) { + 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) */ -- cgit v1.2.3