<html><body><div style="font-family: times new roman, new york, times, serif; font-size: 12pt; color: #000000"><div><span style="font-family: lucida console,sans-serif;">All,<br></span></div><div><span style="font-family: lucida console,sans-serif;">This is a patch that reproduces the vendor ID mapping that is done in<br></span></div><div><span style="font-family: lucida console,sans-serif;">coreboot in the various AMD northbridge's. The coreboot mapping is only<br></span></div><div><span style="font-family: lucida console,sans-serif;">useful if coreboot is used to run the vga bios. If seabios is the payload<br></span></div><div><span style="font-family: lucida console,sans-serif;">then most coreboot configs leave the vga bios init for it.<br></span></div><div><span style="font-family: lucida console,sans-serif;"><br></span></div><div><span style="font-family: lucida console,sans-serif;"><br></span></div><div><span style="font-family: lucida console,sans-serif;"><br></span></div><div><span style="font-family: lucida console,sans-serif;">From 5b7f2ba9f43fbc67a81a2449d8bbd3d2f6e530aa Mon Sep 17 00:00:00 2001</span><br><span style="font-family: lucida console,sans-serif;">From: Dave Frodin <dave.frodin@se-eng.com></span><br><span style="font-family: lucida console,sans-serif;">Date: Tue, 7 May 2013 13:51:56 -0600</span><br><span style="font-family: lucida console,sans-serif;">Subject: [PATCH] Seabios: allow mapping of multiple PCI option ROMs to one</span><br><br><span style="font-family: lucida console,sans-serif;">This feature was added to allow mapping multiple different</span><br><span style="font-family: lucida console,sans-serif;">PCI graphics vendor/device IDs to a single ID. The intent is</span><br><span style="font-family: lucida console,sans-serif;">to have the coreboot mainboard define its VGA_BIOS_ID as the</span><br><span style="font-family: lucida console,sans-serif;">ID that is present in the actual VGA BIOS. The PCI ID of the</span><br><span style="font-family: lucida console,sans-serif;">graphics device would then be mapped to that ID.</span><br><br><span style="font-family: lucida console,sans-serif;">Change-Id: Id06a1c9730546070146932a4dc8ab8229c4a59b9</span><br><span style="font-family: lucida console,sans-serif;">Signed-off-by: Dave Frodin <dave.frodin@se-eng.com></span><br><span style="font-family: lucida console,sans-serif;">---</span><br><span style="font-family: lucida console,sans-serif;"> src/optionroms.c |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++++-</span><br><span style="font-family: lucida console,sans-serif;"> 1 files changed, 68 insertions(+), 1 deletions(-)</span><br><br><span style="font-family: lucida console,sans-serif;">diff --git a/src/optionroms.c b/src/optionroms.c</span><br><span style="font-family: lucida console,sans-serif;">index 00697b2..bf1e977 100644</span><br><span style="font-family: lucida console,sans-serif;">--- a/src/optionroms.c</span><br><span style="font-family: lucida console,sans-serif;">+++ b/src/optionroms.c</span><br><span style="font-family: lucida console,sans-serif;">@@ -154,7 +154,6 @@ getRomPriority(u64 *sources, struct rom_header *rom, int instance)</span><br><span style="font-family: lucida console,sans-serif;">     return bootprio_find_named_rom(file->name, instance);</span><br><span style="font-family: lucida console,sans-serif;"> }</span><br><span style="font-family: lucida console,sans-serif;"> </span><br><span style="font-family: lucida console,sans-serif;">-</span><br><span style="font-family: lucida console,sans-serif;"> /****************************************************************</span><br><span style="font-family: lucida console,sans-serif;">  * Roms in CBFS</span><br><span style="font-family: lucida console,sans-serif;">  ****************************************************************/</span><br><span style="font-family: lucida console,sans-serif;">@@ -174,11 +173,79 @@ deploy_romfile(struct romfile_s *file)</span><br><span style="font-family: lucida console,sans-serif;">     return rom;</span><br><span style="font-family: lucida console,sans-serif;"> }</span><br><span style="font-family: lucida console,sans-serif;"> </span><br><span style="font-family: lucida console,sans-serif;">+/* Allow mapping of multiple different PCI IDs to a single ID. A single AMD</span><br><span style="font-family: lucida console,sans-serif;">+ * VGA BIOS will quite often be used on hardware that reports different</span><br><span style="font-family: lucida console,sans-serif;">+ * PCI graphics IDs. This allows a mainboard to have a single definition</span><br><span style="font-family: lucida console,sans-serif;">+ * (which would match the ID in the VGA BIOS) yet would support multiple</span><br><span style="font-family: lucida console,sans-serif;">+ * CPU IDs.</span><br><span style="font-family: lucida console,sans-serif;">+ */</span><br><span style="font-family: lucida console,sans-serif;">+static u32</span><br><span style="font-family: lucida console,sans-serif;">+map_oprom_vendev(u32 vendev)</span><br><span style="font-family: lucida console,sans-serif;">+{</span><br><span style="font-family: lucida console,sans-serif;">+    u32 new_vendev = vendev;</span><br><span style="font-family: lucida console,sans-serif;">+</span><br><span style="font-family: lucida console,sans-serif;">+    switch (vendev) {</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029803: // Family14</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029804:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029805:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029806:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029807:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029808:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029809:</span><br><span style="font-family: lucida console,sans-serif;">+        new_vendev = 0x10029802;</span><br><span style="font-family: lucida console,sans-serif;">+        break;</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029901: // Family15tn</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029903:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029904:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029906:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029907:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029908:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x1002990A:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029910:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029913:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029917:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029918:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029919:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029990:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029991:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029992:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029993:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029994:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x100299A0:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x100299A2:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x100299A4:</span><br><span style="font-family: lucida console,sans-serif;">+        new_vendev = 0x10029900;</span><br><span style="font-family: lucida console,sans-serif;">+        break;</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029831: // Family16kb</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029832:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029833:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029834:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029835:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029836:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029837:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x10029839:</span><br><span style="font-family: lucida console,sans-serif;">+    case 0x1002983D:</span><br><span style="font-family: lucida console,sans-serif;">+        new_vendev = 0x10029830;</span><br><span style="font-family: lucida console,sans-serif;">+        break;</span><br><span style="font-family: lucida console,sans-serif;">+    default:</span><br><span style="font-family: lucida console,sans-serif;">+        break;</span><br><span style="font-family: lucida console,sans-serif;">+    }</span><br><span style="font-family: lucida console,sans-serif;">+    if (vendev != new_vendev)</span><br><span style="font-family: lucida console,sans-serif;">+        dprintf(1, "Mapping PCI device %8x to %8x\n",vendev, new_vendev);</span><br><span style="font-family: lucida console,sans-serif;">+    return new_vendev;</span><br><span style="font-family: lucida console,sans-serif;">+}</span><br><span style="font-family: lucida console,sans-serif;">+</span><br><span style="font-family: lucida console,sans-serif;"> // Check if an option rom is at a hardcoded location or in CBFS.</span><br><span style="font-family: lucida console,sans-serif;"> static struct rom_header *</span><br><span style="font-family: lucida console,sans-serif;"> lookup_hardcode(struct pci_device *pci)</span><br><span style="font-family: lucida console,sans-serif;"> {</span><br><span style="font-family: lucida console,sans-serif;">     char fname[17];</span><br><span style="font-family: lucida console,sans-serif;">+    u32 vendev_mapped;</span><br><span style="font-family: lucida console,sans-serif;">+</span><br><span style="font-family: lucida console,sans-serif;">+    vendev_mapped = map_oprom_vendev((pci->vendor << 16) | pci->device);</span><br><span style="font-family: lucida console,sans-serif;">+    pci->vendor = vendev_mapped >> 16;</span><br><span style="font-family: lucida console,sans-serif;">+    pci->device = vendev_mapped & 0xFFFF;</span><br><span style="font-family: lucida console,sans-serif;">+</span><br><span style="font-family: lucida console,sans-serif;">     snprintf(fname, sizeof(fname), "pci%04x,%04x.rom"</span><br><span style="font-family: lucida console,sans-serif;">              , pci->vendor, pci->device);</span><br><span style="font-family: lucida console,sans-serif;">     struct romfile_s *file = romfile_find(fname);</span><br><span style="font-family: lucida console,sans-serif;">-- </span><br><span style="font-family: lucida console,sans-serif;">1.7.9</span><br><br></div></div></body></html>