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