Initial PCIe tuning: Enable Active State Power Management (ASPM)

 pciexp_device.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>

Index: src/devices/pciexp_device.c
===================================================================
--- src/devices/pciexp_device.c	(revision 5016)
+++ src/devices/pciexp_device.c	(working copy)
@@ -34,8 +34,16 @@
 		/* error... */
 		return;
 	}
-	// printk_debug("PCIe: tuning %s\n", dev_path(dev));
-	/* TODO: Implement PCI Express tuning. */
+#ifdef CONFIG_PCIE_TUNING
+	printk_debug("PCIe: tuning %s\n", dev_path(dev));
+
+	// TODO make this depending on ASPM
+	/* Enable ASPM Role Based Error Reporting */
+	u32 reg32;
+	reg32 = pci_read_config32(dev, cap + PCI_EXP_DEVCAP);
+	reg32 |= PCI_EXP_DEVCAP_RBER;
+	pci_write_config32(dev, cap + PCI_EXP_DEVCAP, reg32);
+#endif
 }
 
 unsigned int pciexp_scan_bus(struct bus *bus, 
