mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
fix(pmu): fix breakage on ARMv7 CPUs with SP_min as BL32
While comments introduced with the original commit claim that
pmuv3_disable_el3()/pmuv3_init_el3() are compatible with PMUv2 and
PMUv1, this is not true in practice: The function accesses the Secure
Debug Control Register (SDCR), which only available to ARMv8 CPUs.
ARMv8 CPUs executing in AArch32 mode would thus be able to disable
their PMUv3, while ARMv7 CPUs would hang trying to access the SDCR.
Fix this by only doing PMUv3 handling when we know a PMUv3 to be
available. This resolves boot hanging on all STM32MP15 platforms
that use SP_min as BL32 instead of OP-TEE.
Change-Id: I40f7611cf46b89a30243cc55bf55a8d9c9de93c8
Fixes: c73686a11c
("feat(pmu): introduce pmuv3 lib/extensions folder")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
This commit is contained in:
parent
42d4111dcf
commit
e6f8fc7437
2 changed files with 3 additions and 9 deletions
|
@ -149,11 +149,9 @@ static void enable_extensions_nonsecure(bool el2_unused)
|
|||
trf_init_el3();
|
||||
}
|
||||
|
||||
/*
|
||||
* Also applies to PMU < v3. The PMU is only disabled for EL3 and Secure
|
||||
* state execution. This does not affect lower NS ELs.
|
||||
*/
|
||||
pmuv3_init_el3();
|
||||
if (read_feat_pmuv3_id_field() >= 3U) {
|
||||
pmuv3_init_el3();
|
||||
}
|
||||
#endif /* IMAGE_BL32 */
|
||||
}
|
||||
|
||||
|
|
|
@ -25,10 +25,6 @@ static u_register_t mtpmu_disable_el3(u_register_t sdcr)
|
|||
return sdcr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Applies to all PMU versions. Name is PMUv3 for compatibility with aarch64 and
|
||||
* to not clash with platforms which reuse the PMU name
|
||||
*/
|
||||
void pmuv3_init_el3(void)
|
||||
{
|
||||
u_register_t sdcr = read_sdcr();
|
||||
|
|
Loading…
Add table
Reference in a new issue