2005-04-17 02:20:36 +04:00
/***************************************************************************/
/*
* linux / arch / m68knommu / platform / 5272 / config . c
*
* Copyright ( C ) 1999 - 2002 , Greg Ungerer ( gerg @ snapgear . com )
* Copyright ( C ) 2001 - 2002 , SnapGear Inc . ( www . snapgear . com )
*/
/***************************************************************************/
# include <linux/kernel.h>
# include <linux/param.h>
# include <linux/init.h>
2008-02-01 10:34:32 +03:00
# include <linux/io.h>
2010-10-12 06:24:49 +04:00
# include <linux/phy.h>
# include <linux/phy_fixed.h>
2005-04-17 02:20:36 +04:00
# include <asm/machdep.h>
# include <asm/coldfire.h>
# include <asm/mcfsim.h>
2008-02-01 10:34:32 +03:00
# include <asm/mcfuart.h>
2005-04-17 02:20:36 +04:00
/***************************************************************************/
/*
* Some platforms need software versions of the GPIO data registers .
*/
unsigned short ppdata ;
unsigned char ledbank = 0xff ;
/***************************************************************************/
2011-12-23 18:56:52 +04:00
static void __init m5272_uarts_init ( void )
2008-02-01 10:34:32 +03:00
{
u32 v ;
2011-12-23 18:56:52 +04:00
/* Enable the output lines for the serial ports */
2012-09-14 10:36:08 +04:00
v = readl ( MCFSIM_PBCNT ) ;
2011-12-23 18:56:52 +04:00
v = ( v & ~ 0x000000ff ) | 0x00000055 ;
2012-09-14 10:36:08 +04:00
writel ( v , MCFSIM_PBCNT ) ;
2008-02-01 10:34:32 +03:00
2012-09-14 10:36:08 +04:00
v = readl ( MCFSIM_PDCNT ) ;
2011-12-23 18:56:52 +04:00
v = ( v & ~ 0x000003fc ) | 0x000002a8 ;
2012-09-14 10:36:08 +04:00
writel ( v , MCFSIM_PDCNT ) ;
2008-02-01 10:34:32 +03:00
}
2005-04-17 02:20:36 +04:00
/***************************************************************************/
2009-04-30 17:32:52 +04:00
static void m5272_cpu_reset ( void )
{
local_irq_disable ( ) ;
/* Set watchdog to reset, and enabled */
2012-07-15 16:01:08 +04:00
__raw_writew ( 0 , MCFSIM_WIRR ) ;
__raw_writew ( 1 , MCFSIM_WRRR ) ;
__raw_writew ( 0 , MCFSIM_WCR ) ;
2009-04-30 17:32:52 +04:00
for ( ; ; )
/* wait for watchdog to timeout */ ;
}
/***************************************************************************/
2008-02-01 10:34:32 +03:00
void __init config_BSP ( char * commandp , int size )
2005-04-17 02:20:36 +04:00
{
2005-09-09 03:32:14 +04:00
# if defined (CONFIG_MOD5272)
2005-04-17 02:20:36 +04:00
/* Set base of device vectors to be 64 */
2012-09-14 10:25:12 +04:00
writeb ( 0x40 , MCFSIM_PIVR ) ;
2005-04-17 02:20:36 +04:00
# endif
2007-07-25 16:07:20 +04:00
# if defined(CONFIG_NETtel) || defined(CONFIG_SCALES)
2005-04-17 02:20:36 +04:00
/* Copy command line from FLASH to local buffer... */
memcpy ( commandp , ( char * ) 0xf0004000 , size ) ;
commandp [ size - 1 ] = 0 ;
# elif defined(CONFIG_CANCam)
/* Copy command line from FLASH to local buffer... */
memcpy ( commandp , ( char * ) 0xf0010000 , size ) ;
commandp [ size - 1 ] = 0 ;
# endif
2009-04-30 17:32:52 +04:00
mach_reset = m5272_cpu_reset ;
2012-01-23 09:34:58 +04:00
mach_sched_init = hw_timer_init ;
2005-04-17 02:20:36 +04:00
}
/***************************************************************************/
2008-02-01 10:34:32 +03:00
2010-10-12 06:24:49 +04:00
/*
* Some 5272 based boards have the FEC ethernet diectly connected to
* an ethernet switch . In this case we need to use the fixed phy type ,
* and we need to declare it early in boot .
*/
static struct fixed_phy_status nettel_fixed_phy_status __initdata = {
. link = 1 ,
. speed = 100 ,
. duplex = 0 ,
} ;
/***************************************************************************/
2008-02-01 10:34:32 +03:00
static int __init init_BSP ( void )
{
m5272_uarts_init ( ) ;
2010-10-12 06:24:49 +04:00
fixed_phy_add ( PHY_POLL , 0 , & nettel_fixed_phy_status ) ;
2008-02-01 10:34:32 +03:00
return 0 ;
}
arch_initcall ( init_BSP ) ;
/***************************************************************************/