Remove loading of /luma/TwlBg.cxi, fix bugs.
This commit is contained in:
parent
384dd2ad81
commit
33238cee54
@ -43,7 +43,7 @@ static const firmSectionHeader *section;
|
|||||||
u32 config,
|
u32 config,
|
||||||
emuOffset;
|
emuOffset;
|
||||||
|
|
||||||
bool isN3DS, isDevUnit;
|
bool isN3DS, isDevUnit, isFirmlaunch;
|
||||||
|
|
||||||
FirmwareSource firmSource;
|
FirmwareSource firmSource;
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ void main(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
launchFirm(firmType, isFirmlaunch);
|
launchFirm(firmType);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u32 loadFirm(FirmwareType firmType)
|
static inline u32 loadFirm(FirmwareType firmType)
|
||||||
@ -350,7 +350,7 @@ static inline void copySection0AndInjectSystemModules(FirmwareType firmType)
|
|||||||
u8 *pos = arm11Section0, *end = pos + section[0].size;
|
u8 *pos = arm11Section0, *end = pos + section[0].size;
|
||||||
u32 n = 0;
|
u32 n = 0;
|
||||||
|
|
||||||
u32 loaderIndex = 0, twlBgIndex = 0;
|
u32 loaderIndex = 0;
|
||||||
|
|
||||||
while(pos < end)
|
while(pos < end)
|
||||||
{
|
{
|
||||||
@ -361,42 +361,25 @@ static inline void copySection0AndInjectSystemModules(FirmwareType firmType)
|
|||||||
pos += modules[n].size;
|
pos += modules[n].size;
|
||||||
|
|
||||||
if(firmType == NATIVE_FIRM && memcmp(modules[n].name, "loader", 7) == 0) loaderIndex = n;
|
if(firmType == NATIVE_FIRM && memcmp(modules[n].name, "loader", 7) == 0) loaderIndex = n;
|
||||||
else if(firmType == TWL_FIRM && memcmp(modules[n].name, "TwlBg", 6) == 0) twlBgIndex = n;
|
|
||||||
|
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 twlBgSize = 0;
|
|
||||||
|
|
||||||
if(firmType == NATIVE_FIRM)
|
if(firmType == NATIVE_FIRM)
|
||||||
{
|
{
|
||||||
modules[loaderIndex].size = injector_size;
|
modules[loaderIndex].size = injector_size;
|
||||||
modules[loaderIndex].addr = injector;
|
modules[loaderIndex].addr = injector;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(firmType == TWL_FIRM)
|
|
||||||
{
|
|
||||||
twlBgSize = getFileSize("/luma/TwlBg.cxi");
|
|
||||||
if(twlBgSize != 0)
|
|
||||||
{
|
|
||||||
modules[twlBgIndex].size = twlBgSize;
|
|
||||||
modules[twlBgIndex].addr = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = section[0].address;
|
pos = section[0].address;
|
||||||
for(u32 i = 0; i < n; i++)
|
for(u32 i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
if(firmType == TWL_FIRM && i == twlBgIndex && twlBgSize != 0)
|
memcpy(pos, modules[i].addr, modules[i].size);
|
||||||
fileRead(pos, "/luma/TwlBg.cxi");
|
|
||||||
else if(modules[i].addr != NULL)
|
|
||||||
memcpy(pos, modules[i].addr, modules[i].size);
|
|
||||||
|
|
||||||
pos += modules[i].size;
|
pos += modules[i].size;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void launchFirm(FirmwareType firmType, bool isFirmlaunch)
|
static inline void launchFirm(FirmwareType firmType)
|
||||||
{
|
{
|
||||||
//If we're booting NATIVE_FIRM, section0 needs to be copied separately to inject 3ds_injector
|
//If we're booting NATIVE_FIRM, section0 needs to be copied separately to inject 3ds_injector
|
||||||
u32 sectionNum;
|
u32 sectionNum;
|
||||||
|
@ -54,4 +54,4 @@ static inline void patchNativeFirm(u32 firmVersion, FirmwareSource nandType, u32
|
|||||||
static inline void patchLegacyFirm(FirmwareType firmType);
|
static inline void patchLegacyFirm(FirmwareType firmType);
|
||||||
static inline void patchSafeFirm(void);
|
static inline void patchSafeFirm(void);
|
||||||
static inline void copySection0AndInjectSystemModules(FirmwareType firmType);
|
static inline void copySection0AndInjectSystemModules(FirmwareType firmType);
|
||||||
static inline void launchFirm(FirmwareType firmType, bool isFirmlaunch);
|
static inline void launchFirm(FirmwareType firmType);
|
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#define PDN_GPU_CNT (*(vu8 *)0x10141200)
|
|
||||||
#define ARM11_STUB_ADDRESS (0x25000000 - 0x30) //It's currently only 0x28 bytes large. We're putting 0x30 just to be sure here
|
#define ARM11_STUB_ADDRESS (0x25000000 - 0x30) //It's currently only 0x28 bytes large. We're putting 0x30 just to be sure here
|
||||||
#define WAIT_FOR_ARM9() *arm11Entry = 0; while(!*arm11Entry); ((void (*)())*arm11Entry)();
|
#define WAIT_FOR_ARM9() *arm11Entry = 0; while(!*arm11Entry); ((void (*)())*arm11Entry)();
|
||||||
|
|
||||||
|
@ -26,11 +26,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define PDN_MPCORE_CFG (*(vu32 *)0x10140FFC)
|
|
||||||
#define PDN_SPI_CNT (*(vu32 *)0x101401C0)
|
|
||||||
#define CFG_BOOTENV (*(vu32 *)0x10010000)
|
#define CFG_BOOTENV (*(vu32 *)0x10010000)
|
||||||
#define CFG_UNITINFO (*(vu8 *)0x10010010)
|
#define CFG_UNITINFO (*(vu8 *)0x10010010)
|
||||||
|
|
||||||
|
#define PDN_MPCORE_CFG (*(vu32 *)0x10140FFC)
|
||||||
|
#define PDN_SPI_CNT (*(vu32 *)0x101401C0)
|
||||||
|
#define PDN_GPU_CNT (*(vu8 *)0x10141200)
|
||||||
|
|
||||||
//Common data types
|
//Common data types
|
||||||
typedef uint8_t u8;
|
typedef uint8_t u8;
|
||||||
typedef uint16_t u16;
|
typedef uint16_t u16;
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include "draw.h"
|
#include "draw.h"
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
|
|
||||||
|
extern bool isFirmlaunch;
|
||||||
|
|
||||||
u32 waitInput(void)
|
u32 waitInput(void)
|
||||||
{
|
{
|
||||||
u32 pressedKey = 0,
|
u32 pressedKey = 0,
|
||||||
@ -56,7 +58,7 @@ u32 waitInput(void)
|
|||||||
|
|
||||||
void mcuReboot(void)
|
void mcuReboot(void)
|
||||||
{
|
{
|
||||||
if(PDN_GPU_CNT != 1) clearScreens();
|
if(!isFirmlaunch && PDN_GPU_CNT != 1) clearScreens();
|
||||||
|
|
||||||
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
||||||
|
|
||||||
@ -66,7 +68,7 @@ void mcuReboot(void)
|
|||||||
|
|
||||||
void mcuPowerOff(void)
|
void mcuPowerOff(void)
|
||||||
{
|
{
|
||||||
if(PDN_GPU_CNT != 1) clearScreens();
|
if(!isFirmlaunch && PDN_GPU_CNT != 1) clearScreens();
|
||||||
|
|
||||||
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user