diff options
author | Paul Mundt <lethal@linux-sh.org> | 2006-09-27 15:16:42 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2006-09-27 15:16:42 +0900 |
commit | d7cdc9e8ac82c43fdcd4fde6b5b53d2dcba7f707 (patch) | |
tree | 2489b1831a1b5818af0927e4d3c8933bf7d05f31 /arch/sh/boards/landisk/setup.c | |
parent | 26ff6c11ef38e08990c1e417c299246e6ab18ff7 (diff) | |
download | talos-op-linux-d7cdc9e8ac82c43fdcd4fde6b5b53d2dcba7f707.tar.gz talos-op-linux-d7cdc9e8ac82c43fdcd4fde6b5b53d2dcba7f707.zip |
sh: ioremap() overhaul.
ioremap() overhaul. Add support for transparent PMB mapping, get rid of
p3_ioremap(), etc. Also drop ioremap() and iounmap() routines from the
machvec, as everyone can use the generic ioremap() API instead. For PCI
memory apertures and other special cases, use the pci_iomap() API, as
boards are already required to get the mapping right there.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards/landisk/setup.c')
-rw-r--r-- | arch/sh/boards/landisk/setup.c | 237 |
1 files changed, 99 insertions, 138 deletions
diff --git a/arch/sh/boards/landisk/setup.c b/arch/sh/boards/landisk/setup.c index 0c60eaa10ba7..3a795cfb1eda 100644 --- a/arch/sh/boards/landisk/setup.c +++ b/arch/sh/boards/landisk/setup.c @@ -1,157 +1,52 @@ /* * arch/sh/boards/landisk/setup.c * + * Copyright (C) 2000 Kazumoto Kojima * Copyright (C) 2002 Paul Mundt * - * May be copied or modified under the terms of the GNU General Public - * License. See linux/COPYING for more information. - * - * Setup code for an unknown machine (internal peripherials only) - */ -/* - * linux/arch/sh/kernel/setup_landisk.c - * - * Copyright (C) 2000 Kazumoto Kojima - * * I-O DATA Device, Inc. LANDISK Support. * * Modified for LANDISK by * Atom Create Engineering Co., Ltd. 2002. - */ -/* + * * modifed by kogiidena * 2005.09.16 + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. */ - #include <linux/config.h> #include <linux/init.h> -#include <linux/irq.h> #include <linux/pm.h> - -#include <linux/hdreg.h> -#include <linux/ide.h> -#include <linux/pci.h> - +#include <linux/mm.h> #include <asm/machvec.h> #include <asm/rtc.h> -#include <asm/machvec_init.h> -#include <asm/io.h> #include <asm/landisk/iodata_landisk.h> -#include <asm/landisk/io.h> - -#include <linux/mm.h> -#include <linux/vmalloc.h> +#include <asm/io.h> -extern void (*board_time_init) (void); void landisk_time_init(void); -extern void init_landisk_IRQ(void); +void init_landisk_IRQ(void); int landisk_ledparam; int landisk_buzzerparam; int landisk_arch; -/* defined in mm/ioremap.c */ -extern void *p3_ioremap(unsigned long phys_addr, unsigned long size, - unsigned long flags); - -/* - * Initialize the board - */ - -const char *get_system_type(void) -{ - return "LANDISK"; -} - -static void landisk_power_off(void) -{ - ctrl_outb(0x01, PA_SHUTDOWN); -} - -void check_usl5p(void) -{ - volatile unsigned char *p = (volatile unsigned char *)PA_LED; - unsigned char tmp1, tmp2; - tmp1 = *p; - *p = 0x40; - tmp2 = *p; - *p = tmp1; - landisk_arch = (tmp2 == 0x40) ? 1 : 0; - if (landisk_arch == 1) { /* arch == usl-5p */ - landisk_ledparam = 0x00000380; - landisk_ledparam |= (tmp1 & 0x07c); - } else { /* arch == landisk */ - landisk_ledparam = 0x02000180; - landisk_ledparam |= 0x04; - } - return; -} - -void __init platform_setup(void) -{ - - landisk_buzzerparam = 0; - check_usl5p(); - - printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n"); - board_time_init = landisk_time_init; - pm_power_off = landisk_power_off; - -} - -void *area5_io_base; -void *area6_io_base; - -int __init cf_init(void) -{ - pgprot_t prot; - unsigned long paddrbase, psize; - - /* open I/O area window */ - paddrbase = virt_to_phys((void *)PA_AREA5_IO); - psize = PAGE_SIZE; - prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); - area5_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); - if (!area5_io_base) { - printk("allocate_cf_area : can't open CF I/O window!\n"); - return -ENOMEM; - } - - paddrbase = virt_to_phys((void *)PA_AREA6_IO); - psize = PAGE_SIZE; - prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16); - area6_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); - if (!area6_io_base) { - printk("allocate_cf_area : can't open HDD I/O window!\n"); - return -ENOMEM; - } - - printk(KERN_INFO "Allocate Area5/6 success.\n"); - - /* XXX : do we need attribute and common-memory area also? */ - - return 0; -} - -__initcall(cf_init); - -#include <linux/sched.h> - -/* Cycle the LED's in the clasic knightrider/Sun pattern */ - -void heartbeat_landisk(void) +/* cycle the led's in the clasic knightrider/sun pattern */ +static void heartbeat_landisk(void) { static unsigned int cnt = 0, blink = 0x00, period = 25; - volatile unsigned char *p = (volatile unsigned char *)PA_LED; + volatile u8 *p = (volatile u8 *)PA_LED; char data; - if ((landisk_ledparam & 0x080) == 0) { + if ((landisk_ledparam & 0x080) == 0) return; - } + cnt += 1; - if (cnt < period) { + + if (cnt < period) return; - } + cnt = 0; blink++; @@ -167,17 +62,16 @@ void heartbeat_landisk(void) } *p = data; - if (((landisk_ledparam & 0x007f7f00) == 0) - && (landisk_buzzerparam == 0)) { + if (((landisk_ledparam & 0x007f7f00) == 0) && + (landisk_buzzerparam == 0)) landisk_ledparam &= (~0x0080); - } + landisk_buzzerparam >>= 1; } /* * The Machine Vector */ - struct sh_machine_vector mv_landisk __initmv = { .mv_nr_irqs = 72, .mv_inb = landisk_inb, @@ -198,21 +92,88 @@ struct sh_machine_vector mv_landisk __initmv = { .mv_outsb = landisk_outsb, .mv_outsw = landisk_outsw, .mv_outsl = landisk_outsl, - .mv_readb = landisk_readb, - .mv_readw = landisk_readw, - .mv_readl = landisk_readl, - .mv_writeb = landisk_writeb, - .mv_writew = landisk_writew, - .mv_writel = landisk_writel, - .mv_ioremap = landisk_ioremap, - .mv_iounmap = landisk_iounmap, - .mv_isa_port2addr = landisk_isa_port2addr, + .mv_ioport_map = landisk_ioport_map, .mv_init_irq = init_landisk_IRQ, - #ifdef CONFIG_HEARTBEAT .mv_heartbeat = heartbeat_landisk, #endif - }; - ALIAS_MV(landisk) + +const char *get_system_type(void) +{ + return "LANDISK"; +} + +static void landisk_power_off(void) +{ + ctrl_outb(0x01, PA_SHUTDOWN); +} + +static void check_usl5p(void) +{ + volatile u8 *p = (volatile u8 *)PA_LED; + u8 tmp1, tmp2; + + tmp1 = *p; + *p = 0x40; + tmp2 = *p; + *p = tmp1; + + landisk_arch = (tmp2 == 0x40); + if (landisk_arch == 1) { + /* arch == usl-5p */ + landisk_ledparam = 0x00000380; + landisk_ledparam |= (tmp1 & 0x07c); + } else { + /* arch == landisk */ + landisk_ledparam = 0x02000180; + landisk_ledparam |= 0x04; + } +} + +void __init platform_setup(void) +{ + landisk_buzzerparam = 0; + check_usl5p(); + + printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n"); + board_time_init = landisk_time_init; + pm_power_off = landisk_power_off; +} + +void *area5_io_base; +void *area6_io_base; + +static int __init landisk_cf_init(void) +{ + pgprot_t prot; + unsigned long paddrbase, psize; + + /* open I/O area window */ + paddrbase = virt_to_phys((void *)PA_AREA5_IO); + psize = PAGE_SIZE; + prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); + area5_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); + if (!area5_io_base) { + printk("allocate_cf_area : can't open CF I/O window!\n"); + return -ENOMEM; + } + + paddrbase = virt_to_phys((void *)PA_AREA6_IO); + psize = PAGE_SIZE; + prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16); + area6_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); + if (!area6_io_base) { + printk("allocate_cf_area : can't open HDD I/O window!\n"); + return -ENOMEM; + } + + printk(KERN_INFO "Allocate Area5/6 success.\n"); + + /* XXX : do we need attribute and common-memory area also? */ + + return 0; +} + +__initcall(landisk_cf_init); |