2011-06-20 21:47:27 +04:00
/*
* This file contains common code that is intended to be used across
* boards so that it ' s not replicated .
*
* Copyright ( C ) 2011 Xilinx
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/cpumask.h>
# include <linux/platform_device.h>
# include <linux/clk.h>
2012-11-08 22:04:26 +04:00
# include <linux/clk/zynq.h>
# include <linux/of_address.h>
2011-06-20 21:47:27 +04:00
# include <linux/of_irq.h>
# include <linux/of_platform.h>
2011-07-07 15:35:20 +04:00
# include <linux/of.h>
2011-06-20 21:47:27 +04:00
2011-07-07 15:35:20 +04:00
# include <asm/mach/arch.h>
2011-06-20 21:47:27 +04:00
# include <asm/mach/map.h>
2012-10-31 21:11:59 +04:00
# include <asm/mach/time.h>
2011-07-07 15:35:20 +04:00
# include <asm/mach-types.h>
2011-06-20 21:47:27 +04:00
# include <asm/page.h>
# include <asm/hardware/gic.h>
# include <asm/hardware/cache-l2x0.h>
# include <mach/zynq_soc.h>
# include "common.h"
static struct of_device_id zynq_of_bus_ids [ ] __initdata = {
{ . compatible = " simple-bus " , } ,
{ }
} ;
/**
* xilinx_init_machine ( ) - System specific initialization , intended to be
* called from board specific initialization .
*/
2011-07-07 15:35:20 +04:00
static void __init xilinx_init_machine ( void )
2011-06-20 21:47:27 +04:00
{
/*
* 64 KB way size , 8 - way associativity , parity disabled
*/
2012-10-24 02:34:22 +04:00
l2x0_of_init ( 0x02060000 , 0xF0F0FFFF ) ;
2011-06-20 21:47:27 +04:00
of_platform_bus_probe ( NULL , zynq_of_bus_ids , NULL ) ;
}
2012-10-18 04:46:49 +04:00
static struct of_device_id irq_match [ ] __initdata = {
{ . compatible = " arm,cortex-a9-gic " , . data = gic_of_init , } ,
{ }
} ;
2011-06-20 21:47:27 +04:00
/**
* xilinx_irq_init ( ) - Interrupt controller initialization for the GIC .
*/
2011-07-07 15:35:20 +04:00
static void __init xilinx_irq_init ( void )
2011-06-20 21:47:27 +04:00
{
2012-10-18 04:46:49 +04:00
of_irq_init ( irq_match ) ;
2011-06-20 21:47:27 +04:00
}
/* The minimum devices needed to be mapped before the VM system is up and
* running include the GIC , UART and Timer Counter .
*/
2012-11-19 20:16:01 +04:00
static struct map_desc scu_desc __initdata = {
. virtual = SCU_PERIPH_VIRT ,
. pfn = __phys_to_pfn ( SCU_PERIPH_PHYS ) ,
. length = SCU_PERIPH_SIZE ,
. type = MT_DEVICE ,
2011-06-20 21:47:27 +04:00
} ;
2012-10-31 21:11:59 +04:00
static void __init xilinx_zynq_timer_init ( void )
{
2012-11-08 22:04:26 +04:00
struct device_node * np ;
void __iomem * slcr ;
np = of_find_compatible_node ( NULL , NULL , " xlnx,zynq-slcr " ) ;
slcr = of_iomap ( np , 0 ) ;
WARN_ON ( ! slcr ) ;
xilinx_zynq_clocks_init ( slcr ) ;
2012-10-31 21:11:59 +04:00
xttcpss_timer_init ( ) ;
}
/*
* Instantiate and initialize the system timer structure
*/
static struct sys_timer xttcpss_sys_timer = {
. init = xilinx_zynq_timer_init ,
} ;
2011-06-20 21:47:27 +04:00
/**
* xilinx_map_io ( ) - Create memory mappings needed for early I / O .
*/
2011-07-07 15:35:20 +04:00
static void __init xilinx_map_io ( void )
2011-06-20 21:47:27 +04:00
{
2012-11-19 20:16:01 +04:00
debug_ll_io_init ( ) ;
iotable_init ( & scu_desc , 1 ) ;
2011-06-20 21:47:27 +04:00
}
2011-07-07 15:35:20 +04:00
static const char * xilinx_dt_match [ ] = {
2012-10-31 22:24:48 +04:00
" xlnx,zynq-zc702 " ,
" xlnx,zynq-7000 " ,
2011-07-07 15:35:20 +04:00
NULL
} ;
MACHINE_START ( XILINX_EP107 , " Xilinx Zynq Platform " )
. map_io = xilinx_map_io ,
. init_irq = xilinx_irq_init ,
2011-09-06 13:23:45 +04:00
. handle_irq = gic_handle_irq ,
2011-07-07 15:35:20 +04:00
. init_machine = xilinx_init_machine ,
. timer = & xttcpss_sys_timer ,
. dt_compat = xilinx_dt_match ,
MACHINE_END