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