xref: /rk3399_ARM-atf/plat/qti/msm8916/msm8916_gicv2.c (revision af6447315c8534331513ca6b6556af661e0ba88b)
1*af644731SStephan Gerhold /*
2*af644731SStephan Gerhold  * Copyright (c) 2021, Stephan Gerhold <stephan@gerhold.net>
3*af644731SStephan Gerhold  *
4*af644731SStephan Gerhold  * SPDX-License-Identifier: BSD-3-Clause
5*af644731SStephan Gerhold  */
6*af644731SStephan Gerhold 
7*af644731SStephan Gerhold #include <common/debug.h>
8*af644731SStephan Gerhold #include <drivers/arm/gicv2.h>
9*af644731SStephan Gerhold #include <lib/mmio.h>
10*af644731SStephan Gerhold 
11*af644731SStephan Gerhold #include "msm8916_gicv2.h"
12*af644731SStephan Gerhold #include <msm8916_mmap.h>
13*af644731SStephan Gerhold 
14*af644731SStephan Gerhold #define IRQ_SEC_SGI_0		8
15*af644731SStephan Gerhold #define IRQ_SEC_SGI_1		9
16*af644731SStephan Gerhold #define IRQ_SEC_SGI_2		10
17*af644731SStephan Gerhold #define IRQ_SEC_SGI_3		11
18*af644731SStephan Gerhold #define IRQ_SEC_SGI_4		12
19*af644731SStephan Gerhold #define IRQ_SEC_SGI_5		13
20*af644731SStephan Gerhold #define IRQ_SEC_SGI_6		14
21*af644731SStephan Gerhold #define IRQ_SEC_SGI_7		15
22*af644731SStephan Gerhold 
23*af644731SStephan Gerhold #define IRQ_SEC_PHY_TIMER	(16 + 2)	/* PPI #2 */
24*af644731SStephan Gerhold 
25*af644731SStephan Gerhold static const interrupt_prop_t msm8916_interrupt_props[] = {
26*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY,
27*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
28*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY,
29*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
30*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY,
31*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
32*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY,
33*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
34*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY,
35*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
36*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY,
37*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
38*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY,
39*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
40*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY,
41*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
42*af644731SStephan Gerhold 	INTR_PROP_DESC(IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY,
43*af644731SStephan Gerhold 		       GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL),
44*af644731SStephan Gerhold };
45*af644731SStephan Gerhold 
46*af644731SStephan Gerhold static const gicv2_driver_data_t msm8916_gic_data = {
47*af644731SStephan Gerhold 	.gicd_base		= APCS_QGIC2_GICD,
48*af644731SStephan Gerhold 	.gicc_base		= APCS_QGIC2_GICC,
49*af644731SStephan Gerhold 	.interrupt_props	= msm8916_interrupt_props,
50*af644731SStephan Gerhold 	.interrupt_props_num	= ARRAY_SIZE(msm8916_interrupt_props),
51*af644731SStephan Gerhold };
52*af644731SStephan Gerhold 
53*af644731SStephan Gerhold void msm8916_gicv2_init(void)
54*af644731SStephan Gerhold {
55*af644731SStephan Gerhold 	gicv2_driver_init(&msm8916_gic_data);
56*af644731SStephan Gerhold 	gicv2_distif_init();
57*af644731SStephan Gerhold 	gicv2_pcpu_distif_init();
58*af644731SStephan Gerhold 	gicv2_cpuif_enable();
59*af644731SStephan Gerhold }
60