Newer
Older
uwuboot / source / arm9 / linux.arm.c
#include <stdio.h>
#include <stdbool.h>
#include "types.h"
#include "cache.h"
#include "mem_map.h"
#include "arm9/fatfs/ff.h"
#include "arm9/ndma.h"
#include "arm9/utils.h"
#include "arm9/linux_config.h"
#include "arm9/linux.h"



void loadLinux(void)
{
	u32 bytesRead;
	extern u32 linux_payloads_start;
	extern u32 linux_payloads_end;


	initGfx();
	loadFile(LINUXIMAGE_FILENAME, (void*)ZIMAGE_ADDR, 0x4000000, NULL);
	loadFile(DTB_FILENAME, (void*)PARAMS_TMP_ADDR, 0x400000, &bytesRead);
	f_mount(NULL, "sdmc:", 1);

	*((vu32*)0x214FFFFC) = bytesRead;

	NDMA_copy((void*)0x23F00000, &linux_payloads_start, ((u32)&linux_payloads_end - (u32)&linux_payloads_start)>>2);
	invalidateICacheRange((void*)0x23F00000, ((u32)&linux_payloads_end - (u32)&linux_payloads_start));

	*((vu32*)CORE_SYNC_ID) = 0x544F4F42;

	__asm__ __volatile__("ldr pc, =0x23F00000");
}