Commit db973ffa 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:
  cs5520: disable VDMA
  ide/Kconfig: couple of fixes
  alim15x3: remove WDC_ALI15X3 config option
  alim15x3: add "wdc_udma" module parameter
  alim15x3: remove stale warning about ATI RS100 northbridge
  alim15x3: trivial cleanup for ali_set_pio_mode()
  make ide-iops.c:SELECT_MASK() static
  SWARM IDE: Fix up following changes to ide_hwif_t
parents dd286422 cafa027b
# #
# IDE ATA ATAPI Block device driver configuration # IDE ATA ATAPI Block device driver configuration
# #
# Andre Hedrick <andre@linux-ide.org>
#
# Select HAVE_IDE if IDE is supported # Select HAVE_IDE if IDE is supported
config HAVE_IDE config HAVE_IDE
...@@ -335,7 +333,7 @@ config BLK_DEV_CMD640 ...@@ -335,7 +333,7 @@ config BLK_DEV_CMD640
This driver will work automatically in PCI based systems (most new This driver will work automatically in PCI based systems (most new
systems have PCI slots). But if your system uses VESA local bus systems have PCI slots). But if your system uses VESA local bus
(VLB) instead of PCI, you must also supply a kernel boot parameter (VLB) instead of PCI, you must also supply a kernel boot parameter
to enable the CMD640 bugfix/support: "ide0=cmd640_vlb". (Try "man to enable the CMD640 bugfix/support: "cmd640.probe_vlb". (Try "man
bootparam" or see the documentation of your boot loader about how to bootparam" or see the documentation of your boot loader about how to
pass options to the kernel.) pass options to the kernel.)
...@@ -457,27 +455,11 @@ config BLK_DEV_ALI15X3 ...@@ -457,27 +455,11 @@ config BLK_DEV_ALI15X3
onboard chipsets. It also tests for Simplex mode and enables onboard chipsets. It also tests for Simplex mode and enables
normal dual channel support. normal dual channel support.
If you say Y here, you also need to say Y to "Use DMA by default Please read the comments at the top of
when available", above. Please read the comments at the top of
<file:drivers/ide/pci/alim15x3.c>. <file:drivers/ide/pci/alim15x3.c>.
If unsure, say N. If unsure, say N.
config WDC_ALI15X3
bool "ALI M15x3 WDC support (DANGEROUS)"
depends on BLK_DEV_ALI15X3
---help---
This allows for UltraDMA support for WDC drives that ignore CRC
checking. You are a fool for enabling this option, but there have
been requests. DO NOT COMPLAIN IF YOUR DRIVE HAS FS CORRUPTION, IF
YOU ENABLE THIS! No one will listen, just laugh for ignoring this
SERIOUS WARNING.
Using this option can allow WDC drives to run at ATA-4/5 transfer
rates with only an ATA-2 support structure.
SAY N!
config BLK_DEV_AMD74XX config BLK_DEV_AMD74XX
tristate "AMD and nVidia IDE support" tristate "AMD and nVidia IDE support"
depends on !ARM depends on !ARM
...@@ -520,9 +502,6 @@ config BLK_DEV_CY82C693 ...@@ -520,9 +502,6 @@ config BLK_DEV_CY82C693
This driver adds detection and support for the CY82C693 chipset This driver adds detection and support for the CY82C693 chipset
used on Digital's PC-Alpha 164SX boards. used on Digital's PC-Alpha 164SX boards.
If you say Y here, you need to say Y to "Use DMA by default
when available" as well.
config BLK_DEV_CS5520 config BLK_DEV_CS5520
tristate "Cyrix CS5510/20 MediaGX chipset support (VERY EXPERIMENTAL)" tristate "Cyrix CS5510/20 MediaGX chipset support (VERY EXPERIMENTAL)"
depends on EXPERIMENTAL depends on EXPERIMENTAL
...@@ -613,13 +592,12 @@ config BLK_DEV_SC1200 ...@@ -613,13 +592,12 @@ config BLK_DEV_SC1200
National SCx200 series of embedded x86 "Geode" systems. National SCx200 series of embedded x86 "Geode" systems.
config BLK_DEV_PIIX config BLK_DEV_PIIX
tristate "Intel PIIXn chipsets support" tristate "Intel PIIX/ICH chipsets support"
select BLK_DEV_IDEDMA_PCI select BLK_DEV_IDEDMA_PCI
help help
This driver adds explicit support for Intel PIIX and ICH chips This driver adds explicit support for Intel PIIX and ICH chips.
and also for the Efar Victory66 (slc90e66) chip. This allows This allows the kernel to change PIO, DMA and UDMA speeds and to
the kernel to change PIO, DMA and UDMA speeds and to configure configure the chip to optimum performance.
the chip to optimum performance.
config BLK_DEV_IT8213 config BLK_DEV_IT8213
tristate "IT8213 IDE support" tristate "IT8213 IDE support"
...@@ -657,11 +635,7 @@ config BLK_DEV_PDC202XX_OLD ...@@ -657,11 +635,7 @@ config BLK_DEV_PDC202XX_OLD
happen if the BIOS revisions of all installed cards (three-max) do happen if the BIOS revisions of all installed cards (three-max) do
not match, the driver attempts to do dynamic tuning of the chipset not match, the driver attempts to do dynamic tuning of the chipset
at boot-time for max-speed. Ultra33 BIOS 1.25 or newer is required at boot-time for max-speed. Ultra33 BIOS 1.25 or newer is required
for more than one card. This card may require that you say Y to for more than one card.
"Special UDMA Feature".
If you say Y here, you need to say Y to "Use DMA by default when
available" as well.
Please read the comments at the top of Please read the comments at the top of
<file:drivers/ide/pci/pdc202xx_old.c>. <file:drivers/ide/pci/pdc202xx_old.c>.
...@@ -710,9 +684,6 @@ config BLK_DEV_SIS5513 ...@@ -710,9 +684,6 @@ config BLK_DEV_SIS5513
ATA100: SiS635, SiS645, SiS650, SiS730, SiS735, SiS740, ATA100: SiS635, SiS645, SiS650, SiS730, SiS735, SiS740,
SiS745, SiS750 SiS745, SiS750
If you say Y here, you need to say Y to "Use DMA by default when
available" as well.
Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>. Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>.
config BLK_DEV_SL82C105 config BLK_DEV_SL82C105
...@@ -734,9 +705,6 @@ config BLK_DEV_SLC90E66 ...@@ -734,9 +705,6 @@ config BLK_DEV_SLC90E66
and it will handle timing cycles. Since this is an improved and it will handle timing cycles. Since this is an improved
look-a-like to the PIIX4 it should be a nice addition. look-a-like to the PIIX4 it should be a nice addition.
If you say Y here, you need to say Y to "Use DMA by default when
available" as well.
Please read the comments at the top of Please read the comments at the top of
<file:drivers/ide/pci/slc90e66.c>. <file:drivers/ide/pci/slc90e66.c>.
...@@ -888,17 +856,17 @@ config BLK_DEV_IDEDOUBLER ...@@ -888,17 +856,17 @@ config BLK_DEV_IDEDOUBLER
bool "Amiga IDE Doubler support (EXPERIMENTAL)" bool "Amiga IDE Doubler support (EXPERIMENTAL)"
depends on BLK_DEV_GAYLE && EXPERIMENTAL depends on BLK_DEV_GAYLE && EXPERIMENTAL
---help--- ---help---
This driver provides support for the so-called `IDE doublers' (made This feature provides support for the so-called `IDE doublers' (made
by various manufacturers, e.g. Eyetech) that can be connected to by various manufacturers, e.g. Eyetech) that can be connected to
the on-board IDE interface of some Amiga models. Using such an IDE the on-board IDE interface of some Amiga models. Using such an IDE
doubler, you can connect up to four instead of two IDE devices to doubler, you can connect up to four instead of two IDE devices to
the Amiga's on-board IDE interface. the Amiga's on-board IDE interface.
Note that the normal Amiga Gayle IDE driver may not work correctly Note that the normal Amiga Gayle IDE driver may not work correctly
if you have an IDE doubler and don't enable this driver! if you have an IDE doubler and don't enable this feature!
Say Y if you have an IDE doubler. The driver is enabled at kernel Say Y if you have an IDE doubler. The feature is enabled at kernel
runtime using the "ide=doubler" kernel boot parameter. runtime using the "gayle.doubler" kernel boot parameter.
config BLK_DEV_BUDDHA config BLK_DEV_BUDDHA
tristate "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)" tristate "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)"
......
...@@ -95,7 +95,7 @@ void SELECT_DRIVE (ide_drive_t *drive) ...@@ -95,7 +95,7 @@ void SELECT_DRIVE (ide_drive_t *drive)
hwif->OUTB(drive->select.all, hwif->io_ports.device_addr); hwif->OUTB(drive->select.all, hwif->io_ports.device_addr);
} }
void SELECT_MASK (ide_drive_t *drive, int mask) static void SELECT_MASK(ide_drive_t *drive, int mask)
{ {
const struct ide_port_ops *port_ops = drive->hwif->port_ops; const struct ide_port_ops *port_ops = drive->hwif->port_ops;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Manish Lachwani, mlachwani@mvista.com * Author: Manish Lachwani, mlachwani@mvista.com
* Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved. * Copyright (C) 2004 MIPS Technologies, Inc. All rights reserved.
* Author: Maciej W. Rozycki <macro@mips.com> * Author: Maciej W. Rozycki <macro@mips.com>
* Copyright (c) 2006 Maciej W. Rozycki * Copyright (c) 2006, 2008 Maciej W. Rozycki
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -70,8 +70,9 @@ static int __devinit swarm_ide_probe(struct device *dev) ...@@ -70,8 +70,9 @@ static int __devinit swarm_ide_probe(struct device *dev)
ide_hwif_t *hwif; ide_hwif_t *hwif;
u8 __iomem *base; u8 __iomem *base;
phys_t offset, size; phys_t offset, size;
hw_regs_t hw;
int i; int i;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; u8 idx[] = { 0xff, 0xff, 0xff, 0xff };
if (!SIBYTE_HAVE_IDE) if (!SIBYTE_HAVE_IDE)
return -ENODEV; return -ENODEV;
...@@ -112,14 +113,15 @@ static int __devinit swarm_ide_probe(struct device *dev) ...@@ -112,14 +113,15 @@ static int __devinit swarm_ide_probe(struct device *dev)
hwif->host_flags = IDE_HFLAG_MMIO; hwif->host_flags = IDE_HFLAG_MMIO;
default_hwif_mmiops(hwif); default_hwif_mmiops(hwif);
hwif->chipset = ide_generic;
for (i = 0; i <= 7; i++) for (i = 0; i <= 7; i++)
hwif->io_ports_array[i] = hw.io_ports_array[i] =
(unsigned long)(base + ((0x1f0 + i) << 5)); (unsigned long)(base + ((0x1f0 + i) << 5));
hwif->io_ports.ctl_addr = hw.io_ports.ctl_addr =
(unsigned long)(base + (0x3f6 << 5)); (unsigned long)(base + (0x3f6 << 5));
hwif->irq = K_INT_GB_IDE; hw.irq = K_INT_GB_IDE;
hw.chipset = ide_generic;
ide_init_port_hw(hwif, &hw);
idx[0] = hwif->index; idx[0] = hwif->index;
......
...@@ -38,6 +38,16 @@ ...@@ -38,6 +38,16 @@
#include <asm/io.h> #include <asm/io.h>
/*
* Allow UDMA on M1543C-E chipset for WDC disks that ignore CRC checking
* (this is DANGEROUS and could result in data corruption).
*/
static int wdc_udma;
module_param(wdc_udma, bool, 0);
MODULE_PARM_DESC(wdc_udma,
"allow UDMA on M1543C-E chipset for WDC disks (DANGEROUS)");
/* /*
* ALi devices are not plug in. Otherwise these static values would * ALi devices are not plug in. Otherwise these static values would
* need to go. They ought to go away anyway * need to go. They ought to go away anyway
...@@ -76,11 +86,6 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio) ...@@ -76,11 +86,6 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio)
a_clc = 0; a_clc = 0;
c_time = ide_pio_timings[pio].cycle_time; c_time = ide_pio_timings[pio].cycle_time;
#if 0
if ((r_clc = ((c_time - s_time - a_time) * bus_speed + 999) / 1000) >= 16)
r_clc = 0;
#endif
if (!(r_clc = (c_time * bus_speed + 999) / 1000 - a_clc - s_clc)) { if (!(r_clc = (c_time * bus_speed + 999) / 1000 - a_clc - s_clc)) {
r_clc = 1; r_clc = 1;
} else { } else {
...@@ -110,16 +115,6 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio) ...@@ -110,16 +115,6 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio)
pci_write_config_byte(dev, port, s_clc); pci_write_config_byte(dev, port, s_clc);
pci_write_config_byte(dev, port+drive->select.b.unit+2, (a_clc << 4) | r_clc); pci_write_config_byte(dev, port+drive->select.b.unit+2, (a_clc << 4) | r_clc);
local_irq_restore(flags); local_irq_restore(flags);
/*
* setup active rec
* { 70, 165, 365 }, PIO Mode 0
* { 50, 125, 208 }, PIO Mode 1
* { 30, 100, 110 }, PIO Mode 2
* { 30, 80, 70 }, PIO Mode 3 with IORDY
* { 25, 70, 25 }, PIO Mode 4 with IORDY ns
* { 20, 50, 30 } PIO Mode 5 with IORDY (nonstandard)
*/
} }
/** /**
...@@ -131,9 +126,7 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio) ...@@ -131,9 +126,7 @@ static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio)
* The actual rules for the ALi are: * The actual rules for the ALi are:
* No UDMA on revisions <= 0x20 * No UDMA on revisions <= 0x20
* Disk only for revisions < 0xC2 * Disk only for revisions < 0xC2
* Not WDC drives for revisions < 0xC2 * Not WDC drives on M1543C-E (?)
*
* FIXME: WDC ifdef needs to die
*/ */
static u8 ali_udma_filter(ide_drive_t *drive) static u8 ali_udma_filter(ide_drive_t *drive)
...@@ -141,10 +134,9 @@ static u8 ali_udma_filter(ide_drive_t *drive) ...@@ -141,10 +134,9 @@ static u8 ali_udma_filter(ide_drive_t *drive)
if (m5229_revision > 0x20 && m5229_revision < 0xC2) { if (m5229_revision > 0x20 && m5229_revision < 0xC2) {
if (drive->media != ide_disk) if (drive->media != ide_disk)
return 0; return 0;
#ifndef CONFIG_WDC_ALI15X3 if (chip_is_1543c_e && strstr(drive->id->model, "WDC ") &&
if (chip_is_1543c_e && strstr(drive->id->model, "WDC ")) wdc_udma == 0)
return 0; return 0;
#endif
} }
return drive->hwif->ultra_mask; return drive->hwif->ultra_mask;
...@@ -537,17 +529,9 @@ static const struct ide_port_info ali15x3_chipset __devinitdata = { ...@@ -537,17 +529,9 @@ static const struct ide_port_info ali15x3_chipset __devinitdata = {
static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_device_id *id) static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{ {
static struct pci_device_id ati_rs100[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100) },
{ },
};
struct ide_port_info d = ali15x3_chipset; struct ide_port_info d = ali15x3_chipset;
u8 rev = dev->revision, idx = id->driver_data; u8 rev = dev->revision, idx = id->driver_data;
if (pci_dev_present(ati_rs100))
printk(KERN_WARNING "alim15x3: ATI Radeon IGP Northbridge is not yet fully tested.\n");
/* don't use LBA48 DMA on ALi devices before rev 0xC5 */ /* don't use LBA48 DMA on ALi devices before rev 0xC5 */
if (rev <= 0xC4) if (rev <= 0xC4)
d.host_flags |= IDE_HFLAG_NO_LBA48_DMA; d.host_flags |= IDE_HFLAG_NO_LBA48_DMA;
......
...@@ -119,6 +119,7 @@ static const struct ide_dma_ops cs5520_dma_ops = { ...@@ -119,6 +119,7 @@ static const struct ide_dma_ops cs5520_dma_ops = {
.dma_timeout = ide_dma_timeout, .dma_timeout = ide_dma_timeout,
}; };
/* FIXME: VDMA is disabled because it caused system hangs */
#define DECLARE_CS_DEV(name_str) \ #define DECLARE_CS_DEV(name_str) \
{ \ { \
.name = name_str, \ .name = name_str, \
...@@ -126,7 +127,6 @@ static const struct ide_dma_ops cs5520_dma_ops = { ...@@ -126,7 +127,6 @@ static const struct ide_dma_ops cs5520_dma_ops = {
.dma_ops = &cs5520_dma_ops, \ .dma_ops = &cs5520_dma_ops, \
.host_flags = IDE_HFLAG_ISA_PORTS | \ .host_flags = IDE_HFLAG_ISA_PORTS | \
IDE_HFLAG_CS5520 | \ IDE_HFLAG_CS5520 | \
IDE_HFLAG_VDMA | \
IDE_HFLAG_NO_ATAPI_DMA | \ IDE_HFLAG_NO_ATAPI_DMA | \
IDE_HFLAG_ABUSE_SET_DMA_MODE, \ IDE_HFLAG_ABUSE_SET_DMA_MODE, \
.pio_mask = ATA_PIO4, \ .pio_mask = ATA_PIO4, \
......
...@@ -965,7 +965,6 @@ typedef struct ide_task_s { ...@@ -965,7 +965,6 @@ typedef struct ide_task_s {
void ide_tf_dump(const char *, struct ide_taskfile *); void ide_tf_dump(const char *, struct ide_taskfile *);
extern void SELECT_DRIVE(ide_drive_t *); extern void SELECT_DRIVE(ide_drive_t *);
extern void SELECT_MASK(ide_drive_t *, int);
extern int drive_is_ready(ide_drive_t *); extern int drive_is_ready(ide_drive_t *);
...@@ -1058,8 +1057,8 @@ enum { ...@@ -1058,8 +1057,8 @@ enum {
IDE_HFLAG_NO_SET_MODE = (1 << 9), IDE_HFLAG_NO_SET_MODE = (1 << 9),
/* trust BIOS for programming chipset/device for DMA */ /* trust BIOS for programming chipset/device for DMA */
IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10), IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10),
/* host uses VDMA (tied with IDE_HFLAG_CS5520 for now) */ /* host is CS5510/CS5520 */
IDE_HFLAG_VDMA = (1 << 11), IDE_HFLAG_CS5520 = (1 << 11),
/* ATAPI DMA is unsupported */ /* ATAPI DMA is unsupported */
IDE_HFLAG_NO_ATAPI_DMA = (1 << 12), IDE_HFLAG_NO_ATAPI_DMA = (1 << 12),
/* set if host is a "non-bootable" controller */ /* set if host is a "non-bootable" controller */
...@@ -1070,8 +1069,6 @@ enum { ...@@ -1070,8 +1069,6 @@ enum {
IDE_HFLAG_NO_AUTODMA = (1 << 15), IDE_HFLAG_NO_AUTODMA = (1 << 15),
/* host uses MMIO */ /* host uses MMIO */
IDE_HFLAG_MMIO = (1 << 16), IDE_HFLAG_MMIO = (1 << 16),
/* host is CS5510/CS5520 */
IDE_HFLAG_CS5520 = IDE_HFLAG_VDMA,
/* no LBA48 */ /* no LBA48 */
IDE_HFLAG_NO_LBA48 = (1 << 17), IDE_HFLAG_NO_LBA48 = (1 << 17),
/* no LBA48 DMA */ /* no LBA48 DMA */
...@@ -1101,6 +1098,8 @@ enum { ...@@ -1101,6 +1098,8 @@ enum {
IDE_HFLAG_NO_IO_32BIT = (1 << 30), IDE_HFLAG_NO_IO_32BIT = (1 << 30),
/* never unmask IRQs */ /* never unmask IRQs */
IDE_HFLAG_NO_UNMASK_IRQS = (1 << 31), IDE_HFLAG_NO_UNMASK_IRQS = (1 << 31),
/* host uses VDMA (disabled for now) */
IDE_HFLAG_VDMA = 0,
}; };
#ifdef CONFIG_BLK_DEV_OFFBOARD #ifdef CONFIG_BLK_DEV_OFFBOARD
......
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