Patchwork [v2,6/8] seabios: pciinit: make bar offset calculation pci bridge aware.

login
register
mail settings
Submitter Isaku Yamahata
Date June 22, 2010, 8:57 a.m.
Message ID <b0ae687a5a92e3123140b0e9b9626d5e338aa03b.1277196704.git.yamahata@valinux.co.jp>
Download mbox | patch
Permalink /patch/56434/
State New
Headers show

Comments

Isaku Yamahata - June 22, 2010, 8:57 a.m.
This patch makes pci bar offset calculation pci bridge aware.
The offset of pci bridge rom is different from normal device.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 src/pciinit.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

Patch

diff --git a/src/pciinit.c b/src/pciinit.c
index 9109739..23b79bc 100644
--- a/src/pciinit.c
+++ b/src/pciinit.c
@@ -27,7 +27,11 @@  static u32 pci_bar(u16 bdf, int region_num)
     if (region_num != PCI_ROM_SLOT) {
         return PCI_BASE_ADDRESS_0 + region_num * 4;
     }
-    return PCI_ROM_ADDRESS;
+
+#define PCI_HEADER_TYPE_MULTI_FUNCTION 0x80
+    u8 type = pci_config_readb(bdf, PCI_HEADER_TYPE);
+    type &= ~PCI_HEADER_TYPE_MULTI_FUNCTION;
+    return type == PCI_HEADER_TYPE_BRIDGE ? PCI_ROM_ADDRESS1 : PCI_ROM_ADDRESS;
 }
 
 static void pci_set_io_region_addr(u16 bdf, int region_num, u32 addr)