xref: /rk3399_ARM-atf/plat/hisilicon/poplar/poplar_gicv2.c (revision 9a207532f8216bf83fed0891fed9ed0bc72ca450)
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 Diaz void 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 Diaz void 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 Diaz void 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 Diaz void 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