Author: jcrouse
Date: 2008-10-20 18:51:20 +0200 (Mon, 20 Oct 2008)
New Revision: 3672

Modified:
   trunk/payloads/libpayload/drivers/pci.c
   trunk/payloads/libpayload/include/pci.h
Log:
[PATCH] libpayload:  Add pci_set_bus_master() function

Allow the payload to enable a PCI device as a bus master.

Signed-off-by: Jordan Crouse <[EMAIL PROTECTED]>
Acked-by: Patrick Georgi <[EMAIL PROTECTED]>


Modified: trunk/payloads/libpayload/drivers/pci.c
===================================================================
--- trunk/payloads/libpayload/drivers/pci.c     2008-10-20 16:50:47 UTC (rev 
3671)
+++ trunk/payloads/libpayload/drivers/pci.c     2008-10-20 16:51:20 UTC (rev 
3672)
@@ -112,3 +112,11 @@
 {
        return pci_read_config32(dev, 0x10 + (bar * 4));
 }
+
+void pci_set_bus_master(pcidev_t dev)
+{
+       u16 val = pci_read_config16(dev, REG_COMMAND);
+       val |= REG_COMMAND_BM;
+       pci_write_config16(dev, REG_COMMAND, val);
+}
+

Modified: trunk/payloads/libpayload/include/pci.h
===================================================================
--- trunk/payloads/libpayload/include/pci.h     2008-10-20 16:50:47 UTC (rev 
3671)
+++ trunk/payloads/libpayload/include/pci.h     2008-10-20 16:51:20 UTC (rev 
3672)
@@ -35,10 +35,12 @@
 typedef u32 pcidev_t;
 
 #define REG_VENDOR_ID   0x00
-#define REG_DEVICE_ID   0x04
+#define REG_COMMAND     0x04
 #define REG_HEADER_TYPE 0x0E
 #define REG_PRIMARY_BUS 0x18
 
+#define REG_COMMAND_BM  (1 << 2)
+
 #define HEADER_TYPE_NORMAL  0
 #define HEADER_TYPE_BRIDGE  1
 #define HEADER_TYPE_CARDBUS 2
@@ -64,4 +66,6 @@
 int pci_find_device(u16 vid, u16 did, pcidev_t *dev);
 u32 pci_read_resource(pcidev_t dev, int bar);
 
+void pci_set_bus_master(pcidev_t dev);
+
 #endif


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to