2010-12-01 19:31:16 -08: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 09:37:42 -08:00
# include <linux/clkdev.h>
2011-08-12 00:14:28 +01:00
# include <linux/memblock.h>
2010-12-01 19:31:16 -08:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/hardware/gic.h>
2011-08-12 00:14:28 +01:00
# include <asm/setup.h>
2010-12-01 19:31:16 -08:00
# include <mach/board.h>
# include <mach/msm_iomap.h>
2011-01-27 12:12:07 -08:00
# include "devices.h"
2011-10-25 09:35:19 -07:00
static void __init msm8960_fixup ( struct tag * tag , char * * cmdline ,
struct meminfo * mi )
2011-08-12 00:14:28 +01:00
{
for ( ; tag - > hdr . size ; tag = tag_next ( tag ) )
if ( tag - > hdr . tag = = ATAG_MEM & &
tag - > u . mem . start = = 0x40200000 ) {
tag - > u . mem . start = 0x40000000 ;
tag - > u . mem . size + = SZ_2M ;
}
}
static void __init msm8960_reserve ( void )
{
memblock_remove ( 0x40000000 , SZ_2M ) ;
}
2010-12-01 19:31:16 -08: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-13 18:12:19 -08:00
if ( machine_is_msm8960_rumi3 ( ) )
writel ( 0x0000FFFF , MSM_QGIC_DIST_BASE + GIC_DIST_ENABLE_SET ) ;
2010-12-01 19:31:16 -08: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 13:25:22 +01:00
irq_set_handler ( i , handle_percpu_irq ) ;
2010-12-01 19:31:16 -08:00
}
}
2011-01-27 12:12:07 -08: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 ) ) ;
}
2012-05-02 15:53:20 +08:00
static void __init msm8960_init_late ( void )
{
smd_debugfs_init ( ) ;
}
2010-12-01 19:31:16 -08:00
MACHINE_START ( MSM8960_SIM , " QCT MSM8960 SIMULATOR " )
2011-08-12 00:14:28 +01:00
. fixup = msm8960_fixup ,
. reserve = msm8960_reserve ,
2010-12-01 19:31:16 -08:00
. map_io = msm8960_map_io ,
. init_irq = msm8960_init_irq ,
. timer = & msm_timer ,
2011-09-06 10:23:45 +01:00
. handle_irq = gic_handle_irq ,
2011-01-27 12:12:07 -08:00
. init_machine = msm8960_sim_init ,
2012-05-02 15:53:20 +08:00
. init_late = msm8960_init_late ,
2010-12-01 19:31:16 -08:00
MACHINE_END
2010-12-13 18:12:19 -08:00
MACHINE_START ( MSM8960_RUMI3 , " QCT MSM8960 RUMI3 " )
2011-08-12 00:14:28 +01:00
. fixup = msm8960_fixup ,
. reserve = msm8960_reserve ,
2010-12-13 18:12:19 -08:00
. map_io = msm8960_map_io ,
. init_irq = msm8960_init_irq ,
. timer = & msm_timer ,
2011-09-06 10:23:45 +01:00
. handle_irq = gic_handle_irq ,
2011-01-27 12:12:07 -08:00
. init_machine = msm8960_rumi3_init ,
2012-05-02 15:53:20 +08:00
. init_late = msm8960_init_late ,
2010-12-13 18:12:19 -08:00
MACHINE_END