2010-09-20 13:11:11 +02:00
/***************************************************************************/
/*
2014-08-19 11:55:24 +10:00
* m54xx . c - - platform support for ColdFire 54 xx based boards
2010-09-20 13:11:11 +02:00
*
* Copyright ( C ) 2010 , Philippe De Muyter < phdm @ macqel . be >
*/
/***************************************************************************/
# include <linux/kernel.h>
# include <linux/param.h>
# include <linux/init.h>
# include <linux/interrupt.h>
# include <linux/io.h>
2011-10-14 15:06:22 +10:00
# include <linux/mm.h>
2012-07-13 16:07:15 +10:00
# include <linux/clk.h>
2011-10-14 15:06:22 +10:00
# include <linux/bootmem.h>
# include <asm/pgalloc.h>
2010-09-20 13:11:11 +02:00
# include <asm/machdep.h>
# include <asm/coldfire.h>
2010-11-02 12:05:29 +10:00
# include <asm/m54xxsim.h>
2010-09-20 13:11:11 +02:00
# include <asm/mcfuart.h>
2012-07-13 16:07:15 +10:00
# include <asm/mcfclk.h>
2010-11-02 12:05:29 +10:00
# include <asm/m54xxgpt.h>
2011-10-14 15:06:22 +10:00
# ifdef CONFIG_MMU
# include <asm/mmu_context.h>
# endif
2010-09-20 13:11:11 +02:00
/***************************************************************************/
2012-07-13 16:07:15 +10:00
DEFINE_CLK ( pll , " pll.0 " , MCF_CLK ) ;
DEFINE_CLK ( sys , " sys.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfslt0 , " mcfslt.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfslt1 , " mcfslt.1 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart0 , " mcfuart.0 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart1 , " mcfuart.1 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart2 , " mcfuart.2 " , MCF_BUSCLK ) ;
DEFINE_CLK ( mcfuart3 , " mcfuart.3 " , MCF_BUSCLK ) ;
2014-06-30 09:53:19 -07:00
DEFINE_CLK ( mcfi2c0 , " imx1-i2c.0 " , MCF_BUSCLK ) ;
2012-07-13 16:07:15 +10:00
struct clk * mcf_clks [ ] = {
& clk_pll ,
& clk_sys ,
& clk_mcfslt0 ,
& clk_mcfslt1 ,
& clk_mcfuart0 ,
& clk_mcfuart1 ,
& clk_mcfuart2 ,
& clk_mcfuart3 ,
2014-06-30 09:53:19 -07:00
& clk_mcfi2c0 ,
2012-07-13 16:07:15 +10:00
NULL
} ;
/***************************************************************************/
2010-11-02 12:05:29 +10:00
static void __init m54xx_uarts_init ( void )
2010-09-20 13:11:11 +02:00
{
2011-12-24 01:08:47 +10:00
/* enable io pins */
2012-09-18 14:34:04 +10:00
__raw_writeb ( MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD , MCFGPIO_PAR_PSC0 ) ;
2011-12-24 01:08:47 +10:00
__raw_writeb ( MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD | MCF_PAR_PSC_RTS_RTS ,
2012-09-18 14:34:04 +10:00
MCFGPIO_PAR_PSC1 ) ;
2011-12-24 01:08:47 +10:00
__raw_writeb ( MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD | MCF_PAR_PSC_RTS_RTS |
2012-09-18 14:34:04 +10:00
MCF_PAR_PSC_CTS_CTS , MCFGPIO_PAR_PSC2 ) ;
__raw_writeb ( MCF_PAR_PSC_TXD | MCF_PAR_PSC_RXD , MCFGPIO_PAR_PSC3 ) ;
2010-09-20 13:11:11 +02:00
}
/***************************************************************************/
2014-06-30 09:53:19 -07:00
static void __init m54xx_i2c_init ( void )
{
# if IS_ENABLED(CONFIG_I2C_IMX)
u32 r ;
/* set the fec/i2c/irq pin assignment register for i2c */
r = readl ( MCF_PAR_FECI2CIRQ ) ;
r | = MCF_PAR_FECI2CIRQ_SDA | MCF_PAR_FECI2CIRQ_SCL ;
writel ( r , MCF_PAR_FECI2CIRQ ) ;
# endif /* IS_ENABLED(CONFIG_I2C_IMX) */
}
/***************************************************************************/
2010-11-02 12:05:29 +10:00
static void mcf54xx_reset ( void )
2010-09-20 13:11:11 +02:00
{
/* disable interrupts and enable the watchdog */
asm ( " movew #0x2700, %sr \n " ) ;
2012-09-18 14:51:46 +10:00
__raw_writel ( 0 , MCF_GPT_GMS0 ) ;
__raw_writel ( MCF_GPT_GCIR_CNT ( 1 ) , MCF_GPT_GCIR0 ) ;
2010-09-20 13:11:11 +02:00
__raw_writel ( MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE | MCF_GPT_GMS_TMS ( 4 ) ,
2012-09-18 14:51:46 +10:00
MCF_GPT_GMS0 ) ;
2010-09-20 13:11:11 +02:00
}
/***************************************************************************/
void __init config_BSP ( char * commandp , int size )
{
2011-10-14 15:06:22 +10:00
# ifdef CONFIG_MMU
2016-08-26 14:24:27 +10:00
cf_bootmem_alloc ( ) ;
2011-10-14 15:06:22 +10:00
mmu_context_init ( ) ;
# endif
2010-11-02 12:05:29 +10:00
mach_reset = mcf54xx_reset ;
2012-01-23 15:34:58 +10:00
mach_sched_init = hw_timer_init ;
2010-11-02 12:05:29 +10:00
m54xx_uarts_init ( ) ;
2014-06-30 09:53:19 -07:00
m54xx_i2c_init ( ) ;
2010-09-20 13:11:11 +02:00
}
/***************************************************************************/