improved generic payload entry point
This commit is contained in:
@@ -1,29 +1,13 @@
|
||||
#include "bootrom_addr.h"
|
||||
#include "dev_util.h"
|
||||
#include "bootrom_addr.h"
|
||||
|
||||
extern uint64_t entry_sync(uint64_t *args);
|
||||
extern uint64_t entry_async(uint64_t *base);
|
||||
|
||||
TEXT_SECTION
|
||||
uint64_t _start(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3,
|
||||
uint64_t arg4, uint64_t arg5, uint64_t arg6, uint64_t arg7)
|
||||
PAYLOAD_SECTION
|
||||
void load_sync_entry()
|
||||
{
|
||||
uint64_t entry, args[8];
|
||||
__asm__ volatile ("mov %0, x30" : "=r" (entry));
|
||||
uint64_t addr = ADDR_SYNC_ENTRY;
|
||||
__asm__ volatile("mov x9, %0" :: "i" (addr & 0xFFFFu));
|
||||
__asm__ volatile("movk x9, %0, LSL #16" :: "i" ((addr & 0xFFFF0000u) >> 16u));
|
||||
__asm__ volatile("movk x9, %0, LSL #32" :: "i" ((addr & 0xFFFF00000000u) >> 32u));
|
||||
__asm__ volatile("movk x9, %0, LSL #48" :: "i" ((addr & 0xFFFF000000000000u) >> 48u));
|
||||
|
||||
if(entry == ADDR_SYNC_ENTRY /* todo: correct entry */)
|
||||
{
|
||||
args[0] = arg0;
|
||||
args[1] = arg1;
|
||||
args[2] = arg2;
|
||||
args[3] = arg3;
|
||||
args[4] = arg4;
|
||||
args[5] = arg5;
|
||||
args[6] = arg6;
|
||||
args[7] = arg7;
|
||||
|
||||
return entry_sync(args);
|
||||
}
|
||||
else
|
||||
return entry_async((uint64_t *) arg0);
|
||||
}
|
||||
Reference in New Issue
Block a user