summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2016-09-19 12:05:49 -0700
committerPatrick Georgi <pgeorgi@google.com>2016-09-21 10:46:35 +0200
commit2e79009503bcb0bc324ca60f9d4a9121dcdcbf84 (patch)
tree078f74337a9c139e20022c9314c362ad17606351 /src
parenta673d1cd2d4d74fdc6f373952f14667f51908f1d (diff)
soc/intel/apollolake: Add function to read and clear GPE status
Implement the generic acpi_get_gpe() function to read and clear the GPE status for a specific GPE. Tested by watching GPE status in a loop while generating interrupts manually from the EC console. BUG=chrome-os-partner:53336 Change-Id: I482ff52051a48441333b573f1cd0fa7f7579a6ab Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/16671 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/apollolake/pmutil.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/soc/intel/apollolake/pmutil.c b/src/soc/intel/apollolake/pmutil.c
index 2aef18c8e6..56bb33dc40 100644
--- a/src/soc/intel/apollolake/pmutil.c
+++ b/src/soc/intel/apollolake/pmutil.c
@@ -17,6 +17,7 @@
#define __SIMPLE_DEVICE__
+#include <arch/acpi.h>
#include <arch/io.h>
#include <console/console.h>
#include <cbmem.h>
@@ -301,6 +302,26 @@ uint32_t clear_gpe_status(void)
return print_gpe_sts(reset_gpe_status());
}
+/* Read and clear GPE status (defined in arch/acpi.h) */
+int acpi_get_gpe(int gpe)
+{
+ int bank;
+ uint32_t mask, sts;
+
+ if (gpe < 0 || gpe > GPE0_DW3_31)
+ return -1;
+
+ bank = gpe / 32;
+ mask = 1 << (gpe % 32);
+
+ sts = inl(ACPI_PMIO_BASE + GPE0_STS(bank));
+ if (sts & mask) {
+ outl(mask, ACPI_PMIO_BASE + GPE0_STS(bank));
+ return 1;
+ }
+ return 0;
+}
+
void clear_pmc_status(void)
{
uint32_t prsts;