mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 18:44:22 +00:00
Merge "fix(gicv3): do not assume redistributors are powered down" into integration
This commit is contained in:
commit
cf084b3620
1 changed files with 14 additions and 3 deletions
|
@ -35,11 +35,22 @@ uintptr_t gicv3_get_multichip_base(uint32_t spi_id, uintptr_t gicd_base)
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
void gicv3_rdistif_mark_core_awake(uintptr_t gicr_base)
|
void gicv3_rdistif_mark_core_awake(uintptr_t gicr_base)
|
||||||
{
|
{
|
||||||
|
uint32_t waker = gicr_read_waker(gicr_base);
|
||||||
|
|
||||||
|
/* Only try to mark it as awake when it is asleep. */
|
||||||
|
if ((waker & WAKER_PS_BIT) == 0U) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The WAKER_PS_BIT should be changed to 0
|
* ProcessorSleep must only be changed when ChildrenAsleep is 1.
|
||||||
* only when WAKER_CA_BIT is 1.
|
* If PS is 1 and CA isn't, wait for that to happen, but warn.
|
||||||
*/
|
*/
|
||||||
assert((gicr_read_waker(gicr_base) & WAKER_CA_BIT) != 0U);
|
if ((waker & WAKER_CA_BIT) == 0U) {
|
||||||
|
WARN("GICR_WAKER.ChildrenAsleep unexpectedly set, waiting...\n");
|
||||||
|
while ((gicr_read_waker(gicr_base) & WAKER_CA_BIT) == 0U) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Mark the connected core as awake */
|
/* Mark the connected core as awake */
|
||||||
gicr_write_waker(gicr_base, gicr_read_waker(gicr_base) & ~WAKER_PS_BIT);
|
gicr_write_waker(gicr_base, gicr_read_waker(gicr_base) & ~WAKER_PS_BIT);
|
||||||
|
|
Loading…
Add table
Reference in a new issue