mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
[exosphere] Support for new exo config
This commit is contained in:
parent
de830df7e7
commit
c8052e5b50
3 changed files with 70 additions and 24 deletions
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018 st4rk
|
* Copyright (c) 2018 st4rk
|
||||||
* Copyright (c) 2018 Ced2911
|
* Copyright (c) 2018 Ced2911
|
||||||
* Copyright (c) 2018 CTCaer
|
* Copyright (c) 2018-2019 CTCaer
|
||||||
* Copyright (c) 2018 balika011
|
* Copyright (c) 2018 balika011
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
@ -518,9 +518,6 @@ int hos_launch(ini_sec_t *cfg)
|
||||||
|
|
||||||
gfx_printf(&gfx_con, "Rebuilt and loaded pkg2\n");
|
gfx_printf(&gfx_con, "Rebuilt and loaded pkg2\n");
|
||||||
|
|
||||||
// Unmount SD card.
|
|
||||||
sd_unmount();
|
|
||||||
|
|
||||||
gfx_printf(&gfx_con, "\n%kBooting...%k\n", 0xFF96FF00, 0xFFCCCCCC);
|
gfx_printf(&gfx_con, "\n%kBooting...%k\n", 0xFF96FF00, 0xFFCCCCCC);
|
||||||
|
|
||||||
// Clear pkg1/pkg2 keys.
|
// Clear pkg1/pkg2 keys.
|
||||||
|
@ -573,7 +570,10 @@ int hos_launch(ini_sec_t *cfg)
|
||||||
|
|
||||||
// Config Exosphère if booting full Atmosphère.
|
// Config Exosphère if booting full Atmosphère.
|
||||||
if (ctxt.atmosphere && ctxt.secmon)
|
if (ctxt.atmosphere && ctxt.secmon)
|
||||||
config_exosphere(ctxt.pkg1_id->id, ctxt.pkg1_id->kb, ctxt.debugmode);
|
config_exosphere(ctxt.pkg1_id->id, ctxt.pkg1_id->kb, (void *)ctxt.pkg1_id->warmboot_base, ctxt.pkg1, ctxt.debugmode);
|
||||||
|
|
||||||
|
// Unmount SD card.
|
||||||
|
sd_unmount();
|
||||||
|
|
||||||
// Finalize MC carveout.
|
// Finalize MC carveout.
|
||||||
if (ctxt.pkg1_id->kb <= KB_FIRMWARE_VERSION_301)
|
if (ctxt.pkg1_id->kb <= KB_FIRMWARE_VERSION_301)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 CTCaer
|
* Copyright (C) 2018-2019 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -17,25 +17,43 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "hos.h"
|
#include "hos.h"
|
||||||
|
#include "../mem/heap.h"
|
||||||
|
#include "../storage/sdmmc.h"
|
||||||
#include "../utils/types.h"
|
#include "../utils/types.h"
|
||||||
|
|
||||||
// Exosphère mailbox defines.
|
typedef struct _exo_cfg_t
|
||||||
#define EXO_MAGIC_ADDR 0x40002E40
|
{
|
||||||
#define EXO_MAGIC_VAL 0x31434258
|
vu32 magic;
|
||||||
#define EXO_FWNO_ADDR 0x40002E44
|
vu32 fwno;
|
||||||
#define EXO_FLAGS_ADDR 0x40002E48
|
vu32 flags;
|
||||||
#define EXO_FLAG_620_KGN (1 << 0)
|
vu32 rsvd;
|
||||||
#define EXO_FLAG_DBG_PRIV (1 << 1)
|
} exo_cfg_t;
|
||||||
#define EXO_FLAG_DBG_USER (1 << 2)
|
|
||||||
|
|
||||||
void config_exosphere(const char *id, u32 kb, bool debug)
|
typedef struct _atm_meta_t
|
||||||
|
{
|
||||||
|
uint32_t magic;
|
||||||
|
uint32_t fwno;
|
||||||
|
} wb_cfg_t;
|
||||||
|
|
||||||
|
#define ATM_WB_HEADER_OFF 0x244
|
||||||
|
#define ATM_WB_MAGIC 0x30544257
|
||||||
|
|
||||||
|
// Exosphère mailbox defines.
|
||||||
|
#define EXO_CFG_DEPR_ADDR 0x40002E40 // Deprecated.
|
||||||
|
#define EXO_CFG_ADDR 0x8000F000
|
||||||
|
#define EXO_MAGIC_DEPR_VAL 0x31434258
|
||||||
|
#define EXO_MAGIC_VAL 0x304F5845
|
||||||
|
#define EXO_FLAG_620_KGN (1 << 0)
|
||||||
|
#define EXO_FLAG_DBG_PRIV (1 << 1)
|
||||||
|
#define EXO_FLAG_DBG_USER (1 << 2)
|
||||||
|
|
||||||
|
void config_exosphere(const char *id, u32 kb, void *warmboot, void *pkg1, bool debug)
|
||||||
{
|
{
|
||||||
u32 exoFwNo = 0;
|
u32 exoFwNo = 0;
|
||||||
u32 exoFlags = 0;
|
u32 exoFlags = 0;
|
||||||
|
|
||||||
vu32 *mb_exo_magic = (vu32 *)EXO_MAGIC_ADDR;
|
volatile exo_cfg_t *exo_cfg_depr = (exo_cfg_t *)EXO_CFG_DEPR_ADDR;
|
||||||
vu32 *mb_exo_fw_no = (vu32 *)EXO_FWNO_ADDR;
|
volatile exo_cfg_t *exo_cfg = (exo_cfg_t *)EXO_CFG_ADDR;
|
||||||
vu32 *mb_exo_flags = (vu32 *)EXO_FLAGS_ADDR;
|
|
||||||
|
|
||||||
switch (kb)
|
switch (kb)
|
||||||
{
|
{
|
||||||
|
@ -53,14 +71,42 @@ void config_exosphere(const char *id, u32 kb, bool debug)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kb >= KB_FIRMWARE_VERSION_620)
|
if (kb == KB_FIRMWARE_VERSION_620)
|
||||||
exoFlags |= EXO_FLAG_620_KGN;
|
exoFlags |= EXO_FLAG_620_KGN;
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
exoFlags |= EXO_FLAG_DBG_PRIV;
|
exoFlags |= EXO_FLAG_DBG_PRIV;
|
||||||
|
|
||||||
// Set mailbox values.
|
// Set mailbox values.
|
||||||
*mb_exo_magic = EXO_MAGIC_VAL;
|
exo_cfg_depr->magic = EXO_MAGIC_VAL;
|
||||||
*mb_exo_fw_no = exoFwNo;
|
exo_cfg->magic = EXO_MAGIC_VAL;
|
||||||
*mb_exo_flags = exoFlags;
|
|
||||||
|
exo_cfg_depr->fwno = exoFwNo;
|
||||||
|
exo_cfg->fwno = exoFwNo;
|
||||||
|
|
||||||
|
exo_cfg_depr->flags = exoFlags;
|
||||||
|
exo_cfg->flags = exoFlags;
|
||||||
|
|
||||||
|
volatile wb_cfg_t *wb_cfg = (wb_cfg_t *)(warmboot + ATM_WB_HEADER_OFF);
|
||||||
|
|
||||||
|
if (wb_cfg->magic == ATM_WB_MAGIC)
|
||||||
|
{
|
||||||
|
wb_cfg->fwno = exoFwNo;
|
||||||
|
|
||||||
|
sdmmc_storage_t storage;
|
||||||
|
sdmmc_t sdmmc;
|
||||||
|
|
||||||
|
// Set warmboot binary rsa modulus.
|
||||||
|
u8 *rsa_mod = (u8 *)malloc(512);
|
||||||
|
|
||||||
|
sdmmc_storage_init_mmc(&storage, &sdmmc, SDMMC_4, SDMMC_BUS_WIDTH_8, 4);
|
||||||
|
sdmmc_storage_set_mmc_partition(&storage, 1);
|
||||||
|
sdmmc_storage_read(&storage, 1, 1, rsa_mod);
|
||||||
|
sdmmc_storage_end(&storage);
|
||||||
|
|
||||||
|
// Patch AutoRCM.
|
||||||
|
rsa_mod[0x10] = 0xF7;
|
||||||
|
|
||||||
|
memcpy(warmboot + 0x10, rsa_mod + 0x10, 0x100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 CTCaer
|
* Copyright (C) 2018-2019 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -19,6 +19,6 @@
|
||||||
|
|
||||||
#include "../utils/types.h"
|
#include "../utils/types.h"
|
||||||
|
|
||||||
void config_exosphere(const char *id, u32 kb, bool debug);
|
void config_exosphere(const char *id, u32 kb, void *warmboot, void *pkg1, bool debug);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue