2006-12-18 00:10:48 +03:00
/*
* linux / arch / arm / mach - ep93xx / micro9 . c
*
* Copyright ( C ) 2006 Contec Steuerungstechnik & Automation GmbH
2009-10-07 11:36:07 +04:00
* Manfred Gruber < m . gruber @ tirol . com >
* Copyright ( C ) 2009 Contec Steuerungstechnik & Automation GmbH
* Hubert Feurstein < hubert . feurstein @ contec . at >
2006-12-18 00:10:48 +03:00
*
* 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/kernel.h>
2009-07-06 20:39:50 +04:00
# include <linux/init.h>
2006-12-18 00:10:48 +03:00
# include <linux/platform_device.h>
# include <linux/mtd/physmap.h>
2009-11-02 22:13:32 +03:00
# include <linux/io.h>
2006-12-18 00:10:48 +03:00
2008-08-05 19:14:15 +04:00
# include <mach/hardware.h>
2006-12-18 00:10:48 +03:00
# include <asm/mach-types.h>
2009-07-06 20:39:50 +04:00
# include <asm/mach/arch.h>
2006-12-18 00:10:48 +03:00
2009-10-07 11:39:09 +04:00
/*************************************************************************
* Micro9 NOR Flash
*
* Micro9 - High has up to 64 MB of 32 - bit flash on CS1
* Micro9 - Mid has up to 64 MB of either 32 - bit or 16 - bit flash on CS1
tree-wide: Assorted spelling fixes
In particular, several occurances of funny versions of 'success',
'unknown', 'therefore', 'acknowledge', 'argument', 'achieve', 'address',
'beginning', 'desirable', 'separate' and 'necessary' are fixed.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Joe Perches <joe@perches.com>
Cc: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2010-02-03 03:01:28 +03:00
* Micro9 - Lite uses a separate MTD map driver for flash support
2009-10-07 11:41:01 +04:00
* Micro9 - Slim has up to 64 MB of either 32 - bit or 16 - bit flash on CS1
2009-10-07 11:39:09 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static struct physmap_flash_data micro9_flash_data ;
2006-12-18 00:10:48 +03:00
2009-10-07 11:39:09 +04:00
static struct resource micro9_flash_resource = {
2008-12-08 19:57:22 +03:00
. start = EP93XX_CS1_PHYS_BASE ,
. end = EP93XX_CS1_PHYS_BASE + SZ_64M - 1 ,
. flags = IORESOURCE_MEM ,
2006-12-18 00:10:48 +03:00
} ;
2009-10-07 11:39:09 +04:00
static struct platform_device micro9_flash = {
2008-12-08 19:57:22 +03:00
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
2009-10-07 11:39:09 +04:00
. platform_data = & micro9_flash_data ,
2008-12-08 19:57:22 +03:00
} ,
. num_resources = 1 ,
2009-10-07 11:39:09 +04:00
. resource = & micro9_flash_resource ,
2006-12-18 00:10:48 +03:00
} ;
2009-10-07 11:39:09 +04:00
static void __init __micro9_register_flash ( unsigned int width )
{
micro9_flash_data . width = width ;
platform_device_register ( & micro9_flash ) ;
}
static unsigned int __init micro9_detect_bootwidth ( void )
2006-12-18 00:10:48 +03:00
{
2009-10-07 11:39:09 +04:00
u32 v ;
/* Detect the bus width of the external flash memory */
v = __raw_readl ( EP93XX_SYSCON_SYSCFG ) ;
if ( v & EP93XX_SYSCON_SYSCFG_LCSN7 )
return 4 ; /* 32-bit */
else
return 2 ; /* 16-bit */
2006-12-18 00:10:48 +03:00
}
2009-10-07 11:39:09 +04:00
static void __init micro9_register_flash ( void )
{
if ( machine_is_micro9 ( ) )
__micro9_register_flash ( 4 ) ;
2009-10-07 11:41:01 +04:00
else if ( machine_is_micro9m ( ) | | machine_is_micro9s ( ) )
2009-10-07 11:39:09 +04:00
__micro9_register_flash ( micro9_detect_bootwidth ( ) ) ;
}
/*************************************************************************
* Micro9 Ethernet
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static struct ep93xx_eth_data micro9_eth_data = {
. phy_id = 0x1f ,
} ;
static void __init micro9_init_machine ( void )
2006-12-18 00:10:48 +03:00
{
2008-12-08 19:57:22 +03:00
ep93xx_init_devices ( ) ;
2009-10-07 11:39:09 +04:00
ep93xx_register_eth ( & micro9_eth_data , 1 ) ;
micro9_register_flash ( ) ;
2006-12-18 00:10:48 +03:00
}
2009-10-07 11:39:09 +04:00
# ifdef CONFIG_MACH_MICRO9H
MACHINE_START ( MICRO9 , " Contec Micro9-High " )
2009-10-07 11:36:07 +04:00
/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
2008-12-08 19:57:22 +03:00
. phys_io = EP93XX_APB_PHYS_BASE ,
. io_pg_offst = ( ( EP93XX_APB_VIRT_BASE ) > > 18 ) & 0xfffc ,
. boot_params = EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100 ,
. map_io = ep93xx_map_io ,
. init_irq = ep93xx_init_irq ,
. timer = & ep93xx_timer ,
2009-10-07 11:39:09 +04:00
. init_machine = micro9_init_machine ,
2006-12-18 00:10:48 +03:00
MACHINE_END
# endif
# ifdef CONFIG_MACH_MICRO9M
2009-10-07 11:39:09 +04:00
MACHINE_START ( MICRO9M , " Contec Micro9-Mid " )
2009-10-07 11:36:07 +04:00
/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
2008-12-08 19:57:22 +03:00
. phys_io = EP93XX_APB_PHYS_BASE ,
. io_pg_offst = ( ( EP93XX_APB_VIRT_BASE ) > > 18 ) & 0xfffc ,
2009-10-07 11:39:09 +04:00
. boot_params = EP93XX_SDCE3_PHYS_BASE_ASYNC + 0x100 ,
2008-12-08 19:57:22 +03:00
. map_io = ep93xx_map_io ,
. init_irq = ep93xx_init_irq ,
. timer = & ep93xx_timer ,
2009-10-07 11:39:09 +04:00
. init_machine = micro9_init_machine ,
2006-12-18 00:10:48 +03:00
MACHINE_END
# endif
# ifdef CONFIG_MACH_MICRO9L
2009-10-07 11:39:09 +04:00
MACHINE_START ( MICRO9L , " Contec Micro9-Lite " )
2009-10-07 11:36:07 +04:00
/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
2008-12-08 19:57:22 +03:00
. phys_io = EP93XX_APB_PHYS_BASE ,
. io_pg_offst = ( ( EP93XX_APB_VIRT_BASE ) > > 18 ) & 0xfffc ,
. boot_params = EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100 ,
. map_io = ep93xx_map_io ,
. init_irq = ep93xx_init_irq ,
. timer = & ep93xx_timer ,
2009-10-07 11:39:09 +04:00
. init_machine = micro9_init_machine ,
2006-12-18 00:10:48 +03:00
MACHINE_END
# endif
2009-10-07 11:41:01 +04:00
# ifdef CONFIG_MACH_MICRO9S
MACHINE_START ( MICRO9S , " Contec Micro9-Slim " )
/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
. phys_io = EP93XX_APB_PHYS_BASE ,
. io_pg_offst = ( ( EP93XX_APB_VIRT_BASE ) > > 18 ) & 0xfffc ,
. boot_params = EP93XX_SDCE3_PHYS_BASE_ASYNC + 0x100 ,
. map_io = ep93xx_map_io ,
. init_irq = ep93xx_init_irq ,
. timer = & ep93xx_timer ,
. init_machine = micro9_init_machine ,
MACHINE_END
# endif