mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-29 23:32:23 +00:00
Exosphere: Fix crash for certain games on newer firmwares
This commit is contained in:
parent
b5234e9efb
commit
c40bb9b317
1 changed files with 9 additions and 2 deletions
|
@ -25,6 +25,7 @@
|
||||||
#define SMC_PRIV_HANDLERS 0x9
|
#define SMC_PRIV_HANDLERS 0x9
|
||||||
|
|
||||||
#define DEBUG_LOG_SMCS 0
|
#define DEBUG_LOG_SMCS 0
|
||||||
|
#define DEBUG_PANIC_ON_FAILURE 0
|
||||||
|
|
||||||
/* User SMC prototypes */
|
/* User SMC prototypes */
|
||||||
uint32_t smc_set_config(smc_args_t *args);
|
uint32_t smc_set_config(smc_args_t *args);
|
||||||
|
@ -260,6 +261,7 @@ void call_smc_handler(uint32_t handler_id, smc_args_t *args) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if DEBUG_PANIC_ON_FAILURE
|
||||||
if (args->X[0] && (!is_aes_kek || args->X[3] <= EXOSPHERE_TARGET_FIRMWARE_DEFAULT_FOR_DEBUG))
|
if (args->X[0] && (!is_aes_kek || args->X[3] <= EXOSPHERE_TARGET_FIRMWARE_DEFAULT_FOR_DEBUG))
|
||||||
{
|
{
|
||||||
MAKE_REG32(get_iram_address_for_debug() + 0x4FF0) = handler_id;
|
MAKE_REG32(get_iram_address_for_debug() + 0x4FF0) = handler_id;
|
||||||
|
@ -268,6 +270,9 @@ void call_smc_handler(uint32_t handler_id, smc_args_t *args) {
|
||||||
*(volatile smc_args_t *)(get_iram_address_for_debug() + 0x4F00) = *args;
|
*(volatile smc_args_t *)(get_iram_address_for_debug() + 0x4F00) = *args;
|
||||||
panic(PANIC_REBOOT);
|
panic(PANIC_REBOOT);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
(void)(is_aes_kek);
|
||||||
|
#endif
|
||||||
(void)result; /* FIXME: result unused */
|
(void)result; /* FIXME: result unused */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,9 +641,11 @@ uint32_t smc_configure_carveout(smc_args_t *args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configuration is one-shot, and cannot be done multiple times. */
|
/* Configuration is one-shot, and cannot be done multiple times. */
|
||||||
|
if (exosphere_get_target_firmware() < EXOSPHERE_TARGET_FIRMWARE_300) {
|
||||||
if (g_configured_carveouts[carveout_id]) {
|
if (g_configured_carveouts[carveout_id]) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
configure_kernel_carveout(carveout_id + 4, address, size);
|
configure_kernel_carveout(carveout_id + 4, address, size);
|
||||||
g_configured_carveouts[carveout_id] = true;
|
g_configured_carveouts[carveout_id] = true;
|
||||||
|
|
Loading…
Reference in a new issue