diff options
Diffstat (limited to 'arch/sh/boards')
27 files changed, 111 insertions, 1335 deletions
diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig index 9c94711aa6c..2018c7ea4c9 100644 --- a/arch/sh/boards/Kconfig +++ b/arch/sh/boards/Kconfig @@ -81,13 +81,6 @@ config SH_7343_SOLUTION_ENGINE  	  Select 7343 SolutionEngine if configuring for a Hitachi  	  SH7343 (SH-Mobile 3AS) evaluation board. -config SH_7751_SYSTEMH -	bool "SystemH7751R" -	depends on CPU_SUBTYPE_SH7751R -	help -	  Select SystemH if you are configuring for a Renesas SystemH -	  7751R evaluation board. -  config SH_HP6XX  	bool "HP6XX"  	select SYS_SUPPORTS_APM_EMULATION diff --git a/arch/sh/boards/Makefile b/arch/sh/boards/Makefile index 38ef655cc0f..be7d11d04b2 100644 --- a/arch/sh/boards/Makefile +++ b/arch/sh/boards/Makefile @@ -2,10 +2,12 @@  # Specific board support, not covered by a mach group.  #  obj-$(CONFIG_SH_MAGIC_PANEL_R2)	+= board-magicpanelr2.o +obj-$(CONFIG_SH_SECUREEDGE5410)	+= board-secureedge5410.o  obj-$(CONFIG_SH_SH2007)		+= board-sh2007.o  obj-$(CONFIG_SH_SH7785LCR)	+= board-sh7785lcr.o  obj-$(CONFIG_SH_URQUELL)	+= board-urquell.o  obj-$(CONFIG_SH_SHMIN)		+= board-shmin.o +obj-$(CONFIG_SH_EDOSK7705)	+= board-edosk7705.o  obj-$(CONFIG_SH_EDOSK7760)	+= board-edosk7760.o  obj-$(CONFIG_SH_ESPT)		+= board-espt.o  obj-$(CONFIG_SH_POLARIS)	+= board-polaris.o diff --git a/arch/sh/boards/board-edosk7705.c b/arch/sh/boards/board-edosk7705.c new file mode 100644 index 00000000000..4cb3bb74c36 --- /dev/null +++ b/arch/sh/boards/board-edosk7705.c @@ -0,0 +1,78 @@ +/* + * arch/sh/boards/renesas/edosk7705/setup.c + * + * Copyright (C) 2000  Kazumoto Kojima + * + * Hitachi SolutionEngine Support. + * + * Modified for edosk7705 development + * board by S. Dunn, 2003. + */ +#include <linux/init.h> +#include <linux/irq.h> +#include <linux/platform_device.h> +#include <linux/interrupt.h> +#include <linux/smc91x.h> +#include <asm/machvec.h> +#include <asm/sizes.h> + +#define SMC_IOBASE	0xA2000000 +#define SMC_IO_OFFSET	0x300 +#define SMC_IOADDR	(SMC_IOBASE + SMC_IO_OFFSET) + +#define ETHERNET_IRQ	0x09 + +static void __init sh_edosk7705_init_irq(void) +{ +	make_imask_irq(ETHERNET_IRQ); +} + +/* eth initialization functions */ +static struct smc91x_platdata smc91x_info = { +	.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL, +}; + +static struct resource smc91x_res[] = { +	[0] = { +		.start	= SMC_IOADDR, +		.end	= SMC_IOADDR + SZ_32 - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= ETHERNET_IRQ, +		.end	= ETHERNET_IRQ, +		.flags	= IORESOURCE_IRQ , +	} +}; + +static struct platform_device smc91x_dev = { +	.name		= "smc91x", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(smc91x_res), +	.resource	= smc91x_res, + +	.dev	= { +		.platform_data	= &smc91x_info, +	}, +}; + +/* platform init code */ +static struct platform_device *edosk7705_devices[] __initdata = { +	&smc91x_dev, +}; + +static int __init init_edosk7705_devices(void) +{ +	return platform_add_devices(edosk7705_devices, +				    ARRAY_SIZE(edosk7705_devices)); +} +__initcall(init_edosk7705_devices); + +/* + * The Machine Vector + */ +static struct sh_machine_vector mv_edosk7705 __initmv = { +	.mv_name		= "EDOSK7705", +	.mv_nr_irqs		= 80, +	.mv_init_irq		= sh_edosk7705_init_irq, +}; diff --git a/arch/sh/boards/mach-snapgear/setup.c b/arch/sh/boards/board-secureedge5410.c index 331745dee37..32f875e8493 100644 --- a/arch/sh/boards/mach-snapgear/setup.c +++ b/arch/sh/boards/board-secureedge5410.c @@ -1,6 +1,4 @@  /* - * linux/arch/sh/boards/snapgear/setup.c - *   * Copyright (C) 2002  David McCullough <davidm@snapgear.com>   * Copyright (C) 2003  Paul Mundt <lethal@linux-sh.org>   * @@ -19,18 +17,19 @@  #include <linux/module.h>  #include <linux/sched.h>  #include <asm/machvec.h> -#include <mach/snapgear.h> +#include <mach/secureedge5410.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <cpu/timer.h> +unsigned short secureedge5410_ioport; +  /*   * EraseConfig handling functions   */ -  static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id)  { -	(void)__raw_readb(0xb8000000);	/* dummy read */ +	ctrl_delay();	/* dummy read */  	printk("SnapGear: erase switch interrupt!\n"); @@ -39,21 +38,22 @@ static irqreturn_t eraseconfig_interrupt(int irq, void *dev_id)  static int __init eraseconfig_init(void)  { +	unsigned int irq = evt2irq(0x240); +  	printk("SnapGear: EraseConfig init\n"); +  	/* Setup "EraseConfig" switch on external IRQ 0 */ -	if (request_irq(IRL0_IRQ, eraseconfig_interrupt, IRQF_DISABLED, +	if (request_irq(irq, eraseconfig_interrupt, IRQF_DISABLED,  				"Erase Config", NULL))  		printk("SnapGear: failed to register IRQ%d for Reset witch\n", -				IRL0_IRQ); +				irq);  	else  		printk("SnapGear: registered EraseConfig switch on IRQ%d\n", -				IRL0_IRQ); -	return(0); +				irq); +	return 0;  } -  module_init(eraseconfig_init); -/****************************************************************************/  /*   * Initialize IRQ setting   * @@ -62,7 +62,6 @@ module_init(eraseconfig_init);   * IRL2 = eth1   * IRL3 = crypto   */ -  static void __init init_snapgear_IRQ(void)  {  	printk("Setup SnapGear IRQ/IPR ...\n"); @@ -76,20 +75,5 @@ static void __init init_snapgear_IRQ(void)  static struct sh_machine_vector mv_snapgear __initmv = {  	.mv_name		= "SnapGear SecureEdge5410",  	.mv_nr_irqs		= 72, - -	.mv_inb			= snapgear_inb, -	.mv_inw			= snapgear_inw, -	.mv_inl			= snapgear_inl, -	.mv_outb		= snapgear_outb, -	.mv_outw		= snapgear_outw, -	.mv_outl		= snapgear_outl, - -	.mv_inb_p		= snapgear_inb_p, -	.mv_inw_p		= snapgear_inw, -	.mv_inl_p		= snapgear_inl, -	.mv_outb_p		= snapgear_outb_p, -	.mv_outw_p		= snapgear_outw, -	.mv_outl_p		= snapgear_outl, -  	.mv_init_irq		= init_snapgear_IRQ,  }; diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 2eaeb9e5958..f48c492a68d 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c @@ -720,32 +720,6 @@ static struct platform_device camera_devices[] = {  };  /* FSI */ -/* - * FSI-B use external clock which came from da7210. - * So, we should change parent of fsi - */ -#define FCLKBCR		0xa415000c -static void fsimck_init(struct clk *clk) -{ -	u32 status = __raw_readl(clk->enable_reg); - -	/* use external clock */ -	status &= ~0x000000ff; -	status |= 0x00000080; - -	__raw_writel(status, clk->enable_reg); -} - -static struct clk_ops fsimck_clk_ops = { -	.init = fsimck_init, -}; - -static struct clk fsimckb_clk = { -	.ops		= &fsimck_clk_ops, -	.enable_reg	= (void __iomem *)FCLKBCR, -	.rate		= 0, /* unknown */ -}; -  static struct sh_fsi_platform_info fsi_info = {  	.portb_flags = SH_FSI_BRS_INV |  		       SH_FSI_OUT_SLAVE_MODE | @@ -1264,10 +1238,10 @@ static int __init arch_setup(void)  	/* change parent of FSI B */  	clk = clk_get(NULL, "fsib_clk");  	if (!IS_ERR(clk)) { -		clk_register(&fsimckb_clk); -		clk_set_parent(clk, &fsimckb_clk); -		clk_set_rate(clk, 11000); -		clk_set_rate(&fsimckb_clk, 11000); +		/* 48kHz dummy clock was used to make sure 1/1 divide */ +		clk_set_rate(&sh7724_fsimckb_clk, 48000); +		clk_set_parent(clk, &sh7724_fsimckb_clk); +		clk_set_rate(clk, 48000);  		clk_put(clk);  	} diff --git a/arch/sh/boards/mach-edosk7705/Makefile b/arch/sh/boards/mach-edosk7705/Makefile deleted file mode 100644 index cd54acb5149..00000000000 --- a/arch/sh/boards/mach-edosk7705/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile for the EDOSK7705 specific parts of the kernel -# - -obj-y	 := setup.o io.o diff --git a/arch/sh/boards/mach-edosk7705/io.c b/arch/sh/boards/mach-edosk7705/io.c deleted file mode 100644 index 5b9c57c4324..00000000000 --- a/arch/sh/boards/mach-edosk7705/io.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * arch/sh/boards/renesas/edosk7705/io.c - * - * Copyright (C) 2001  Ian da Silva, Jeremy Siegel - * Based largely on io_se.c. - * - * I/O routines for Hitachi EDOSK7705 board. - * - */ - -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/io.h> -#include <mach/edosk7705.h> -#include <asm/addrspace.h> - -#define SMC_IOADDR	0xA2000000 - -/* Map the Ethernet addresses as if it is at 0x300 - 0x320 */ -static unsigned long sh_edosk7705_isa_port2addr(unsigned long port) -{ -	/* -	 * SMC91C96 registers are 4 byte aligned rather than the -	 * usual 2 byte! -	 */ -	if (port >= 0x300 && port < 0x320) -		return SMC_IOADDR + ((port - 0x300) * 2); - -	maybebadio(port); -	return port; -} - -/* Trying to read / write bytes on odd-byte boundaries to the Ethernet - * registers causes problems. So we bit-shift the value and read / write - * in 2 byte chunks. Setting the low byte to 0 does not cause problems - * now as odd byte writes are only made on the bit mask / interrupt - * register. This may not be the case in future Mar-2003 SJD - */ -unsigned char sh_edosk7705_inb(unsigned long port) -{ -	if (port >= 0x300 && port < 0x320 && port & 0x01) -		return __raw_readw(port - 1) >> 8; - -	return __raw_readb(sh_edosk7705_isa_port2addr(port)); -} - -void sh_edosk7705_outb(unsigned char value, unsigned long port) -{ -	if (port >= 0x300 && port < 0x320 && port & 0x01) { -		__raw_writew(((unsigned short)value << 8), port - 1); -		return; -	} - -	__raw_writeb(value, sh_edosk7705_isa_port2addr(port)); -} - -void sh_edosk7705_insb(unsigned long port, void *addr, unsigned long count) -{ -	unsigned char *p = addr; - -	while (count--) -		*p++ = sh_edosk7705_inb(port); -} - -void sh_edosk7705_outsb(unsigned long port, const void *addr, unsigned long count) -{ -	unsigned char *p = (unsigned char *)addr; - -	while (count--) -		sh_edosk7705_outb(*p++, port); -} diff --git a/arch/sh/boards/mach-edosk7705/setup.c b/arch/sh/boards/mach-edosk7705/setup.c deleted file mode 100644 index d59225e26fb..00000000000 --- a/arch/sh/boards/mach-edosk7705/setup.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * arch/sh/boards/renesas/edosk7705/setup.c - * - * Copyright (C) 2000  Kazumoto Kojima - * - * Hitachi SolutionEngine Support. - * - * Modified for edosk7705 development - * board by S. Dunn, 2003. - */ -#include <linux/init.h> -#include <linux/irq.h> -#include <asm/machvec.h> -#include <mach/edosk7705.h> - -static void __init sh_edosk7705_init_irq(void) -{ -	/* This is the Ethernet interrupt */ -	make_imask_irq(0x09); -} - -/* - * The Machine Vector - */ -static struct sh_machine_vector mv_edosk7705 __initmv = { -	.mv_name		= "EDOSK7705", -	.mv_nr_irqs		= 80, - -	.mv_inb			= sh_edosk7705_inb, -	.mv_outb		= sh_edosk7705_outb, - -	.mv_insb		= sh_edosk7705_insb, -	.mv_outsb		= sh_edosk7705_outsb, - -	.mv_init_irq		= sh_edosk7705_init_irq, -}; diff --git a/arch/sh/boards/mach-microdev/io.c b/arch/sh/boards/mach-microdev/io.c index 2960c659020..acdafb0c640 100644 --- a/arch/sh/boards/mach-microdev/io.c +++ b/arch/sh/boards/mach-microdev/io.c @@ -54,7 +54,7 @@  /*   * map I/O ports to memory-mapped addresses   */ -static unsigned long microdev_isa_port2addr(unsigned long offset) +void __iomem *microdev_ioport_map(unsigned long offset, unsigned int len)  {  	unsigned long result; @@ -72,16 +72,6 @@ static unsigned long microdev_isa_port2addr(unsigned long offset)  			 *	Configuration Registers  			 */  		result = IO_SUPERIO_PHYS + (offset << 1); -#if 0 -	} else if (offset == KBD_DATA_REG || offset == KBD_CNTL_REG || -		   offset == KBD_STATUS_REG) { -			/* -			 *	SMSC FDC37C93xAPM SuperIO chip -			 * -			 *	PS/2 Keyboard + Mouse (ports 0x60 and 0x64). -			 */ -	        result = IO_SUPERIO_PHYS + (offset << 1); -#endif  	} else if (((offset >= IO_IDE1_BASE) &&  		    (offset <  IO_IDE1_BASE + IO_IDE_EXTENT)) ||  		    (offset == IO_IDE1_MISC)) { @@ -131,237 +121,5 @@ static unsigned long microdev_isa_port2addr(unsigned long offset)  		result = PVR;  	} -	return result; -} - -#define PORT2ADDR(x) (microdev_isa_port2addr(x)) - -static inline void delay(void) -{ -#if defined(CONFIG_PCI) -	/* System board present, just make a dummy SRAM access.  (CS0 will be -	   mapped to PCI memory, probably good to avoid it.) */ -	__raw_readw(0xa6800000); -#else -	/* CS0 will be mapped to flash, ROM etc so safe to access it. */ -	__raw_readw(0xa0000000); -#endif -} - -unsigned char microdev_inb(unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) -		return microdev_pci_inb(port); -#endif -	return *(volatile unsigned char*)PORT2ADDR(port); -} - -unsigned short microdev_inw(unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) -		return microdev_pci_inw(port); -#endif -	return *(volatile unsigned short*)PORT2ADDR(port); -} - -unsigned int microdev_inl(unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) -		return microdev_pci_inl(port); -#endif -	return *(volatile unsigned int*)PORT2ADDR(port); -} - -void microdev_outw(unsigned short b, unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) { -		microdev_pci_outw(b, port); -		return; -	} -#endif -	*(volatile unsigned short*)PORT2ADDR(port) = b; -} - -void microdev_outb(unsigned char b, unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) { -		microdev_pci_outb(b, port); -		return; -	} -#endif - -	/* -	 *	There is a board feature with the current SH4-202 MicroDev in -	 *	that the 2 byte enables (nBE0 and nBE1) are tied together (and -	 *	to the Chip Select Line (Ethernet_CS)). Due to this connectivity, -	 *	it is not possible to safely perform 8-bit writes to the -	 *	Ethernet registers, as 16-bits will be consumed from the Data -	 *	lines (corrupting the other byte).  Hence, this function is -	 *	written to implement 16-bit read/modify/write for all byte-wide -	 *	accesses. -	 * -	 *	Note: there is no problem with byte READS (even or odd). -	 * -	 *			Sean McGoogan - 16th June 2003. -	 */ -	if ((port >= IO_LAN91C111_BASE) && -	    (port <  IO_LAN91C111_BASE + IO_LAN91C111_EXTENT)) { -			/* -			 * Then are trying to perform a byte-write to the -			 * LAN91C111.  This needs special care. -			 */ -		if (port % 2 == 1) {	/* is the port odd ? */ -			/* unset bit-0, i.e. make even */ -			const unsigned long evenPort = port-1; -			unsigned short word; - -			/* -			 * do a 16-bit read/write to write to 'port', -			 * preserving even byte. -			 * -			 *	Even addresses are bits 0-7 -			 *	Odd  addresses are bits 8-15 -			 */ -			word = microdev_inw(evenPort); -			word = (word & 0xffu) | (b << 8); -			microdev_outw(word, evenPort); -		} else { -			/* else, we are trying to do an even byte write */ -			unsigned short word; - -			/* -			 * do a 16-bit read/write to write to 'port', -			 * preserving odd byte. -			 * -			 *	Even addresses are bits 0-7 -			 *	Odd  addresses are bits 8-15 -			 */ -			word = microdev_inw(port); -			word = (word & 0xff00u) | (b); -			microdev_outw(word, port); -		} -	} else { -		*(volatile unsigned char*)PORT2ADDR(port) = b; -	} -} - -void microdev_outl(unsigned int b, unsigned long port) -{ -#ifdef CONFIG_PCI -	if (port >= PCIBIOS_MIN_IO) { -		microdev_pci_outl(b, port); -		return; -	} -#endif -	*(volatile unsigned int*)PORT2ADDR(port) = b; -} - -unsigned char microdev_inb_p(unsigned long port) -{ -	unsigned char v = microdev_inb(port); -	delay(); -	return v; -} - -unsigned short microdev_inw_p(unsigned long port) -{ -	unsigned short v = microdev_inw(port); -	delay(); -	return v; -} - -unsigned int microdev_inl_p(unsigned long port) -{ -	unsigned int v = microdev_inl(port); -	delay(); -	return v; -} - -void microdev_outb_p(unsigned char b, unsigned long port) -{ -	microdev_outb(b, port); -	delay(); -} - -void microdev_outw_p(unsigned short b, unsigned long port) -{ -	microdev_outw(b, port); -	delay(); -} - -void microdev_outl_p(unsigned int b, unsigned long port) -{ -	microdev_outl(b, port); -	delay(); -} - -void microdev_insb(unsigned long port, void *buffer, unsigned long count) -{ -	volatile unsigned char *port_addr; -	unsigned char *buf = buffer; - -	port_addr = (volatile unsigned char *)PORT2ADDR(port); - -	while (count--) -		*buf++ = *port_addr; -} - -void microdev_insw(unsigned long port, void *buffer, unsigned long count) -{ -	volatile unsigned short *port_addr; -	unsigned short *buf = buffer; - -	port_addr = (volatile unsigned short *)PORT2ADDR(port); - -	while (count--) -		*buf++ = *port_addr; -} - -void microdev_insl(unsigned long port, void *buffer, unsigned long count) -{ -	volatile unsigned long *port_addr; -	unsigned int *buf = buffer; - -	port_addr = (volatile unsigned long *)PORT2ADDR(port); - -	while (count--) -		*buf++ = *port_addr; -} - -void microdev_outsb(unsigned long port, const void *buffer, unsigned long count) -{ -	volatile unsigned char *port_addr; -	const unsigned char *buf = buffer; - -	port_addr = (volatile unsigned char *)PORT2ADDR(port); - -	while (count--) -		*port_addr = *buf++; -} - -void microdev_outsw(unsigned long port, const void *buffer, unsigned long count) -{ -	volatile unsigned short *port_addr; -	const unsigned short *buf = buffer; - -	port_addr = (volatile unsigned short *)PORT2ADDR(port); - -	while (count--) -		*port_addr = *buf++; -} - -void microdev_outsl(unsigned long port, const void *buffer, unsigned long count) -{ -	volatile unsigned long *port_addr; -	const unsigned int *buf = buffer; - -	port_addr = (volatile unsigned long *)PORT2ADDR(port); - -	while (count--) -		*port_addr = *buf++; +	return (void __iomem *)result;  } diff --git a/arch/sh/boards/mach-microdev/setup.c b/arch/sh/boards/mach-microdev/setup.c index d1df2a4fb9b..d8a747291e0 100644 --- a/arch/sh/boards/mach-microdev/setup.c +++ b/arch/sh/boards/mach-microdev/setup.c @@ -195,27 +195,6 @@ device_initcall(microdev_devices_setup);  static struct sh_machine_vector mv_sh4202_microdev __initmv = {  	.mv_name		= "SH4-202 MicroDev",  	.mv_nr_irqs		= 72, - -	.mv_inb			= microdev_inb, -	.mv_inw			= microdev_inw, -	.mv_inl			= microdev_inl, -	.mv_outb		= microdev_outb, -	.mv_outw		= microdev_outw, -	.mv_outl		= microdev_outl, - -	.mv_inb_p		= microdev_inb_p, -	.mv_inw_p		= microdev_inw_p, -	.mv_inl_p		= microdev_inl_p, -	.mv_outb_p		= microdev_outb_p, -	.mv_outw_p		= microdev_outw_p, -	.mv_outl_p		= microdev_outl_p, - -	.mv_insb		= microdev_insb, -	.mv_insw		= microdev_insw, -	.mv_insl		= microdev_insl, -	.mv_outsb		= microdev_outsb, -	.mv_outsw		= microdev_outsw, -	.mv_outsl		= microdev_outsl, - +	.mv_ioport_map		= microdev_ioport_map,  	.mv_init_irq		= init_microdev_irq,  }; diff --git a/arch/sh/boards/mach-se/7206/Makefile b/arch/sh/boards/mach-se/7206/Makefile index 63e7ed699f3..5c9eaa0535b 100644 --- a/arch/sh/boards/mach-se/7206/Makefile +++ b/arch/sh/boards/mach-se/7206/Makefile @@ -2,4 +2,4 @@  # Makefile for the 7206 SolutionEngine specific parts of the kernel  # -obj-y	 := setup.o io.o irq.o +obj-y	 := setup.o irq.o diff --git a/arch/sh/boards/mach-se/7206/io.c b/arch/sh/boards/mach-se/7206/io.c deleted file mode 100644 index adadc77532e..00000000000 --- a/arch/sh/boards/mach-se/7206/io.c +++ /dev/null @@ -1,104 +0,0 @@ -/* $Id: io.c,v 1.5 2004/02/22 23:08:43 kkojima Exp $ - * - * linux/arch/sh/boards/se/7206/io.c - * - * Copyright (C) 2006 Yoshinori Sato - * - * I/O routine for Hitachi 7206 SolutionEngine. - * - */ - -#include <linux/kernel.h> -#include <linux/types.h> -#include <asm/io.h> -#include <mach-se/mach/se7206.h> - - -static inline void delay(void) -{ -	__raw_readw(0x20000000);  /* P2 ROM Area */ -} - -/* MS7750 requires special versions of in*, out* routines, since -   PC-like io ports are located at upper half byte of 16-bit word which -   can be accessed only with 16-bit wide.  */ - -static inline volatile __u16 * -port2adr(unsigned int port) -{ -	if (port >= 0x2000 && port < 0x2020) -		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); -	else if (port >= 0x300 && port < 0x310) -		return (volatile __u16 *) (PA_SMSC + (port - 0x300)); - -	return (volatile __u16 *)port; -} - -unsigned char se7206_inb(unsigned long port) -{ -	return (*port2adr(port)) & 0xff; -} - -unsigned char se7206_inb_p(unsigned long port) -{ -	unsigned long v; - -	v = (*port2adr(port)) & 0xff; -	delay(); -	return v; -} - -unsigned short se7206_inw(unsigned long port) -{ -	return *port2adr(port); -} - -void se7206_outb(unsigned char value, unsigned long port) -{ -	*(port2adr(port)) = value; -} - -void se7206_outb_p(unsigned char value, unsigned long port) -{ -	*(port2adr(port)) = value; -	delay(); -} - -void se7206_outw(unsigned short value, unsigned long port) -{ -	*port2adr(port) = value; -} - -void se7206_insb(unsigned long port, void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	__u8 *ap = addr; - -	while (count--) -		*ap++ = *p; -} - -void se7206_insw(unsigned long port, void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	__u16 *ap = addr; -	while (count--) -		*ap++ = *p; -} - -void se7206_outsb(unsigned long port, const void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	const __u8 *ap = addr; - -	while (count--) -		*p = *ap++; -} - -void se7206_outsw(unsigned long port, const void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	const __u16 *ap = addr; -	while (count--) -		*p = *ap++; -} diff --git a/arch/sh/boards/mach-se/7206/irq.c b/arch/sh/boards/mach-se/7206/irq.c index 883b21eacaa..d961949600f 100644 --- a/arch/sh/boards/mach-se/7206/irq.c +++ b/arch/sh/boards/mach-se/7206/irq.c @@ -139,11 +139,13 @@ void __init init_se7206_IRQ(void)  	make_se7206_irq(IRQ0_IRQ); /* SMC91C111 */  	make_se7206_irq(IRQ1_IRQ); /* ATA */  	make_se7206_irq(IRQ3_IRQ); /* SLOT / PCM */ -	__raw_writew(inw(INTC_ICR1) | 0x000b ,INTC_ICR1 ) ; /* ICR1 */ + +	__raw_writew(__raw_readw(INTC_ICR1) | 0x000b, INTC_ICR); /* ICR1 */  	/* FPGA System register setup*/  	__raw_writew(0x0000,INTSTS0); /* Clear INTSTS0 */  	__raw_writew(0x0000,INTSTS1); /* Clear INTSTS1 */ +  	/* IRQ0=LAN, IRQ1=ATA, IRQ3=SLT,PCM */  	__raw_writew(0x0001,INTSEL);  } diff --git a/arch/sh/boards/mach-se/7206/setup.c b/arch/sh/boards/mach-se/7206/setup.c index 8f5c65d43d1..7f4871c71a0 100644 --- a/arch/sh/boards/mach-se/7206/setup.c +++ b/arch/sh/boards/mach-se/7206/setup.c @@ -86,20 +86,5 @@ __initcall(se7206_devices_setup);  static struct sh_machine_vector mv_se __initmv = {  	.mv_name		= "SolutionEngine",  	.mv_nr_irqs		= 256, -	.mv_inb			= se7206_inb, -	.mv_inw			= se7206_inw, -	.mv_outb		= se7206_outb, -	.mv_outw		= se7206_outw, - -	.mv_inb_p		= se7206_inb_p, -	.mv_inw_p		= se7206_inw, -	.mv_outb_p		= se7206_outb_p, -	.mv_outw_p		= se7206_outw, - -	.mv_insb		= se7206_insb, -	.mv_insw		= se7206_insw, -	.mv_outsb		= se7206_outsb, -	.mv_outsw		= se7206_outsw, -  	.mv_init_irq		= init_se7206_IRQ,  }; diff --git a/arch/sh/boards/mach-se/770x/Makefile b/arch/sh/boards/mach-se/770x/Makefile index 8e624b06d5e..43ea14feef5 100644 --- a/arch/sh/boards/mach-se/770x/Makefile +++ b/arch/sh/boards/mach-se/770x/Makefile @@ -2,4 +2,4 @@  # Makefile for the 770x SolutionEngine specific parts of the kernel  # -obj-y	 := setup.o io.o irq.o +obj-y	 := setup.o irq.o diff --git a/arch/sh/boards/mach-se/770x/io.c b/arch/sh/boards/mach-se/770x/io.c deleted file mode 100644 index 28833c8786e..00000000000 --- a/arch/sh/boards/mach-se/770x/io.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2000  Kazumoto Kojima - * - * I/O routine for Hitachi SolutionEngine. - */ -#include <linux/kernel.h> -#include <linux/types.h> -#include <asm/io.h> -#include <mach-se/mach/se.h> - -/* MS7750 requires special versions of in*, out* routines, since -   PC-like io ports are located at upper half byte of 16-bit word which -   can be accessed only with 16-bit wide.  */ - -static inline volatile __u16 * -port2adr(unsigned int port) -{ -	if (port & 0xff000000) -		return ( volatile __u16 *) port; -	if (port >= 0x2000) -		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); -	else if (port >= 0x1000) -		return (volatile __u16 *) (PA_83902 + (port << 1)); -	else -		return (volatile __u16 *) (PA_SUPERIO + (port << 1)); -} - -static inline int -shifted_port(unsigned long port) -{ -	/* For IDE registers, value is not shifted */ -	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) -		return 0; -	else -		return 1; -} - -unsigned char se_inb(unsigned long port) -{ -	if (shifted_port(port)) -		return (*port2adr(port) >> 8); -	else -		return (*port2adr(port))&0xff; -} - -unsigned char se_inb_p(unsigned long port) -{ -	unsigned long v; - -	if (shifted_port(port)) -		v = (*port2adr(port) >> 8); -	else -		v = (*port2adr(port))&0xff; -	ctrl_delay(); -	return v; -} - -unsigned short se_inw(unsigned long port) -{ -	if (port >= 0x2000) -		return *port2adr(port); -	else -		maybebadio(port); -	return 0; -} - -unsigned int se_inl(unsigned long port) -{ -	maybebadio(port); -	return 0; -} - -void se_outb(unsigned char value, unsigned long port) -{ -	if (shifted_port(port)) -		*(port2adr(port)) = value << 8; -	else -		*(port2adr(port)) = value; -} - -void se_outb_p(unsigned char value, unsigned long port) -{ -	if (shifted_port(port)) -		*(port2adr(port)) = value << 8; -	else -		*(port2adr(port)) = value; -	ctrl_delay(); -} - -void se_outw(unsigned short value, unsigned long port) -{ -	if (port >= 0x2000) -		*port2adr(port) = value; -	else -		maybebadio(port); -} - -void se_outl(unsigned int value, unsigned long port) -{ -	maybebadio(port); -} - -void se_insb(unsigned long port, void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	__u8 *ap = addr; - -	if (shifted_port(port)) { -		while (count--) -			*ap++ = *p >> 8; -	} else { -		while (count--) -			*ap++ = *p; -	} -} - -void se_insw(unsigned long port, void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	__u16 *ap = addr; -	while (count--) -		*ap++ = *p; -} - -void se_insl(unsigned long port, void *addr, unsigned long count) -{ -	maybebadio(port); -} - -void se_outsb(unsigned long port, const void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	const __u8 *ap = addr; - -	if (shifted_port(port)) { -		while (count--) -			*p = *ap++ << 8; -	} else { -		while (count--) -			*p = *ap++; -	} -} - -void se_outsw(unsigned long port, const void *addr, unsigned long count) -{ -	volatile __u16 *p = port2adr(port); -	const __u16 *ap = addr; - -	while (count--) -		*p = *ap++; -} - -void se_outsl(unsigned long port, const void *addr, unsigned long count) -{ -	maybebadio(port); -} diff --git a/arch/sh/boards/mach-se/770x/setup.c b/arch/sh/boards/mach-se/770x/setup.c index 66d39d1b090..31330c65c0c 100644 --- a/arch/sh/boards/mach-se/770x/setup.c +++ b/arch/sh/boards/mach-se/770x/setup.c @@ -195,27 +195,5 @@ static struct sh_machine_vector mv_se __initmv = {  #elif defined(CONFIG_CPU_SUBTYPE_SH7710) || defined(CONFIG_CPU_SUBTYPE_SH7712)  	.mv_nr_irqs             = 104,  #endif - -	.mv_inb			= se_inb, -	.mv_inw			= se_inw, -	.mv_inl			= se_inl, -	.mv_outb		= se_outb, -	.mv_outw		= se_outw, -	.mv_outl		= se_outl, - -	.mv_inb_p		= se_inb_p, -	.mv_inw_p		= se_inw, -	.mv_inl_p		= se_inl, -	.mv_outb_p		= se_outb_p, -	.mv_outw_p		= se_outw, -	.mv_outl_p		= se_outl, - -	.mv_insb		= se_insb, -	.mv_insw		= se_insw, -	.mv_insl		= se_insl, -	.mv_outsb		= se_outsb, -	.mv_outsw		= se_outsw, -	.mv_outsl		= se_outsl, -  	.mv_init_irq		= init_se_IRQ,  }; diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index c31d228fdfc..527a0cd956b 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c @@ -283,31 +283,6 @@ static struct platform_device ceu1_device = {  };  /* FSI */ -/* - * FSI-A use external clock which came from ak464x. - * So, we should change parent of fsi - */ -#define FCLKACR		0xa4150008 -static void fsimck_init(struct clk *clk) -{ -	u32 status = __raw_readl(clk->enable_reg); - -	/* use external clock */ -	status &= ~0x000000ff; -	status |= 0x00000080; -	__raw_writel(status, clk->enable_reg); -} - -static struct clk_ops fsimck_clk_ops = { -	.init = fsimck_init, -}; - -static struct clk fsimcka_clk = { -	.ops		= &fsimck_clk_ops, -	.enable_reg	= (void __iomem *)FCLKACR, -	.rate		= 0, /* unknown */ -}; -  /* change J20, J21, J22 pin to 1-2 connection to use slave mode */  static struct sh_fsi_platform_info fsi_info = {  	.porta_flags = SH_FSI_BRS_INV | @@ -852,37 +827,29 @@ static int __init devices_setup(void)  	gpio_request(GPIO_FN_KEYOUT0,     NULL);  	/* enable FSI */ -	gpio_request(GPIO_FN_FSIMCKB,    NULL);  	gpio_request(GPIO_FN_FSIMCKA,    NULL); +	gpio_request(GPIO_FN_FSIIASD,    NULL);  	gpio_request(GPIO_FN_FSIOASD,    NULL);  	gpio_request(GPIO_FN_FSIIABCK,   NULL);  	gpio_request(GPIO_FN_FSIIALRCK,  NULL);  	gpio_request(GPIO_FN_FSIOABCK,   NULL);  	gpio_request(GPIO_FN_FSIOALRCK,  NULL);  	gpio_request(GPIO_FN_CLKAUDIOAO, NULL); -	gpio_request(GPIO_FN_FSIIBSD,    NULL); -	gpio_request(GPIO_FN_FSIOBSD,    NULL); -	gpio_request(GPIO_FN_FSIIBBCK,   NULL); -	gpio_request(GPIO_FN_FSIIBLRCK,  NULL); -	gpio_request(GPIO_FN_FSIOBBCK,   NULL); -	gpio_request(GPIO_FN_FSIOBLRCK,  NULL); -	gpio_request(GPIO_FN_CLKAUDIOBO, NULL); -	gpio_request(GPIO_FN_FSIIASD,    NULL);  	/* set SPU2 clock to 83.4 MHz */  	clk = clk_get(NULL, "spu_clk"); -	if (clk) { +	if (!IS_ERR(clk)) {  		clk_set_rate(clk, clk_round_rate(clk, 83333333));  		clk_put(clk);  	}  	/* change parent of FSI A */  	clk = clk_get(NULL, "fsia_clk"); -	if (clk) { -		clk_register(&fsimcka_clk); -		clk_set_parent(clk, &fsimcka_clk); -		clk_set_rate(clk, 11000); -		clk_set_rate(&fsimcka_clk, 11000); +	if (!IS_ERR(clk)) { +		/* 48kHz dummy clock was used to make sure 1/1 divide */ +		clk_set_rate(&sh7724_fsimcka_clk, 48000); +		clk_set_parent(clk, &sh7724_fsimcka_clk); +		clk_set_rate(clk, 48000);  		clk_put(clk);  	} diff --git a/arch/sh/boards/mach-se/7751/Makefile b/arch/sh/boards/mach-se/7751/Makefile index e6f4341bfe6..a338fd9d503 100644 --- a/arch/sh/boards/mach-se/7751/Makefile +++ b/arch/sh/boards/mach-se/7751/Makefile @@ -2,4 +2,4 @@  # Makefile for the 7751 SolutionEngine specific parts of the kernel  # -obj-y	 := setup.o io.o irq.o +obj-y	 := setup.o irq.o diff --git a/arch/sh/boards/mach-se/7751/io.c b/arch/sh/boards/mach-se/7751/io.c deleted file mode 100644 index 6e75bd4459e..00000000000 --- a/arch/sh/boards/mach-se/7751/io.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2001  Ian da Silva, Jeremy Siegel - * Based largely on io_se.c. - * - * I/O routine for Hitachi 7751 SolutionEngine. - * - * Initial version only to support LAN access; some - * placeholder code from io_se.c left in with the - * expectation of later SuperIO and PCMCIA access. - */ -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/pci.h> -#include <asm/io.h> -#include <mach-se/mach/se7751.h> -#include <asm/addrspace.h> - -static inline volatile u16 *port2adr(unsigned int port) -{ -	if (port >= 0x2000) -		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); -	maybebadio((unsigned long)port); -	return (volatile __u16*)port; -} - -/* - * General outline: remap really low stuff [eventually] to SuperIO, - * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) - * is mapped through the PCI IO window.  Stuff with high bits (PXSEG) - * should be way beyond the window, and is used  w/o translation for - * compatibility. - */ -unsigned char sh7751se_inb(unsigned long port) -{ -	if (PXSEG(port)) -		return *(volatile unsigned char *)port; -	else -		return (*port2adr(port)) & 0xff; -} - -unsigned char sh7751se_inb_p(unsigned long port) -{ -	unsigned char v; - -        if (PXSEG(port)) -                v = *(volatile unsigned char *)port; -	else -		v = (*port2adr(port)) & 0xff; -	ctrl_delay(); -	return v; -} - -unsigned short sh7751se_inw(unsigned long port) -{ -        if (PXSEG(port)) -                return *(volatile unsigned short *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else -		maybebadio(port); -	return 0; -} - -unsigned int sh7751se_inl(unsigned long port) -{ -        if (PXSEG(port)) -                return *(volatile unsigned long *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else -		maybebadio(port); -	return 0; -} - -void sh7751se_outb(unsigned char value, unsigned long port) -{ - -        if (PXSEG(port)) -                *(volatile unsigned char *)port = value; -	else -		*(port2adr(port)) = value; -} - -void sh7751se_outb_p(unsigned char value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned char *)port = value; -	else -		*(port2adr(port)) = value; -	ctrl_delay(); -} - -void sh7751se_outw(unsigned short value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned short *)port = value; -	else if (port >= 0x2000) -		*port2adr(port) = value; -	else -		maybebadio(port); -} - -void sh7751se_outl(unsigned int value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned long *)port = value; -	else -		maybebadio(port); -} - -void sh7751se_insl(unsigned long port, void *addr, unsigned long count) -{ -	maybebadio(port); -} - -void sh7751se_outsl(unsigned long port, const void *addr, unsigned long count) -{ -	maybebadio(port); -} diff --git a/arch/sh/boards/mach-se/7751/setup.c b/arch/sh/boards/mach-se/7751/setup.c index 50572512e3e..9fbc51beb18 100644 --- a/arch/sh/boards/mach-se/7751/setup.c +++ b/arch/sh/boards/mach-se/7751/setup.c @@ -56,23 +56,5 @@ __initcall(se7751_devices_setup);  static struct sh_machine_vector mv_7751se __initmv = {  	.mv_name		= "7751 SolutionEngine",  	.mv_nr_irqs		= 72, - -	.mv_inb			= sh7751se_inb, -	.mv_inw			= sh7751se_inw, -	.mv_inl			= sh7751se_inl, -	.mv_outb		= sh7751se_outb, -	.mv_outw		= sh7751se_outw, -	.mv_outl		= sh7751se_outl, - -	.mv_inb_p		= sh7751se_inb_p, -	.mv_inw_p		= sh7751se_inw, -	.mv_inl_p		= sh7751se_inl, -	.mv_outb_p		= sh7751se_outb_p, -	.mv_outw_p		= sh7751se_outw, -	.mv_outl_p		= sh7751se_outl, - -	.mv_insl		= sh7751se_insl, -	.mv_outsl		= sh7751se_outsl, -  	.mv_init_irq		= init_7751se_IRQ,  }; diff --git a/arch/sh/boards/mach-snapgear/Makefile b/arch/sh/boards/mach-snapgear/Makefile deleted file mode 100644 index d2d2f4b6a50..00000000000 --- a/arch/sh/boards/mach-snapgear/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile for the SnapGear specific parts of the kernel -# - -obj-y	 := setup.o io.o diff --git a/arch/sh/boards/mach-snapgear/io.c b/arch/sh/boards/mach-snapgear/io.c deleted file mode 100644 index 476650e42db..00000000000 --- a/arch/sh/boards/mach-snapgear/io.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2002  David McCullough <davidm@snapgear.com> - * Copyright (C) 2001  Ian da Silva, Jeremy Siegel - * Based largely on io_se.c. - * - * I/O routine for Hitachi 7751 SolutionEngine. - * - * Initial version only to support LAN access; some - * placeholder code from io_se.c left in with the - * expectation of later SuperIO and PCMCIA access. - */ -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/pci.h> -#include <asm/io.h> -#include <asm/addrspace.h> - -#ifdef CONFIG_SH_SECUREEDGE5410 -unsigned short secureedge5410_ioport; -#endif - -static inline volatile __u16 *port2adr(unsigned int port) -{ -	maybebadio((unsigned long)port); -	return (volatile __u16*)port; -} - -/* - * General outline: remap really low stuff [eventually] to SuperIO, - * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) - * is mapped through the PCI IO window.  Stuff with high bits (PXSEG) - * should be way beyond the window, and is used  w/o translation for - * compatibility. - */ -unsigned char snapgear_inb(unsigned long port) -{ -	if (PXSEG(port)) -		return *(volatile unsigned char *)port; -	else -		return (*port2adr(port)) & 0xff; -} - -unsigned char snapgear_inb_p(unsigned long port) -{ -	unsigned char v; - -	if (PXSEG(port)) -		v = *(volatile unsigned char *)port; -	else -		v = (*port2adr(port))&0xff; -	ctrl_delay(); -	return v; -} - -unsigned short snapgear_inw(unsigned long port) -{ -	if (PXSEG(port)) -		return *(volatile unsigned short *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else -		maybebadio(port); -	return 0; -} - -unsigned int snapgear_inl(unsigned long port) -{ -	if (PXSEG(port)) -		return *(volatile unsigned long *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else -		maybebadio(port); -	return 0; -} - -void snapgear_outb(unsigned char value, unsigned long port) -{ - -	if (PXSEG(port)) -		*(volatile unsigned char *)port = value; -	else -		*(port2adr(port)) = value; -} - -void snapgear_outb_p(unsigned char value, unsigned long port) -{ -	if (PXSEG(port)) -		*(volatile unsigned char *)port = value; -	else -		*(port2adr(port)) = value; -	ctrl_delay(); -} - -void snapgear_outw(unsigned short value, unsigned long port) -{ -	if (PXSEG(port)) -		*(volatile unsigned short *)port = value; -	else if (port >= 0x2000) -		*port2adr(port) = value; -	else -		maybebadio(port); -} - -void snapgear_outl(unsigned int value, unsigned long port) -{ -	if (PXSEG(port)) -		*(volatile unsigned long *)port = value; -	else -		maybebadio(port); -} - -void snapgear_insl(unsigned long port, void *addr, unsigned long count) -{ -	maybebadio(port); -} - -void snapgear_outsl(unsigned long port, const void *addr, unsigned long count) -{ -	maybebadio(port); -} diff --git a/arch/sh/boards/mach-systemh/Makefile b/arch/sh/boards/mach-systemh/Makefile deleted file mode 100644 index 2cc6a23d9d3..00000000000 --- a/arch/sh/boards/mach-systemh/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# Makefile for the SystemH specific parts of the kernel -# - -obj-y	 := setup.o irq.o io.o - -# XXX: This wants to be consolidated in arch/sh/drivers/pci, and more -# importantly, with the generic sh7751_pcic_init() code. For now, we'll -# just abuse the hell out of kbuild, because we can.. - -obj-$(CONFIG_PCI) += pci.o -pci-y := ../../se/7751/pci.o - diff --git a/arch/sh/boards/mach-systemh/io.c b/arch/sh/boards/mach-systemh/io.c deleted file mode 100644 index 15577ff1f71..00000000000 --- a/arch/sh/boards/mach-systemh/io.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * linux/arch/sh/boards/renesas/systemh/io.c - * - * Copyright (C) 2001  Ian da Silva, Jeremy Siegel - * Based largely on io_se.c. - * - * I/O routine for Hitachi 7751 Systemh. - */ -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/pci.h> -#include <mach/systemh7751.h> -#include <asm/addrspace.h> -#include <asm/io.h> - -#define ETHER_IOMAP(adr) (0xB3000000 + (adr)) /*map to 16bits access area -                                                of smc lan chip*/ -static inline volatile __u16 * -port2adr(unsigned int port) -{ -	if (port >= 0x2000) -		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); -	maybebadio((unsigned long)port); -	return (volatile __u16*)port; -} - -/* - * General outline: remap really low stuff [eventually] to SuperIO, - * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) - * is mapped through the PCI IO window.  Stuff with high bits (PXSEG) - * should be way beyond the window, and is used  w/o translation for - * compatibility. - */ -unsigned char sh7751systemh_inb(unsigned long port) -{ -	if (PXSEG(port)) -		return *(volatile unsigned char *)port; -	else if (port <= 0x3F1) -		return *(volatile unsigned char *)ETHER_IOMAP(port); -	else -		return (*port2adr(port))&0xff; -} - -unsigned char sh7751systemh_inb_p(unsigned long port) -{ -	unsigned char v; - -        if (PXSEG(port)) -                v = *(volatile unsigned char *)port; -	else if (port <= 0x3F1) -		v = *(volatile unsigned char *)ETHER_IOMAP(port); -	else -		v = (*port2adr(port))&0xff; -	ctrl_delay(); -	return v; -} - -unsigned short sh7751systemh_inw(unsigned long port) -{ -        if (PXSEG(port)) -                return *(volatile unsigned short *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else if (port <= 0x3F1) -		return *(volatile unsigned int *)ETHER_IOMAP(port); -	else -		maybebadio(port); -	return 0; -} - -unsigned int sh7751systemh_inl(unsigned long port) -{ -        if (PXSEG(port)) -                return *(volatile unsigned long *)port; -	else if (port >= 0x2000) -		return *port2adr(port); -	else if (port <= 0x3F1) -		return *(volatile unsigned int *)ETHER_IOMAP(port); -	else -		maybebadio(port); -	return 0; -} - -void sh7751systemh_outb(unsigned char value, unsigned long port) -{ - -        if (PXSEG(port)) -                *(volatile unsigned char *)port = value; -	else if (port <= 0x3F1) -		*(volatile unsigned char *)ETHER_IOMAP(port) = value; -	else -		*(port2adr(port)) = value; -} - -void sh7751systemh_outb_p(unsigned char value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned char *)port = value; -	else if (port <= 0x3F1) -		*(volatile unsigned char *)ETHER_IOMAP(port) = value; -	else -		*(port2adr(port)) = value; -	ctrl_delay(); -} - -void sh7751systemh_outw(unsigned short value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned short *)port = value; -	else if (port >= 0x2000) -		*port2adr(port) = value; -	else if (port <= 0x3F1) -		*(volatile unsigned short *)ETHER_IOMAP(port) = value; -	else -		maybebadio(port); -} - -void sh7751systemh_outl(unsigned int value, unsigned long port) -{ -        if (PXSEG(port)) -                *(volatile unsigned long *)port = value; -	else -		maybebadio(port); -} - -void sh7751systemh_insb(unsigned long port, void *addr, unsigned long count) -{ -	unsigned char *p = addr; -	while (count--) *p++ = sh7751systemh_inb(port); -} - -void sh7751systemh_insw(unsigned long port, void *addr, unsigned long count) -{ -	unsigned short *p = addr; -	while (count--) *p++ = sh7751systemh_inw(port); -} - -void sh7751systemh_insl(unsigned long port, void *addr, unsigned long count) -{ -	maybebadio(port); -} - -void sh7751systemh_outsb(unsigned long port, const void *addr, unsigned long count) -{ -	unsigned char *p = (unsigned char*)addr; -	while (count--) sh7751systemh_outb(*p++, port); -} - -void sh7751systemh_outsw(unsigned long port, const void *addr, unsigned long count) -{ -	unsigned short *p = (unsigned short*)addr; -	while (count--) sh7751systemh_outw(*p++, port); -} - -void sh7751systemh_outsl(unsigned long port, const void *addr, unsigned long count) -{ -	maybebadio(port); -} diff --git a/arch/sh/boards/mach-systemh/irq.c b/arch/sh/boards/mach-systemh/irq.c deleted file mode 100644 index e5ee13adeff..00000000000 --- a/arch/sh/boards/mach-systemh/irq.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * linux/arch/sh/boards/renesas/systemh/irq.c - * - * Copyright (C) 2000  Kazumoto Kojima - * - * Hitachi SystemH Support. - * - * Modified for 7751 SystemH by - * Jonathan Short. - */ - -#include <linux/init.h> -#include <linux/irq.h> -#include <linux/interrupt.h> -#include <linux/io.h> - -#include <mach/systemh7751.h> -#include <asm/smc37c93x.h> - -/* address of external interrupt mask register - * address must be set prior to use these (maybe in init_XXX_irq()) - * XXX : is it better to use .config than specifying it in code? */ -static unsigned long *systemh_irq_mask_register = (unsigned long *)0xB3F10004; -static unsigned long *systemh_irq_request_register = (unsigned long *)0xB3F10000; - -static void disable_systemh_irq(struct irq_data *data) -{ -	unsigned long val, mask = 0x01 << 1; - -	/* Clear the "irq"th bit in the mask and set it in the request */ -	val = __raw_readl((unsigned long)systemh_irq_mask_register); -	val &= ~mask; -	__raw_writel(val, (unsigned long)systemh_irq_mask_register); - -	val = __raw_readl((unsigned long)systemh_irq_request_register); -	val |= mask; -	__raw_writel(val, (unsigned long)systemh_irq_request_register); -} - -static void enable_systemh_irq(struct irq_data *data) -{ -	unsigned long val, mask = 0x01 << 1; - -	/* Set "irq"th bit in the mask register */ -	val = __raw_readl((unsigned long)systemh_irq_mask_register); -	val |= mask; -	__raw_writel(val, (unsigned long)systemh_irq_mask_register); -} - -static struct irq_chip systemh_irq_type = { -	.name		= "SystemH Register", -	.irq_unmask	= enable_systemh_irq, -	.irq_mask	= disable_systemh_irq, -}; - -void make_systemh_irq(unsigned int irq) -{ -	disable_irq_nosync(irq); -	set_irq_chip_and_handler(irq, &systemh_irq_type, handle_level_irq); -	disable_systemh_irq(irq_get_irq_data(irq)); -} diff --git a/arch/sh/boards/mach-systemh/setup.c b/arch/sh/boards/mach-systemh/setup.c deleted file mode 100644 index 219fd800a43..00000000000 --- a/arch/sh/boards/mach-systemh/setup.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * linux/arch/sh/boards/renesas/systemh/setup.c - * - * Copyright (C) 2000  Kazumoto Kojima - * Copyright (C) 2003  Paul Mundt - * - * Hitachi SystemH Support. - * - * Modified for 7751 SystemH by Jonathan Short. - * - * Rewritten for 2.6 by Paul Mundt. - * - * 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/init.h> -#include <asm/machvec.h> -#include <mach/systemh7751.h> - -extern void make_systemh_irq(unsigned int irq); - -/* - * Initialize IRQ setting - */ -static void __init sh7751systemh_init_irq(void) -{ -	make_systemh_irq(0xb);	/* Ethernet interrupt */ -} - -static struct sh_machine_vector mv_7751systemh __initmv = { -	.mv_name		= "7751 SystemH", -	.mv_nr_irqs		= 72, - -	.mv_inb			= sh7751systemh_inb, -	.mv_inw			= sh7751systemh_inw, -	.mv_inl			= sh7751systemh_inl, -	.mv_outb		= sh7751systemh_outb, -	.mv_outw		= sh7751systemh_outw, -	.mv_outl		= sh7751systemh_outl, - -	.mv_inb_p		= sh7751systemh_inb_p, -	.mv_inw_p		= sh7751systemh_inw, -	.mv_inl_p		= sh7751systemh_inl, -	.mv_outb_p		= sh7751systemh_outb_p, -	.mv_outw_p		= sh7751systemh_outw, -	.mv_outl_p		= sh7751systemh_outl, - -	.mv_insb		= sh7751systemh_insb, -	.mv_insw		= sh7751systemh_insw, -	.mv_insl		= sh7751systemh_insl, -	.mv_outsb		= sh7751systemh_outsb, -	.mv_outsw		= sh7751systemh_outsw, -	.mv_outsl		= sh7751systemh_outsl, - -	.mv_init_irq		= sh7751systemh_init_irq, -};  |