1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2021 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #include <drivers/arm/gicv3.h> 9*91f16700Schasinglulu #include <plat_gic.h> 10*91f16700Schasinglulu #include <plat/common/platform.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* 13*91f16700Schasinglulu * NXP common helper to initialize the GICv3 only driver. 14*91f16700Schasinglulu */ 15*91f16700Schasinglulu void plat_ls_gic_driver_init(uintptr_t nxp_gicd_addr, 16*91f16700Schasinglulu uintptr_t nxp_gicr_addr, 17*91f16700Schasinglulu uint8_t plat_core_count, 18*91f16700Schasinglulu interrupt_prop_t *ls_interrupt_props, 19*91f16700Schasinglulu uint8_t ls_interrupt_prop_count, 20*91f16700Schasinglulu uintptr_t *target_mask_array, 21*91f16700Schasinglulu mpidr_hash_fn mpidr_to_core_pos) 22*91f16700Schasinglulu { 23*91f16700Schasinglulu static struct gicv3_driver_data ls_gic_data; 24*91f16700Schasinglulu 25*91f16700Schasinglulu ls_gic_data.gicd_base = nxp_gicd_addr; 26*91f16700Schasinglulu ls_gic_data.gicr_base = nxp_gicr_addr; 27*91f16700Schasinglulu ls_gic_data.interrupt_props = ls_interrupt_props; 28*91f16700Schasinglulu ls_gic_data.interrupt_props_num = ls_interrupt_prop_count; 29*91f16700Schasinglulu ls_gic_data.rdistif_num = plat_core_count; 30*91f16700Schasinglulu ls_gic_data.rdistif_base_addrs = target_mask_array; 31*91f16700Schasinglulu ls_gic_data.mpidr_to_core_pos = mpidr_to_core_pos; 32*91f16700Schasinglulu 33*91f16700Schasinglulu gicv3_driver_init(&ls_gic_data); 34*91f16700Schasinglulu } 35*91f16700Schasinglulu 36*91f16700Schasinglulu void plat_ls_gic_init(void) 37*91f16700Schasinglulu { 38*91f16700Schasinglulu gicv3_distif_init(); 39*91f16700Schasinglulu gicv3_rdistif_init(plat_my_core_pos()); 40*91f16700Schasinglulu gicv3_cpuif_enable(plat_my_core_pos()); 41*91f16700Schasinglulu } 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* 44*91f16700Schasinglulu * NXP common helper to enable the GICv3 CPU interface 45*91f16700Schasinglulu */ 46*91f16700Schasinglulu void plat_ls_gic_cpuif_enable(void) 47*91f16700Schasinglulu { 48*91f16700Schasinglulu gicv3_cpuif_enable(plat_my_core_pos()); 49*91f16700Schasinglulu } 50*91f16700Schasinglulu 51*91f16700Schasinglulu /* 52*91f16700Schasinglulu * NXP common helper to disable the GICv3 CPU interface 53*91f16700Schasinglulu */ 54*91f16700Schasinglulu void plat_ls_gic_cpuif_disable(void) 55*91f16700Schasinglulu { 56*91f16700Schasinglulu gicv3_cpuif_disable(plat_my_core_pos()); 57*91f16700Schasinglulu } 58*91f16700Schasinglulu 59*91f16700Schasinglulu /* 60*91f16700Schasinglulu * NXP common helper to initialize the per cpu distributor interface in GICv3 61*91f16700Schasinglulu */ 62*91f16700Schasinglulu void plat_gic_pcpu_init(void) 63*91f16700Schasinglulu { 64*91f16700Schasinglulu gicv3_rdistif_init(plat_my_core_pos()); 65*91f16700Schasinglulu gicv3_cpuif_enable(plat_my_core_pos()); 66*91f16700Schasinglulu } 67*91f16700Schasinglulu 68*91f16700Schasinglulu /* 69*91f16700Schasinglulu * Stubs for Redistributor power management. Although GICv3 doesn't have 70*91f16700Schasinglulu * Redistributor interface, these are provided for the sake of uniform GIC API 71*91f16700Schasinglulu */ 72*91f16700Schasinglulu void plat_ls_gic_redistif_on(void) 73*91f16700Schasinglulu { 74*91f16700Schasinglulu } 75*91f16700Schasinglulu 76*91f16700Schasinglulu void plat_ls_gic_redistif_off(void) 77*91f16700Schasinglulu { 78*91f16700Schasinglulu } 79