diff options
Diffstat (limited to 'src/drivers/generic/bayhub')
-rw-r--r-- | src/drivers/generic/bayhub/bh720.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/drivers/generic/bayhub/bh720.c b/src/drivers/generic/bayhub/bh720.c index 3a0a9721ad..3e78b4f049 100644 --- a/src/drivers/generic/bayhub/bh720.c +++ b/src/drivers/generic/bayhub/bh720.c @@ -24,16 +24,24 @@ enum { BH720_PROTECT = 0xd0, + BH720_PROTECT_LOCK_OFF = 0, + BH720_PROTECT_LOCK_ON = BIT(0), BH720_PROTECT_OFF = 0, - BH720_PROTECT_ON = 1, - - BH720_RTD3_L1 = 0x3e0, - BH720_RTD3_L1_DISABLE_L1 = BIT(28), + BH720_PROTECT_ON = BIT(31), BH720_LINK_CTRL = 0x90, BH720_LINK_CTRL_L0_ENABLE = BIT(0), BH720_LINK_CTRL_L1_ENABLE = BIT(1), BH720_LINK_CTRL_CLKREQ = BIT(8), + + BH720_MISC2 = 0xf0, + BH720_MISC2_ASPM_DISABLE = BIT(0), + BH720_MISC2_APSM_CLKREQ_L1 = BIT(7), + BH720_MISC2_APSM_PHY_L1 = BIT(10), + BH720_MISC2_APSM_MORE = BIT(12), + + BH720_RTD3_L1 = 0x3e0, + BH720_RTD3_L1_DISABLE_L1 = BIT(28), }; static void bh720_init(struct device *dev) @@ -47,13 +55,19 @@ static void bh720_init(struct device *dev) * This procedure for enabling power-saving mode is from the * BayHub BIOS Implementation Guideline document. */ - pci_write_config32(dev, BH720_PROTECT, BH720_PROTECT_OFF); + pci_write_config32(dev, BH720_PROTECT, + BH720_PROTECT_OFF | BH720_PROTECT_LOCK_OFF); pci_or_config32(dev, BH720_RTD3_L1, BH720_RTD3_L1_DISABLE_L1); pci_or_config32(dev, BH720_LINK_CTRL, BH720_LINK_CTRL_L0_ENABLE | BH720_LINK_CTRL_L1_ENABLE); pci_or_config32(dev, BH720_LINK_CTRL, BH720_LINK_CTRL_CLKREQ); - pci_write_config32(dev, BH720_PROTECT, BH720_PROTECT_ON); + pci_update_config32(dev, BH720_MISC2, ~BH720_MISC2_ASPM_DISABLE, + BH720_MISC2_APSM_CLKREQ_L1 | + BH720_MISC2_APSM_PHY_L1); + pci_write_config32(dev, BH720_PROTECT, + BH720_PROTECT_ON | BH720_PROTECT_LOCK_ON); + printk(BIOS_INFO, "BayHub BH720: Power-saving enabled (link_ctrl=%#x)\n", pci_read_config32(dev, BH720_LINK_CTRL)); } |