2005-04-16 15:20:36 -07:00
/*
* linux / arch / arm / mach - iop3xx / iop321 - setup . c
*
* Author : Nicolas Pitre < nico @ cam . org >
* Copyright ( C ) 2001 MontaVista Software , Inc .
* Copyright ( C ) 2004 Intel Corporation .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
*/
# include <linux/mm.h>
# include <linux/init.h>
# include <linux/config.h>
# include <linux/init.h>
# include <linux/major.h>
# include <linux/fs.h>
2005-10-29 19:07:23 +01:00
# include <linux/platform_device.h>
2005-04-16 15:20:36 -07:00
# include <linux/serial.h>
# include <linux/tty.h>
# include <linux/serial_core.h>
# include <asm/io.h>
# include <asm/pgtable.h>
# include <asm/page.h>
# include <asm/mach/map.h>
# include <asm/setup.h>
# include <asm/system.h>
# include <asm/memory.h>
# include <asm/hardware.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# define IOP321_UART_XTAL 1843200
/*
* Standard IO mapping for all IOP321 based systems
*/
static struct map_desc iop321_std_desc [ ] __initdata = {
2005-10-28 15:18:57 +01:00
{ /* mem mapped registers */
. virtual = IOP321_VIRT_MEM_BASE ,
. pfn = __phys_to_pfn ( IOP321_PHYS_MEM_BASE ) ,
. length = 0x00002000 ,
. type = MT_DEVICE
} , { /* PCI IO space */
. virtual = IOP321_PCI_LOWER_IO_VA ,
. pfn = __phys_to_pfn ( IOP321_PCI_LOWER_IO_PA ) ,
. length = IOP321_PCI_IO_WINDOW_SIZE ,
. type = MT_DEVICE
}
2005-04-16 15:20:36 -07:00
} ;
# ifdef CONFIG_ARCH_IQ80321
# define UARTBASE IQ80321_UART
# define IRQ_UART IRQ_IQ80321_UART
# endif
# ifdef CONFIG_ARCH_IQ31244
# define UARTBASE IQ31244_UART
# define IRQ_UART IRQ_IQ31244_UART
# endif
static struct uart_port iop321_serial_ports [ ] = {
{
. membase = ( char * ) ( UARTBASE ) ,
. mapbase = ( UARTBASE ) ,
. irq = IRQ_UART ,
. flags = UPF_SKIP_TEST ,
. iotype = UPIO_MEM ,
. regshift = 0 ,
. uartclk = IOP321_UART_XTAL ,
. line = 0 ,
. type = PORT_16550A ,
. fifosize = 16
}
} ;
static struct resource iop32x_i2c_0_resources [ ] = {
[ 0 ] = {
. start = 0xfffff680 ,
. end = 0xfffff698 ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_IOP321_I2C_0 ,
. end = IRQ_IOP321_I2C_0 ,
. flags = IORESOURCE_IRQ
}
} ;
static struct resource iop32x_i2c_1_resources [ ] = {
[ 0 ] = {
. start = 0xfffff6a0 ,
. end = 0xfffff6b8 ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_IOP321_I2C_1 ,
. end = IRQ_IOP321_I2C_1 ,
. flags = IORESOURCE_IRQ
}
} ;
static struct platform_device iop32x_i2c_0_controller = {
. name = " IOP3xx-I2C " ,
. id = 0 ,
. num_resources = 2 ,
. resource = iop32x_i2c_0_resources
} ;
static struct platform_device iop32x_i2c_1_controller = {
. name = " IOP3xx-I2C " ,
. id = 1 ,
. num_resources = 2 ,
. resource = iop32x_i2c_1_resources
} ;
static struct platform_device * iop32x_devices [ ] __initdata = {
& iop32x_i2c_0_controller ,
& iop32x_i2c_1_controller
} ;
void __init iop32x_init ( void )
{
if ( iop_is_321 ( ) )
{
platform_add_devices ( iop32x_devices ,
ARRAY_SIZE ( iop32x_devices ) ) ;
}
}
void __init iop321_map_io ( void )
{
iotable_init ( iop321_std_desc , ARRAY_SIZE ( iop321_std_desc ) ) ;
early_serial_setup ( & iop321_serial_ports [ 0 ] ) ;
}
# ifdef CONFIG_ARCH_IQ80321
extern void iq80321_map_io ( void ) ;
extern struct sys_timer iop321_timer ;
extern void iop321_init_time ( void ) ;
# endif
# ifdef CONFIG_ARCH_IQ31244
extern void iq31244_map_io ( void ) ;
extern struct sys_timer iop321_timer ;
extern void iop321_init_time ( void ) ;
# endif
# if defined(CONFIG_ARCH_IQ80321)
MACHINE_START ( IQ80321 , " Intel IQ80321 " )
2005-07-03 17:38:58 +01:00
/* Maintainer: Intel Corporation */
. phys_ram = PHYS_OFFSET ,
. phys_io = IQ80321_UART ,
. io_pg_offst = ( ( IQ80321_UART ) > > 18 ) & 0xfffc ,
. map_io = iq80321_map_io ,
. init_irq = iop321_init_irq ,
2005-04-16 15:20:36 -07:00
. timer = & iop321_timer ,
2005-07-03 17:38:58 +01:00
. boot_params = 0xa0000100 ,
. init_machine = iop32x_init ,
2005-04-16 15:20:36 -07:00
MACHINE_END
# elif defined(CONFIG_ARCH_IQ31244)
MACHINE_START ( IQ31244 , " Intel IQ31244 " )
2005-07-03 17:38:58 +01:00
/* Maintainer: Intel Corp. */
. phys_ram = PHYS_OFFSET ,
. phys_io = IQ31244_UART ,
. io_pg_offst = ( ( IQ31244_UART ) > > 18 ) & 0xfffc ,
. map_io = iq31244_map_io ,
. init_irq = iop321_init_irq ,
2005-04-16 15:20:36 -07:00
. timer = & iop321_timer ,
2005-07-03 17:38:58 +01:00
. boot_params = 0xa0000100 ,
. init_machine = iop32x_init ,
2005-04-16 15:20:36 -07:00
MACHINE_END
# else
# error No machine descriptor defined for this IOP3XX implementation
# endif