diff options
| -rw-r--r-- | arch/arm/mach-msm/Kconfig | 22 | ||||
| -rw-r--r-- | arch/arm/mach-msm/Makefile | 23 | ||||
| -rw-r--r-- | arch/arm/mach-msm/board-msm8960.c | 68 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/cpu.h | 54 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/io.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/irqs-8960.h | 293 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/irqs.h | 3 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/memory.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap-7x00.h | 10 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap-7x30.h | 14 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap-8960.h | 48 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap-8x50.h | 14 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap-8x60.h | 25 | ||||
| -rw-r--r-- | arch/arm/mach-msm/include/mach/msm_iomap.h | 9 | ||||
| -rw-r--r-- | arch/arm/mach-msm/io.c | 40 | ||||
| -rw-r--r-- | arch/arm/mach-msm/timer.c | 46 | 
16 files changed, 582 insertions, 90 deletions
| diff --git a/arch/arm/mach-msm/Kconfig b/arch/arm/mach-msm/Kconfig index 5d3d9ade12fb..df9d74eaa472 100644 --- a/arch/arm/mach-msm/Kconfig +++ b/arch/arm/mach-msm/Kconfig @@ -48,6 +48,16 @@ config ARCH_MSM8X60  	select IOMMU_API  	select MSM_SCM if SMP +config ARCH_MSM8960 +	bool "MSM8960" +	select ARCH_MSM_SCORPIONMP +	select MACH_MSM8960_SIM if (!MACH_MSM8960_RUMI3) +	select ARM_GIC +	select CPU_V7 +	select MSM_V2_TLMM +	select MSM_GPIOMUX +	select MSM_SCM if SMP +  endchoice  config MSM_SOC_REV_A @@ -125,6 +135,18 @@ config MACH_MSM8X60_FFA  	help  	  Support for the Qualcomm MSM8x60 FFA eval board. +config MACH_MSM8960_SIM +	depends on ARCH_MSM8960 +	bool "MSM8960 Simulator" +	help +	  Support for the Qualcomm MSM8960 simulator. + +config MACH_MSM8960_RUMI3 +	depends on ARCH_MSM8960 +	bool "MSM8960 RUMI3" +	help +	  Support for the Qualcomm MSM8960 RUMI3 emulator. +  endmenu  config IOMMU_PGTABLES_L2 diff --git a/arch/arm/mach-msm/Makefile b/arch/arm/mach-msm/Makefile index f4601256f35f..0e5c9dc23830 100644 --- a/arch/arm/mach-msm/Makefile +++ b/arch/arm/mach-msm/Makefile @@ -1,21 +1,16 @@  obj-y += io.o idle.o timer.o -ifndef CONFIG_ARCH_MSM8X60 -obj-y += acpuclock-arm11.o -obj-y += dma.o -endif -ifdef CONFIG_MSM_VIC -obj-y += irq-vic.o -else -ifndef CONFIG_ARCH_MSM8X60 -obj-y += irq.o -endif -endif +obj-$(CONFIG_MSM_VIC) += irq-vic.o +obj-$(CONFIG_ARCH_MSM7X00A) += dma.o irq.o acpuclock-arm11.o +obj-$(CONFIG_ARCH_MSM7X30) += dma.o +obj-$(CONFIG_ARCH_QSD8X50) += dma.o sirc.o  obj-$(CONFIG_ARCH_MSM8X60) += clock-dummy.o iommu.o iommu_dev.o devices-msm8x60-iommu.o +obj-$(CONFIG_ARCH_MSM8960) += clock-dummy.o +  obj-$(CONFIG_MSM_PROC_COMM) += proc_comm.o clock-pcom.o vreg.o  obj-$(CONFIG_MSM_PROC_COMM) += clock.o -obj-$(CONFIG_ARCH_QSD8X50) += sirc.o +  obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o  obj-$(CONFIG_MSM_SMD) += last_radio_log.o  obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o @@ -29,12 +24,16 @@ obj-$(CONFIG_MACH_HALIBUT) += board-halibut.o devices-msm7x00.o  obj-$(CONFIG_ARCH_MSM7X30) += board-msm7x30.o devices-msm7x30.o  obj-$(CONFIG_ARCH_QSD8X50) += board-qsd8x50.o devices-qsd8x50.o  obj-$(CONFIG_ARCH_MSM8X60) += board-msm8x60.o +obj-$(CONFIG_ARCH_MSM8960) += board-msm8960.o  obj-$(CONFIG_ARCH_MSM7X30) += gpiomux-v1.o gpiomux.o  obj-$(CONFIG_ARCH_QSD8X50) += gpiomux-8x50.o gpiomux-v1.o gpiomux.o  obj-$(CONFIG_ARCH_MSM8X60) += gpiomux-8x60.o gpiomux-v2.o gpiomux.o  ifdef CONFIG_MSM_V2_TLMM +ifndef CONFIG_ARCH_MSM8960 +# TODO: TLMM Mapping issues need to be resolved  obj-y	+= gpio-v2.o +endif  else  obj-y	+= gpio.o  endif diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c new file mode 100644 index 000000000000..2b095735f142 --- /dev/null +++ b/arch/arm/mach-msm/board-msm8960.c @@ -0,0 +1,68 @@ +/* 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> + +#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 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); + +	if (machine_is_msm8960_rumi3()) +		writel(0x0000FFFF, MSM_QGIC_DIST_BASE + GIC_DIST_ENABLE_SET); + +	/* 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) +			set_irq_handler(i, handle_percpu_irq); +	} +} + +MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR") +	.map_io = msm8960_map_io, +	.init_irq = msm8960_init_irq, +	.timer = &msm_timer, +MACHINE_END + +MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3") +	.map_io = msm8960_map_io, +	.init_irq = msm8960_init_irq, +	.timer = &msm_timer, +MACHINE_END + diff --git a/arch/arm/mach-msm/include/mach/cpu.h b/arch/arm/mach-msm/include/mach/cpu.h new file mode 100644 index 000000000000..a9481b08d5c7 --- /dev/null +++ b/arch/arm/mach-msm/include/mach/cpu.h @@ -0,0 +1,54 @@ +/* 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. + */ + +#ifndef __ARCH_ARM_MACH_MSM_CPU_H__ +#define __ARCH_ARM_MACH_MSM_CPU_H__ + +/* TODO: For now, only one CPU can be compiled at a time. */ + +#define cpu_is_msm7x01()	0 +#define cpu_is_msm7x30()	0 +#define cpu_is_qsd8x50()	0 +#define cpu_is_msm8x60()	0 +#define cpu_is_msm8960()	0 + +#ifdef CONFIG_ARCH_MSM7X00A +# undef cpu_is_msm7x01 +# define cpu_is_msm7x01()	1 +#endif + +#ifdef CONFIG_ARCH_MSM7X30 +# undef cpu_is_msm7x30 +# define cpu_is_msm7x30()	1 +#endif + +#ifdef CONFIG_ARCH_QSD8X50 +# undef cpu_is_qsd8x50 +# define cpu_is_qsd8x50()	1 +#endif + +#ifdef CONFIG_ARCH_MSM8X60 +# undef cpu_is_msm8x60 +# define cpu_is_msm8x60()	1 +#endif + +#ifdef CONFIG_ARCH_MSM8960 +# undef cpu_is_msm8960 +# define cpu_is_msm8960()	1 +#endif + +#endif diff --git a/arch/arm/mach-msm/include/mach/io.h b/arch/arm/mach-msm/include/mach/io.h index 7386e732baad..dc1b928745e9 100644 --- a/arch/arm/mach-msm/include/mach/io.h +++ b/arch/arm/mach-msm/include/mach/io.h @@ -29,6 +29,7 @@ void __iomem *__msm_ioremap(unsigned long phys_addr, size_t size, unsigned int m  void msm_map_qsd8x50_io(void);  void msm_map_msm7x30_io(void);  void msm_map_msm8x60_io(void); +void msm_map_msm8960_io(void);  extern unsigned int msm_shared_ram_phys; diff --git a/arch/arm/mach-msm/include/mach/irqs-8960.h b/arch/arm/mach-msm/include/mach/irqs-8960.h new file mode 100644 index 000000000000..c7f083c53d4b --- /dev/null +++ b/arch/arm/mach-msm/include/mach/irqs-8960.h @@ -0,0 +1,293 @@ +/* Copyright (c) 2011 Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + *     * Redistributions of source code must retain the above copyright + *       notice, this list of conditions and the following disclaimer. + *     * Redistributions in binary form must reproduce the above copyright + *       notice, this list of conditions and the following disclaimer in the + *       documentation and/or other materials provided with the distribution. + *     * Neither the name of Code Aurora nor + *       the names of its contributors may be used to endorse or promote + *       products derived from this software without specific prior written + *       permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __ASM_ARCH_MSM_IRQS_8960_H +#define __ASM_ARCH_MSM_IRQS_8960_H + +/* MSM ACPU Interrupt Numbers */ + +/* 0-15:  STI/SGI (software triggered/generated interrupts) +   16-31: PPI (private peripheral interrupts) +   32+:   SPI (shared peripheral interrupts) */ + +#define GIC_PPI_START 16 +#define GIC_SPI_START 32 + +#define INT_VGIC				(GIC_PPI_START + 0) +#define INT_DEBUG_TIMER_EXP			(GIC_PPI_START + 1) +#define INT_GP_TIMER_EXP			(GIC_PPI_START + 2) +#define INT_GP_TIMER2_EXP			(GIC_PPI_START + 3) +#define WDT0_ACCSCSSNBARK_INT			(GIC_PPI_START + 4) +#define WDT1_ACCSCSSNBARK_INT			(GIC_PPI_START + 5) +#define AVS_SVICINT				(GIC_PPI_START + 6) +#define AVS_SVICINTSWDONE			(GIC_PPI_START + 7) +#define CPU_DBGCPUXCOMMRXFULL			(GIC_PPI_START + 8) +#define CPU_DBGCPUXCOMMTXEMPTY			(GIC_PPI_START + 9) +#define CPU_SICCPUXPERFMONIRPTREQ		(GIC_PPI_START + 10) +#define SC_AVSCPUXDOWN				(GIC_PPI_START + 11) +#define SC_AVSCPUXUP				(GIC_PPI_START + 12) +#define SC_SICCPUXACGIRPTREQ			(GIC_PPI_START + 13) +#define SC_SICCPUXEXTFAULTIRPTREQ		(GIC_PPI_START + 14) +/* PPI 15 is unused */ + +#define SC_SICMPUIRPTREQ			(GIC_SPI_START + 0) +#define SC_SICL2IRPTREQ				(GIC_SPI_START + 1) +#define SC_SICL2PERFMONIRPTREQ			(GIC_SPI_START + 2) +#define SC_SICAGCIRPTREQ			(GIC_SPI_START + 3) +#define TLMM_APCC_DIR_CONN_IRQ_0		(GIC_SPI_START + 4) +#define TLMM_APCC_DIR_CONN_IRQ_1		(GIC_SPI_START + 5) +#define TLMM_APCC_DIR_CONN_IRQ_2		(GIC_SPI_START + 6) +#define TLMM_APCC_DIR_CONN_IRQ_3		(GIC_SPI_START + 7) +#define TLMM_APCC_DIR_CONN_IRQ_4		(GIC_SPI_START + 8) +#define TLMM_APCC_DIR_CONN_IRQ_5		(GIC_SPI_START + 9) +#define TLMM_APCC_DIR_CONN_IRQ_6		(GIC_SPI_START + 10) +#define TLMM_APCC_DIR_CONN_IRQ_7		(GIC_SPI_START + 11) +#define TLMM_APCC_DIR_CONN_IRQ_8		(GIC_SPI_START + 12) +#define TLMM_APCC_DIR_CONN_IRQ_9		(GIC_SPI_START + 13) +#define PM8921_SEC_IRQ_103			(GIC_SPI_START + 14) +#define PM8018_SEC_IRQ_106			(GIC_SPI_START + 15) +#define TLMM_APCC_SUMMARY_IRQ			(GIC_SPI_START + 16) +#define SPDM_RT_1_IRQ				(GIC_SPI_START + 17) +#define SPDM_DIAG_IRQ				(GIC_SPI_START + 18) +#define RPM_APCC_CPU0_GP_HIGH_IRQ		(GIC_SPI_START + 19) +#define RPM_APCC_CPU0_GP_MEDIUM_IRQ		(GIC_SPI_START + 20) +#define RPM_APCC_CPU0_GP_LOW_IRQ		(GIC_SPI_START + 21) +#define RPM_APCC_CPU0_WAKE_UP_IRQ		(GIC_SPI_START + 22) +#define RPM_APCC_CPU1_GP_HIGH_IRQ		(GIC_SPI_START + 23) +#define RPM_APCC_CPU1_GP_MEDIUM_IRQ		(GIC_SPI_START + 24) +#define RPM_APCC_CPU1_GP_LOW_IRQ		(GIC_SPI_START + 25) +#define RPM_APCC_CPU1_WAKE_UP_IRQ		(GIC_SPI_START + 26) +#define SSBI2_2_SC_CPU0_SECURE_IRQ		(GIC_SPI_START + 27) +#define SSBI2_2_SC_CPU0_NON_SECURE_IRQ		(GIC_SPI_START + 28) +#define SSBI2_1_SC_CPU0_SECURE_IRQ		(GIC_SPI_START + 29) +#define SSBI2_1_SC_CPU0_NON_SECURE_IRQ		(GIC_SPI_START + 30) +#define MSMC_SC_SEC_CE_IRQ			(GIC_SPI_START + 31) +#define MSMC_SC_PRI_CE_IRQ			(GIC_SPI_START + 32) +#define SLIMBUS0_CORE_EE1_IRQ			(GIC_SPI_START + 33) +#define SLIMBUS0_BAM_EE1_IRQ			(GIC_SPI_START + 34) +#define Q6FW_WDOG_EXPIRED_IRQ			(GIC_SPI_START + 35) +#define Q6SW_WDOG_EXPIRED_IRQ			(GIC_SPI_START + 36) +#define MSS_TO_APPS_IRQ_0			(GIC_SPI_START + 37) +#define MSS_TO_APPS_IRQ_1			(GIC_SPI_START + 38) +#define MSS_TO_APPS_IRQ_2			(GIC_SPI_START + 39) +#define MSS_TO_APPS_IRQ_3			(GIC_SPI_START + 40) +#define MSS_TO_APPS_IRQ_4			(GIC_SPI_START + 41) +#define MSS_TO_APPS_IRQ_5			(GIC_SPI_START + 42) +#define MSS_TO_APPS_IRQ_6			(GIC_SPI_START + 43) +#define MSS_TO_APPS_IRQ_7			(GIC_SPI_START + 44) +#define MSS_TO_APPS_IRQ_8			(GIC_SPI_START + 45) +#define MSS_TO_APPS_IRQ_9			(GIC_SPI_START + 46) +#define VPE_IRQ					(GIC_SPI_START + 47) +#define VFE_IRQ					(GIC_SPI_START + 48) +#define VCODEC_IRQ				(GIC_SPI_START + 49) +#define TV_ENC_IRQ				(GIC_SPI_START + 50) +#define SMMU_VPE_CB_SC_SECURE_IRQ		(GIC_SPI_START + 51) +#define SMMU_VPE_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 52) +#define SMMU_VFE_CB_SC_SECURE_IRQ		(GIC_SPI_START + 53) +#define SMMU_VFE_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 54) +#define SMMU_VCODEC_B_CB_SC_SECURE_IRQ		(GIC_SPI_START + 55) +#define SMMU_VCODEC_B_CB_SC_NON_SECURE_IRQ	(GIC_SPI_START + 56) +#define SMMU_VCODEC_A_CB_SC_SECURE_IRQ		(GIC_SPI_START + 57) +#define SMMU_VCODEC_A_CB_SC_NON_SECURE_IRQ	(GIC_SPI_START + 58) +#define SMMU_ROT_CB_SC_SECURE_IRQ		(GIC_SPI_START + 59) +#define SMMU_ROT_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 60) +#define SMMU_MDP1_CB_SC_SECURE_IRQ		(GIC_SPI_START + 61) +#define SMMU_MDP1_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 62) +#define SMMU_MDP0_CB_SC_SECURE_IRQ		(GIC_SPI_START + 63) +#define SMMU_MDP0_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 64) +#define SMMU_JPEGD_CB_SC_SECURE_IRQ		(GIC_SPI_START + 65) +#define SMMU_JPEGD_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 66) +#define SMMU_IJPEG_CB_SC_SECURE_IRQ		(GIC_SPI_START + 67) +#define SMMU_IJPEG_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 68) +#define SMMU_GFX3D_CB_SC_SECURE_IRQ		(GIC_SPI_START + 69) +#define SMMU_GFX3D_CB_SC_NON_SECURE_IRQ		(GIC_SPI_START + 70) +#define SMMU_GFX2D0_CB_SC_SECURE_IRQ		(GIC_SPI_START + 71) +#define SMMU_GFX2D0_CB_SC_NON_SECURE_IRQ	(GIC_SPI_START + 72) +#define ROT_IRQ					(GIC_SPI_START + 73) +#define MMSS_FABRIC_IRQ				(GIC_SPI_START + 74) +#define MDP_IRQ					(GIC_SPI_START + 75) +#define JPEGD_IRQ				(GIC_SPI_START + 76) +#define JPEG_IRQ				(GIC_SPI_START + 77) +#define MMSS_IMEM_IRQ				(GIC_SPI_START + 78) +#define HDMI_IRQ				(GIC_SPI_START + 79) +#define GFX3D_IRQ				(GIC_SPI_START + 80) +#define GFX2D0_IRQ				(GIC_SPI_START + 81) +#define DSI1_IRQ				(GIC_SPI_START + 82) +#define CSI_1_IRQ				(GIC_SPI_START + 83) +#define CSI_0_IRQ				(GIC_SPI_START + 84) +#define LPASS_SCSS_AUDIO_IF_OUT0_IRQ		(GIC_SPI_START + 85) +#define LPASS_SCSS_MIDI_IRQ			(GIC_SPI_START + 86) +#define LPASS_Q6SS_WDOG_EXPIRED			(GIC_SPI_START + 87) +#define LPASS_SCSS_GP_LOW_IRQ			(GIC_SPI_START + 88) +#define LPASS_SCSS_GP_MEDIUM_IRQ		(GIC_SPI_START + 89) +#define LPASS_SCSS_GP_HIGH_IRQ			(GIC_SPI_START + 90) +#define TOP_IMEM_IRQ				(GIC_SPI_START + 91) +#define FABRIC_SYS_IRQ				(GIC_SPI_START + 92) +#define FABRIC_APPS_IRQ				(GIC_SPI_START + 93) +#define USB1_HS_BAM_IRQ				(GIC_SPI_START + 94) +#define SDC4_BAM_IRQ				(GIC_SPI_START + 95) +#define SDC3_BAM_IRQ				(GIC_SPI_START + 96) +#define SDC2_BAM_IRQ				(GIC_SPI_START + 97) +#define SDC1_BAM_IRQ				(GIC_SPI_START + 98) +#define FABRIC_SPS_IRQ				(GIC_SPI_START + 99) +#define USB1_HS_IRQ				(GIC_SPI_START + 100) +#define SDC4_IRQ_0				(GIC_SPI_START + 101) +#define SDC3_IRQ_0				(GIC_SPI_START + 102) +#define SDC2_IRQ_0				(GIC_SPI_START + 103) +#define SDC1_IRQ_0				(GIC_SPI_START + 104) +#define SPS_BAM_DMA_IRQ				(GIC_SPI_START + 105) +#define SPS_SEC_VIOL_IRQ			(GIC_SPI_START + 106) +#define SPS_MTI_0				(GIC_SPI_START + 107) +#define SPS_MTI_1				(GIC_SPI_START + 108) +#define SPS_MTI_2				(GIC_SPI_START + 109) +#define SPS_MTI_3				(GIC_SPI_START + 110) +#define SPS_MTI_4				(GIC_SPI_START + 111) +#define SPS_MTI_5				(GIC_SPI_START + 112) +#define SPS_MTI_6				(GIC_SPI_START + 113) +#define SPS_MTI_7				(GIC_SPI_START + 114) +#define SPS_MTI_8				(GIC_SPI_START + 115) +#define SPS_MTI_9				(GIC_SPI_START + 116) +#define SPS_MTI_10				(GIC_SPI_START + 117) +#define SPS_MTI_11				(GIC_SPI_START + 118) +#define SPS_MTI_12				(GIC_SPI_START + 119) +#define SPS_MTI_13				(GIC_SPI_START + 120) +#define SPS_MTI_14				(GIC_SPI_START + 121) +#define SPS_MTI_15				(GIC_SPI_START + 122) +#define SPS_MTI_16				(GIC_SPI_START + 123) +#define SPS_MTI_17				(GIC_SPI_START + 124) +#define SPS_MTI_18				(GIC_SPI_START + 125) +#define SPS_MTI_19				(GIC_SPI_START + 126) +#define SPS_MTI_20				(GIC_SPI_START + 127) +#define SPS_MTI_21				(GIC_SPI_START + 128) +#define SPS_MTI_22				(GIC_SPI_START + 129) +#define SPS_MTI_23				(GIC_SPI_START + 130) +#define SPS_MTI_24				(GIC_SPI_START + 131) +#define SPS_MTI_25				(GIC_SPI_START + 132) +#define SPS_MTI_26				(GIC_SPI_START + 133) +#define SPS_MTI_27				(GIC_SPI_START + 134) +#define SPS_MTI_28				(GIC_SPI_START + 135) +#define SPS_MTI_29				(GIC_SPI_START + 136) +#define SPS_MTI_30				(GIC_SPI_START + 137) +#define SPS_MTI_31				(GIC_SPI_START + 138) +#define CSIPHY_4LN_IRQ				(GIC_SPI_START + 139) +#define CSIPHY_2LN_IRQ				(GIC_SPI_START + 140) +#define USB2_IRQ				(GIC_SPI_START + 141) +#define USB1_IRQ				(GIC_SPI_START + 142) +#define TSSC_SSBI_IRQ				(GIC_SPI_START + 143) +#define TSSC_SAMPLE_IRQ				(GIC_SPI_START + 144) +#define TSSC_PENUP_IRQ				(GIC_SPI_START + 145) +#define GSBI1_UARTDM_IRQ			(GIC_SPI_START + 146) +#define GSBI1_QUP_IRQ				(GIC_SPI_START + 147) +#define GSBI2_UARTDM_IRQ			(GIC_SPI_START + 148) +#define GSBI2_QUP_IRQ			        (GIC_SPI_START + 149) +#define GSBI3_UARTDM_IRQ			(GIC_SPI_START + 150) +#define GSBI3_QUP_IRQ				(GIC_SPI_START + 151) +#define GSBI4_UARTDM_IRQ			(GIC_SPI_START + 152) +#define GSBI4_QUP_IRQ				(GIC_SPI_START + 153) +#define GSBI5_UARTDM_IRQ			(GIC_SPI_START + 154) +#define GSBI5_QUP_IRQ				(GIC_SPI_START + 155) +#define GSBI6_UARTDM_IRQ			(GIC_SPI_START + 156) +#define GSBI6_QUP_IRQ				(GIC_SPI_START + 157) +#define GSBI7_UARTDM_IRQ			(GIC_SPI_START + 158) +#define GSBI7_QUP_IRQ				(GIC_SPI_START + 159) +#define GSBI8_UARTDM_IRQ			(GIC_SPI_START + 160) +#define GSBI8_QUP_IRQ				(GIC_SPI_START + 161) +#define TSIF_TSPP_IRQ				(GIC_SPI_START + 162) +#define TSIF_BAM_IRQ				(GIC_SPI_START + 163) +#define TSIF2_IRQ				(GIC_SPI_START + 164) +#define TSIF1_IRQ				(GIC_SPI_START + 165) +#define DSI2_IRQ				(GIC_SPI_START + 166) +#define ISPIF_IRQ				(GIC_SPI_START + 167) +#define MSMC_SC_SEC_TMR_IRQ			(GIC_SPI_START + 168) +#define MSMC_SC_SEC_WDOG_BARK_IRQ		(GIC_SPI_START + 169) +#define INT_ADM0_SCSS_0_IRQ			(GIC_SPI_START + 170) +#define INT_ADM0_SCSS_1_IRQ			(GIC_SPI_START + 171) +#define INT_ADM0_SCSS_2_IRQ			(GIC_SPI_START + 172) +#define INT_ADM0_SCSS_3_IRQ			(GIC_SPI_START + 173) +#define CC_SCSS_WDT1CPU1BITEEXPIRED		(GIC_SPI_START + 174) +#define CC_SCSS_WDT1CPU0BITEEXPIRED		(GIC_SPI_START + 175) +#define CC_SCSS_WDT0CPU1BITEEXPIRED		(GIC_SPI_START + 176) +#define CC_SCSS_WDT0CPU0BITEEXPIRED		(GIC_SPI_START + 177) +#define TSENS_UPPER_LOWER_INT			(GIC_SPI_START + 178) +#define SSBI2_2_SC_CPU1_SECURE_INT		(GIC_SPI_START + 179) +#define SSBI2_2_SC_CPU1_NON_SECURE_INT		(GIC_SPI_START + 180) +#define SSBI2_1_SC_CPU1_SECURE_INT		(GIC_SPI_START + 181) +#define SSBI2_1_SC_CPU1_NON_SECURE_INT		(GIC_SPI_START + 182) +#define XPU_SUMMARY_IRQ				(GIC_SPI_START + 183) +#define BUS_EXCEPTION_SUMMARY_IRQ		(GIC_SPI_START + 184) +#define HSDDRX_EBI1CH0_IRQ			(GIC_SPI_START + 185) +#define HSDDRX_EBI1CH1_IRQ			(GIC_SPI_START + 186) +#define SDC5_BAM_IRQ				(GIC_SPI_START + 187) +#define SDC5_IRQ_0				(GIC_SPI_START + 188) +#define GSBI9_UARTDM_IRQ			(GIC_SPI_START + 189) +#define GSBI9_QUP_IRQ				(GIC_SPI_START + 190) +#define GSBI10_UARTDM_IRQ			(GIC_SPI_START + 191) +#define GSBI10_QUP_IRQ				(GIC_SPI_START + 192) +#define GSBI11_UARTDM_IRQ			(GIC_SPI_START + 193) +#define GSBI11_QUP_IRQ				(GIC_SPI_START + 194) +#define GSBI12_UARTDM_IRQ			(GIC_SPI_START + 195) +#define GSBI12_QUP_IRQ				(GIC_SPI_START + 196) +#define RIVA_APSS_LTECOEX_IRQ			(GIC_SPI_START + 197) +#define RIVA_APSS_SPARE_IRQ			(GIC_SPI_START + 198) +#define RIVA_APSS_WDOG_BITE_RESET_RDY_IRQ	(GIC_SPI_START + 199) +#define RIVA_ASS_RESET_DONE_IRQ			(GIC_SPI_START + 200) +#define RIVA_APSS_ASIC_IRQ			(GIC_SPI_START + 201) +#define RIVA_APPS_WLAN_RX_DATA_AVAIL_IRQ	(GIC_SPI_START + 202) +#define RIVA_APPS_WLAN_DATA_XFER_DONE_IRQ	(GIC_SPI_START + 203) +#define RIVA_APPS_WLAM_SMSM_IRQ			(GIC_SPI_START + 204) +#define RIVA_APPS_LOG_CTRL_IRQ			(GIC_SPI_START + 205) +#define RIVA_APPS_FM_CTRL_IRQ			(GIC_SPI_START + 206) +#define RIVA_APPS_HCI_IRQ			(GIC_SPI_START + 207) +#define RIVA_APPS_WLAN_CTRL_IRQ			(GIC_SPI_START + 208) +#define A2_BAM_IRQ				(GIC_SPI_START + 209) +#define SMMU_GFX2D1_CB_SC_SECURE_IRQ		(GIC_SPI_START + 210) +#define SMMU_GFX2D1_CB_SC_NON_SECURE_IRQ	(GIC_SPI_START + 211) +#define GFX2D1_IRQ				(GIC_SPI_START + 212) +#define PPSS_WDOG_TIMER_IRQ			(GIC_SPI_START + 213) +#define SPS_SLIMBUS_CORE_EE0_IRQ		(GIC_SPI_START + 214) +#define SPS_SLIMBUS_BAM_EE0_IRQ			(GIC_SPI_START + 215) +#define QDSS_ETB_IRQ				(GIC_SPI_START + 216) +#define QDSS_CTI2KPSS_CPU1_IRQ			(GIC_SPI_START + 217) +#define QDSS_CTI2KPSS_CPU0_IRQ			(GIC_SPI_START + 218) +#define TLMM_APCC_DIR_CONN_IRQ_16		(GIC_SPI_START + 219) +#define TLMM_APCC_DIR_CONN_IRQ_17		(GIC_SPI_START + 220) +#define TLMM_APCC_DIR_CONN_IRQ_18		(GIC_SPI_START + 221) +#define TLMM_APCC_DIR_CONN_IRQ_19		(GIC_SPI_START + 222) +#define TLMM_APCC_DIR_CONN_IRQ_20		(GIC_SPI_START + 223) +#define TLMM_APCC_DIR_CONN_IRQ_21		(GIC_SPI_START + 224) +#define PM8921_SEC_IRQ_104			(GIC_SPI_START + 225) +#define PM8018_SEC_IRQ_107			(GIC_SPI_START + 226) + +/* For now, use the maximum number of interrupts until a pending GIC issue + * is sorted out */ +#define NR_MSM_IRQS 1020 +#define NR_BOARD_IRQS 0 +#define NR_GPIO_IRQS 0 + +#endif + diff --git a/arch/arm/mach-msm/include/mach/irqs.h b/arch/arm/mach-msm/include/mach/irqs.h index 8679a4564744..3cd78b165abb 100644 --- a/arch/arm/mach-msm/include/mach/irqs.h +++ b/arch/arm/mach-msm/include/mach/irqs.h @@ -26,6 +26,9 @@  #include "sirc.h"  #elif defined(CONFIG_ARCH_MSM8X60)  #include "irqs-8x60.h" +#elif defined(CONFIG_ARCH_MSM8960) +/* TODO: Make these not generic. */ +#include "irqs-8960.h"  #elif defined(CONFIG_ARCH_MSM_ARM11)  #include "irqs-7x00.h"  #else diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h index 070e17d237f1..014bbd3ac1d4 100644 --- a/arch/arm/mach-msm/include/mach/memory.h +++ b/arch/arm/mach-msm/include/mach/memory.h @@ -25,6 +25,8 @@  #define PHYS_OFFSET		UL(0x00200000)  #elif defined(CONFIG_ARCH_MSM8X60)  #define PHYS_OFFSET		UL(0x40200000) +#elif defined(CONFIG_ARCH_MSM8960) +#define PHYS_OFFSET		UL(0x40200000)  #else  #define PHYS_OFFSET		UL(0x10000000)  #endif diff --git a/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h b/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h index cfff0e74f128..1e75ed74f169 100644 --- a/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h +++ b/arch/arm/mach-msm/include/mach/msm_iomap-7x00.h @@ -1,6 +1,7 @@  /* arch/arm/mach-msm/include/mach/msm_iomap.h   *   * Copyright (C) 2007 Google, Inc. + * Copyright (c) 2011, Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -47,13 +48,8 @@  #define MSM_VIC_PHYS          0xC0000000  #define MSM_VIC_SIZE          SZ_4K -#define MSM_CSR_BASE          IOMEM(0xE0001000) -#define MSM_CSR_PHYS          0xC0100000 -#define MSM_CSR_SIZE          SZ_4K - -#define MSM_GPT_PHYS          MSM_CSR_PHYS -#define MSM_GPT_BASE          MSM_CSR_BASE -#define MSM_GPT_SIZE          SZ_4K +#define MSM7X00_CSR_PHYS      0xC0100000 +#define MSM7X00_CSR_SIZE      SZ_4K  #define MSM_DMOV_BASE         IOMEM(0xE0002000)  #define MSM_DMOV_PHYS         0xA9700000 diff --git a/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h b/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h index 0fd7b68ca114..4d84be15955e 100644 --- a/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h +++ b/arch/arm/mach-msm/include/mach/msm_iomap-7x30.h @@ -1,6 +1,6 @@  /*   * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * Copyright (c) 2008-2011 Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -39,16 +39,8 @@  #define MSM_VIC_PHYS          0xC0080000  #define MSM_VIC_SIZE          SZ_4K -#define MSM_CSR_BASE          IOMEM(0xE0001000) -#define MSM_CSR_PHYS          0xC0100000 -#define MSM_CSR_SIZE          SZ_4K - -#define MSM_TMR_PHYS          MSM_CSR_PHYS -#define MSM_TMR_BASE          MSM_CSR_BASE -#define MSM_TMR_SIZE          SZ_4K - -#define MSM_GPT_BASE 	      (MSM_TMR_BASE + 0x4) -#define MSM_DGT_BASE 	      (MSM_TMR_BASE + 0x24) +#define MSM7X30_CSR_PHYS      0xC0100000 +#define MSM7X30_CSR_SIZE      SZ_4K  #define MSM_DMOV_BASE         IOMEM(0xE0002000)  #define MSM_DMOV_PHYS         0xAC400000 diff --git a/arch/arm/mach-msm/include/mach/msm_iomap-8960.h b/arch/arm/mach-msm/include/mach/msm_iomap-8960.h new file mode 100644 index 000000000000..3c9d9602a318 --- /dev/null +++ b/arch/arm/mach-msm/include/mach/msm_iomap-8960.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2007 Google, Inc. + * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved. + * Author: Brian Swetland <[email protected]> + * + * 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. + * + * + * The MSM peripherals are spread all over across 768MB of physical + * space, which makes just having a simple IO_ADDRESS macro to slide + * them into the right virtual location rough.  Instead, we will + * provide a master phys->virt mapping for peripherals here. + * + */ + +#ifndef __ASM_ARCH_MSM_IOMAP_8960_H +#define __ASM_ARCH_MSM_IOMAP_8960_H + +/* Physical base address and size of peripherals. + * Ordered by the virtual base addresses they will be mapped at. + * + * If you add or remove entries here, you'll want to edit the + * msm_io_desc array in arch/arm/mach-msm/io.c to reflect your + * changes. + * + */ + + +#define MSM8960_QGIC_DIST_PHYS	0x02000000 +#define MSM8960_QGIC_DIST_SIZE	SZ_4K + +#define MSM8960_QGIC_CPU_PHYS	0x02002000 +#define MSM8960_QGIC_CPU_SIZE	SZ_4K + +#define MSM8960_TMR_PHYS	0x0200A000 +#define MSM8960_TMR_SIZE	SZ_4K + +#define MSM8960_TMR0_PHYS	0x0208A000 +#define MSM8960_TMR0_SIZE	SZ_4K + +#endif diff --git a/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h b/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h index acc819eb76e5..cf1c2df1d953 100644 --- a/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h +++ b/arch/arm/mach-msm/include/mach/msm_iomap-8x50.h @@ -1,6 +1,6 @@  /*   * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * Copyright (c) 2008-2011 Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -39,16 +39,8 @@  #define MSM_VIC_PHYS          0xAC000000  #define MSM_VIC_SIZE          SZ_4K -#define MSM_CSR_BASE          IOMEM(0xE0001000) -#define MSM_CSR_PHYS          0xAC100000 -#define MSM_CSR_SIZE          SZ_4K - -#define MSM_TMR_PHYS          MSM_CSR_PHYS -#define MSM_TMR_BASE          MSM_CSR_BASE -#define MSM_TMR_SIZE          SZ_4K - -#define MSM_GPT_BASE          MSM_TMR_BASE -#define MSM_DGT_BASE          (MSM_TMR_BASE + 0x10) +#define QSD8X50_CSR_PHYS      0xAC100000 +#define QSD8X50_CSR_SIZE      SZ_4K  #define MSM_DMOV_BASE         IOMEM(0xE0002000)  #define MSM_DMOV_PHYS         0xA9700000 diff --git a/arch/arm/mach-msm/include/mach/msm_iomap-8x60.h b/arch/arm/mach-msm/include/mach/msm_iomap-8x60.h index a54e33b0882e..5bd18db11aea 100644 --- a/arch/arm/mach-msm/include/mach/msm_iomap-8x60.h +++ b/arch/arm/mach-msm/include/mach/msm_iomap-8x60.h @@ -1,6 +1,6 @@  /*   * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -35,13 +35,11 @@   *   */ -#define MSM_QGIC_DIST_BASE	IOMEM(0xF0000000) -#define MSM_QGIC_DIST_PHYS	0x02080000 -#define MSM_QGIC_DIST_SIZE	SZ_4K +#define MSM8X60_QGIC_DIST_PHYS	0x02080000 +#define MSM8X60_QGIC_DIST_SIZE	SZ_4K -#define MSM_QGIC_CPU_BASE	IOMEM(0xF0001000) -#define MSM_QGIC_CPU_PHYS	0x02081000 -#define MSM_QGIC_CPU_SIZE	SZ_4K +#define MSM8X60_QGIC_CPU_PHYS	0x02081000 +#define MSM8X60_QGIC_CPU_SIZE	SZ_4K  #define MSM_ACC_BASE		IOMEM(0xF0002000)  #define MSM_ACC_PHYS		0x02001000 @@ -58,16 +56,11 @@  #define MSM_SHARED_RAM_BASE	IOMEM(0xF0100000)  #define MSM_SHARED_RAM_SIZE	SZ_1M -#define MSM_TMR_BASE		IOMEM(0xF0200000) -#define MSM_TMR_PHYS		0x02000000 -#define MSM_TMR_SIZE		SZ_4K +#define MSM8X60_TMR_PHYS	0x02000000 +#define MSM8X60_TMR_SIZE	SZ_4K -#define MSM_TMR0_BASE		IOMEM(0xF0201000) -#define MSM_TMR0_PHYS		0x02040000 -#define MSM_TMR0_SIZE		SZ_4K - -#define MSM_GPT_BASE		(MSM_TMR_BASE + 0x4) -#define MSM_DGT_BASE		(MSM_TMR_BASE + 0x24) +#define MSM8X60_TMR0_PHYS	0x02040000 +#define MSM8X60_TMR0_SIZE	SZ_4K  #define MSM_IOMMU_JPEGD_PHYS	0x07300000  #define MSM_IOMMU_JPEGD_SIZE	SZ_1M diff --git a/arch/arm/mach-msm/include/mach/msm_iomap.h b/arch/arm/mach-msm/include/mach/msm_iomap.h index 8e24dd812139..c98c7591f3b8 100644 --- a/arch/arm/mach-msm/include/mach/msm_iomap.h +++ b/arch/arm/mach-msm/include/mach/msm_iomap.h @@ -1,6 +1,6 @@  /*   * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -53,6 +53,13 @@  #include "msm_iomap-7x00.h"  #endif +#include "msm_iomap-8960.h" +/* Virtual addressses shared across all MSM targets. */ +#define MSM_CSR_BASE		IOMEM(0xE0001000) +#define MSM_QGIC_DIST_BASE	IOMEM(0xF0000000) +#define MSM_QGIC_CPU_BASE	IOMEM(0xF0001000) +#define MSM_TMR_BASE		IOMEM(0xF0200000) +#define MSM_TMR0_BASE		IOMEM(0xF0201000)  #endif diff --git a/arch/arm/mach-msm/io.c b/arch/arm/mach-msm/io.c index 1260007a9dd1..d8d9be5d821b 100644 --- a/arch/arm/mach-msm/io.c +++ b/arch/arm/mach-msm/io.c @@ -3,7 +3,7 @@   * MSM7K, QSD io support   *   * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved.   * Author: Brian Swetland <[email protected]>   *   * This software is licensed under the terms of the GNU General Public @@ -28,18 +28,20 @@  #include <mach/board.h> -#define MSM_DEVICE(name) { \ +#define MSM_CHIP_DEVICE(name, chip) {			      \  		.virtual = (unsigned long) MSM_##name##_BASE, \ -		.pfn = __phys_to_pfn(MSM_##name##_PHYS), \ -		.length = MSM_##name##_SIZE, \ +		.pfn = __phys_to_pfn(chip##_##name##_PHYS), \ +		.length = chip##_##name##_SIZE, \  		.type = MT_DEVICE_NONSHARED, \  	 } +#define MSM_DEVICE(name) MSM_CHIP_DEVICE(name, MSM) +  #if defined(CONFIG_ARCH_MSM7X00A) || defined(CONFIG_ARCH_MSM7X27) \  	|| defined(CONFIG_ARCH_MSM7X25)  static struct map_desc msm_io_desc[] __initdata = {  	MSM_DEVICE(VIC), -	MSM_DEVICE(CSR), +	MSM_CHIP_DEVICE(CSR, MSM7X00),  	MSM_DEVICE(GPT),  	MSM_DEVICE(DMOV),  	MSM_DEVICE(GPIO1), @@ -73,8 +75,7 @@ void __init msm_map_common_io(void)  #ifdef CONFIG_ARCH_QSD8X50  static struct map_desc qsd8x50_io_desc[] __initdata = {  	MSM_DEVICE(VIC), -	MSM_DEVICE(CSR), -	MSM_DEVICE(TMR), +	MSM_CHIP_DEVICE(CSR, QSD8X50),  	MSM_DEVICE(DMOV),  	MSM_DEVICE(GPIO1),  	MSM_DEVICE(GPIO2), @@ -102,10 +103,10 @@ void __init msm_map_qsd8x50_io(void)  #ifdef CONFIG_ARCH_MSM8X60  static struct map_desc msm8x60_io_desc[] __initdata = { -	MSM_DEVICE(QGIC_DIST), -	MSM_DEVICE(QGIC_CPU), -	MSM_DEVICE(TMR), -	MSM_DEVICE(TMR0), +	MSM_CHIP_DEVICE(QGIC_DIST, MSM8X60), +	MSM_CHIP_DEVICE(QGIC_CPU, MSM8X60), +	MSM_CHIP_DEVICE(TMR, MSM8X60), +	MSM_CHIP_DEVICE(TMR0, MSM8X60),  	MSM_DEVICE(ACC),  	MSM_DEVICE(GCC),  }; @@ -116,11 +117,24 @@ void __init msm_map_msm8x60_io(void)  }  #endif /* CONFIG_ARCH_MSM8X60 */ +#ifdef CONFIG_ARCH_MSM8960 +static struct map_desc msm8960_io_desc[] __initdata = { +	MSM_CHIP_DEVICE(QGIC_DIST, MSM8960), +	MSM_CHIP_DEVICE(QGIC_CPU, MSM8960), +	MSM_CHIP_DEVICE(TMR, MSM8960), +	MSM_CHIP_DEVICE(TMR0, MSM8960), +}; + +void __init msm_map_msm8960_io(void) +{ +	iotable_init(msm8960_io_desc, ARRAY_SIZE(msm8960_io_desc)); +} +#endif /* CONFIG_ARCH_MSM8960 */ +  #ifdef CONFIG_ARCH_MSM7X30  static struct map_desc msm7x30_io_desc[] __initdata = {  	MSM_DEVICE(VIC), -	MSM_DEVICE(CSR), -	MSM_DEVICE(TMR), +	MSM_CHIP_DEVICE(CSR, MSM7X30),  	MSM_DEVICE(DMOV),  	MSM_DEVICE(GPIO1),  	MSM_DEVICE(GPIO2), diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index c105d28b53e3..e7f8e5a4d48f 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c @@ -24,10 +24,7 @@  #include <asm/mach/time.h>  #include <mach/msm_iomap.h> - -#ifndef MSM_DGT_BASE -#define MSM_DGT_BASE (MSM_GPT_BASE + 0x10) -#endif +#include <mach/cpu.h>  #define TIMER_MATCH_VAL         0x0000  #define TIMER_COUNT_VAL         0x0004 @@ -52,18 +49,14 @@ enum timer_location {  	GLOBAL_TIMER = 1,  }; -#ifdef MSM_TMR0_BASE -#define MSM_TMR_GLOBAL		(MSM_TMR0_BASE - MSM_TMR_BASE) -#else -#define MSM_TMR_GLOBAL		0 -#endif -  #define MSM_GLOBAL_TIMER MSM_CLOCK_DGT +/* TODO: Remove these ifdefs */  #if defined(CONFIG_ARCH_QSD8X50)  #define DGT_HZ (19200000 / 4) /* 19.2 MHz / 4 by default */  #define MSM_DGT_SHIFT (0) -#elif defined(CONFIG_ARCH_MSM7X30) || defined(CONFIG_ARCH_MSM8X60) +#elif defined(CONFIG_ARCH_MSM7X30) || defined(CONFIG_ARCH_MSM8X60) || \ +				      defined(CONFIG_ARCH_MSM8960)  #define DGT_HZ (24576000 / 4) /* 24.576 MHz (LPXO) / 4 by default */  #define MSM_DGT_SHIFT (0)  #else @@ -177,11 +170,7 @@ static struct msm_clock msm_clocks[] = {  			.dev_id  = &msm_clocks[0].clockevent,  			.irq     = INT_GP_TIMER_EXP  		}, -		.regbase = MSM_GPT_BASE,  		.freq = GPT_HZ, -		.local_counter = MSM_GPT_BASE + TIMER_COUNT_VAL, -		.global_counter = MSM_GPT_BASE + TIMER_COUNT_VAL + -			MSM_TMR_GLOBAL,  	},  	[MSM_CLOCK_DGT] = {  		.clockevent = { @@ -206,12 +195,8 @@ static struct msm_clock msm_clocks[] = {  			.dev_id  = &msm_clocks[1].clockevent,  			.irq     = INT_DEBUG_TIMER_EXP  		}, -		.regbase = MSM_DGT_BASE,  		.freq = DGT_HZ >> MSM_DGT_SHIFT,  		.shift = MSM_DGT_SHIFT, -		.local_counter = MSM_DGT_BASE + TIMER_COUNT_VAL, -		.global_counter = MSM_DGT_BASE + TIMER_COUNT_VAL + -			MSM_TMR_GLOBAL,  	}  }; @@ -219,6 +204,25 @@ static void __init msm_timer_init(void)  {  	int i;  	int res; +	int global_offset = 0; + +	if (cpu_is_msm7x01()) { +		msm_clocks[MSM_CLOCK_GPT].regbase = MSM_CSR_BASE; +		msm_clocks[MSM_CLOCK_DGT].regbase = MSM_CSR_BASE + 0x10; +	} else if (cpu_is_msm7x30()) { +		msm_clocks[MSM_CLOCK_GPT].regbase = MSM_CSR_BASE + 0x04; +		msm_clocks[MSM_CLOCK_DGT].regbase = MSM_CSR_BASE + 0x24; +	} else if (cpu_is_qsd8x50()) { +		msm_clocks[MSM_CLOCK_GPT].regbase = MSM_CSR_BASE; +		msm_clocks[MSM_CLOCK_DGT].regbase = MSM_CSR_BASE + 0x10; +	} else if (cpu_is_msm8x60() || cpu_is_msm8960()) { +		msm_clocks[MSM_CLOCK_GPT].regbase = MSM_TMR_BASE + 0x04; +		msm_clocks[MSM_CLOCK_DGT].regbase = MSM_TMR_BASE + 0x24; + +		/* Use CPU0's timer as the global timer. */ +		global_offset = MSM_TMR0_BASE - MSM_TMR_BASE; +	} else +		BUG();  #ifdef CONFIG_ARCH_MSM_SCORPIONMP  	writel(DGT_CLK_CTL_DIV_4, MSM_TMR_BASE + DGT_CLK_CTL); @@ -228,6 +232,10 @@ static void __init msm_timer_init(void)  		struct msm_clock *clock = &msm_clocks[i];  		struct clock_event_device *ce = &clock->clockevent;  		struct clocksource *cs = &clock->clocksource; + +		clock->local_counter = clock->regbase + TIMER_COUNT_VAL; +		clock->global_counter = clock->local_counter + global_offset; +  		writel(0, clock->regbase + TIMER_ENABLE);  		writel(0, clock->regbase + TIMER_CLEAR);  		writel(~0, clock->regbase + TIMER_MATCH_VAL); |