2010-12-02 06:31:16 +03:00
/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation .
*
* 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 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA .
*
*/
# include <linux/kernel.h>
# include <linux/platform_device.h>
# include <linux/io.h>
# include <linux/irq.h>
2011-02-23 20:37:42 +03:00
# include <linux/clkdev.h>
2010-12-02 06:31:16 +03:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/hardware/gic.h>
# include <mach/board.h>
# include <mach/msm_iomap.h>
2011-01-27 23:12:07 +03:00
# include "devices.h"
2010-12-02 06:31:16 +03:00
static void __init msm8960_map_io ( void )
{
msm_map_msm8960_io ( ) ;
}
static void __init msm8960_init_irq ( void )
{
unsigned int i ;
gic_init ( 0 , GIC_PPI_START , MSM_QGIC_DIST_BASE ,
( void * ) MSM_QGIC_CPU_BASE ) ;
/* Edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */
writel ( 0xFFFFD7FF , MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4 ) ;
2010-12-14 05:12:19 +03:00
if ( machine_is_msm8960_rumi3 ( ) )
writel ( 0x0000FFFF , MSM_QGIC_DIST_BASE + GIC_DIST_ENABLE_SET ) ;
2010-12-02 06:31:16 +03:00
/* FIXME: Not installing AVS_SVICINT and AVS_SVICINTSWDONE yet
* as they are configured as level , which does not play nice with
* handle_percpu_irq .
*/
for ( i = GIC_PPI_START ; i < GIC_SPI_START ; i + + ) {
if ( i ! = AVS_SVICINT & & i ! = AVS_SVICINTSWDONE )
2011-03-24 15:25:22 +03:00
irq_set_handler ( i , handle_percpu_irq ) ;
2010-12-02 06:31:16 +03:00
}
}
2011-01-27 23:12:07 +03:00
static struct platform_device * sim_devices [ ] __initdata = {
& msm8960_device_uart_gsbi2 ,
} ;
static struct platform_device * rumi3_devices [ ] __initdata = {
& msm8960_device_uart_gsbi5 ,
} ;
static void __init msm8960_sim_init ( void )
{
platform_add_devices ( sim_devices , ARRAY_SIZE ( sim_devices ) ) ;
}
static void __init msm8960_rumi3_init ( void )
{
platform_add_devices ( rumi3_devices , ARRAY_SIZE ( rumi3_devices ) ) ;
}
2010-12-02 06:31:16 +03:00
MACHINE_START ( MSM8960_SIM , " QCT MSM8960 SIMULATOR " )
. map_io = msm8960_map_io ,
. init_irq = msm8960_init_irq ,
. timer = & msm_timer ,
2011-01-27 23:12:07 +03:00
. init_machine = msm8960_sim_init ,
2010-12-02 06:31:16 +03:00
MACHINE_END
2010-12-14 05:12:19 +03:00
MACHINE_START ( MSM8960_RUMI3 , " QCT MSM8960 RUMI3 " )
. map_io = msm8960_map_io ,
. init_irq = msm8960_init_irq ,
. timer = & msm_timer ,
2011-01-27 23:12:07 +03:00
. init_machine = msm8960_rumi3_init ,
2010-12-14 05:12:19 +03:00
MACHINE_END