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