Commit c2919f2a authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
  IDE: fix sparse signed-ness errors with host->host_busy
  ide: fix suspend regression
  tx4938ide: Fix build error due to read_sff_dma_status moving
  ide: remove unused CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
  sl82c105: remove dead code
  via82cxxx: fix cable warning message
  ide: can't use SSD/non-rotational queue flag for all CFA devices
  it821x.c: use dev->revision instead of pci_read_config_byte
  it821x: Add ultra_mask quirk for Vortex86SX
  ide: fix accidental LOCKDEP breakage caused by local_irq_set() removal
parents 9316fcac e720b9e4
...@@ -52,14 +52,12 @@ Two files are introduced: ...@@ -52,14 +52,12 @@ Two files are introduced:
b) 'drivers/ide/mips/au1xxx-ide.c' b) 'drivers/ide/mips/au1xxx-ide.c'
contains the functionality of the AU1XXX IDE driver contains the functionality of the AU1XXX IDE driver
Four configs variables are introduced: Following extra configs variables are introduced:
CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA - enable the PIO+DBDMA mode CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA - enable the PIO+DBDMA mode
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA - enable the MWDMA mode CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA - enable the MWDMA mode
CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA
controller controller
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ - maximum transfer size
per descriptor
SUPPORTED IDE MODES SUPPORTED IDE MODES
...@@ -87,7 +85,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y ...@@ -87,7 +85,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y CONFIG_IDEDMA_AUTO=y
...@@ -105,7 +102,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y ...@@ -105,7 +102,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y CONFIG_IDEDMA_AUTO=y
......
...@@ -701,11 +701,6 @@ config BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA ...@@ -701,11 +701,6 @@ config BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX depends on SOC_AU1200 && BLK_DEV_IDE_AU1XXX
endchoice endchoice
config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
int "Maximum transfer size (KB) per request (up to 128)"
default "128"
depends on BLK_DEV_IDE_AU1XXX
config BLK_DEV_IDE_TX4938 config BLK_DEV_IDE_TX4938
tristate "TX4938 internal IDE support" tristate "TX4938 internal IDE support"
depends on SOC_TX4938 depends on SOC_TX4938
......
...@@ -633,7 +633,7 @@ static void ide_disk_setup(ide_drive_t *drive) ...@@ -633,7 +633,7 @@ static void ide_disk_setup(ide_drive_t *drive)
printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name, printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
q->max_sectors / 2); q->max_sectors / 2);
if (ata_id_is_ssd(id) || ata_id_is_cfa(id)) if (ata_id_is_ssd(id))
queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q); queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q);
/* calculate drive capacity, and select LBA if possible */ /* calculate drive capacity, and select LBA if possible */
......
...@@ -493,7 +493,7 @@ static int __ide_wait_stat(ide_drive_t *drive, u8 good, u8 bad, unsigned long ti ...@@ -493,7 +493,7 @@ static int __ide_wait_stat(ide_drive_t *drive, u8 good, u8 bad, unsigned long ti
stat = tp_ops->read_status(hwif); stat = tp_ops->read_status(hwif);
if (stat & ATA_BUSY) { if (stat & ATA_BUSY) {
local_irq_save(flags); local_save_flags(flags);
local_irq_enable_in_hardirq(); local_irq_enable_in_hardirq();
timeout += jiffies; timeout += jiffies;
while ((stat = tp_ops->read_status(hwif)) & ATA_BUSY) { while ((stat = tp_ops->read_status(hwif)) & ATA_BUSY) {
......
...@@ -186,12 +186,10 @@ void ide_complete_pm_request(ide_drive_t *drive, struct request *rq) ...@@ -186,12 +186,10 @@ void ide_complete_pm_request(ide_drive_t *drive, struct request *rq)
blk_pm_suspend_request(rq) ? "suspend" : "resume"); blk_pm_suspend_request(rq) ? "suspend" : "resume");
#endif #endif
spin_lock_irqsave(q->queue_lock, flags); spin_lock_irqsave(q->queue_lock, flags);
if (blk_pm_suspend_request(rq)) { if (blk_pm_suspend_request(rq))
blk_stop_queue(q); blk_stop_queue(q);
} else { else
drive->dev_flags &= ~IDE_DFLAG_BLOCKED; drive->dev_flags &= ~IDE_DFLAG_BLOCKED;
blk_start_queue(q);
}
spin_unlock_irqrestore(q->queue_lock, flags); spin_unlock_irqrestore(q->queue_lock, flags);
drive->hwif->rq = NULL; drive->hwif->rq = NULL;
...@@ -219,6 +217,8 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq) ...@@ -219,6 +217,8 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
* point. * point.
*/ */
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
struct request_queue *q = drive->queue;
unsigned long flags;
int rc; int rc;
#ifdef DEBUG_PM #ifdef DEBUG_PM
printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name); printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name);
...@@ -231,5 +231,9 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq) ...@@ -231,5 +231,9 @@ void ide_check_pm_state(ide_drive_t *drive, struct request *rq)
rc = ide_wait_not_busy(hwif, 100000); rc = ide_wait_not_busy(hwif, 100000);
if (rc) if (rc)
printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name); printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name);
spin_lock_irqsave(q->queue_lock, flags);
blk_start_queue(q);
spin_unlock_irqrestore(q->queue_lock, flags);
} }
} }
...@@ -796,7 +796,7 @@ static int ide_probe_port(ide_hwif_t *hwif) ...@@ -796,7 +796,7 @@ static int ide_probe_port(ide_hwif_t *hwif)
if (irqd) if (irqd)
disable_irq(hwif->irq); disable_irq(hwif->irq);
local_irq_save(flags); local_save_flags(flags);
local_irq_enable_in_hardirq(); local_irq_enable_in_hardirq();
if (ide_port_wait_ready(hwif) == -EBUSY) if (ide_port_wait_ready(hwif) == -EBUSY)
......
...@@ -68,6 +68,8 @@ ...@@ -68,6 +68,8 @@
#define DRV_NAME "it821x" #define DRV_NAME "it821x"
#define QUIRK_VORTEX86 1
struct it821x_dev struct it821x_dev
{ {
unsigned int smart:1, /* Are we in smart raid mode */ unsigned int smart:1, /* Are we in smart raid mode */
...@@ -79,6 +81,7 @@ struct it821x_dev ...@@ -79,6 +81,7 @@ struct it821x_dev
u16 pio[2]; /* Cached PIO values */ u16 pio[2]; /* Cached PIO values */
u16 mwdma[2]; /* Cached MWDMA values */ u16 mwdma[2]; /* Cached MWDMA values */
u16 udma[2]; /* Cached UDMA values (per drive) */ u16 udma[2]; /* Cached UDMA values (per drive) */
u16 quirks;
}; };
#define ATA_66 0 #define ATA_66 0
...@@ -557,8 +560,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) ...@@ -557,8 +560,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
* this is necessary. * this is necessary.
*/ */
pci_read_config_byte(dev, 0x08, &conf); if (dev->revision == 0x10) {
if (conf == 0x10) {
idev->timing10 = 1; idev->timing10 = 1;
hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
if (idev->smart == 0) if (idev->smart == 0)
...@@ -577,6 +579,12 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) ...@@ -577,6 +579,12 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
hwif->ultra_mask = ATA_UDMA6; hwif->ultra_mask = ATA_UDMA6;
hwif->mwdma_mask = ATA_MWDMA2; hwif->mwdma_mask = ATA_MWDMA2;
/* Vortex86SX quirk: prevent Ultra-DMA mode to fix BadCRC issue */
if (idev->quirks & QUIRK_VORTEX86) {
if (dev->revision == 0x11)
hwif->ultra_mask = 0;
}
} }
static void it8212_disable_raid(struct pci_dev *dev) static void it8212_disable_raid(struct pci_dev *dev)
...@@ -649,6 +657,8 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic ...@@ -649,6 +657,8 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic
return -ENOMEM; return -ENOMEM;
} }
itdevs->quirks = id->driver_data;
rc = ide_pci_init_one(dev, &it821x_chipset, itdevs); rc = ide_pci_init_one(dev, &it821x_chipset, itdevs);
if (rc) if (rc)
kfree(itdevs); kfree(itdevs);
...@@ -668,6 +678,7 @@ static void __devexit it821x_remove(struct pci_dev *dev) ...@@ -668,6 +678,7 @@ static void __devexit it821x_remove(struct pci_dev *dev)
static const struct pci_device_id it821x_pci_tbl[] = { static const struct pci_device_id it821x_pci_tbl[] = {
{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), 0 }, { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), 0 },
{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 }, { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 },
{ PCI_VDEVICE(RDC, PCI_DEVICE_ID_RDC_D1010), QUIRK_VORTEX86 },
{ 0, }, { 0, },
}; };
......
...@@ -310,10 +310,6 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = { ...@@ -310,10 +310,6 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = {
.dma_ops = &sl82c105_dma_ops, .dma_ops = &sl82c105_dma_ops,
.host_flags = IDE_HFLAG_IO_32BIT | .host_flags = IDE_HFLAG_IO_32BIT |
IDE_HFLAG_UNMASK_IRQS | IDE_HFLAG_UNMASK_IRQS |
/* FIXME: check for Compatibility mode in generic IDE PCI code */
#if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT)
IDE_HFLAG_FORCE_LEGACY_IRQS |
#endif
IDE_HFLAG_SERIALIZE_DMA | IDE_HFLAG_SERIALIZE_DMA |
IDE_HFLAG_NO_AUTODMA, IDE_HFLAG_NO_AUTODMA,
.pio_mask = ATA_PIO5, .pio_mask = ATA_PIO5,
......
...@@ -202,7 +202,6 @@ static const struct ide_tp_ops tx4938ide_tp_ops = { ...@@ -202,7 +202,6 @@ static const struct ide_tp_ops tx4938ide_tp_ops = {
.exec_command = ide_exec_command, .exec_command = ide_exec_command,
.read_status = ide_read_status, .read_status = ide_read_status,
.read_altstatus = ide_read_altstatus, .read_altstatus = ide_read_altstatus,
.read_sff_dma_status = ide_read_sff_dma_status,
.set_irq = ide_set_irq, .set_irq = ide_set_irq,
......
...@@ -432,8 +432,6 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i ...@@ -432,8 +432,6 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i
if (via_clock < 20000 || via_clock > 50000) { if (via_clock < 20000 || via_clock > 50000) {
printk(KERN_WARNING DRV_NAME ": User given PCI clock speed " printk(KERN_WARNING DRV_NAME ": User given PCI clock speed "
"impossible (%d), using 33 MHz instead.\n", via_clock); "impossible (%d), using 33 MHz instead.\n", via_clock);
printk(KERN_WARNING DRV_NAME ": Use ide0=ata66 if you want "
"to assume 80-wire cable.\n");
via_clock = 33333; via_clock = 33333;
} }
......
...@@ -871,7 +871,7 @@ struct ide_host { ...@@ -871,7 +871,7 @@ struct ide_host {
ide_hwif_t *cur_port; /* for hosts requiring serialization */ ide_hwif_t *cur_port; /* for hosts requiring serialization */
/* used for hosts requiring serialization */ /* used for hosts requiring serialization */
volatile long host_busy; volatile unsigned long host_busy;
}; };
#define IDE_HOST_BUSY 0 #define IDE_HOST_BUSY 0
......
...@@ -2174,6 +2174,7 @@ ...@@ -2174,6 +2174,7 @@
#define PCI_DEVICE_ID_RDC_R6040 0x6040 #define PCI_DEVICE_ID_RDC_R6040 0x6040
#define PCI_DEVICE_ID_RDC_R6060 0x6060 #define PCI_DEVICE_ID_RDC_R6060 0x6060
#define PCI_DEVICE_ID_RDC_R6061 0x6061 #define PCI_DEVICE_ID_RDC_R6061 0x6061
#define PCI_DEVICE_ID_RDC_D1010 0x1010
#define PCI_VENDOR_ID_LENOVO 0x17aa #define PCI_VENDOR_ID_LENOVO 0x17aa
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment