This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

FVP + boot-wrapper-aarch64 Multi-Core Boot Failure

Description:

I'm using FVP + boot-wrapper-aarch64 to boot a kernel. When running with a single core, the boot process is successful. However, when enabling multiple cores, the boot fails.

Observations:

  • In boot-wrapper-aarch64/common/init.c, it appears that only the primary CPU (CPU 0) executes the following function:

void cpu_init_bootwrapper(void)
{
    static volatile unsigned int cpu_next = 0;
    unsigned int cpu = this_cpu_logical_id();

    if (cpu == 0)
        init_bootwrapper();

    while (cpu_next != cpu)
        wfe();

    cpu_init_self(cpu);

    cpu_next = cpu + 1;
    dsb(sy);
    sev();

    if (cpu != 0)
        return;

    while (cpu_next != NR_CPUS)
        wfe();

    print_string("All CPUs initialized. Entering kernel...\r\n\r\n");
}

  • Possible causes:

    1. SEV() issue: Could sev() fail to activate secondary CPUs?
    2. CPU power-on issue: Are secondary CPUs actually powered on?

Additional Information:

  • I only use boot-wrapper-aarch64, without TF-A.
  • Could this be an FVP issue? Does FVP handle SMC PSCI requests properly for boot-wrapper-aarch64?
  • I suspect that boot-wrapper-aarch64 itself plays the role of TF-A, so it should handle PSCI requests.

Further questions:

  1. How can I trace the CPU states in FVP Base Model?
  2. How can I determine whether each CPU is in EL1 or EL3?
  3. How can I monitor whether each CPU successfully powers on/off via PSCI requests?

Any insights or debugging methods would be appreciated 

Parents
  • Thanks for your reply. You are correct: After reviewing the boot-wrapper-aarch64 code, I found that it indeed implements the PSCI method and responds to PSCI requests, this is not related to FVP.

    Additionally, TarmacTrace.so does output the CPU status, including the EL status.

    Regarding the boot failure, I discovered that boot-wrapper-aarch64 only supports booting with all cores reset at system startup. To resolve this, I should use the following FVP parameter:

    -C pctl.startup=0.0.0.*

    Previously, this parameter was set to 0.0.0.0. At that time, I used AFT to boot, which supports two boot modes: one where all cores are reset at system startup and another where only the primary CPU is reset.

Reply
  • Thanks for your reply. You are correct: After reviewing the boot-wrapper-aarch64 code, I found that it indeed implements the PSCI method and responds to PSCI requests, this is not related to FVP.

    Additionally, TarmacTrace.so does output the CPU status, including the EL status.

    Regarding the boot failure, I discovered that boot-wrapper-aarch64 only supports booting with all cores reset at system startup. To resolve this, I should use the following FVP parameter:

    -C pctl.startup=0.0.0.*

    Previously, this parameter was set to 0.0.0.0. At that time, I used AFT to boot, which supports two boot modes: one where all cores are reset at system startup and another where only the primary CPU is reset.

Children
No data