From 0c8118642ca817f95adb23028135fdace8f7468d Mon Sep 17 00:00:00 2001 From: Bartlomiej Zolnierkiewicz Date: Sat, 26 Apr 2008 22:25:24 +0200 Subject: [PATCH] --- yaml --- r: 93663 b: refs/heads/master c: 1fd1890594bd355a4217f5658a34763e77decee3 h: refs/heads/master i: 93661: ce740b08858021f9d578bfb978de7ec3bf4fa8f7 93659: e40d80d75339940d992e8e887ef673f2654baae3 93655: 7d1e0b188c7d4352e29eb20e4f01695f1f8fd85f 93647: 8c6a6c043e00f8dec186cb48082ef232600792f0 93631: f8b55b1ce97b6904e8235ebd1994ee67623b21c0 v: v3 --- [refs] | 2 +- trunk/drivers/ide/ide-probe.c | 7 +++++-- trunk/drivers/ide/pci/sl82c105.c | 5 ++--- trunk/include/linux/ide.h | 2 ++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index d69b1160ea27..d82381e3ddf1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6c61064162e6a9965a062b445c6bd6c8ed019183 +refs/heads/master: 1fd1890594bd355a4217f5658a34763e77decee3 diff --git a/trunk/drivers/ide/ide-probe.c b/trunk/drivers/ide/ide-probe.c index e0316869eb6f..b58eb792172e 100644 --- a/trunk/drivers/ide/ide-probe.c +++ b/trunk/drivers/ide/ide-probe.c @@ -1367,8 +1367,11 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port, if (hwif->chipset != ide_dtc2278 || hwif->channel == 0) hwif->port_ops = d->port_ops; - if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) - hwif->mate->serialized = hwif->serialized = 1; + if ((d->host_flags & IDE_HFLAG_SERIALIZE) || + ((d->host_flags & IDE_HFLAG_SERIALIZE_DMA) && hwif->dma_base)) { + if (hwif->mate) + hwif->mate->serialized = hwif->serialized = 1; + } hwif->swdma_mask = d->swdma_mask; hwif->mwdma_mask = d->mwdma_mask; diff --git a/trunk/drivers/ide/pci/sl82c105.c b/trunk/drivers/ide/pci/sl82c105.c index 2c2fe59a0d9e..c2127cbdecd3 100644 --- a/trunk/drivers/ide/pci/sl82c105.c +++ b/trunk/drivers/ide/pci/sl82c105.c @@ -296,9 +296,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->dma_start = &sl82c105_dma_start; hwif->ide_dma_end = &sl82c105_dma_end; hwif->dma_timeout = &sl82c105_dma_timeout; - - if (hwif->mate) - hwif->serialized = hwif->mate->serialized = 1; } static const struct ide_port_ops sl82c105_port_ops = { @@ -319,6 +316,7 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = { #if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT) IDE_HFLAG_FORCE_LEGACY_IRQS | #endif + IDE_HFLAG_SERIALIZE_DMA | IDE_HFLAG_NO_AUTODMA, .pio_mask = ATA_PIO5, .mwdma_mask = ATA_MWDMA2, @@ -338,6 +336,7 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev "revision %d, BM-DMA disabled\n", rev); d.init_hwif = NULL; d.mwdma_mask = 0; + d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; } return ide_setup_pci_device(dev, &d); diff --git a/trunk/include/linux/ide.h b/trunk/include/linux/ide.h index 2da46af64604..e5f41741ba91 100644 --- a/trunk/include/linux/ide.h +++ b/trunk/include/linux/ide.h @@ -1087,6 +1087,8 @@ enum { /* unmask IRQs */ IDE_HFLAG_UNMASK_IRQS = (1 << 25), IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), + /* serialize ports if DMA is possible (for sl82c105) */ + IDE_HFLAG_SERIALIZE_DMA = (1 << 27), /* force host out of "simplex" mode */ IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), /* DSC overlap is unsupported */