0

I have been creating a basic core management tool which is able to dynamically turn CPU cores on and off using Arm's PSCI CPU_ON and CPU_OFF functions. This worked great on QEMU, however moving onto real hardware (particularly an OdroidC4), turning the core back on didn't work.

When I attempt to turn a core on, it is stuck in the "PENDING" state which can be seen via the AFFINITY_INFO PSCI function. It seems like the entry_point given to CPU_ON is just not being called on the OdroidC4. Below is a code snippet of the function I am trying to get CPU_ON to call. It simply writes into UART, however, I do not see this output.

#define UART_WFIFO              0x00

BEGIN_FUNC(bootstrap_start)
    movz x0, #0xff80, LSL #16
    movk x0, #0x3000

    mov w2, #'\n'
    str w2, [x0, #UART_WFIFO]
    mov w3, #'B'
    str w3, [x0, #UART_WFIFO]
    mov w4, #'\n'
    str w4, [x0, #UART_WFIFO]

    ret
END_FUNC(bootstrap_start)

The bootstrap_start function is located at 0x10_000_000 in physical memory. This all worked on QEMU, but happened to break moving to the OdroidC4. Anybody know why this might be happening or how to debug this if I don't have access to GDB?

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.