mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-18 08:22:04 +00:00
kern: correct flushing of init arguments
This commit is contained in:
parent
4a35904d73
commit
f07bd0e337
3 changed files with 6 additions and 9 deletions
|
@ -26,6 +26,5 @@ namespace ams::kern::init {
|
||||||
|
|
||||||
KPhysicalAddress GetInitArgumentsAddress(s32 core_id);
|
KPhysicalAddress GetInitArgumentsAddress(s32 core_id);
|
||||||
void SetInitArguments(s32 core_id, KPhysicalAddress address, uintptr_t arg);
|
void SetInitArguments(s32 core_id, KPhysicalAddress address, uintptr_t arg);
|
||||||
void StoreInitArguments();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,9 +259,6 @@ namespace ams::kern {
|
||||||
/* Setup the InitArguments. */
|
/* Setup the InitArguments. */
|
||||||
SetInitArguments(static_cast<s32>(i), core_local_region_start_phys[i], GetInteger(core_l1_ttbr1_phys[i]));
|
SetInitArguments(static_cast<s32>(i), core_local_region_start_phys[i], GetInteger(core_l1_ttbr1_phys[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure the InitArguments are flushed to cache. */
|
|
||||||
StoreInitArguments();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupPoolPartitionMemoryRegions() {
|
void SetupPoolPartitionMemoryRegions() {
|
||||||
|
|
|
@ -349,6 +349,7 @@ namespace ams::kern::init {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetInitArguments(s32 core_id, KPhysicalAddress address, uintptr_t arg) {
|
void SetInitArguments(s32 core_id, KPhysicalAddress address, uintptr_t arg) {
|
||||||
|
/* Set the arguments. */
|
||||||
KInitArguments *init_args = reinterpret_cast<KInitArguments *>(GetInteger(address));
|
KInitArguments *init_args = reinterpret_cast<KInitArguments *>(GetInteger(address));
|
||||||
init_args->ttbr0 = cpu::GetTtbr0El1();
|
init_args->ttbr0 = cpu::GetTtbr0El1();
|
||||||
init_args->ttbr1 = arg;
|
init_args->ttbr1 = arg;
|
||||||
|
@ -361,14 +362,14 @@ namespace ams::kern::init {
|
||||||
init_args->entrypoint = reinterpret_cast<uintptr_t>(::ams::kern::HorizonKernelMain);
|
init_args->entrypoint = reinterpret_cast<uintptr_t>(::ams::kern::HorizonKernelMain);
|
||||||
init_args->argument = static_cast<u64>(core_id);
|
init_args->argument = static_cast<u64>(core_id);
|
||||||
init_args->setup_function = reinterpret_cast<uintptr_t>(::ams::kern::init::StartOtherCore);
|
init_args->setup_function = reinterpret_cast<uintptr_t>(::ams::kern::init::StartOtherCore);
|
||||||
|
|
||||||
|
/* Ensure the arguments are written to memory. */
|
||||||
|
StoreDataCache(init_args, sizeof(*init_args));
|
||||||
|
|
||||||
|
/* Save the pointer to the arguments to use as argument upon core wakeup. */
|
||||||
g_init_arguments_phys_addr[core_id] = address;
|
g_init_arguments_phys_addr[core_id] = address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void StoreInitArguments() {
|
|
||||||
StoreDataCache(g_init_arguments_phys_addr, sizeof(g_init_arguments_phys_addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitializeDebugRegisters() {
|
void InitializeDebugRegisters() {
|
||||||
/* Determine how many watchpoints and breakpoints we have */
|
/* Determine how many watchpoints and breakpoints we have */
|
||||||
cpu::DebugFeatureRegisterAccessor aa64dfr0;
|
cpu::DebugFeatureRegisterAccessor aa64dfr0;
|
||||||
|
|
Loading…
Reference in a new issue