From 5680f81cecbbbb8a584dcf62bcb766a1cb25345f Mon Sep 17 00:00:00 2001 From: Ghennadi Procopciuc Date: Tue, 26 Nov 2024 17:05:31 +0200 Subject: [PATCH] feat(s32g274a): dynamically map GIC regions Dynamically add entries for the GIC distributor and all its redistributors for the cases when the platform is booted using enabled MMU. Change-Id: Ia810ec2329993057173e8fc25620a3df59b1e55d Signed-off-by: Ghennadi Procopciuc --- plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c | 34 ++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c b/plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c index 03bf35cc1..ddd0e29bc 100644 --- a/plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c +++ b/plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c @@ -4,7 +4,9 @@ * SPDX-License-Identifier: BSD-3-Clause */ +#include #include +#include #include #include @@ -42,6 +44,31 @@ struct entry_point_info *bl31_plat_get_next_image_ep_info(uint32_t type) return &bl33_image_ep_info; } +static int mmap_gic(const gicv3_driver_data_t *gic_data) +{ + size_t gicr_size; + int ret; + + ret = mmap_add_dynamic_region(gic_data->gicd_base, + gic_data->gicd_base, + PAGE_SIZE_64KB, + MT_DEVICE | MT_RW | MT_SECURE); + if (ret != 0) { + return ret; + } + + gicr_size = gicv3_redist_size(0x0U); + ret = mmap_add_dynamic_region(gic_data->gicr_base, + gic_data->gicr_base, + gicr_size * gic_data->rdistif_num, + MT_DEVICE | MT_RW | MT_SECURE); + if (ret != 0) { + return ret; + } + + return 0; +} + void bl31_platform_setup(void) { static uintptr_t rdistif_base_addrs[PLATFORM_CORE_COUNT]; @@ -52,8 +79,13 @@ void bl31_platform_setup(void) .rdistif_base_addrs = rdistif_base_addrs, .mpidr_to_core_pos = s32g2_mpidr_to_core_pos, }; - unsigned int pos = plat_my_core_pos(); + int ret; + + ret = mmap_gic(&plat_gic_data); + if (ret != 0) { + panic(); + } gicv3_driver_init(&plat_gic_data); gicv3_distif_init();