ide: fix host drivers depending on ide_generic to probe for interfaces (take 2)

* Add mpc8xx_ide_probe() to mpc8xx.c and call it from probe_for_hwifs().

* Convert ide_arm, ide-cris, ide-h8300, ide-pnp, buddha, falconide, gayle,
  macide, q40ide, cmd640 and mpc8xx host drivers to use ide_device_add().

  This removes dependency on ide_generic for these drivers so update
  ide/Kconfig accordingly.

v2:
* ide_arm build fix (s/ide_device_idx/ide_device_add/)
  (Thanks to Christoph Lameter <clameter@sgi.com> for reporting the problem).

Cc: Mikael Starvik <starvik@axis.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent ac87e411
...@@ -327,7 +327,6 @@ config BLK_DEV_PLATFORM ...@@ -327,7 +327,6 @@ config BLK_DEV_PLATFORM
config BLK_DEV_CMD640 config BLK_DEV_CMD640
bool "CMD640 chipset bugfix/support" bool "CMD640 chipset bugfix/support"
depends on X86 depends on X86
select IDE_GENERIC
---help--- ---help---
The CMD-Technologies CMD640 IDE chip is used on many common 486 and The CMD-Technologies CMD640 IDE chip is used on many common 486 and
Pentium motherboards, usually in combination with a "Neptune" or Pentium motherboards, usually in combination with a "Neptune" or
...@@ -362,7 +361,6 @@ config BLK_DEV_CMD640_ENHANCED ...@@ -362,7 +361,6 @@ config BLK_DEV_CMD640_ENHANCED
config BLK_DEV_IDEPNP config BLK_DEV_IDEPNP
bool "PNP EIDE support" bool "PNP EIDE support"
depends on PNP depends on PNP
select IDE_GENERIC
help help
If you have a PnP (Plug and Play) compatible EIDE card and If you have a PnP (Plug and Play) compatible EIDE card and
would like the kernel to automatically detect and activate would like the kernel to automatically detect and activate
...@@ -845,7 +843,6 @@ config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ ...@@ -845,7 +843,6 @@ config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
config IDE_ARM config IDE_ARM
def_bool ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK) def_bool ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
select IDE_GENERIC
config BLK_DEV_IDE_ICSIDE config BLK_DEV_IDE_ICSIDE
tristate "ICS IDE interface support" tristate "ICS IDE interface support"
...@@ -880,7 +877,6 @@ config ETRAX_IDE ...@@ -880,7 +877,6 @@ config ETRAX_IDE
bool "ETRAX IDE support" bool "ETRAX IDE support"
depends on CRIS && BROKEN depends on CRIS && BROKEN
select BLK_DEV_IDEDMA select BLK_DEV_IDEDMA
select IDE_GENERIC
help help
Enables the ETRAX IDE driver. Enables the ETRAX IDE driver.
...@@ -914,7 +910,6 @@ endchoice ...@@ -914,7 +910,6 @@ endchoice
config IDE_H8300 config IDE_H8300
bool "H8300 IDE support" bool "H8300 IDE support"
depends on H8300 depends on H8300
select IDE_GENERIC
default y default y
help help
Enables the H8300 IDE driver. Enables the H8300 IDE driver.
...@@ -922,7 +917,6 @@ config IDE_H8300 ...@@ -922,7 +917,6 @@ config IDE_H8300
config BLK_DEV_GAYLE config BLK_DEV_GAYLE
bool "Amiga Gayle IDE interface support" bool "Amiga Gayle IDE interface support"
depends on AMIGA depends on AMIGA
select IDE_GENERIC
help help
This is the IDE driver for the Amiga Gayle IDE interface. It supports This is the IDE driver for the Amiga Gayle IDE interface. It supports
both the `A1200 style' and `A4000 style' of the Gayle IDE interface, both the `A1200 style' and `A4000 style' of the Gayle IDE interface,
...@@ -954,7 +948,6 @@ config BLK_DEV_IDEDOUBLER ...@@ -954,7 +948,6 @@ config BLK_DEV_IDEDOUBLER
config BLK_DEV_BUDDHA config BLK_DEV_BUDDHA
bool "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)" bool "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)"
depends on ZORRO && EXPERIMENTAL depends on ZORRO && EXPERIMENTAL
select IDE_GENERIC
help help
This is the IDE driver for the IDE interfaces on the Buddha, This is the IDE driver for the IDE interfaces on the Buddha,
Catweasel and X-Surf expansion boards. It supports up to two interfaces Catweasel and X-Surf expansion boards. It supports up to two interfaces
...@@ -967,7 +960,6 @@ config BLK_DEV_BUDDHA ...@@ -967,7 +960,6 @@ config BLK_DEV_BUDDHA
config BLK_DEV_FALCON_IDE config BLK_DEV_FALCON_IDE
bool "Falcon IDE interface support" bool "Falcon IDE interface support"
depends on ATARI depends on ATARI
select IDE_GENERIC
help help
This is the IDE driver for the builtin IDE interface on the Atari This is the IDE driver for the builtin IDE interface on the Atari
Falcon. Say Y if you have a Falcon and want to use IDE devices (hard Falcon. Say Y if you have a Falcon and want to use IDE devices (hard
...@@ -977,7 +969,6 @@ config BLK_DEV_FALCON_IDE ...@@ -977,7 +969,6 @@ config BLK_DEV_FALCON_IDE
config BLK_DEV_MAC_IDE config BLK_DEV_MAC_IDE
bool "Macintosh Quadra/Powerbook IDE interface support" bool "Macintosh Quadra/Powerbook IDE interface support"
depends on MAC depends on MAC
select IDE_GENERIC
help help
This is the IDE driver for the builtin IDE interface on some m68k This is the IDE driver for the builtin IDE interface on some m68k
Macintosh models. It supports both the `Quadra style' (used in Macintosh models. It supports both the `Quadra style' (used in
...@@ -991,7 +982,6 @@ config BLK_DEV_MAC_IDE ...@@ -991,7 +982,6 @@ config BLK_DEV_MAC_IDE
config BLK_DEV_Q40IDE config BLK_DEV_Q40IDE
bool "Q40/Q60 IDE interface support" bool "Q40/Q60 IDE interface support"
depends on Q40 depends on Q40
select IDE_GENERIC
help help
Enable the on-board IDE controller in the Q40/Q60. This should Enable the on-board IDE controller in the Q40/Q60. This should
normally be on; disable it only if you are running a custom hard normally be on; disable it only if you are running a custom hard
...@@ -1000,7 +990,6 @@ config BLK_DEV_Q40IDE ...@@ -1000,7 +990,6 @@ config BLK_DEV_Q40IDE
config BLK_DEV_MPC8xx_IDE config BLK_DEV_MPC8xx_IDE
bool "MPC8xx IDE support" bool "MPC8xx IDE support"
depends on 8xx && (LWMON || IVMS8 || IVML24 || TQM8xxL) && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE depends on 8xx && (LWMON || IVMS8 || IVML24 || TQM8xxL) && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE
select IDE_GENERIC
help help
This option provides support for IDE on Motorola MPC8xx Systems. This option provides support for IDE on Motorola MPC8xx Systems.
Please see 'Type of MPC8xx IDE interface' for details. Please see 'Type of MPC8xx IDE interface' for details.
......
...@@ -28,6 +28,7 @@ void __init ide_arm_init(void) ...@@ -28,6 +28,7 @@ void __init ide_arm_init(void)
{ {
ide_hwif_t *hwif; ide_hwif_t *hwif;
hw_regs_t hw; hw_regs_t hw;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
memset(&hw, 0, sizeof(hw)); memset(&hw, 0, sizeof(hw));
ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206); ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
...@@ -36,5 +37,8 @@ void __init ide_arm_init(void) ...@@ -36,5 +37,8 @@ void __init ide_arm_init(void)
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]); hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
if (hwif) { if (hwif) {
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
idx[0] = hwif->index;
ide_device_add(idx);
} }
} }
...@@ -758,9 +758,8 @@ void __init ...@@ -758,9 +758,8 @@ void __init
init_e100_ide (void) init_e100_ide (void)
{ {
hw_regs_t hw; hw_regs_t hw;
int ide_offsets[IDE_NR_PORTS]; int ide_offsets[IDE_NR_PORTS], h, i;
int h; u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
int i;
printk("ide: ETRAX FS built-in ATA DMA controller\n"); printk("ide: ETRAX FS built-in ATA DMA controller\n");
...@@ -808,6 +807,8 @@ init_e100_ide (void) ...@@ -808,6 +807,8 @@ init_e100_ide (void)
hwif->drives[1].autotune = 1; hwif->drives[1].autotune = 1;
hwif->ultra_mask = cris_ultra_mask; hwif->ultra_mask = cris_ultra_mask;
hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */ hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */
idx[h] = hwif->index;
} }
/* Reset pulse */ /* Reset pulse */
...@@ -820,6 +821,8 @@ init_e100_ide (void) ...@@ -820,6 +821,8 @@ init_e100_ide (void)
cris_ide_set_speed(TYPE_PIO, ATA_PIO4_SETUP, ATA_PIO4_STROBE, ATA_PIO4_HOLD); cris_ide_set_speed(TYPE_PIO, ATA_PIO4_SETUP, ATA_PIO4_STROBE, ATA_PIO4_HOLD);
cris_ide_set_speed(TYPE_DMA, 0, ATA_DMA2_STROBE, ATA_DMA2_HOLD); cris_ide_set_speed(TYPE_DMA, 0, ATA_DMA2_STROBE, ATA_DMA2_HOLD);
cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0); cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0);
ide_device_add(idx);
} }
static cris_dma_descr_type mydescr __attribute__ ((__aligned__(16))); static cris_dma_descr_type mydescr __attribute__ ((__aligned__(16)));
......
...@@ -89,6 +89,7 @@ void __init h8300_ide_init(void) ...@@ -89,6 +89,7 @@ void __init h8300_ide_init(void)
hw_regs_t hw; hw_regs_t hw;
ide_hwif_t *hwif; ide_hwif_t *hwif;
int index; int index;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300")) if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300"))
goto out_busy; goto out_busy;
...@@ -111,6 +112,11 @@ void __init h8300_ide_init(void) ...@@ -111,6 +112,11 @@ void __init h8300_ide_init(void)
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
hwif_setup(hwif); hwif_setup(hwif);
printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", index); printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", index);
idx[0] = index;
ide_device_add(idx);
return; return;
out_busy: out_busy:
......
...@@ -43,12 +43,16 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id ...@@ -43,12 +43,16 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]); hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
if (hwif) { if (hwif) {
u8 index = hwif->index; u8 index = hwif->index;
u8 idx[4] = { index, 0xff, 0xff, 0xff };
ide_init_port_data(hwif, index); ide_init_port_data(hwif, index);
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index); printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
pnp_set_drvdata(dev,hwif); pnp_set_drvdata(dev,hwif);
ide_device_add(idx);
return 0; return 0;
} }
......
...@@ -1555,6 +1555,7 @@ static int __init ide_setup(char *s) ...@@ -1555,6 +1555,7 @@ static int __init ide_setup(char *s)
extern void __init pnpide_init(void); extern void __init pnpide_init(void);
extern void __exit pnpide_exit(void); extern void __exit pnpide_exit(void);
extern void __init h8300_ide_init(void); extern void __init h8300_ide_init(void);
extern void __init mpc8xx_ide_probe(void);
/* /*
* probe_for_hwifs() finds/initializes "known" IDE interfaces * probe_for_hwifs() finds/initializes "known" IDE interfaces
...@@ -1619,6 +1620,9 @@ static void __init probe_for_hwifs (void) ...@@ -1619,6 +1620,9 @@ static void __init probe_for_hwifs (void)
#ifdef CONFIG_H8300 #ifdef CONFIG_H8300
h8300_ide_init(); h8300_ide_init();
#endif #endif
#ifdef BLK_DEV_MPC8xx_IDE
mpc8xx_ide_probe();
#endif
} }
/* /*
......
...@@ -156,6 +156,8 @@ void __init buddha_init(void) ...@@ -156,6 +156,8 @@ void __init buddha_init(void)
while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
unsigned long board; unsigned long board;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) { if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) {
buddha_num_hwifs = BUDDHA_NUM_HWIFS; buddha_num_hwifs = BUDDHA_NUM_HWIFS;
type=BOARD_BUDDHA; type=BOARD_BUDDHA;
...@@ -234,7 +236,11 @@ void __init buddha_init(void) ...@@ -234,7 +236,11 @@ void __init buddha_init(void)
break; break;
} }
printk(" IDE interface\n"); printk(" IDE interface\n");
idx[i] = index;
} }
} }
ide_device_add(idx);
} }
} }
...@@ -75,10 +75,13 @@ void __init falconide_init(void) ...@@ -75,10 +75,13 @@ void __init falconide_init(void)
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]); hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
if (hwif) { if (hwif) {
u8 index = hwif->index; u8 index = hwif->index;
u8 idx[4] = { index, 0xff, 0xff, 0xff };
ide_init_port_data(hwif, index); ide_init_port_data(hwif, index);
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
printk("ide%d: Falcon IDE interface\n", index); printk("ide%d: Falcon IDE interface\n", index);
ide_device_add(idx);
} }
} }
...@@ -113,6 +113,7 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif) ...@@ -113,6 +113,7 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif)
void __init gayle_init(void) void __init gayle_init(void)
{ {
int a4000, i; int a4000, i;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
if (!MACH_IS_AMIGA) if (!MACH_IS_AMIGA)
return; return;
...@@ -183,7 +184,11 @@ void __init gayle_init(void) ...@@ -183,7 +184,11 @@ void __init gayle_init(void)
break; break;
#endif /* CONFIG_BLK_DEV_IDEDOUBLER */ #endif /* CONFIG_BLK_DEV_IDEDOUBLER */
} }
idx[i] = index;
} else } else
release_mem_region(res_start, res_n); release_mem_region(res_start, res_n);
} }
ide_device_add(idx);
} }
...@@ -112,6 +112,7 @@ void __init macide_init(void) ...@@ -112,6 +112,7 @@ void __init macide_init(void)
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]); hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
if (hwif) { if (hwif) {
u8 index = hwif->index; u8 index = hwif->index;
u8 idx[4] = { index, 0xff, 0xff, 0xff };
ide_init_port_data(hwif, index); ide_init_port_data(hwif, index);
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
...@@ -135,5 +136,7 @@ void __init macide_init(void) ...@@ -135,5 +136,7 @@ void __init macide_init(void)
printk(KERN_INFO "ide%d: Macintosh Powerbook Baboon IDE interface\n", index); printk(KERN_INFO "ide%d: Macintosh Powerbook Baboon IDE interface\n", index);
else else
printk(KERN_INFO "ide%d: Unknown Macintosh IDE interface\n", index); printk(KERN_INFO "ide%d: Unknown Macintosh IDE interface\n", index);
ide_device_add(idx);
} }
} }
...@@ -116,6 +116,7 @@ void __init q40ide_init(void) ...@@ -116,6 +116,7 @@ void __init q40ide_init(void)
int i; int i;
ide_hwif_t *hwif; ide_hwif_t *hwif;
const char *name; const char *name;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
if (!MACH_IS_Q40) if (!MACH_IS_Q40)
return ; return ;
...@@ -146,7 +147,11 @@ void __init q40ide_init(void) ...@@ -146,7 +147,11 @@ void __init q40ide_init(void)
ide_init_port_data(hwif, hwif->index); ide_init_port_data(hwif, hwif->index);
ide_init_port_hw(hwif, &hw); ide_init_port_hw(hwif, &hw);
hwif->mmio = 1; hwif->mmio = 1;
idx[i] = hwif->index;
} }
} }
ide_device_add(idx);
} }
...@@ -717,6 +717,7 @@ int __init ide_probe_for_cmd640x (void) ...@@ -717,6 +717,7 @@ int __init ide_probe_for_cmd640x (void)
const char *bus_type, *port2; const char *bus_type, *port2;
unsigned int index; unsigned int index;
u8 b, cfr; u8 b, cfr;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
if (cmd640_vlb && probe_for_cmd640_vlb()) { if (cmd640_vlb && probe_for_cmd640_vlb()) {
bus_type = "VLB"; bus_type = "VLB";
...@@ -769,6 +770,8 @@ int __init ide_probe_for_cmd640x (void) ...@@ -769,6 +770,8 @@ int __init ide_probe_for_cmd640x (void)
cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode;
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
idx[0] = cmd_hwif0->index;
/* /*
* Ensure compatibility by always using the slowest timings * Ensure compatibility by always using the slowest timings
* for access to the drive's command register block, * for access to the drive's command register block,
...@@ -826,6 +829,8 @@ int __init ide_probe_for_cmd640x (void) ...@@ -826,6 +829,8 @@ int __init ide_probe_for_cmd640x (void)
cmd_hwif1->pio_mask = ATA_PIO5; cmd_hwif1->pio_mask = ATA_PIO5;
cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode;
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
idx[1] = cmd_hwif1->index;
} }
printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name, printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name,
cmd_hwif0->serialized ? "" : "not ", port2); cmd_hwif0->serialized ? "" : "not ", port2);
...@@ -872,6 +877,9 @@ int __init ide_probe_for_cmd640x (void) ...@@ -872,6 +877,9 @@ int __init ide_probe_for_cmd640x (void)
#ifdef CMD640_DUMP_REGS #ifdef CMD640_DUMP_REGS
cmd640_dump_regs(); cmd640_dump_regs();
#endif #endif
ide_device_add(idx);
return 1; return 1;
} }
...@@ -838,3 +838,17 @@ void m8xx_ide_init(void) ...@@ -838,3 +838,17 @@ void m8xx_ide_init(void)
ppc_ide_md.default_io_base = m8xx_ide_default_io_base; ppc_ide_md.default_io_base = m8xx_ide_default_io_base;
ppc_ide_md.ide_init_hwif = m8xx_ide_init_hwif_ports; ppc_ide_md.ide_init_hwif = m8xx_ide_init_hwif_ports;
} }
void __init mpc8xx_ide_probe(void)
{
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
#ifdef IDE0_BASE_OFFSET
idx[0] = 0;
#ifdef IDE1_BASE_OFFSET
idx[1] = 1;
#endif
#endif
ide_device_add(idx);
}
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