10818e9e8SAntonio Nino Diaz /* 20818e9e8SAntonio Nino Diaz * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 30818e9e8SAntonio Nino Diaz * 40818e9e8SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 50818e9e8SAntonio Nino Diaz */ 60818e9e8SAntonio Nino Diaz 70818e9e8SAntonio Nino Diaz #include <platform_def.h> 80818e9e8SAntonio Nino Diaz 9*09d40e0eSAntonio Nino Diaz #include <drivers/arm/gicv2.h> 10*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 11*09d40e0eSAntonio Nino Diaz 120818e9e8SAntonio Nino Diaz /****************************************************************************** 130818e9e8SAntonio Nino Diaz * On a GICv2 system, the Group 1 secure interrupts are treated as Group 0 140818e9e8SAntonio Nino Diaz * interrupts. 150818e9e8SAntonio Nino Diaz *****************************************************************************/ 160818e9e8SAntonio Nino Diaz static const interrupt_prop_t poplar_interrupt_props[] = { 170818e9e8SAntonio Nino Diaz POPLAR_G1S_IRQ_PROPS(GICV2_INTR_GROUP0), 180818e9e8SAntonio Nino Diaz POPLAR_G0_IRQ_PROPS(GICV2_INTR_GROUP0) 190818e9e8SAntonio Nino Diaz }; 200818e9e8SAntonio Nino Diaz 210818e9e8SAntonio Nino Diaz static unsigned int target_mask_array[PLATFORM_CORE_COUNT]; 220818e9e8SAntonio Nino Diaz 230818e9e8SAntonio Nino Diaz static const gicv2_driver_data_t poplar_gic_data = { 240818e9e8SAntonio Nino Diaz .gicd_base = POPLAR_GICD_BASE, 250818e9e8SAntonio Nino Diaz .gicc_base = POPLAR_GICC_BASE, 260818e9e8SAntonio Nino Diaz .interrupt_props = poplar_interrupt_props, 270818e9e8SAntonio Nino Diaz .interrupt_props_num = ARRAY_SIZE(poplar_interrupt_props), 280818e9e8SAntonio Nino Diaz .target_masks = target_mask_array, 290818e9e8SAntonio Nino Diaz .target_masks_num = ARRAY_SIZE(target_mask_array), 300818e9e8SAntonio Nino Diaz }; 310818e9e8SAntonio Nino Diaz 320818e9e8SAntonio Nino Diaz /****************************************************************************** 330818e9e8SAntonio Nino Diaz * Helper to initialize the GICv2 only driver. 340818e9e8SAntonio Nino Diaz *****************************************************************************/ poplar_gic_driver_init(void)350818e9e8SAntonio Nino Diazvoid poplar_gic_driver_init(void) 360818e9e8SAntonio Nino Diaz { 370818e9e8SAntonio Nino Diaz gicv2_driver_init(&poplar_gic_data); 380818e9e8SAntonio Nino Diaz } 390818e9e8SAntonio Nino Diaz poplar_gic_init(void)400818e9e8SAntonio Nino Diazvoid poplar_gic_init(void) 410818e9e8SAntonio Nino Diaz { 420818e9e8SAntonio Nino Diaz gicv2_distif_init(); 430818e9e8SAntonio Nino Diaz gicv2_pcpu_distif_init(); 440818e9e8SAntonio Nino Diaz gicv2_set_pe_target_mask(plat_my_core_pos()); 450818e9e8SAntonio Nino Diaz gicv2_cpuif_enable(); 460818e9e8SAntonio Nino Diaz } 470818e9e8SAntonio Nino Diaz 480818e9e8SAntonio Nino Diaz /****************************************************************************** 490818e9e8SAntonio Nino Diaz * Helper to enable the GICv2 CPU interface 500818e9e8SAntonio Nino Diaz *****************************************************************************/ poplar_gic_cpuif_enable(void)510818e9e8SAntonio Nino Diazvoid poplar_gic_cpuif_enable(void) 520818e9e8SAntonio Nino Diaz { 530818e9e8SAntonio Nino Diaz gicv2_cpuif_enable(); 540818e9e8SAntonio Nino Diaz } 550818e9e8SAntonio Nino Diaz 560818e9e8SAntonio Nino Diaz /****************************************************************************** 570818e9e8SAntonio Nino Diaz * Helper to initialize the per cpu distributor interface in GICv2 580818e9e8SAntonio Nino Diaz *****************************************************************************/ poplar_gic_pcpu_init(void)590818e9e8SAntonio Nino Diazvoid poplar_gic_pcpu_init(void) 600818e9e8SAntonio Nino Diaz { 610818e9e8SAntonio Nino Diaz gicv2_pcpu_distif_init(); 620818e9e8SAntonio Nino Diaz gicv2_set_pe_target_mask(plat_my_core_pos()); 630818e9e8SAntonio Nino Diaz } 64