2019-05-27 08:55:01 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
2006-01-14 16:57:39 -06:00
/*
* MPC85xx setup and early boot code plus other random bits .
*
* Maintained by Kumar Gala ( see MAINTAINERS for contact information )
*
* Copyright 2005 Freescale Semiconductor Inc .
*/
# include <linux/stddef.h>
# include <linux/kernel.h>
# include <linux/pci.h>
# include <linux/kdev_t.h>
# include <linux/delay.h>
# include <linux/seq_file.h>
2007-10-08 16:08:51 -05:00
# include <linux/of_platform.h>
2006-01-14 16:57:39 -06:00
# include <asm/time.h>
# include <asm/machdep.h>
# include <asm/pci-bridge.h>
# include <asm/mpic.h>
# include <mm/mmu_decl.h>
# include <asm/udbg.h>
# include <sysdev/fsl_soc.h>
2007-07-10 18:47:06 +08:00
# include <sysdev/fsl_pci.h>
2006-01-14 16:57:39 -06:00
2006-09-21 22:31:26 +04:00
# ifdef CONFIG_CPM2
# include <asm/cpm2.h>
# include <sysdev/cpm2_pic.h>
# endif
2011-11-17 21:56:16 +04:00
# include "mpc85xx.h"
2007-02-09 09:30:45 -06:00
static void __init mpc85xx_ads_pic_init ( void )
2006-01-14 16:57:39 -06:00
{
2011-12-22 10:19:14 +00:00
struct mpic * mpic = mpic_alloc ( NULL , 0 , MPIC_BIG_ENDIAN ,
2007-07-03 02:35:35 -05:00
0 , 256 , " OpenPIC " ) ;
2006-08-18 18:03:08 -05:00
BUG_ON ( mpic = = NULL ) ;
mpic_init ( mpic ) ;
2006-09-21 22:31:26 +04:00
2011-11-17 21:56:16 +04:00
mpc85xx_cpm2_pic_init ( ) ;
2006-01-14 16:57:39 -06:00
}
/*
* Setup the architecture
*/
2006-09-21 22:31:26 +04:00
# ifdef CONFIG_CPM2
2007-10-08 16:08:51 -05:00
struct cpm_pin {
int port , pin , flags ;
} ;
2008-01-02 12:50:01 -05:00
static const struct cpm_pin mpc8560_ads_pins [ ] = {
2007-10-08 16:08:51 -05:00
/* SCC1 */
{ 3 , 29 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 3 , 30 , CPM_PIN_OUTPUT | CPM_PIN_SECONDARY } ,
{ 3 , 31 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
/* SCC2 */
2008-06-12 04:30:13 +04:00
{ 2 , 12 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 2 , 13 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
2007-10-08 16:08:51 -05:00
{ 3 , 26 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 3 , 27 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 3 , 28 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
/* FCC2 */
{ 1 , 18 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 19 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 20 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 21 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 22 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 23 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 24 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 25 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 26 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 27 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 28 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 29 , CPM_PIN_OUTPUT | CPM_PIN_SECONDARY } ,
{ 1 , 30 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 31 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 2 , 18 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } , /* CLK14 */
{ 2 , 19 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } , /* CLK13 */
/* FCC3 */
{ 1 , 4 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 5 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 6 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 8 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 9 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 10 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 11 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 12 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 13 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 14 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 15 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
{ 1 , 16 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
{ 1 , 17 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } ,
2008-06-12 04:30:13 +04:00
{ 2 , 16 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } , /* CLK16 */
{ 2 , 17 , CPM_PIN_INPUT | CPM_PIN_PRIMARY } , /* CLK15 */
{ 2 , 27 , CPM_PIN_OUTPUT | CPM_PIN_PRIMARY } ,
2007-10-08 16:08:51 -05:00
} ;
static void __init init_ioports ( void )
2006-09-21 22:31:26 +04:00
{
2007-10-08 16:08:51 -05:00
int i ;
for ( i = 0 ; i < ARRAY_SIZE ( mpc8560_ads_pins ) ; i + + ) {
2008-04-15 23:35:47 -05:00
const struct cpm_pin * pin = & mpc8560_ads_pins [ i ] ;
2007-10-08 16:08:51 -05:00
cpm2_set_pin ( pin - > port , pin - > pin , pin - > flags ) ;
2006-09-21 22:38:05 +04:00
}
2006-09-21 22:31:26 +04:00
2007-10-08 16:08:51 -05:00
cpm2_clk_setup ( CPM_CLK_SCC1 , CPM_BRG1 , CPM_CLK_RX ) ;
cpm2_clk_setup ( CPM_CLK_SCC1 , CPM_BRG1 , CPM_CLK_TX ) ;
cpm2_clk_setup ( CPM_CLK_SCC2 , CPM_BRG2 , CPM_CLK_RX ) ;
cpm2_clk_setup ( CPM_CLK_SCC2 , CPM_BRG2 , CPM_CLK_TX ) ;
cpm2_clk_setup ( CPM_CLK_FCC2 , CPM_CLK13 , CPM_CLK_RX ) ;
cpm2_clk_setup ( CPM_CLK_FCC2 , CPM_CLK14 , CPM_CLK_TX ) ;
cpm2_clk_setup ( CPM_CLK_FCC3 , CPM_CLK15 , CPM_CLK_RX ) ;
cpm2_clk_setup ( CPM_CLK_FCC3 , CPM_CLK16 , CPM_CLK_TX ) ;
2006-09-21 22:31:26 +04:00
}
# endif
2006-02-07 21:29:42 -06:00
static void __init mpc85xx_ads_setup_arch ( void )
2006-01-14 16:57:39 -06:00
{
if ( ppc_md . progress )
ppc_md . progress ( " mpc85xx_ads_setup_arch() " , 0 ) ;
2006-09-21 22:31:26 +04:00
# ifdef CONFIG_CPM2
cpm2_reset ( ) ;
2007-10-08 16:08:51 -05:00
init_ioports ( ) ;
2006-09-21 22:31:26 +04:00
# endif
2012-08-28 15:44:08 +08:00
fsl_pci_assign_primary ( ) ;
2006-01-14 16:57:39 -06:00
}
2007-02-09 09:30:45 -06:00
static void mpc85xx_ads_show_cpuinfo ( struct seq_file * m )
2006-01-14 16:57:39 -06:00
{
uint pvid , svid , phid1 ;
pvid = mfspr ( SPRN_PVR ) ;
svid = mfspr ( SPRN_SVR ) ;
seq_printf ( m , " Vendor \t \t : Freescale Semiconductor \n " ) ;
seq_printf ( m , " PVR \t \t : 0x%x \n " , pvid ) ;
seq_printf ( m , " SVR \t \t : 0x%x \n " , svid ) ;
/* Display cpu Pll setting */
phid1 = mfspr ( SPRN_HID1 ) ;
seq_printf ( m , " PLL setting \t : 0x%x \n " , ( ( phid1 > > 24 ) & 0x3f ) ) ;
}
2012-08-28 15:44:08 +08:00
machine_arch_initcall ( mpc85xx_ads , mpc85xx_common_publish_devices ) ;
2007-10-08 16:08:51 -05:00
2006-03-30 23:39:57 -06:00
/*
* Called very early , device - tree isn ' t unflattened
*/
static int __init mpc85xx_ads_probe ( void )
2006-01-14 16:57:39 -06:00
{
2016-07-05 15:04:05 +10:00
return of_machine_is_compatible ( " MPC85xxADS " ) ;
2006-01-14 16:57:39 -06:00
}
2006-03-30 23:39:57 -06:00
define_machine ( mpc85xx_ads ) {
. name = " MPC85xx ADS " ,
. probe = mpc85xx_ads_probe ,
. setup_arch = mpc85xx_ads_setup_arch ,
. init_IRQ = mpc85xx_ads_pic_init ,
. show_cpuinfo = mpc85xx_ads_show_cpuinfo ,
. get_irq = mpic_get_irq ,
. calibrate_decr = generic_calibrate_decr ,
. progress = udbg_progress ,
} ;