soc/amd/stoneyridge: Add aoac_ read/write functions

Add 8-bit functions to access the AOAC registers and use them in
southbridge.c.  At this time, there is no reason to pursue WORD or
DWORD access and it's not known if those transaction sizes are
supported.

Change-Id: I3a8f493625f941fb855c0b8a0eff511a9a5ddfe8
Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32645
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Richard Spiegel <richard.spiegel@silverbackltd.com>
Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
Marshall Dawson 2019-05-01 21:17:20 -06:00 committed by Martin Roth
parent 753c225c2c
commit b435d4405d
3 changed files with 16 additions and 6 deletions

View File

@ -533,6 +533,8 @@ uint8_t smbus_read8(uint8_t offset);
uint16_t smbus_read16(uint8_t offset);
void smbus_write8(uint8_t offset, uint8_t value);
void smbus_write16(uint8_t offset, uint16_t value);
uint8_t aoac_read8(uint8_t reg);
void aoac_write8(uint8_t reg, uint8_t value);
void bootblock_fch_early_init(void);
void bootblock_fch_init(void);
/**

View File

@ -271,6 +271,16 @@ void xhci_pm_write32(uint8_t reg, uint32_t value)
/* aoac read/write - access registers at 0xfed81e00 - not currently used */
u8 aoac_read8(u8 reg)
{
return read8((void *)(ACPIMMIO_AOAC_BASE + reg));
}
void aoac_write8(u8 reg, u8 value)
{
write8((void *)(ACPIMMIO_AOAC_BASE + reg), value);
}
uint16_t pm_acpi_pm_cnt_blk(void)
{
return pm_read16(PM1_CNT_BLK);

View File

@ -279,20 +279,18 @@ int sb_set_wideio_range(uint16_t start, uint16_t size)
static void power_on_aoac_device(int aoac_device_control_register)
{
uint8_t byte;
uint8_t *register_pointer = (uint8_t *)(uintptr_t)ACPIMMIO_AOAC_BASE
+ aoac_device_control_register;
/* Power on the UART and AMBA devices */
byte = read8(register_pointer);
byte = aoac_read8(aoac_device_control_register);
byte |= FCH_AOAC_PWR_ON_DEV;
write8(register_pointer, byte);
aoac_write8(aoac_device_control_register, byte);
}
static bool is_aoac_device_enabled(int aoac_device_status_register)
{
uint8_t byte;
byte = read8((uint8_t *)(uintptr_t)ACPIMMIO_AOAC_BASE
+ aoac_device_status_register);
byte = aoac_read8(aoac_device_status_register);
byte &= (FCH_AOAC_PWR_RST_STATE | FCH_AOAC_RST_CLK_OK_STATE);
if (byte == (FCH_AOAC_PWR_RST_STATE | FCH_AOAC_RST_CLK_OK_STATE))
return true;