soc/amd/picasso/sb: Gate FCH AL2AHB clocks
Gate the A-Link to AHB Bridge clocks to save power. These are internal clocks and are unneeded for Raven/Picasso. This was previously performed within the AGESA FSP but this change relocates it into coreboot. BUG=b:154144239 TEST=Check AL2AHB clock gate bits at the end of POST before and after change with HDT. Change-Id: Ifcbc144a8769f8ea440cdd560bab146bf5058cf9 Signed-off-by: Matt Papageorge <matthewpapa07@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/42829 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
9857c90685
commit
ab83b43b34
|
@ -12,7 +12,12 @@
|
||||||
#endif
|
#endif
|
||||||
#define HPET_BASE_ADDRESS 0xfed00000
|
#define HPET_BASE_ADDRESS 0xfed00000
|
||||||
|
|
||||||
|
/* FCH AL2AHB Registers */
|
||||||
#define ALINK_AHB_ADDRESS 0xfedc0000
|
#define ALINK_AHB_ADDRESS 0xfedc0000
|
||||||
|
#define AL2AHB_CONTROL_CLK_OFFSET 0x10
|
||||||
|
#define AL2AHB_CLK_GATE_EN (1 << 1)
|
||||||
|
#define AL2AHB_CONTROL_HCLK_OFFSET 0x30
|
||||||
|
#define AL2AHB_HCLK_GATE_EN (1 << 1)
|
||||||
|
|
||||||
/* Reserved 0xfecd1000-0xfedc3fff */
|
/* Reserved 0xfecd1000-0xfedc3fff */
|
||||||
|
|
||||||
|
|
|
@ -328,11 +328,29 @@ static void set_nvs_sws(void *unused)
|
||||||
|
|
||||||
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, set_nvs_sws, NULL);
|
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, set_nvs_sws, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A-Link to AHB bridge, part of the AMBA fabric. These are internal clocks
|
||||||
|
* and unneeded for Raven/Picasso so gate them to save power.
|
||||||
|
*/
|
||||||
|
static void al2ahb_clock_gate(void)
|
||||||
|
{
|
||||||
|
uint8_t al2ahb_val;
|
||||||
|
uintptr_t al2ahb_base = ALINK_AHB_ADDRESS;
|
||||||
|
|
||||||
|
al2ahb_val = read8((void *)(al2ahb_base + AL2AHB_CONTROL_CLK_OFFSET));
|
||||||
|
al2ahb_val |= AL2AHB_CLK_GATE_EN;
|
||||||
|
write8((void *)(al2ahb_base + AL2AHB_CONTROL_CLK_OFFSET), al2ahb_val);
|
||||||
|
al2ahb_val = read8((void *)(al2ahb_base + AL2AHB_CONTROL_HCLK_OFFSET));
|
||||||
|
al2ahb_val |= AL2AHB_HCLK_GATE_EN;
|
||||||
|
write8((void *)(al2ahb_base + AL2AHB_CONTROL_HCLK_OFFSET), al2ahb_val);
|
||||||
|
}
|
||||||
|
|
||||||
void southbridge_init(void *chip_info)
|
void southbridge_init(void *chip_info)
|
||||||
{
|
{
|
||||||
i2c_soc_init();
|
i2c_soc_init();
|
||||||
sb_init_acpi_ports();
|
sb_init_acpi_ports();
|
||||||
acpi_clear_pm1_status();
|
acpi_clear_pm1_status();
|
||||||
|
al2ahb_clock_gate();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_sb_final_nvs(void)
|
static void set_sb_final_nvs(void)
|
||||||
|
|
Loading…
Reference in New Issue