lynxpoint: Add devicetree config option to force enable ASPM

The PCIe root port has ASPM settings/workarounds that are only applied
based on the value of an undocumented bit in PCI config register 0x32C.

If that bit is not set for some reason then the settings are not applied.
This devicetree config option will force the ASPM settings for each port
based on the bit map.

Change-Id: I40b08ca9a0ef52742609bac72fb821454a373799
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65314
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/4453
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Duncan Laurie 2013-08-09 09:06:41 -07:00 committed by Patrick Georgi
parent 0b3cd36061
commit 249a03b080
2 changed files with 10 additions and 0 deletions

View File

@ -85,6 +85,8 @@ struct southbridge_intel_lynxpoint_config {
/* Enable linear PCIe Root Port function numbers starting at zero */ /* Enable linear PCIe Root Port function numbers starting at zero */
uint8_t pcie_port_coalesce; uint8_t pcie_port_coalesce;
/* Force root port ASPM configuration with port bitmap */
uint8_t pcie_port_force_aspm;
/* Serial IO configuration */ /* Serial IO configuration */
/* Put devices into ACPI mode instead of a PCI device */ /* Put devices into ACPI mode instead of a PCI device */

View File

@ -495,6 +495,7 @@ static void pch_pcie_early(struct device *dev)
int rp; int rp;
int do_aspm; int do_aspm;
int is_lp; int is_lp;
struct southbridge_intel_lynxpoint_config *config = dev->chip_info;
rp = root_port_number(dev); rp = root_port_number(dev);
do_aspm = 0; do_aspm = 0;
@ -542,6 +543,13 @@ static void pch_pcie_early(struct device *dev)
} }
} }
/* Allow ASPM to be forced on in devicetree */
if (config && (config->pcie_port_force_aspm & (1 << (rp - 1))))
do_aspm = 1;
printk(BIOS_DEBUG, "PCIe Root Port %d ASPM is %sabled\n",
rp, do_aspm ? "en" : "dis");
if (do_aspm) { if (do_aspm) {
/* Set ASPM bits in MPC2 register. */ /* Set ASPM bits in MPC2 register. */
pcie_update_cfg(dev, 0xd4, ~(0x3 << 2), (1 << 4) | (0x2 << 2)); pcie_update_cfg(dev, 0xd4, ~(0x3 << 2), (1 << 4) | (0x2 << 2));