diff options
Diffstat (limited to 'src/soc/amd/picasso/acp.c')
-rw-r--r-- | src/soc/amd/picasso/acp.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/soc/amd/picasso/acp.c b/src/soc/amd/picasso/acp.c index 3272acf8f6..b598e646b2 100644 --- a/src/soc/amd/picasso/acp.c +++ b/src/soc/amd/picasso/acp.c @@ -15,6 +15,16 @@ #include <amdblocks/acpimmio.h> #include <commonlib/helpers.h> +static void acp_update32(uintptr_t bar, uint32_t reg, uint32_t and_mask, uint32_t or_mask) +{ + uint32_t val; + + val = read32((void *)(bar + reg)); + val &= ~and_mask; + val |= or_mask; + write32((void *)(bar + reg), val); +} + static void init(struct device *dev) { const struct soc_amd_picasso_config *cfg; @@ -33,6 +43,10 @@ static void init(struct device *dev) bar = (uintptr_t)res->base; write32((void *)(bar + ACP_I2S_PIN_CONFIG), cfg->acp_pin_cfg); + /* Enable ACP_PME_EN and ACP_I2S_WAKE_EN for I2S_WAKE event */ + acp_update32(bar, ACP_I2S_WAKE_EN, WAKE_EN_MASK, !!cfg->acp_i2s_wake_enable); + acp_update32(bar, ACP_PME_EN, PME_EN_MASK, !!cfg->acpi_pme_enable); + if (cfg->acp_pin_cfg == I2S_PINS_I2S_TDM) sb_clk_output_48Mhz(); /* Internal connection to I2S */ } |