2010-01-07 23:43:24 +03:00
/* Copyright (c) 2010, 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>
2010-02-11 22:50:40 +03:00
# include <linux/irq.h>
2010-01-07 23:43:24 +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>
static void __init msm8x60_map_io ( void )
{
msm_map_msm8x60_io ( ) ;
}
static void __init msm8x60_init_irq ( void )
{
2010-02-11 22:50:40 +03:00
unsigned int i ;
2010-12-04 19:13:29 +03:00
gic_init ( 0 , GIC_PPI_START , MSM_QGIC_DIST_BASE ,
( void * ) MSM_QGIC_CPU_BASE ) ;
2010-02-11 22:50:40 +03:00
/* Edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */
writel ( 0xFFFFD7FF , MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4 ) ;
/* RUMI does not adhere to GIC spec by enabling STIs by default.
* Enable / clear is supposed to be RO for STIs , but is RW on RUMI .
*/
2010-01-07 23:51:10 +03:00
if ( ! machine_is_msm8x60_sim ( ) )
writel ( 0x0000FFFF , MSM_QGIC_DIST_BASE + GIC_DIST_ENABLE_SET ) ;
2010-02-11 22:50:40 +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-02-11 22:50:40 +03:00
}
2010-01-07 23:43:24 +03:00
}
static void __init msm8x60_init ( void )
{
}
MACHINE_START ( MSM8X60_RUMI3 , " QCT MSM8X60 RUMI3 " )
. map_io = msm8x60_map_io ,
. init_irq = msm8x60_init_irq ,
. init_machine = msm8x60_init ,
. timer = & msm_timer ,
MACHINE_END
2010-03-20 03:00:08 +03:00
MACHINE_START ( MSM8X60_SURF , " QCT MSM8X60 SURF " )
. map_io = msm8x60_map_io ,
. init_irq = msm8x60_init_irq ,
. init_machine = msm8x60_init ,
. timer = & msm_timer ,
MACHINE_END
2010-01-07 23:51:10 +03:00
MACHINE_START ( MSM8X60_SIM , " QCT MSM8X60 SIMULATOR " )
. map_io = msm8x60_map_io ,
. init_irq = msm8x60_init_irq ,
. init_machine = msm8x60_init ,
. timer = & msm_timer ,
MACHINE_END
2010-04-05 09:29:02 +04:00
MACHINE_START ( MSM8X60_FFA , " QCT MSM8X60 FFA " )
. map_io = msm8x60_map_io ,
. init_irq = msm8x60_init_irq ,
. init_machine = msm8x60_init ,
. timer = & msm_timer ,
MACHINE_END