southbridge/amd/sr5650: Add optional delay after link training

Certain devices (such as the LSI SAS 2008 controller) do not
respond to PCI probes immediately after link training.  If it
is known that such a device is likely to be installed allow the
mainboard to insert an appropriate delay.

Change-Id: Ibcd9426628cacd6f88e6e3fcbc2b3eb7e3a92081
Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
Reviewed-on: http://review.coreboot.org/11991
Reviewed-by: Edward O'Callaghan <edward.ocallaghan@koparo.com>
Tested-by: build bot (Jenkins)
diff --git a/src/southbridge/amd/sr5650/sr5650.c b/src/southbridge/amd/sr5650/sr5650.c
index 441be66..07d5e20 100644
--- a/src/southbridge/amd/sr5650/sr5650.c
+++ b/src/southbridge/amd/sr5650/sr5650.c
@@ -346,6 +346,7 @@
 {
 	device_t nb_dev = 0, sb_dev = 0;
 	int dev_ind;
+	struct southbridge_amd_sr5650_config *cfg;
 
 	printk(BIOS_INFO, "sr5650_enable: dev=%p, VID_DID=0x%x\n", dev, get_vid_did(dev));
 	nb_dev = dev_find_slot(0, PCI_DEVFN(0, 0));
@@ -353,6 +354,7 @@
 		die("sr5650_enable: CAN NOT FIND SR5650 DEVICE, HALT!\n");
 		/* NOT REACHED */
 	}
+	cfg = (struct southbridge_amd_sr5650_config *)nb_dev->chip_info;
 
 	/* sb_dev (dev 8) is a bridge that links to southbridge. */
 	sb_dev = dev_find_slot(0, PCI_DEVFN(8, 0));
@@ -433,6 +435,7 @@
 	/* Lock HWInit Register after the last device was done */
 	if (dev_ind == 13) {
 		sr56x0_lock_hwinitreg();
+		udelay(cfg->pcie_settling_time);
 	}
 }