diff options
Diffstat (limited to 'drivers/ide/ppc/pmac.c')
-rw-r--r-- | drivers/ide/ppc/pmac.c | 42 |
1 files changed, 12 insertions, 30 deletions
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index 45fc36f0f219..e46f47206542 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
@@ -942,8 +942,8 @@ pmac_ide_tune_chipset (ide_drive_t *drive, byte speed) | |||
942 | return 1; | 942 | return 1; |
943 | case XFER_UDMA_4: | 943 | case XFER_UDMA_4: |
944 | case XFER_UDMA_3: | 944 | case XFER_UDMA_3: |
945 | if (HWIF(drive)->udma_four == 0) | 945 | if (drive->hwif->cbl != ATA_CBL_PATA80) |
946 | return 1; | 946 | return 1; |
947 | case XFER_UDMA_2: | 947 | case XFER_UDMA_2: |
948 | case XFER_UDMA_1: | 948 | case XFER_UDMA_1: |
949 | case XFER_UDMA_0: | 949 | case XFER_UDMA_0: |
@@ -1244,7 +1244,7 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
1244 | hwif->chipset = ide_pmac; | 1244 | hwif->chipset = ide_pmac; |
1245 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || pmif->mediabay; | 1245 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET] || pmif->mediabay; |
1246 | hwif->hold = pmif->mediabay; | 1246 | hwif->hold = pmif->mediabay; |
1247 | hwif->udma_four = pmif->cable_80; | 1247 | hwif->cbl = pmif->cable_80 ? ATA_CBL_PATA80 : ATA_CBL_PATA40; |
1248 | hwif->drives[0].unmask = 1; | 1248 | hwif->drives[0].unmask = 1; |
1249 | hwif->drives[1].unmask = 1; | 1249 | hwif->drives[1].unmask = 1; |
1250 | hwif->tuneproc = pmac_ide_tuneproc; | 1250 | hwif->tuneproc = pmac_ide_tuneproc; |
@@ -1821,28 +1821,11 @@ pmac_ide_dma_check(ide_drive_t *drive) | |||
1821 | enable = 0; | 1821 | enable = 0; |
1822 | 1822 | ||
1823 | if (enable) { | 1823 | if (enable) { |
1824 | short mode; | 1824 | u8 mode = ide_max_dma_mode(drive); |
1825 | 1825 | ||
1826 | map = XFER_MWDMA; | 1826 | if (mode >= XFER_UDMA_0) |
1827 | if (pmif->kind == controller_kl_ata4 | ||
1828 | || pmif->kind == controller_un_ata6 | ||
1829 | || pmif->kind == controller_k2_ata6 | ||
1830 | || pmif->kind == controller_sh_ata6) { | ||
1831 | map |= XFER_UDMA; | ||
1832 | if (pmif->cable_80) { | ||
1833 | map |= XFER_UDMA_66; | ||
1834 | if (pmif->kind == controller_un_ata6 || | ||
1835 | pmif->kind == controller_k2_ata6 || | ||
1836 | pmif->kind == controller_sh_ata6) | ||
1837 | map |= XFER_UDMA_100; | ||
1838 | if (pmif->kind == controller_sh_ata6) | ||
1839 | map |= XFER_UDMA_133; | ||
1840 | } | ||
1841 | } | ||
1842 | mode = ide_find_best_mode(drive, map); | ||
1843 | if (mode & XFER_UDMA) | ||
1844 | drive->using_dma = pmac_ide_udma_enable(drive, mode); | 1827 | drive->using_dma = pmac_ide_udma_enable(drive, mode); |
1845 | else if (mode & XFER_MWDMA) | 1828 | else if (mode >= XFER_MW_DMA_0) |
1846 | drive->using_dma = pmac_ide_mdma_enable(drive, mode); | 1829 | drive->using_dma = pmac_ide_mdma_enable(drive, mode); |
1847 | hwif->OUTB(0, IDE_CONTROL_REG); | 1830 | hwif->OUTB(0, IDE_CONTROL_REG); |
1848 | /* Apply settings to controller */ | 1831 | /* Apply settings to controller */ |
@@ -2004,20 +1987,19 @@ static void pmac_ide_dma_host_on(ide_drive_t *drive) | |||
2004 | { | 1987 | { |
2005 | } | 1988 | } |
2006 | 1989 | ||
2007 | static int | 1990 | static void |
2008 | pmac_ide_dma_lostirq (ide_drive_t *drive) | 1991 | pmac_ide_dma_lost_irq (ide_drive_t *drive) |
2009 | { | 1992 | { |
2010 | pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data; | 1993 | pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data; |
2011 | volatile struct dbdma_regs __iomem *dma; | 1994 | volatile struct dbdma_regs __iomem *dma; |
2012 | unsigned long status; | 1995 | unsigned long status; |
2013 | 1996 | ||
2014 | if (pmif == NULL) | 1997 | if (pmif == NULL) |
2015 | return 0; | 1998 | return; |
2016 | dma = pmif->dma_regs; | 1999 | dma = pmif->dma_regs; |
2017 | 2000 | ||
2018 | status = readl(&dma->status); | 2001 | status = readl(&dma->status); |
2019 | printk(KERN_ERR "ide-pmac lost interrupt, dma status: %lx\n", status); | 2002 | printk(KERN_ERR "ide-pmac lost interrupt, dma status: %lx\n", status); |
2020 | return 0; | ||
2021 | } | 2003 | } |
2022 | 2004 | ||
2023 | /* | 2005 | /* |
@@ -2057,8 +2039,8 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
2057 | hwif->ide_dma_test_irq = &pmac_ide_dma_test_irq; | 2039 | hwif->ide_dma_test_irq = &pmac_ide_dma_test_irq; |
2058 | hwif->dma_host_off = &pmac_ide_dma_host_off; | 2040 | hwif->dma_host_off = &pmac_ide_dma_host_off; |
2059 | hwif->dma_host_on = &pmac_ide_dma_host_on; | 2041 | hwif->dma_host_on = &pmac_ide_dma_host_on; |
2060 | hwif->ide_dma_timeout = &__ide_dma_timeout; | 2042 | hwif->dma_timeout = &ide_dma_timeout; |
2061 | hwif->ide_dma_lostirq = &pmac_ide_dma_lostirq; | 2043 | hwif->dma_lost_irq = &pmac_ide_dma_lost_irq; |
2062 | 2044 | ||
2063 | hwif->atapi_dma = 1; | 2045 | hwif->atapi_dma = 1; |
2064 | switch(pmif->kind) { | 2046 | switch(pmif->kind) { |