diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-06-10 14:56:37 -0400 |
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-06-10 14:56:37 -0400 |
| commit | d427e836d1d9b58e8f1e648c09b5fbe36e01013b (patch) | |
| tree | 441a044dcd7152bd96fe10b2f259068f049f2329 | |
| parent | 343a3451e20314d5959b59b992e33fbaadfe52bf (diff) | |
ide: fix host drivers missing hwif->chipset initialization
ide_find_port() now depends on ->chipset being set for occupied ide_hwifs[]
slots so all host drivers have to initialize hwif->chipset properly.
This patch fixes a regression on hosts with > 1 port or with a single port
but no devices attached to it for an affected host drivers.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
| -rw-r--r-- | drivers/ide/arm/bast-ide.c | 1 | ||||
| -rw-r--r-- | drivers/ide/arm/ide_arm.c | 1 | ||||
| -rw-r--r-- | drivers/ide/ide-pnp.c | 1 | ||||
| -rw-r--r-- | drivers/ide/ide-probe.c | 1 | ||||
| -rw-r--r-- | drivers/ide/legacy/buddha.c | 2 | ||||
| -rw-r--r-- | drivers/ide/legacy/falconide.c | 2 | ||||
| -rw-r--r-- | drivers/ide/legacy/gayle.c | 2 | ||||
| -rw-r--r-- | drivers/ide/legacy/macide.c | 2 | ||||
| -rw-r--r-- | drivers/ide/legacy/q40ide.c | 2 | ||||
| -rw-r--r-- | drivers/ide/pci/cmd640.c | 2 | ||||
| -rw-r--r-- | drivers/ide/ppc/mpc8xx.c | 4 |
11 files changed, 20 insertions, 0 deletions
diff --git a/drivers/ide/arm/bast-ide.c b/drivers/ide/arm/bast-ide.c index 713cef20622e..8e8c28104b45 100644 --- a/drivers/ide/arm/bast-ide.c +++ b/drivers/ide/arm/bast-ide.c | |||
| @@ -42,6 +42,7 @@ static int __init bastide_register(unsigned int base, unsigned int aux, int irq) | |||
| 42 | 42 | ||
| 43 | hw.io_ports.ctl_addr = aux + (6 * 0x20); | 43 | hw.io_ports.ctl_addr = aux + (6 * 0x20); |
| 44 | hw.irq = irq; | 44 | hw.irq = irq; |
| 45 | hw.chipset = ide_generic; | ||
| 45 | 46 | ||
| 46 | hwif = ide_find_port(); | 47 | hwif = ide_find_port(); |
| 47 | if (hwif == NULL) | 48 | if (hwif == NULL) |
diff --git a/drivers/ide/arm/ide_arm.c b/drivers/ide/arm/ide_arm.c index 4263ffd4ab20..2f311da4c963 100644 --- a/drivers/ide/arm/ide_arm.c +++ b/drivers/ide/arm/ide_arm.c | |||
| @@ -49,6 +49,7 @@ static int __init ide_arm_init(void) | |||
| 49 | memset(&hw, 0, sizeof(hw)); | 49 | memset(&hw, 0, sizeof(hw)); |
| 50 | ide_std_init_ports(&hw, base, ctl); | 50 | ide_std_init_ports(&hw, base, ctl); |
| 51 | hw.irq = IDE_ARM_IRQ; | 51 | hw.irq = IDE_ARM_IRQ; |
| 52 | hw.chipset = ide_generic; | ||
| 52 | 53 | ||
| 53 | hwif = ide_find_port(); | 54 | hwif = ide_find_port(); |
| 54 | if (hwif) { | 55 | if (hwif) { |
diff --git a/drivers/ide/ide-pnp.c b/drivers/ide/ide-pnp.c index 6a8953f68e9f..adbd01784162 100644 --- a/drivers/ide/ide-pnp.c +++ b/drivers/ide/ide-pnp.c | |||
| @@ -55,6 +55,7 @@ static int idepnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | |||
| 55 | memset(&hw, 0, sizeof(hw)); | 55 | memset(&hw, 0, sizeof(hw)); |
| 56 | ide_std_init_ports(&hw, base, ctl); | 56 | ide_std_init_ports(&hw, base, ctl); |
| 57 | hw.irq = pnp_irq(dev, 0); | 57 | hw.irq = pnp_irq(dev, 0); |
| 58 | hw.chipset = ide_generic; | ||
| 58 | 59 | ||
| 59 | hwif = ide_find_port(); | 60 | hwif = ide_find_port(); |
| 60 | if (hwif) { | 61 | if (hwif) { |
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 0bccb63d10a1..380fa0c8cc84 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
| @@ -1664,6 +1664,7 @@ static void ide_legacy_init_one(u8 *idx, hw_regs_t *hw, u8 port_no, | |||
| 1664 | 1664 | ||
| 1665 | ide_std_init_ports(hw, base, ctl); | 1665 | ide_std_init_ports(hw, base, ctl); |
| 1666 | hw->irq = irq; | 1666 | hw->irq = irq; |
| 1667 | hw->chipset = d->chipset; | ||
| 1667 | 1668 | ||
| 1668 | hwif = ide_find_port_slot(d); | 1669 | hwif = ide_find_port_slot(d); |
| 1669 | if (hwif) { | 1670 | if (hwif) { |
diff --git a/drivers/ide/legacy/buddha.c b/drivers/ide/legacy/buddha.c index 5c730e4dd735..9a1d27ef3f8a 100644 --- a/drivers/ide/legacy/buddha.c +++ b/drivers/ide/legacy/buddha.c | |||
| @@ -138,6 +138,8 @@ static void __init buddha_setup_ports(hw_regs_t *hw, unsigned long base, | |||
| 138 | 138 | ||
| 139 | hw->irq = IRQ_AMIGA_PORTS; | 139 | hw->irq = IRQ_AMIGA_PORTS; |
| 140 | hw->ack_intr = ack_intr; | 140 | hw->ack_intr = ack_intr; |
| 141 | |||
| 142 | hw->chipset = ide_generic; | ||
| 141 | } | 143 | } |
| 142 | 144 | ||
| 143 | /* | 145 | /* |
diff --git a/drivers/ide/legacy/falconide.c b/drivers/ide/legacy/falconide.c index 9e449a0c623f..af11028b4794 100644 --- a/drivers/ide/legacy/falconide.c +++ b/drivers/ide/legacy/falconide.c | |||
| @@ -81,6 +81,8 @@ static void __init falconide_setup_ports(hw_regs_t *hw) | |||
| 81 | 81 | ||
| 82 | hw->irq = IRQ_MFP_IDE; | 82 | hw->irq = IRQ_MFP_IDE; |
| 83 | hw->ack_intr = NULL; | 83 | hw->ack_intr = NULL; |
| 84 | |||
| 85 | hw->chipset = ide_generic; | ||
| 84 | } | 86 | } |
| 85 | 87 | ||
| 86 | /* | 88 | /* |
diff --git a/drivers/ide/legacy/gayle.c b/drivers/ide/legacy/gayle.c index a9c2593a898c..eb15ca619700 100644 --- a/drivers/ide/legacy/gayle.c +++ b/drivers/ide/legacy/gayle.c | |||
| @@ -112,6 +112,8 @@ static void __init gayle_setup_ports(hw_regs_t *hw, unsigned long base, | |||
| 112 | 112 | ||
| 113 | hw->irq = IRQ_AMIGA_PORTS; | 113 | hw->irq = IRQ_AMIGA_PORTS; |
| 114 | hw->ack_intr = ack_intr; | 114 | hw->ack_intr = ack_intr; |
| 115 | |||
| 116 | hw->chipset = ide_generic; | ||
| 115 | } | 117 | } |
| 116 | 118 | ||
| 117 | /* | 119 | /* |
diff --git a/drivers/ide/legacy/macide.c b/drivers/ide/legacy/macide.c index caa2632dd08e..2e84290d0bcc 100644 --- a/drivers/ide/legacy/macide.c +++ b/drivers/ide/legacy/macide.c | |||
| @@ -78,6 +78,8 @@ static void __init macide_setup_ports(hw_regs_t *hw, unsigned long base, | |||
| 78 | 78 | ||
| 79 | hw->irq = irq; | 79 | hw->irq = irq; |
| 80 | hw->ack_intr = ack_intr; | 80 | hw->ack_intr = ack_intr; |
| 81 | |||
| 82 | hw->chipset = ide_generic; | ||
| 81 | } | 83 | } |
| 82 | 84 | ||
| 83 | static const char *mac_ide_name[] = | 85 | static const char *mac_ide_name[] = |
diff --git a/drivers/ide/legacy/q40ide.c b/drivers/ide/legacy/q40ide.c index 6f535d00e638..8ff6e2d20834 100644 --- a/drivers/ide/legacy/q40ide.c +++ b/drivers/ide/legacy/q40ide.c | |||
| @@ -70,6 +70,8 @@ static void q40_ide_setup_ports(hw_regs_t *hw, unsigned long base, | |||
| 70 | 70 | ||
| 71 | hw->irq = irq; | 71 | hw->irq = irq; |
| 72 | hw->ack_intr = ack_intr; | 72 | hw->ack_intr = ack_intr; |
| 73 | |||
| 74 | hw->chipset = ide_generic; | ||
| 73 | } | 75 | } |
| 74 | 76 | ||
| 75 | static void q40ide_input_data(ide_drive_t *drive, struct request *rq, | 77 | static void q40ide_input_data(ide_drive_t *drive, struct request *rq, |
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c index aaf38109eaec..b38a1980dcd5 100644 --- a/drivers/ide/pci/cmd640.c +++ b/drivers/ide/pci/cmd640.c | |||
| @@ -747,9 +747,11 @@ static int __init cmd640x_init(void) | |||
| 747 | 747 | ||
| 748 | ide_std_init_ports(&hw[0], 0x1f0, 0x3f6); | 748 | ide_std_init_ports(&hw[0], 0x1f0, 0x3f6); |
| 749 | hw[0].irq = 14; | 749 | hw[0].irq = 14; |
| 750 | hw[0].chipset = ide_cmd640; | ||
| 750 | 751 | ||
| 751 | ide_std_init_ports(&hw[1], 0x170, 0x376); | 752 | ide_std_init_ports(&hw[1], 0x170, 0x376); |
| 752 | hw[1].irq = 15; | 753 | hw[1].irq = 15; |
| 754 | hw[1].chipset = ide_cmd640; | ||
| 753 | 755 | ||
| 754 | printk(KERN_INFO "cmd640: buggy cmd640%c interface on %s, config=0x%02x" | 756 | printk(KERN_INFO "cmd640: buggy cmd640%c interface on %s, config=0x%02x" |
| 755 | "\n", 'a' + cmd640_chip_version - 1, bus_type, cfr); | 757 | "\n", 'a' + cmd640_chip_version - 1, bus_type, cfr); |
diff --git a/drivers/ide/ppc/mpc8xx.c b/drivers/ide/ppc/mpc8xx.c index f0e638dcc3ab..236f9c38e519 100644 --- a/drivers/ide/ppc/mpc8xx.c +++ b/drivers/ide/ppc/mpc8xx.c | |||
| @@ -303,6 +303,8 @@ static int __init m8xx_ide_init_ports(hw_regs_t *hw, unsigned long data_port) | |||
| 303 | pcmp->pcmc_per = 0x100000 >> (16 * _slot_); | 303 | pcmp->pcmc_per = 0x100000 >> (16 * _slot_); |
| 304 | #endif /* CONFIG_IDE_8xx_PCCARD */ | 304 | #endif /* CONFIG_IDE_8xx_PCCARD */ |
| 305 | 305 | ||
| 306 | hw->chipset = ide_generic; | ||
| 307 | |||
| 306 | return 0; | 308 | return 0; |
| 307 | } | 309 | } |
| 308 | #endif /* CONFIG_IDE_8xx_PCCARD || CONFIG_IDE_8xx_DIRECT */ | 310 | #endif /* CONFIG_IDE_8xx_PCCARD || CONFIG_IDE_8xx_DIRECT */ |
| @@ -377,6 +379,8 @@ static int __init m8xx_ide_init_ports(hw_regs_t *hw, unsigned long data_port) | |||
| 377 | ((immap_t *) IMAP_ADDR)->im_siu_conf.sc_siel |= | 379 | ((immap_t *) IMAP_ADDR)->im_siu_conf.sc_siel |= |
| 378 | (0x80000000 >> ioport_dsc[data_port].irq); | 380 | (0x80000000 >> ioport_dsc[data_port].irq); |
| 379 | 381 | ||
| 382 | hw->chipset = ide_generic; | ||
| 383 | |||
| 380 | return 0; | 384 | return 0; |
| 381 | } | 385 | } |
| 382 | #endif /* CONFIG_IDE_8xx_DIRECT */ | 386 | #endif /* CONFIG_IDE_8xx_DIRECT */ |
