Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4465461e authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 52913ab2
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -222,7 +222,8 @@ comment "IDE chipset support/bugfixes"

config IDE_GENERIC
	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
	  This is the generic IDE driver.  This driver attaches to the
	  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
	select IDE_TIMINGS

config IDE_ARM
	tristate "ARM IDE support"
	depends on ARM && (ARCH_RPC || ARCH_SHARK)
	default y

config BLK_DEV_IDE_ICSIDE
	tristate "ICS IDE interface support"
	depends on ARM && ARCH_ACORN
+0 −2
Original line number Diff line number Diff line
@@ -21,8 +21,6 @@ ide-core-$(CONFIG_IDE_LEGACY) += ide-legacy.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_UMC8672)		+= umc8672.o
obj-$(CONFIG_BLK_DEV_DTC2278)		+= dtc2278.o
+13 −5
Original line number Diff line number Diff line
@@ -13,7 +13,10 @@
#include <linux/ide.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
#include <asm/m32r.h>
#endif
@@ -28,8 +31,11 @@ static const struct ide_port_info ide_generic_port_info = {
	.host_flags		= IDE_HFLAG_NO_DMA,
};

#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_MAPPI2) \
	|| defined(CONFIG_PLAT_OPSPUT)
#ifdef CONFIG_ARM
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 int legacy_irqs[]  = { PLD_IRQ_CFIREQ };
#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)
{
#ifdef CONFIG_PCI
	struct pci_dev *p = NULL;
	u16 val;

	for_each_pci_dev(p) {

		if (pci_resource_start(p, 0) == 0x1f0)
			*primary = 1;
		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 */
		if (p->vendor == PCI_VENDOR_ID_INTEL &&
		    p->device == PCI_DEVICE_ID_INTEL_82371MX) {

			pci_read_config_word(p, 0x6C, &val);
			if (val & 0x8000) {
				/* 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)
@@ -106,6 +112,7 @@ static int __init ide_generic_init(void)
				printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX "
						"not free.\n",
						DRV_NAME, io_addr, io_addr + 7);
				rc = -EBUSY;
				continue;
			}

@@ -114,6 +121,7 @@ static int __init ide_generic_init(void)
						"not free.\n",
						DRV_NAME, io_addr + 0x206);
				release_region(io_addr, 8);
				rc = -EBUSY;
				continue;
			}

drivers/ide/ide_arm.c

deleted100644 → 0
+0 −53
Original line number Diff line number Diff line
/*
 * 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");