]> xenbits.xensource.com Git - seabios.git/commitdiff
Add CONFIG_ATA_DMA option; default to off for now.
authorKevin O'Connor <kevin@koconnor.net>
Sun, 17 Jan 2010 17:58:47 +0000 (12:58 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sun, 17 Jan 2010 17:58:47 +0000 (12:58 -0500)
Allow compile option to disable ATA DMA support.
Turn it off by default for now - some coreboot users are seeing issues
    with it.

src/ata.c
src/config.h

index add1d67b4cd7de8d7c5ccf1216d17c42afef864a..a2a670b6667137a658fddab848327be9ce46bfb0 100644 (file)
--- a/src/ata.c
+++ b/src/ata.c
@@ -381,6 +381,8 @@ struct sff_dma_prd {
 static int
 ata_try_dma(struct disk_op_s *op, int iswrite, int blocksize)
 {
+    if (! CONFIG_ATA_DMA)
+        return -1;
     u32 dest = (u32)op->buf_fl;
     if (dest & 1)
         // Need minimum alignment of 1.
@@ -434,6 +436,8 @@ ata_try_dma(struct disk_op_s *op, int iswrite, int blocksize)
 static int
 ata_dma_transfer(struct disk_op_s *op)
 {
+    if (! CONFIG_ATA_DMA)
+        return -1;
     dprintf(16, "ata_dma_transfer id=%p buf=%p\n"
             , op->drive_g, op->buf_fl);
 
@@ -513,6 +517,8 @@ fail:
 static int
 ata_dma_cmd_data(struct disk_op_s *op, struct ata_pio_command *cmd)
 {
+    if (! CONFIG_ATA_DMA)
+        return -1;
     int ret = send_cmd(op->drive_g, cmd);
     if (ret)
         return ret;
@@ -1005,7 +1011,7 @@ ata_init(void)
         u8 pciirq = pci_config_readb(bdf, PCI_INTERRUPT_LINE);
         u8 prog_if = pci_config_readb(bdf, PCI_CLASS_PROG);
         int master = 0;
-        if (prog_if & 0x80) {
+        if (CONFIG_ATA_DMA && prog_if & 0x80) {
             // Check for bus-mastering.
             u32 bar = pci_config_readl(bdf, PCI_BASE_ADDRESS_4);
             if (bar & PCI_BASE_ADDRESS_SPACE_IO) {
index 58c0ffc941c371089f13961afa6119f397ec9ffe..dc0b69fed317398f75913dfc56f30999a4daa849 100644 (file)
@@ -42,6 +42,8 @@
 #define CONFIG_PS2PORT 1
 // Support for IDE disk code
 #define CONFIG_ATA 1
+// Detect and try to use ATA bus mastering DMA controllers.
+#define CONFIG_ATA_DMA 0
 // Use 32bit PIO accesses on ATA (minor optimization on PCI transfers)
 #define CONFIG_ATA_PIO32 0
 // Support for booting from a CD