Commit 7aaa84d6 authored by Paul Mundt's avatar Paul Mundt Committed by Linus Torvalds

[PATCH] sh64: IDE updates

This fixes up a few minor IDE issues on sh64.  We also enable cayman on-board
IDE in the SuperIO.
Signed-off-by: default avatarRichard Curnow <rc@rc0.org.uk>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2ccda9ad
...@@ -33,8 +33,6 @@ ...@@ -33,8 +33,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/page.h> #include <asm/page.h>
#define RES_COUNT(res) ((sizeof((res))/sizeof(struct resource)))
/* /*
* Platform Dependent Interrupt Priorities. * Platform Dependent Interrupt Priorities.
*/ */
...@@ -86,10 +84,14 @@ ...@@ -86,10 +84,14 @@
#define SMSC_DEVICE_ID_INDEX 0x20 #define SMSC_DEVICE_ID_INDEX 0x20
#define SMSC_DEVICE_REV_INDEX 0x21 #define SMSC_DEVICE_REV_INDEX 0x21
#define SMSC_ACTIVATE_INDEX 0x30 #define SMSC_ACTIVATE_INDEX 0x30
#define SMSC_PRIMARY_BASE_INDEX 0x60
#define SMSC_SECONDARY_BASE_INDEX 0x62
#define SMSC_PRIMARY_INT_INDEX 0x70 #define SMSC_PRIMARY_INT_INDEX 0x70
#define SMSC_SECONDARY_INT_INDEX 0x72 #define SMSC_SECONDARY_INT_INDEX 0x72
#define SMSC_KEYBOARD_DEVICE 7 #define SMSC_IDE1_DEVICE 1
#define SMSC_KEYBOARD_DEVICE 7
#define SMSC_CONFIG_REGISTERS 8
#define SMSC_SUPERIO_READ_INDEXED(index) ({ \ #define SMSC_SUPERIO_READ_INDEXED(index) ({ \
outb((index), SMSC_INDEX_PORT_ADDR); \ outb((index), SMSC_INDEX_PORT_ADDR); \
...@@ -98,6 +100,9 @@ ...@@ -98,6 +100,9 @@
outb((index), SMSC_INDEX_PORT_ADDR); \ outb((index), SMSC_INDEX_PORT_ADDR); \
outb((val), SMSC_DATA_PORT_ADDR); }) outb((val), SMSC_DATA_PORT_ADDR); })
#define IDE1_PRIMARY_BASE 0x01f0
#define IDE1_SECONDARY_BASE 0x03f6
unsigned long smsc_superio_virt; unsigned long smsc_superio_virt;
/* /*
...@@ -125,13 +130,13 @@ struct sh64_platform platform_parms = { ...@@ -125,13 +130,13 @@ struct sh64_platform platform_parms = {
.initial_root_dev = 0x0100, .initial_root_dev = 0x0100,
.loader_type = 1, .loader_type = 1,
.io_res_p = io_resources, .io_res_p = io_resources,
.io_res_count = RES_COUNT(io_resources), .io_res_count = ARRAY_SIZE(io_resources),
.kram_res_p = kram_resources, .kram_res_p = kram_resources,
.kram_res_count = RES_COUNT(kram_resources), .kram_res_count = ARRAY_SIZE(kram_resources),
.xram_res_p = xram_resources, .xram_res_p = xram_resources,
.xram_res_count = RES_COUNT(xram_resources), .xram_res_count = ARRAY_SIZE(xram_resources),
.rom_res_p = rom_resources, .rom_res_p = rom_resources,
.rom_res_count = RES_COUNT(rom_resources), .rom_res_count = ARRAY_SIZE(rom_resources),
}; };
int platform_int_priority[NR_INTC_IRQS] = { int platform_int_priority[NR_INTC_IRQS] = {
...@@ -175,6 +180,38 @@ static int __init smsc_superio_setup(void) ...@@ -175,6 +180,38 @@ static int __init smsc_superio_setup(void)
SMSC_SUPERIO_WRITE_INDEXED(1, SMSC_PRIMARY_INT_INDEX); SMSC_SUPERIO_WRITE_INDEXED(1, SMSC_PRIMARY_INT_INDEX);
SMSC_SUPERIO_WRITE_INDEXED(12, SMSC_SECONDARY_INT_INDEX); SMSC_SUPERIO_WRITE_INDEXED(12, SMSC_SECONDARY_INT_INDEX);
#ifdef CONFIG_IDE
/*
* Only IDE1 exists on the Cayman
*/
/* Power it on */
SMSC_SUPERIO_WRITE_INDEXED(1 << SMSC_IDE1_DEVICE, 0x22);
SMSC_SUPERIO_WRITE_INDEXED(SMSC_IDE1_DEVICE, SMCS_LOGICAL_DEV_INDEX);
SMSC_SUPERIO_WRITE_INDEXED(1, SMSC_ACTIVATE_INDEX);
SMSC_SUPERIO_WRITE_INDEXED(IDE1_PRIMARY_BASE >> 8,
SMSC_PRIMARY_BASE_INDEX + 0);
SMSC_SUPERIO_WRITE_INDEXED(IDE1_PRIMARY_BASE & 0xff,
SMSC_PRIMARY_BASE_INDEX + 1);
SMSC_SUPERIO_WRITE_INDEXED(IDE1_SECONDARY_BASE >> 8,
SMSC_SECONDARY_BASE_INDEX + 0);
SMSC_SUPERIO_WRITE_INDEXED(IDE1_SECONDARY_BASE & 0xff,
SMSC_SECONDARY_BASE_INDEX + 1);
SMSC_SUPERIO_WRITE_INDEXED(14, SMSC_PRIMARY_INT_INDEX);
SMSC_SUPERIO_WRITE_INDEXED(SMSC_CONFIG_REGISTERS,
SMCS_LOGICAL_DEV_INDEX);
SMSC_SUPERIO_WRITE_INDEXED(0x00, 0xc2); /* GP42 = nIDE1_OE */
SMSC_SUPERIO_WRITE_INDEXED(0x01, 0xc5); /* GP45 = IDE1_IRQ */
SMSC_SUPERIO_WRITE_INDEXED(0x00, 0xc6); /* GP46 = nIOROP */
SMSC_SUPERIO_WRITE_INDEXED(0x00, 0xc7); /* GP47 = nIOWOP */
#endif
/* Exit the configuraton state */ /* Exit the configuraton state */
outb(SMSC_EXIT_CONFIG_KEY, SMSC_CONFIG_PORT_ADDR); outb(SMSC_EXIT_CONFIG_KEY, SMSC_CONFIG_PORT_ADDR);
......
...@@ -21,7 +21,12 @@ ...@@ -21,7 +21,12 @@
#define MAX_HWIFS CONFIG_IDE_MAX_HWIFS #define MAX_HWIFS CONFIG_IDE_MAX_HWIFS
#endif #endif
/* Without this, the initialisation of PCI IDE cards end up calling
* ide_init_hwif_ports, which won't work. */
#ifdef CONFIG_BLK_DEV_IDEPCI
#define IDE_ARCH_OBSOLETE_INIT 1
#define ide_default_io_ctl(base) (0) #define ide_default_io_ctl(base) (0)
#endif
#include <asm-generic/ide_iops.h> #include <asm-generic/ide_iops.h>
......
...@@ -83,11 +83,12 @@ ...@@ -83,11 +83,12 @@
#define IRQ_P2INTC (START_EXT_IRQS + (3*8) + 2) #define IRQ_P2INTC (START_EXT_IRQS + (3*8) + 2)
#define IRQ_P2INTD (START_EXT_IRQS + (3*8) + 3) #define IRQ_P2INTD (START_EXT_IRQS + (3*8) + 3)
#define START_EXT_IRQS 64
#define I8042_KBD_IRQ (START_EXT_IRQS + 2) #define I8042_KBD_IRQ (START_EXT_IRQS + 2)
#define I8042_AUX_IRQ (START_EXT_IRQS + 6) #define I8042_AUX_IRQ (START_EXT_IRQS + 6)
#define IRQ_CFCARD (START_EXT_IRQS + 7)
#define IRQ_PCMCIA (0)
#else #else
#define NR_EXT_IRQS 0 #define NR_EXT_IRQS 0
#endif #endif
......
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