[OpenBIOS] r643 - trunk/openbios-devel/drivers

svn at openbios.org svn at openbios.org
Thu Dec 10 01:17:18 CET 2009


Author: laurent
Date: 2009-12-10 01:17:17 +0100 (Thu, 10 Dec 2009)
New Revision: 643

Modified:
   trunk/openbios-devel/drivers/pci.c
Log:
VGA adapters need to claim memory and i/o
transactions even if they do not have any
i/o or memory bars. E.g. PCI spec, page 297,
gives an example of such a device:

    Programming interface 0000 0000b
    VGA-compatible controller. Memory
    addresses 0A 0000h through 0B
    FFFFh. I/O addresses 3B0h to 3BBh
    and 3C0h to 3DFh and all aliases of
    these addresses.

While bios could check for these devices and special-case them, it is
easier to fix this by enabling i/o and memory space unconditionally:
devices that do not support it will just ignore this setting.

Signed-off-by: Michael S. Tsirkin <mst at redhat.com>



Modified: trunk/openbios-devel/drivers/pci.c
===================================================================
--- trunk/openbios-devel/drivers/pci.c	2009-12-09 18:44:01 UTC (rev 642)
+++ trunk/openbios-devel/drivers/pci.c	2009-12-10 00:17:17 UTC (rev 643)
@@ -732,10 +732,6 @@
                 base = *io_base;
                 min_align = 1 << 7;
                 amask = 0x00000001;
-                pci_config_write16(addr, PCI_COMMAND,
-                                   pci_config_read16(addr,
-                                                     PCI_COMMAND) |
-                                   PCI_COMMAND_IO);
         } else {
                 /* Memory Space */
                 base = *mem_base;
@@ -744,10 +740,6 @@
                 if (reg == 6) {
                         smask |= 1; /* ROM */
                 }
-                pci_config_write16(addr, PCI_COMMAND,
-                                   pci_config_read16(addr,
-                                                     PCI_COMMAND) |
-                                   PCI_COMMAND_MEMORY);
         }
         *p_omask = smask & amask;
         smask &= ~amask;
@@ -788,6 +780,7 @@
 
 {
         uint32_t omask;
+        uint16_t cmd;
         int reg;
         pci_addr config_addr;
 
@@ -807,6 +800,9 @@
                 ob_pci_configure_bar(addr, config, reg, config_addr,
                                      &omask, mem_base, io_base);
         }
+        cmd = pci_config_read16(addr, PCI_COMMAND);
+        cmd |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
+        pci_config_write16(addr, PCI_COMMAND, cmd);
 }
 
 static void ob_scan_pci_bus(int bus, unsigned long *mem_base,




More information about the OpenBIOS mailing list