Skip to content

loader: support spin table SMP booting#453

Open
Ivan-Velickovic wants to merge 1 commit intomainfrom
rpi4b_smp_fix
Open

loader: support spin table SMP booting#453
Ivan-Velickovic wants to merge 1 commit intomainfrom
rpi4b_smp_fix

Conversation

@Ivan-Velickovic
Copy link
Collaborator

@Ivan-Velickovic Ivan-Velickovic commented Mar 25, 2026

Pretty much every single ARM platform that we want to support uses PSCI for booting secondary cores, except for Raspberry Pi 4B which uses a spin-table mechanism.

TODO:

  • Fix release mode case where print lock is not used, have local patches but need to test.

Closes #401.

Pretty much every single ARM platformm that we want to support uses
PSCI for booting secondary cores, except for Rasberry Pi 4B which
uses a spin-table mechanism.

Signed-off-by: Ivan Velickovic <i.velickovic@unsw.edu.au>

*release_addr = (uint64_t)arm_spin_table_secondary_cpu_entry_asm;
/* Ensure that the write to release address occurs before waking up the secondary CPU. */
asm volatile("dsb sy" ::: "memory");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The dsb can also be explained using the following text from Arm ARM:

$\textsf{I}_\textsf{DVZXD}$ Arm recommends that software includes a DSB instruction before any SEV instruction. DSB instruction ensures that no instructions, including any SEV instructions, that appear in program order after the DSB instruction, can execute until the DSB instruction has completed

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also say "finishes" instead of "occurs", as that is more explicit.

(Cool, I couldn't figure out a way to do those subscripts for Arm references, now I know how.)

Comment on lines -19 to +28
* For the moment this code assumes that CPUs are booted using the ARM PSCI
* standard. We reference Version 1.3 issue F.b.
* Most of this code that CPUs are booted using the ARM PSCI standard.
* We reference Version 1.3 issue F.b.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are you trying to say here?

"For booting CPUs with PSCI we reference Verions 1.3 issue F.b of the Arm PSCI standard."?

But if you keep the "Most of this code assumes" bit, it would make more sense to have it at the top of the file.


*release_addr = (uint64_t)arm_spin_table_secondary_cpu_entry_asm;
/* Ensure that the write to release address occurs before waking up the secondary CPU. */
asm volatile("dsb sy" ::: "memory");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also say "finishes" instead of "occurs", as that is more explicit.

(Cool, I couldn't figure out a way to do those subscripts for Arm references, now I know how.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rasberry Pi 4B regression since 2.1.0

3 participants