Move screen management code to screen.c and fix cache-related issues

- Screen brightness is now updated as soon as the user selects a brightness option, on all boot environments
- Payloads can now be 1KB bigger
- Some cache-related bugs may have been fixed
This commit is contained in:
TuxSH
2016-06-10 21:48:22 +02:00
parent f78dd5365c
commit e593584a47
23 changed files with 324 additions and 314 deletions

View File

@@ -1,7 +1,7 @@
ENTRY(_start)
SECTIONS
{
. = 0x24FFFB00;
. = 0x24FFFF00;
.text.start : { *(.text.start) }
.text : { *(.text) }
.data : { *(.data) }

View File

@@ -4,7 +4,8 @@ void main(void)
{
void *payloadAddress = (void *)0x23F00000;
memcpy(payloadAddress, (void*)0x24F00000, *(u32 *)0x24FFFB04);
memcpy(payloadAddress, (void*)0x24F00000, *(u32 *)0x24FFFF04);
cleanInvalidateDCacheAndDMB(); //Ensure that all memory transfers have completed and that the data cache has been flushed
((void (*)())payloadAddress)();
}

View File

@@ -7,4 +7,9 @@ void memcpy(void *dest, const void *src, u32 size)
for(u32 i = 0; i < size; i++)
destc[i] = srcc[i];
}
void cleanInvalidateDCacheAndDMB(void)
{
((void (*)())0xFFFF0830)(); //Why write our own code when it's well implemented in the unprotected bootROM?
}

View File

@@ -2,4 +2,14 @@
#include "types.h"
void memcpy(void *dest, const void *src, u32 size);
void memcpy(void *dest, const void *src, u32 size);
/***
Cleans and invalidates the data cache, then waits for all memory transfers to be finished.
This function MUST be called before doing the following:
- rebooting
- powering down
- setting the ARM11 entrypoint to execute a function
- jumping to a payload (?)
***/
void cleanInvalidateDCacheAndDMB(void);