1 /* 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 #include <platform_def.h> 14 15 #define IRQ_SEC_SGI_0 8 16 #define IRQ_SEC_SGI_1 9 17 #define IRQ_SEC_SGI_2 10 18 #define IRQ_SEC_SGI_3 11 19 #define IRQ_SEC_SGI_4 12 20 #define IRQ_SEC_SGI_5 13 21 #define IRQ_SEC_SGI_6 14 22 #define IRQ_SEC_SGI_7 15 23 24 static const interrupt_prop_t msm8916_interrupt_props[] = { 25 INTR_PROP_DESC(IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, 26 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 27 INTR_PROP_DESC(IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, 28 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 29 INTR_PROP_DESC(IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, 30 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 31 INTR_PROP_DESC(IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, 32 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 33 INTR_PROP_DESC(IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, 34 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 35 INTR_PROP_DESC(IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, 36 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 37 INTR_PROP_DESC(IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, 38 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 39 INTR_PROP_DESC(IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, 40 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 41 INTR_PROP_DESC(IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, 42 GICV2_INTR_GROUP0, GIC_INTR_CFG_LEVEL), 43 }; 44 45 static const gicv2_driver_data_t msm8916_gic_data = { 46 .gicd_base = APCS_QGIC2_GICD, 47 .gicc_base = APCS_QGIC2_GICC, 48 .interrupt_props = msm8916_interrupt_props, 49 .interrupt_props_num = ARRAY_SIZE(msm8916_interrupt_props), 50 }; 51 52 void msm8916_gicv2_init(void) 53 { 54 gicv2_driver_init(&msm8916_gic_data); 55 } 56 57 void msm8916_gicv2_configure(void) 58 { 59 gicv2_distif_init(); 60 gicv2_pcpu_distif_init(); 61 gicv2_cpuif_enable(); 62 } 63