2005-04-16 15:20:36 -07:00
/***************************************************************************/
/*
2014-08-19 11:55:24 +10:00
* m527x . c - - platform support for ColdFire 527 x based boards
2005-04-16 15:20:36 -07:00
*
2011-03-30 22:57:33 -03:00
* Sub - architcture dependent initialization code for the Freescale
2014-08-19 11:55:24 +10:00
* 5270 / 5271 and 5274 / 5275 CPUs .
2005-04-16 15:20:36 -07:00
*
* Copyright ( C ) 1999 - 2004 , Greg Ungerer ( gerg @ snapgear . com )
* Copyright ( C ) 2001 - 2004 , SnapGear Inc . ( www . snapgear . com )
*/
/***************************************************************************/
# include <linux/kernel.h>
# include <linux/param.h>
# include <linux/init.h>
2008-02-01 17:34:40 +10:00
# include <linux/io.h>
2005-04-16 15:20:36 -07:00
# include <asm/machdep.h>
# include <asm/coldfire.h>
# include <asm/mcfsim.h>
2008-02-01 17:34:40 +10:00
# include <asm/mcfuart.h>
2012-07-13 16:03:52 +10:00
# include <asm/mcfclk.h>
/***************************************************************************/
DEFINE_CLK ( pll , " pll.0 " , MCF_CLK ) ;
DEFINE_CLK ( sys , " sys.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfpit0 , " mcfpit.0 " , MCF_CLK ) ;
DEFINE_CLK ( mcfpit1 , " mcfpit.1 " , MCF_CLK ) ;
DEFINE_CLK ( mcfpit2 , " mcfpit.2 " , MCF_CLK ) ;
DEFINE_CLK ( mcfpit3 , " mcfpit.3 " , MCF_CLK ) ;
DEFINE_CLK ( mcfuart0 , " mcfuart.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart1 , " mcfuart.1 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart2 , " mcfuart.2 " , MCF_BUSCLK ) ;
2014-05-14 10:06:29 -07:00
DEFINE_CLK ( mcfqspi0 , " mcfqspi.0 " , MCF_BUSCLK ) ;
2012-07-13 16:03:52 +10:00
DEFINE_CLK ( fec0 , " fec.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( fec1 , " fec.1 " , MCF_BUSCLK ) ;
struct clk * mcf_clks [ ] = {
& clk_pll ,
& clk_sys ,
& clk_mcfpit0 ,
& clk_mcfpit1 ,
& clk_mcfpit2 ,
& clk_mcfpit3 ,
& clk_mcfuart0 ,
& clk_mcfuart1 ,
& clk_mcfuart2 ,
2014-05-14 10:06:29 -07:00
& clk_mcfqspi0 ,
2012-07-13 16:03:52 +10:00
& clk_fec0 ,
& clk_fec1 ,
NULL
} ;
2005-04-16 15:20:36 -07:00
/***************************************************************************/
2010-01-22 12:43:03 -08:00
static void __init m527x_qspi_init ( void )
{
2014-05-14 10:07:55 -07:00
# if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
2010-01-22 12:43:03 -08:00
# if defined(CONFIG_M5271)
u16 par ;
/* setup QSPS pins for QSPI with gpio CS control */
writeb ( 0x1f , MCFGPIO_PAR_QSPI ) ;
/* and CS2 & CS3 as gpio */
par = readw ( MCFGPIO_PAR_TIMER ) ;
par & = 0x3f3f ;
writew ( par , MCFGPIO_PAR_TIMER ) ;
# elif defined(CONFIG_M5275)
/* setup QSPS pins for QSPI with gpio CS control */
writew ( 0x003e , MCFGPIO_PAR_QSPI ) ;
# endif
2012-05-06 12:22:53 -07:00
# endif /* IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI) */
2014-05-14 10:07:55 -07:00
}
2008-02-01 17:34:40 +10:00
/***************************************************************************/
2011-12-24 00:59:03 +10:00
static void __init m527x_uarts_init ( void )
2008-02-01 17:34:40 +10:00
{
u16 sepmask ;
/*
* External Pin Mask Setting & Enable External Pin for Interface
*/
2012-09-17 12:07:21 +10:00
sepmask = readw ( MCFGPIO_PAR_UART ) ;
2011-12-24 00:59:03 +10:00
sepmask | = UART0_ENABLE_MASK | UART1_ENABLE_MASK | UART2_ENABLE_MASK ;
2012-09-17 12:07:21 +10:00
writew ( sepmask , MCFGPIO_PAR_UART ) ;
2008-02-01 17:34:40 +10:00
}
2005-04-16 15:20:36 -07:00
/***************************************************************************/
2009-02-26 22:40:38 -08:00
static void __init m527x_fec_init ( void )
{
u16 par ;
u8 v ;
/* Set multi-function pins to ethernet mode for fec0 */
2009-04-08 11:51:27 +10:00
# if defined(CONFIG_M5271)
2012-09-17 12:07:21 +10:00
v = readb ( MCFGPIO_PAR_FECI2C ) ;
writeb ( v | 0xf0 , MCFGPIO_PAR_FECI2C ) ;
2009-04-08 11:51:27 +10:00
# else
2012-09-17 12:07:21 +10:00
par = readw ( MCFGPIO_PAR_FECI2C ) ;
writew ( par | 0xf00 , MCFGPIO_PAR_FECI2C ) ;
v = readb ( MCFGPIO_PAR_FEC0HL ) ;
writeb ( v | 0xc0 , MCFGPIO_PAR_FEC0HL ) ;
2009-02-26 22:40:38 -08:00
/* Set multi-function pins to ethernet mode for fec1 */
2012-09-17 12:07:21 +10:00
par = readw ( MCFGPIO_PAR_FECI2C ) ;
writew ( par | 0xa0 , MCFGPIO_PAR_FECI2C ) ;
v = readb ( MCFGPIO_PAR_FEC1HL ) ;
writeb ( v | 0xc0 , MCFGPIO_PAR_FEC1HL ) ;
2009-02-26 22:40:38 -08:00
# endif
}
/***************************************************************************/
2008-02-01 17:34:40 +10:00
void __init config_BSP ( char * commandp , int size )
2005-04-16 15:20:36 -07:00
{
2012-01-23 15:34:58 +10:00
mach_sched_init = hw_timer_init ;
2009-02-26 22:40:38 -08:00
m527x_uarts_init ( ) ;
m527x_fec_init ( ) ;
2010-01-22 12:43:03 -08:00
m527x_qspi_init ( ) ;
2005-04-16 15:20:36 -07:00
}
/***************************************************************************/