IDE fixes
PATCH 1/1 IDE fixes
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
arch/cris/arch-v10/drivers/Kconfig | 39 ----------------------------- arch/cris/arch-v32/drivers/Kconfig | 12 --------- drivers/ide/Kconfig | 47 ++++++++++++++++++++++++++++++++++- drivers/ide/Makefile | 2 +- drivers/ide/cris/ide-cris.c | 7 +++-- drivers/ide/ide-dma.c | 1 + drivers/ide/ide-iops.c | 13 +++++++--- drivers/ide/ide-probe.c | 32 ++++++++++++++---------- drivers/ide/legacy/ali14xx.c | 7 +++-- drivers/ide/legacy/macide.c | 2 +- drivers/ide/legacy/q40ide.c | 2 +- drivers/ide/pci/aec62xx.c | 11 +++++++- drivers/ide/pci/alim15x3.c | 5 ++++ drivers/ide/pci/piix.c | 1 + drivers/ide/pci/siimage.c | 45 +--------------------------------- drivers/ide/pci/sis5513.c | 1 + drivers/ide/pci/trm290.c | 3 -- drivers/ide/ppc/pmac.c | 2 +- drivers/scsi/ide-scsi.c | 22 ++++++---------- 19 files changed, 112 insertions(+), 142 deletions(-)
Aleksandar Radovanovic (1):
aec62xx: Fix kernel oops in driver's probe function
Andrew Morton (1):
amd74xx: arm hack
Bartlomiej Zolnierkiewicz (11):
macide/q40ide: add missing __init tag to {macide,q40ide}_init() ide/Kconfig: fix mpc8xx host driver dependencies
ide: add CONFIG_IDE_H8300 config option
ide: move CONFIG_IDE_ETRAX to drivers/ide/Kconfig
ide-cris: don't override ide_register_hw() result
ide: add TORiSAN model: CD-ROM CDR_U200 fw: 1.09 to DMA blacklist
alim15x3: add Mitac 8317 and derivatives to ali_cable_override()
piix: add HP compaq laptop to short cable list
trm290: remove bogus init_hwif_trm290() comment
ide: remove bogus ide_fix_driveid() comment
ali14xx: constify __initdata
Denis Cheng (1):
ide-scsi: use print_hex_dump from <linux/kernel.h>
Gabriel Craciunescu (1):
sis5513.c: Add Packard Bell EasyNote K5305 to laptops
Joe Perches (1):
drivers/ide: Add missing "space"
Jonas Stare (1):
ide: skip ide_wait_not_busy() on noprobe-disks
Peter Missel (1):
ide: More TSST drives with broken cable detection
Sergei Shtylyov (2):
ide: don't set PIO mode on pre-EIDE drives
siimage: remove resetproc() method
arch/cris/arch-v10/drivers/Kconfig +0 -39
@@ -542,45 +542,6 @@ config ETRAX_RS485_DISABLE_RECEIVER loopback. Not all products are able to do this in software only. Axis 2400/2401 must disable receiver. -config ETRAX_IDE - bool "ATA/IDE support" - select IDE - select BLK_DEV_IDE - select BLK_DEV_IDEDISK - select BLK_DEV_IDECD - select BLK_DEV_IDEDMA - select IDE_GENERIC - help - Enable this to get support for ATA/IDE. - You can't use parallel ports or SCSI ports - at the same time. - - -config ETRAX_IDE_DELAY - int "Delay for drives to regain consciousness" - depends on ETRAX_IDE - default 15 - help - Number of seconds to wait for IDE drives to spin up after an IDE - reset. -choice - prompt "IDE reset pin" - depends on ETRAX_IDE - default ETRAX_IDE_PB7_RESET - -config ETRAX_IDE_PB7_RESET - bool "Port_PB_Bit_7" - help - IDE reset on pin 7 on port B - -config ETRAX_IDE_G27_RESET - bool "Port_G_Bit_27" - help - IDE reset on pin 27 on port G - -endchoice - - config ETRAX_USB_HOST bool "USB host" select USB
arch/cris/arch-v32/drivers/Kconfig +0 -12
@@ -582,18 +582,6 @@ config ETRAX_PE_CHANGEABLE_BITS that a user can change the value on using ioctl's. Bit set = changeable. -config ETRAX_IDE - bool "ATA/IDE support" - depends on ETRAX_ARCH_V32 - select IDE - select BLK_DEV_IDE - select BLK_DEV_IDEDISK - select BLK_DEV_IDECD - select BLK_DEV_IDEDMA - select IDE_GENERIC - help - Enables the ETRAX IDE driver. - config ETRAX_CARDBUS bool "Cardbus support" depends on ETRAX_ARCH_V32
drivers/ide/Kconfig +45 -2
71 lines not on this page · raw message
drivers/ide/Makefile +1 -1
@@ -39,7 +39,7 @@ ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += ppc/pmac.o # built-in only drivers from h8300/ -ide-core-$(CONFIG_H8300) += h8300/ide-h8300.o +ide-core-$(CONFIG_IDE_H8300) += h8300/ide-h8300.o obj-$(CONFIG_BLK_DEV_IDE) += ide-core.o obj-$(CONFIG_IDE_GENERIC) += ide-generic.o
drivers/ide/cris/ide-cris.c +4 -3
@@ -773,15 +773,16 @@ init_e100_ide (void)/* the IDE control register is at ATA address 6, with CS1 active instead of CS0 */ ide_offsets[IDE_CONTROL_OFFSET ] =cris_ide_reg_addr (6 ,1 ,0 ); -/* first fill in some stuff in the ide_hwifs fields */ +for (h =0 ; h <4 ; h++) { +ide_hwif_t *hwif =NULL ; -for (h =0 ; h <MAX_HWIFS ; h++) { -ide_hwif_t *hwif = &ide_hwifs[h];ide_setup_ports (&hw,cris_ide_base_address (h), ide_offsets,0 ,0 , cris_ide_ack_intr,ide_default_irq (0 ));ide_register_hw (&hw,NULL ,1 , &hwif); +if (hwif ==NULL ) +continue ; hwif->mmio =1 ; hwif->chipset = ide_etrax100; hwif->set_pio_mode = &cris_set_pio_mode;
drivers/ide/ide-dma.c +1 -0
@@ -130,6 +130,7 @@ static const struct drive_list_entry drive_blacklist [] = { { "_NEC DV5800A", NULL }, { "SAMSUNG CD-ROM SN-124", "N001" }, { "Seagate STT20000A", NULL }, + { "CD-ROM CDR_U200", "1.09" }, { NULL , NULL } };
drivers/ide/ide-iops.c +9 -4
@@ -303,9 +303,6 @@ void default_hwif_transport(ide_hwif_t *hwif) hwif->atapi_output_bytes = atapi_output_bytes; } -/* -* Beginning of Taskfile OPCODE Library and feature sets. -*/ void ide_fix_driveid (struct hd_driveid *id) {#ifndef __LITTLE_ENDIAN
@@ -592,6 +589,9 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);static const struct drive_list_entry ivb_list[] = { {"QUANTUM FIREBALLlct10 05" ,"A03.0900" }, {"TSSTcorp CDDVDW SH-S202J" ,"SB00" }, + {"TSSTcorp CDDVDW SH-S202J" ,"SB01" }, + {"TSSTcorp CDDVDW SH-S202N" ,"SB00" }, + {"TSSTcorp CDDVDW SH-S202N" ,"SB01" }, {NULL ,NULL } };
@@ -756,7 +756,7 @@ int ide_driveid_update(ide_drive_t *drive)int ide_config_drive_speed (ide_drive_t *drive,u8 speed) {ide_hwif_t *hwif = drive->hwif; -int error; +int error =0 ;u8 stat;// while (HWGROUP(drive)->busy)
@@ -767,6 +767,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) hwif->dma_host_off (drive);#endif +/* Skip setting PIO flow-control modes on pre-EIDE drives */ +if ((speed &0xf8 ) ==XFER_PIO_0 && !(drive->id->capability &0x08 )) + goto skip; +/* * Don't use ide_wait_cmd here - it will * attempt to set_geometry and recalibrate,
@@ -814,6 +818,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) drive->id->dma_mword &= ~0x0F00 ; drive->id->dma_1word &= ~0x0F00 ; + skip:#ifdef CONFIG_BLK_DEV_IDEDMA if (speed >=XFER_SW_DMA_0 ) hwif->dma_host_on (drive);
drivers/ide/ide-probe.c +19 -13
@@ -644,7 +644,7 @@ static void hwif_register (ide_hwif_t *hwif)static int wait_hwif_ready (ide_hwif_t *hwif) { -int rc; +int unit, rc;printk (KERN_DEBUG "Probing IDE interface %s...\n" , hwif->name);
@@ -661,20 +661,26 @@ static int wait_hwif_ready(ide_hwif_t *hwif)return rc;/* Now make sure both master & slave are ready */ -SELECT_DRIVE (&hwif->drives[0 ]); - hwif->OUTB (8 , hwif->io_ports[IDE_CONTROL_OFFSET ]); -mdelay (2 ); - rc =ide_wait_not_busy (hwif,35000 ); -if (rc) -return rc; -SELECT_DRIVE (&hwif->drives[1 ]); - hwif->OUTB (8 , hwif->io_ports[IDE_CONTROL_OFFSET ]); -mdelay (2 ); - rc =ide_wait_not_busy (hwif,35000 ); +for (unit =0 ; unit <MAX_DRIVES ; unit++) { +ide_drive_t *drive = &hwif->drives[unit]; +/* Ignore disks that we will not probe for later. */ +if (!drive->noprobe || drive->present) { +SELECT_DRIVE (drive); + hwif->OUTB (8 , hwif->io_ports[IDE_CONTROL_OFFSET ]); +mdelay (2 ); + rc =ide_wait_not_busy (hwif,35000 ); +if (rc) + goto out; + }else +printk (KERN_DEBUG "%s: ide_wait_not_busy() skipped\n" , + drive->name); + } +out:/* Exit function with master reselected (let's be sane) */ -SELECT_DRIVE (&hwif->drives[0 ]); - +if (unit) +SELECT_DRIVE (&hwif->drives[0 ]); +return rc; }
drivers/ide/legacy/ali14xx.c +4 -3
@@ -53,12 +53,13 @@/* port addresses for auto-detection */ #define ALI_NUM_PORTS 4 -static int ports[ALI_NUM_PORTS ]__initdata = {0x074 ,0x0f4 ,0x034 ,0x0e4 }; +static const int ports[ALI_NUM_PORTS ]__initdata = + {0x074 ,0x0f4 ,0x034 ,0x0e4 };/* register initialization data */ typedef struct {u8 reg, data; }RegInitializer ; -static RegInitializer initData[]__initdata = { +static const RegInitializer initData[]__initdata = { {0x01 ,0x0f }, {0x02 ,0x00 }, {0x03 ,0x00 }, {0x04 ,0x00 }, {0x05 ,0x00 }, {0x06 ,0x00 }, {0x07 ,0x2b }, {0x0a ,0x0f }, {0x25 ,0x00 }, {0x26 ,0x00 }, {0x27 ,0x00 }, {0x28 ,0x00 },
@@ -177,7 +178,7 @@ static int __init findPort (void)* Initialize controller registers with default values. */ static int __init initRegisters (void ) { -RegInitializer *p; +const RegInitializer *p;u8 t;unsigned long flags;
drivers/ide/legacy/macide.c +1 -1
@@ -81,7 +81,7 @@ int macide_ack_intr(ide_hwif_t* hwif)* Probe for a Macintosh IDE interface */ -void macide_init (void ) +void __init macide_init (void ) {hw_regs_t hw;ide_hwif_t *hwif;
drivers/ide/legacy/q40ide.c +1 -1
@@ -111,7 +111,7 @@ static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={* Probe for Q40 IDE interfaces */ -void q40ide_init (void ) +void __init q40ide_init (void ) {int i;ide_hwif_t *hwif;
drivers/ide/pci/aec62xx.c +10 -1
@@ -260,6 +260,11 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi {struct ide_port_info d;u8 idx = id->driver_data; +int err; + + err =pci_enable_device (dev); +if (err) +return err; d = aec62xx_chipsets[idx];
@@ -272,7 +277,11 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi } } -return ide_setup_pci_device (dev, &d); + err =ide_setup_pci_device (dev, &d); +if (err) +pci_disable_device (dev); + +return err; }static const struct pci_device_id aec62xx_pci_tbl[] = {
drivers/ide/pci/alim15x3.c +5 -0
@@ -603,6 +603,11 @@ static int ali_cable_override(struct pci_dev *pdev) pdev->subsystem_device == 0x10AF)return 1 ; +/* Mitac 8317 (Winbook-A) and relatives */ +if (pdev->subsystem_vendor ==0x1071 && + pdev->subsystem_device ==0x8317 ) +return 1 ; +/* Systems by DMI */ if (dmi_check_system (cable_dmi_table))return 1 ;
drivers/ide/pci/piix.c +1 -0
@@ -306,6 +306,7 @@ static const struct ich_laptop ich_laptop[] = { { 0x27DF, 0x0005, 0x0280 }, /* ICH7 on Acer 5602WLMi */ { 0x27DF, 0x1025, 0x0110 }, /* ICH7 on Acer 3682WLMi */ { 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */ + { 0x27DF, 0x103C, 0x30A1 }, /* ICH7 on HP Compaq nc2400 */ { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on Acer Aspire 2023WLMi *//* end marker */ { 0, }
drivers/ide/pci/siimage.c +1 -44
61 lines not on this page · raw message
drivers/ide/pci/sis5513.c +1 -0
@@ -526,6 +526,7 @@ static const struct sis_laptop sis_laptop[] = {/* devid, subvendor, subdev */ { 0x5513, 0x1043, 0x1107 }, /* ASUS A6K */ { 0x5513, 0x1734, 0x105f }, /* FSC Amilo A1630 */ + { 0x5513, 0x1071, 0x8640 }, /* EasyNote K5305 *//* end marker */ { 0, } };
drivers/ide/pci/trm290.c +0 -3
@@ -240,9 +240,6 @@ static int trm290_ide_dma_test_irq (ide_drive_t *drive)return (status ==0x00ff ); } -/* -* Invoked from ide-dma.c at boot time. -*/ static void __devinit init_hwif_trm290 (ide_hwif_t *hwif) {unsigned int cfgbase =0 ;
drivers/ide/ppc/pmac.c +1 -1
@@ -1513,7 +1513,7 @@ pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq)if (pmif->broken_dma && cur_addr & (L1_CACHE_BYTES -1 )) {if (pmif->broken_dma_warn ==0 ) { -printk (KERN_WARNING "%s: DMA on non aligned address," +printk (KERN_WARNING "%s: DMA on non aligned address, " "switching to PIO on Ohare chipset\n" , drive->name); pmif->broken_dma_warn =1 ; }
drivers/scsi/ide-scsi.c +2 -11
@@ -242,16 +242,6 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign } } -static void hexdump (u8 *x,int len) -{ -int i; - -printk ("[ " ); -for (i =0 ; i < len; i++) -printk ("%x " , x[i]); -printk ("]\n" ); -} -static int idescsi_check_condition (ide_drive_t *drive,struct request *failed_command) {idescsi_scsi_t *scsi =drive_to_idescsi (drive);
@@ -282,7 +272,8 @@ static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_co pc->scsi_cmd = ((idescsi_pc_t *) failed_command->special)->scsi_cmd;if (test_bit (IDESCSI_LOG_CMD , &scsi->log)) {printk ("ide-scsi: %s: queue cmd = " , drive->name); -hexdump (pc->c,6 ); +print_hex_dump (KERN_CONT ,"" ,DUMP_PREFIX_NONE ,16 ,1 , pc->c, +6 ,0 ); } rq->rq_disk = scsi->disk;return ide_do_drive_cmd (drive, rq, ide_preempt);
@@ -337,7 +328,8 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)idescsi_pc_t *opc = (idescsi_pc_t *) rq->buffer;if (log) { printk ("ide-scsi: %s: wrap up check %lu, rst = ", drive->name,
opc->scsi_cmd->serial_number);
- hexdump(pc->buffer,16);
+ print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+ pc->buffer, 16, 0);
}
memcpy((void *) opc->scsi_cmd->sense_buffer, pc->buffer, SCSI_SENSE_BUFFERSIZE); kfree(pc->buffer);
@@ -816,10 +808,12 @@ static int idescsi_queue (struct scsi_cmnd *cmd,
if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {
printk ("ide-scsi: %s: que %lu, cmd = ", drive->name, cmd->serial_number);
- hexdump(cmd->cmnd, cmd->cmd_len);
+ print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+ cmd->cmnd, cmd->cmd_len, 0);
if (memcmp(pc->c, cmd->cmnd, cmd->cmd_len)) {
printk ("ide-scsi: %s: que %lu, tsl = ", drive->name, cmd->serial_number);
- hexdump(pc->c, 12);
+ print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+ pc->c, 12, 0);
}
}