[coreboot] r1045 - in coreboot-v3: device mainboard/amd/serengeti util/dtc
svn at coreboot.org
svn at coreboot.org
Wed Nov 19 04:05:34 CET 2008
Author: myles
Date: 2008-11-19 04:05:33 +0100 (Wed, 19 Nov 2008)
New Revision: 1045
Modified:
coreboot-v3/device/pci_device.c
coreboot-v3/mainboard/amd/serengeti/dts
coreboot-v3/util/dtc/flattree.c
Log:
This patch makes subsystem ids work. Here are the changes by file:
device/pci_device.c:
Only update IDs if:
- The device is on the mainboard
- The device has a Vendor ID and Device ID
- The device has a set_subsystem function in ops_pci(dev)
util/dtc/flattree.c:
Make devices from the dts be on_mainboard.
If they're plugged in, they shouldn't be in the dts.
mainboard/amd/serengeti/dts:
Add subsystem_vendor and subsystem_device.
Build tested on Serengeti. Getting closer :)
Signed-off-by: Myles Watson <mylesgw at gmail.com>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>
Modified: coreboot-v3/device/pci_device.c
===================================================================
--- coreboot-v3/device/pci_device.c 2008-11-18 22:32:05 UTC (rev 1044)
+++ coreboot-v3/device/pci_device.c 2008-11-19 03:05:33 UTC (rev 1045)
@@ -632,38 +632,36 @@
void pci_dev_set_subsystem_wrapper(struct device *dev)
{
const struct pci_operations *ops;
- u16 vendor = 0;
- u16 device = 0;
+ u16 vendor = dev->id.pci.vendor;
+ u16 device = dev->id.pci.device;
-#warning Per-device subsystem ID has to be set here, but for that we have to extend the dts.
-
-#ifdef HAVE_MAINBOARD_PCI_SUBSYSTEM_ID
- /* If there's no explicit subsystem ID for this device and the device
- * is onboard, use the board defaults. */
- if (dev->on_mainboard) {
- if (!vendor)
- vendor = mainboard_pci_subsystem_vendor;
- if (!device)
- device = mainboard_pci_subsystem_device;
- } else {
- printk(BIOS_DEBUG, "%s: Device not on_mainboard\n",
- dev_path(dev));
- }
-#endif
- /* Set the subsystem vendor and device ID for mainboard devices. */
ops = ops_pci(dev);
/* If either vendor or device is zero, we leave it as is. */
if (ops && ops->set_subsystem && vendor && device) {
- printk(BIOS_DEBUG,
- "%s: Setting subsystem VID/DID to %02x/%02x\n",
- dev_path(dev), vendor, device);
+ /* If there's no explicit subsystem ID for this device and the
+ * device is onboard, use the board defaults. */
+ vendor = dev->subsystem_vendor;
+ device = dev->subsystem_device;
- ops->set_subsystem(dev, vendor, device);
- } else {
- printk(BIOS_DEBUG, "%s: Not setting subsystem VID/DID\n",
- dev_path(dev));
- }
+ /* Set the subsystem vendor and device ID for mainboard devices. */
+ if (dev->on_mainboard) {
+ if (!vendor)
+ vendor = dev_root.subsystem_vendor;
+ if (!device)
+ device = dev_root.subsystem_device;
+
+ printk(BIOS_DEBUG,
+ "%s: Setting subsystem VID/DID to %02x/%02x\n",
+ dev_path(dev), vendor, device);
+
+ ops->set_subsystem(dev, vendor, device);
+
+ } else {
+ printk(BIOS_DEBUG, "%s: Device not on_mainboard\n",
+ dev_path(dev));
+ }
+ }
}
Modified: coreboot-v3/mainboard/amd/serengeti/dts
===================================================================
--- coreboot-v3/mainboard/amd/serengeti/dts 2008-11-18 22:32:05 UTC (rev 1044)
+++ coreboot-v3/mainboard/amd/serengeti/dts 2008-11-19 03:05:33 UTC (rev 1045)
@@ -22,6 +22,8 @@
device_operations="serengeti";
mainboard_vendor = "AMD";
mainboard_name = "Serengeti";
+ subsystem_vendor = "PCI_VENDOR_ID_AMD";
+ subsystem_device = "0x2b80";
cpus { };
apic at 0 {
};
Modified: coreboot-v3/util/dtc/flattree.c
===================================================================
--- coreboot-v3/util/dtc/flattree.c 2008-11-18 22:32:05 UTC (rev 1044)
+++ coreboot-v3/util/dtc/flattree.c 2008-11-19 03:05:33 UTC (rev 1045)
@@ -648,11 +648,13 @@
* then a variable is set to 1 (e.g. on_mainboard);
* and some are just set directly into the code (e.g. ops_pci).
*/
+
+ /* If it's in the tree, it's on the mainboard. */
+ fprintf(f, "\t.on_mainboard = 1,\n");
+
for_each_property(tree, prop) {
/* to do: check the value, maybe. Kinda pointless though. */
- if (streq(prop->name, "on_mainboard")){
- fprintf(f, "\t.on_mainboard = 1,\n");
- }
+
if (streq(prop->name, "subsystem_vendor")){
fprintf(f, "\t.subsystem_vendor = %s,\n", prop->val.val);
}
More information about the coreboot
mailing list