Adapt changes from b9s/next

This commit is contained in:
TuxSH
2017-05-23 13:33:32 +02:00
parent 53209b9be0
commit dd21a3930d
16 changed files with 113 additions and 53 deletions

View File

@@ -27,7 +27,10 @@
#include "types.h"
#include "memory.h"
static volatile Arm11Operation *operation = (volatile Arm11Operation *)0x1FFFFFF0;
void prepareForFirmlaunch(void);
extern u32 prepareForFirmlaunchSize;
extern volatile Arm11Operation operation;
static void initScreensSequence(u32 brightnessLevel)
{
@@ -160,23 +163,16 @@ static void deinitScreens(void)
*(vu32 *)0x10202014 = 0;
}
static void prepareForFirmlaunch(void)
{
*ARM11_CORE0_MAILBOX_ENTRYPOINT = 0;
while(*ARM11_CORE0_MAILBOX_ENTRYPOINT == 0);
((void (*)(void))*ARM11_CORE0_MAILBOX_ENTRYPOINT)();
}
void main(void)
{
*operation = NO_ARM11_OPERATION;
operation = ARM11_READY;
while(true)
{
switch(*operation)
switch(operation)
{
case NO_ARM11_OPERATION:
break;
case ARM11_READY:
continue;
case INIT_SCREENS_SEQUENCE:
initScreensSequence(*(vu32 *)ARM11_PARAMETERS_ADDRESS);
break;
@@ -196,12 +192,13 @@ void main(void)
deinitScreens();
break;
case PREPARE_ARM11_FOR_FIRMLAUNCH:
memcpy((void *)0x1FFFFC00, (void *)prepareForFirmlaunch, 0x2C);
*operation = NO_ARM11_OPERATION;
memcpy((void *)0x1FFFFC00, (void *)prepareForFirmlaunch, prepareForFirmlaunchSize);
*(vu32 *)0x1FFFFFFC = 0;
operation = ARM11_READY;
((void (*)(void))0x1FFFFC00)();
break;
}
*operation = NO_ARM11_OPERATION;
operation = ARM11_READY;
}
}

View File

@@ -17,11 +17,35 @@
@ Additional Terms 7.b of GPLv3 applies to this file: Requiring preservation of specified
@ reasonable legal notices or author attributions in that material or in the Appropriate Legal
@ Notices displayed by works containing it.
.section .text.start
.align 4
.global _start
.type _start, %function
_start:
b start
.global operation
operation:
.word 0
start:
cpsid aif
ldr sp, =0x1FFFE000
ldr sp, =__stack_top__
b main
.global prepareForFirmlaunch
.type prepareForFirmlaunch, %function
prepareForFirmlaunch:
mov r0, #0x20000000
_wait_for_core0_entrypoint_loop:
ldr r1, [r0, #-4] @ check if core0's entrypoint is 0
cmp r1, #0
beq _wait_for_core0_entrypoint_loop
bx r1 @ jump to core0's entrypoint
prepareForFirmlaunchEnd:
.global prepareForFirmlaunchSize
prepareForFirmlaunchSize: .word prepareForFirmlaunchEnd - prepareForFirmlaunch

View File

@@ -40,8 +40,7 @@ typedef volatile u64 vu64;
#define SCREEN_HEIGHT 240
#define SCREEN_TOP_FBSIZE (3 * SCREEN_TOP_WIDTH * SCREEN_HEIGHT)
#define SCREEN_BOTTOM_FBSIZE (3 * SCREEN_BOTTOM_WIDTH * SCREEN_HEIGHT)
#define ARM11_CORE0_MAILBOX_ENTRYPOINT ((vu32 *)0x1FFFFFFC)
#define ARM11_PARAMETERS_ADDRESS 0x1FFFC000
#define ARM11_PARAMETERS_ADDRESS 0x1FFFF000
struct fb {
u8 *top_left;
@@ -51,12 +50,12 @@ struct fb {
typedef enum
{
NO_ARM11_OPERATION = 0,
INIT_SCREENS_SEQUENCE,
INIT_SCREENS_SEQUENCE = 0,
SETUP_FRAMEBUFFERS,
CLEAR_SCREENS,
SWAP_FRAMEBUFFERS,
UPDATE_BRIGHTNESS,
DEINIT_SCREENS,
PREPARE_ARM11_FOR_FIRMLAUNCH,
ARM11_READY,
} Arm11Operation;