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>
This commit is contained in:
Duncan Laurie 2016-09-19 12:05:49 -07:00 committed by Patrick Georgi
parent a673d1cd2d
commit 2e79009503
1 changed files with 21 additions and 0 deletions

View File

@ -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;