mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 02:54:24 +00:00
GICv2: Fix populating PE target data
This patch brings in the following fixes: - The per-PE target data initialized during power up needs to be flushed so as to be visible to other PEs. - Setup per-PE target data for the primary PE as well. At present, this was only setup for secondary PEs when they were powered on. Change-Id: Ibe3a57c14864e37b2326dd7ab321a5c7bf80e8af Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
This commit is contained in:
parent
bf2de7e499
commit
058efeef98
2 changed files with 21 additions and 3 deletions
|
@ -308,9 +308,26 @@ void gicv2_set_pe_target_mask(unsigned int proc_num)
|
||||||
if (driver_data->target_masks[proc_num])
|
if (driver_data->target_masks[proc_num])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Read target register corresponding to this CPU */
|
/*
|
||||||
driver_data->target_masks[proc_num] =
|
* Update target register corresponding to this CPU and flush for it to
|
||||||
gicv2_get_cpuif_id(driver_data->gicd_base);
|
* be visible to other CPUs.
|
||||||
|
*/
|
||||||
|
if (driver_data->target_masks[proc_num] == 0) {
|
||||||
|
driver_data->target_masks[proc_num] =
|
||||||
|
gicv2_get_cpuif_id(driver_data->gicd_base);
|
||||||
|
#if !HW_ASSISTED_COHERENCY
|
||||||
|
/*
|
||||||
|
* PEs only update their own masks. Primary updates it with
|
||||||
|
* caches on. But because secondaries does it with caches off,
|
||||||
|
* all updates go to memory directly, and there's no danger of
|
||||||
|
* secondaries overwriting each others' mask, despite
|
||||||
|
* target_masks[] not being cache line aligned.
|
||||||
|
*/
|
||||||
|
flush_dcache_range((uintptr_t)
|
||||||
|
&driver_data->target_masks[proc_num],
|
||||||
|
sizeof(driver_data->target_masks[proc_num]));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
|
@ -51,6 +51,7 @@ void plat_arm_gic_init(void)
|
||||||
{
|
{
|
||||||
gicv2_distif_init();
|
gicv2_distif_init();
|
||||||
gicv2_pcpu_distif_init();
|
gicv2_pcpu_distif_init();
|
||||||
|
gicv2_set_pe_target_mask(plat_my_core_pos());
|
||||||
gicv2_cpuif_enable();
|
gicv2_cpuif_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue