blob: c92587b696223640a7d7b0961fafc9583ddcaa31 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
#include <cpu/power/spr.h>
#include <program_loading.h>
/*
* Payload's entry point is an offset to the real entry point, not to OPD
* (Official Procedure Descriptor) for entry point.
*
* Also pass FDT address to payload stored in SPR_HSPRG0 by bootblock.
*/
void platform_prog_run(struct prog *prog)
{
asm volatile(
"mfspr %%r27, %0\n" /* pass pointer to FDT */
"mtctr %2\n"
"mr 3, %1\n"
"bctr\n"
:: "i"(SPR_HSPRG0), "r"(prog_entry_arg(prog)), "r"(prog_entry(prog))
: "memory");
}