device: Add flag to disable PCIe ASPM

For broken devices that spuriously advertise ASPM, make it possible to
decide ASPM activation in the device driver.

Change-Id: I491aa32a3ec954be87a474478609f0f3971d0fdf
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/25617
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/device/pciexp_device.c b/src/device/pciexp_device.c
index b15d9c2..502494d 100644
--- a/src/device/pciexp_device.c
+++ b/src/device/pciexp_device.c
@@ -377,6 +377,9 @@
 	u16 lnkctl;
 	u32 devcap;
 
+	if (endp->disable_pcie_aspm)
+		return;
+
 	/* Get endpoint device capabilities for acceptable limits */
 	devcap = pci_read_config32(endp, endp_cap + PCI_EXP_DEVCAP);
 
diff --git a/src/include/device/device.h b/src/include/device/device.h
index 02a933e..acead58 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -130,6 +130,7 @@
 	unsigned int    enabled : 1;	/* set if we should enable the device */
 	unsigned int  initialized : 1; /* 1 if we have initialized the device */
 	unsigned int    on_mainboard : 1;
+	unsigned int    disable_pcie_aspm : 1;
 	struct pci_irq_info pci_irq_info[4];
 	u8 command;