On Fri, Feb 11, 2022 at 11:29:39AM +0000, Andre Przywara wrote: > The branch_if_master macro jumps to a label if the CPU is the "master" > core, which we define as having all affinity levels set to 0. To check > for this condition, we need to mask off some bits from the MPIDR > register, then compare the remaining register value against zero. > > The implementation of this was slighly broken (it preserved the upper > RES0 bits), overly complicated and hard to understand, especially since > it lacked comments. The same was true for the very similar > branch_if_slave macro. > > Use a much shorter assembly sequence for those checks, use the same > masking for both macros (just negate the final branch), and put some > comments on them, to make it clear what the code does. > This allows to drop the second temporary register for branch_if_master, > so we adjust all call sites as well. > > Also use the opportunity to remove a misleading comment: the macro > works fine on SoCs with multiple clusters. Judging by the commit > message, the original problem with the Juno SoC stems from the fact that > the master CPU *can* be configured to be from cluster 1, so the > assumption that the master CPU has all affinity values set to 0 does not > hold there. But this is already mentioned above in a comment, so remove > the extra comment. > > Signed-off-by: Andre Przywara Applied to u-boot/next, thanks! -- Tom