mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
ide: merge ide_arm and ide_generic host drivers
There is no need for a separate ide_arm host driver nowadays so merge it into ide_generic one. While at it: - return -EBUSY from ide_generic_init() if I/O resources are busy - scale down ide_generic_check_pci_legacy_iobases() for CONFIG_PCI=n Cc: Russell King <rmk@arm.linux.org.uk> Cc: Alexander Schulz <alex@shark-linux.de> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
52913ab2c6
commit
4465461ece
4 changed files with 15 additions and 66 deletions
|
@ -222,7 +222,8 @@ comment "IDE chipset support/bugfixes"
|
||||||
|
|
||||||
config IDE_GENERIC
|
config IDE_GENERIC
|
||||||
tristate "generic/default IDE chipset support"
|
tristate "generic/default IDE chipset support"
|
||||||
depends on ALPHA || X86 || IA64 || M32R || MIPS
|
depends on ALPHA || X86 || IA64 || M32R || MIPS || ARCH_RPC || ARCH_SHARK
|
||||||
|
default ARM && (ARCH_RPC || ARCH_SHARK)
|
||||||
help
|
help
|
||||||
This is the generic IDE driver. This driver attaches to the
|
This is the generic IDE driver. This driver attaches to the
|
||||||
fixed legacy ports (e.g. on PCs 0x1f0/0x170, 0x1e8/0x168 and
|
fixed legacy ports (e.g. on PCs 0x1f0/0x170, 0x1e8/0x168 and
|
||||||
|
@ -731,11 +732,6 @@ config BLK_DEV_IDE_AT91
|
||||||
depends on ARM && ARCH_AT91 && !ARCH_AT91RM9200 && !ARCH_AT91X40
|
depends on ARM && ARCH_AT91 && !ARCH_AT91RM9200 && !ARCH_AT91X40
|
||||||
select IDE_TIMINGS
|
select IDE_TIMINGS
|
||||||
|
|
||||||
config IDE_ARM
|
|
||||||
tristate "ARM IDE support"
|
|
||||||
depends on ARM && (ARCH_RPC || ARCH_SHARK)
|
|
||||||
default y
|
|
||||||
|
|
||||||
config BLK_DEV_IDE_ICSIDE
|
config BLK_DEV_IDE_ICSIDE
|
||||||
tristate "ICS IDE interface support"
|
tristate "ICS IDE interface support"
|
||||||
depends on ARM && ARCH_ACORN
|
depends on ARM && ARCH_ACORN
|
||||||
|
|
|
@ -21,8 +21,6 @@ ide-core-$(CONFIG_IDE_LEGACY) += ide-legacy.o
|
||||||
|
|
||||||
obj-$(CONFIG_IDE) += ide-core.o
|
obj-$(CONFIG_IDE) += ide-core.o
|
||||||
|
|
||||||
obj-$(CONFIG_IDE_ARM) += ide_arm.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o
|
obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o
|
||||||
obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o
|
obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o
|
||||||
obj-$(CONFIG_BLK_DEV_DTC2278) += dtc2278.o
|
obj-$(CONFIG_BLK_DEV_DTC2278) += dtc2278.o
|
||||||
|
|
|
@ -13,7 +13,10 @@
|
||||||
#include <linux/ide.h>
|
#include <linux/ide.h>
|
||||||
#include <linux/pci_ids.h>
|
#include <linux/pci_ids.h>
|
||||||
|
|
||||||
/* FIXME: convert m32r to use ide_platform host driver */
|
/* FIXME: convert arm and m32r to use ide_platform host driver */
|
||||||
|
#ifdef CONFIG_ARM
|
||||||
|
#include <asm/irq.h>
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_M32R
|
#ifdef CONFIG_M32R
|
||||||
#include <asm/m32r.h>
|
#include <asm/m32r.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -28,8 +31,11 @@ static const struct ide_port_info ide_generic_port_info = {
|
||||||
.host_flags = IDE_HFLAG_NO_DMA,
|
.host_flags = IDE_HFLAG_NO_DMA,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_MAPPI2) \
|
#ifdef CONFIG_ARM
|
||||||
|| defined(CONFIG_PLAT_OPSPUT)
|
static const u16 legacy_bases[] = { 0x1f0 };
|
||||||
|
static const int legacy_irqs[] = { IRQ_HARDDISK };
|
||||||
|
#elif defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_MAPPI2) || \
|
||||||
|
defined(CONFIG_PLAT_OPSPUT)
|
||||||
static const u16 legacy_bases[] = { 0x1f0 };
|
static const u16 legacy_bases[] = { 0x1f0 };
|
||||||
static const int legacy_irqs[] = { PLD_IRQ_CFIREQ };
|
static const int legacy_irqs[] = { PLD_IRQ_CFIREQ };
|
||||||
#elif defined(CONFIG_PLAT_MAPPI3)
|
#elif defined(CONFIG_PLAT_MAPPI3)
|
||||||
|
@ -45,11 +51,11 @@ static const int legacy_irqs[] = { 14, 15, 11, 10, 8, 12 };
|
||||||
|
|
||||||
static void ide_generic_check_pci_legacy_iobases(int *primary, int *secondary)
|
static void ide_generic_check_pci_legacy_iobases(int *primary, int *secondary)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
struct pci_dev *p = NULL;
|
struct pci_dev *p = NULL;
|
||||||
u16 val;
|
u16 val;
|
||||||
|
|
||||||
for_each_pci_dev(p) {
|
for_each_pci_dev(p) {
|
||||||
|
|
||||||
if (pci_resource_start(p, 0) == 0x1f0)
|
if (pci_resource_start(p, 0) == 0x1f0)
|
||||||
*primary = 1;
|
*primary = 1;
|
||||||
if (pci_resource_start(p, 2) == 0x170)
|
if (pci_resource_start(p, 2) == 0x170)
|
||||||
|
@ -64,7 +70,6 @@ static void ide_generic_check_pci_legacy_iobases(int *primary, int *secondary)
|
||||||
/* Intel MPIIX - PIO ATA on non PCI side of bridge */
|
/* Intel MPIIX - PIO ATA on non PCI side of bridge */
|
||||||
if (p->vendor == PCI_VENDOR_ID_INTEL &&
|
if (p->vendor == PCI_VENDOR_ID_INTEL &&
|
||||||
p->device == PCI_DEVICE_ID_INTEL_82371MX) {
|
p->device == PCI_DEVICE_ID_INTEL_82371MX) {
|
||||||
|
|
||||||
pci_read_config_word(p, 0x6C, &val);
|
pci_read_config_word(p, 0x6C, &val);
|
||||||
if (val & 0x8000) {
|
if (val & 0x8000) {
|
||||||
/* ATA port enabled */
|
/* ATA port enabled */
|
||||||
|
@ -75,6 +80,7 @@ static void ide_generic_check_pci_legacy_iobases(int *primary, int *secondary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init ide_generic_init(void)
|
static int __init ide_generic_init(void)
|
||||||
|
@ -106,6 +112,7 @@ static int __init ide_generic_init(void)
|
||||||
printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX "
|
printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX "
|
||||||
"not free.\n",
|
"not free.\n",
|
||||||
DRV_NAME, io_addr, io_addr + 7);
|
DRV_NAME, io_addr, io_addr + 7);
|
||||||
|
rc = -EBUSY;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +121,7 @@ static int __init ide_generic_init(void)
|
||||||
"not free.\n",
|
"not free.\n",
|
||||||
DRV_NAME, io_addr + 0x206);
|
DRV_NAME, io_addr + 0x206);
|
||||||
release_region(io_addr, 8);
|
release_region(io_addr, 8);
|
||||||
|
rc = -EBUSY;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* ARM default IDE host driver
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004 Bartlomiej Zolnierkiewicz
|
|
||||||
* Based on code by: Russell King, Ian Molton and Alexander Schulz.
|
|
||||||
*
|
|
||||||
* May be copied or modified under the terms of the GNU General Public License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/ide.h>
|
|
||||||
|
|
||||||
#include <asm/irq.h>
|
|
||||||
|
|
||||||
#define DRV_NAME "ide_arm"
|
|
||||||
|
|
||||||
#define IDE_ARM_IO 0x1f0
|
|
||||||
#define IDE_ARM_IRQ IRQ_HARDDISK
|
|
||||||
|
|
||||||
static const struct ide_port_info ide_arm_port_info = {
|
|
||||||
.host_flags = IDE_HFLAG_NO_DMA,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init ide_arm_init(void)
|
|
||||||
{
|
|
||||||
unsigned long base = IDE_ARM_IO, ctl = IDE_ARM_IO + 0x206;
|
|
||||||
hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };
|
|
||||||
|
|
||||||
if (!request_region(base, 8, DRV_NAME)) {
|
|
||||||
printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX not free.\n",
|
|
||||||
DRV_NAME, base, base + 7);
|
|
||||||
return -EBUSY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!request_region(ctl, 1, DRV_NAME)) {
|
|
||||||
printk(KERN_ERR "%s: I/O resource 0x%lX not free.\n",
|
|
||||||
DRV_NAME, ctl);
|
|
||||||
release_region(base, 8);
|
|
||||||
return -EBUSY;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&hw, 0, sizeof(hw));
|
|
||||||
ide_std_init_ports(&hw, base, ctl);
|
|
||||||
hw.irq = IDE_ARM_IRQ;
|
|
||||||
hw.chipset = ide_generic;
|
|
||||||
|
|
||||||
return ide_host_add(&ide_arm_port_info, hws, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(ide_arm_init);
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
Loading…
Reference in a new issue