pdc202xx_new: add missing ->dma_base check
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Mon, 20 Aug 2007 20:42:56 +0000 (22:42 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Mon, 20 Aug 2007 20:42:56 +0000 (22:42 +0200)
If ->dma_base is not set (== PCI BAR4 cannot be reserved) then DMA hooks
shouldn't be initialized or bad things will happen.

Also this host driver requires valid PCI BAR4 for normal operation so
check it in ->init_chipset and fail initialization if not set.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/pci/pdc202xx_new.c

index 8a66a2871b3a019c68e7a22900defadcc094190c..f6db2f37efad5e83273d3e47cec8796121cf96fb 100644 (file)
@@ -378,6 +378,9 @@ static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const cha
        int f, r;
        u8 pll_ctl0, pll_ctl1;
 
+       if (dma_base == 0)
+               return -EFAULT;
+
 #ifdef CONFIG_PPC_PMAC
        apple_kiwi_init(dev);
 #endif
@@ -494,15 +497,18 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
        hwif->speedproc = &pdcnew_tune_chipset;
        hwif->resetproc = &pdcnew_reset;
 
+       hwif->err_stops_fifo = 1;
+
        hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
 
+       if (hwif->dma_base == 0)
+               return;
+
        hwif->atapi_dma  = 1;
 
        hwif->ultra_mask = hwif->cds->udma_mask;
        hwif->mwdma_mask = 0x07;
 
-       hwif->err_stops_fifo = 1;
-
        hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate;
 
        if (hwif->cbl != ATA_CBL_PATA40_SHORT)