mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-18 08:22:04 +00:00
exo2: minor stack/mmu fixes, now gets to main on hw
This commit is contained in:
parent
1fdd83628e
commit
27843314a4
4 changed files with 19 additions and 17 deletions
|
@ -24,6 +24,7 @@ namespace ams::secmon::loader {
|
||||||
/* Uncompress the program image. */
|
/* Uncompress the program image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), program_lz4, program_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), program_lz4, program_lz4_size);
|
||||||
|
|
||||||
|
|
||||||
/* Copy the boot image to the end of IRAM */
|
/* Copy the boot image to the end of IRAM */
|
||||||
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - boot_code_lz4_size;
|
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - boot_code_lz4_size;
|
||||||
std::memcpy(relocated_boot_code, boot_code_lz4, boot_code_lz4_size);
|
std::memcpy(relocated_boot_code, boot_code_lz4, boot_code_lz4_size);
|
||||||
|
@ -31,6 +32,7 @@ namespace ams::secmon::loader {
|
||||||
/* Uncompress the boot image. */
|
/* Uncompress the boot image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, boot_code_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, boot_code_lz4_size);
|
||||||
|
|
||||||
|
|
||||||
/* Jump to the boot image. */
|
/* Jump to the boot image. */
|
||||||
reinterpret_cast<void (*)()>(secmon::MemoryRegionPhysicalIramBootCodeImage.GetAddress())();
|
reinterpret_cast<void (*)()>(secmon::MemoryRegionPhysicalIramBootCodeImage.GetAddress())();
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ _start:
|
||||||
ERRATUM_INVALIDATE_BTB_AT_BOOT
|
ERRATUM_INVALIDATE_BTB_AT_BOOT
|
||||||
|
|
||||||
/* Set the stack pointer to a temporary location. */
|
/* Set the stack pointer to a temporary location. */
|
||||||
ldr x20, =0x7C010800
|
ldr x20, =0x7C020000
|
||||||
mov sp, x20
|
mov sp, x20
|
||||||
|
|
||||||
/* Call our init array functions. */
|
/* Call our init array functions. */
|
||||||
|
|
|
@ -32,19 +32,19 @@ namespace ams::secmon {
|
||||||
|
|
||||||
void Main() {
|
void Main() {
|
||||||
/* Set library register addresses. */
|
/* Set library register addresses. */
|
||||||
actmon::SetRegisterAddress(MemoryRegionVirtualDeviceActivityMonitor.GetAddress());
|
actmon::SetRegisterAddress(MemoryRegionVirtualDeviceActivityMonitor.GetAddress());
|
||||||
clkrst::SetRegisterAddress(MemoryRegionVirtualDeviceClkRst.GetAddress());
|
clkrst::SetRegisterAddress(MemoryRegionVirtualDeviceClkRst.GetAddress());
|
||||||
flow::SetRegisterAddress(MemoryRegionVirtualDeviceFlowController.GetAddress());
|
flow::SetRegisterAddress(MemoryRegionVirtualDeviceFlowController.GetAddress());
|
||||||
fuse::SetRegisterAddress(MemoryRegionVirtualDeviceFuses.GetAddress());
|
fuse::SetRegisterAddress(MemoryRegionVirtualDeviceFuses.GetAddress());
|
||||||
gic::SetRegisterAddress(MemoryRegionVirtualDeviceGicDistributor.GetAddress(), MemoryRegionVirtualDeviceGicCpuInterface.GetAddress());
|
gic::SetRegisterAddress(MemoryRegionVirtualDeviceGicDistributor.GetAddress(), MemoryRegionVirtualDeviceGicCpuInterface.GetAddress());
|
||||||
i2c::SetRegisterAddress(i2c::Port_1, MemoryRegionVirtualDeviceI2c1.GetAddress());
|
i2c::SetRegisterAddress(i2c::Port_1, MemoryRegionVirtualDeviceI2c1.GetAddress());
|
||||||
i2c::SetRegisterAddress(i2c::Port_5, MemoryRegionVirtualDeviceI2c5.GetAddress());
|
i2c::SetRegisterAddress(i2c::Port_5, MemoryRegionVirtualDeviceI2c5.GetAddress());
|
||||||
pinmux::SetRegisterAddress(MemoryRegionVirtualDeviceApbMisc.GetAddress(), MemoryRegionVirtualDeviceGpio.GetAddress());
|
pinmux::SetRegisterAddress(MemoryRegionVirtualDeviceApbMisc.GetAddress(), MemoryRegionVirtualDeviceGpio.GetAddress());
|
||||||
pmc::SetRegisterAddress(MemoryRegionVirtualDevicePmc.GetAddress());
|
pmc::SetRegisterAddress(MemoryRegionVirtualDevicePmc.GetAddress());
|
||||||
se::SetRegisterAddress(MemoryRegionVirtualDeviceSecurityEngine.GetAddress());
|
se::SetRegisterAddress(MemoryRegionVirtualDeviceSecurityEngine.GetAddress());
|
||||||
uart::SetRegisterAddress(MemoryRegionVirtualDeviceUart.GetAddress());
|
uart::SetRegisterAddress(MemoryRegionVirtualDeviceUart.GetAddress());
|
||||||
wdt::SetRegisterAddress(MemoryRegionVirtualDeviceTimer.GetAddress());
|
wdt::SetRegisterAddress(MemoryRegionVirtualDeviceTimer.GetAddress());
|
||||||
util::SetRegisterAddress(MemoryRegionVirtualDeviceTimer.GetAddress());
|
util::SetRegisterAddress(MemoryRegionVirtualDeviceTimer.GetAddress());
|
||||||
|
|
||||||
/* Get the secure monitor parameters. */
|
/* Get the secure monitor parameters. */
|
||||||
auto &secmon_params = *reinterpret_cast<pkg1::SecureMonitorParameters *>(MemoryRegionVirtualDeviceBootloaderParams.GetAddress());
|
auto &secmon_params = *reinterpret_cast<pkg1::SecureMonitorParameters *>(MemoryRegionVirtualDeviceBootloaderParams.GetAddress());
|
||||||
|
|
|
@ -174,15 +174,15 @@ namespace ams::mmu::arch::arm64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr u64 MakeL1BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
constexpr u64 MakeL1BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
||||||
return address | static_cast<u64>(attr) | 0x1ul;
|
return address | static_cast<u64>(attr) | static_cast<u64>(PageTableMappingAttribute_AccessFlagAccessed) | 0x1ul;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr u64 MakeL2BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
constexpr u64 MakeL2BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
||||||
return address | static_cast<u64>(attr) | 0x1ul;
|
return address | static_cast<u64>(attr) | static_cast<u64>(PageTableMappingAttribute_AccessFlagAccessed) | 0x1ul;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr u64 MakeL3BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
constexpr u64 MakeL3BlockEntry(u64 address, PageTableMappingAttribute attr) {
|
||||||
return address | static_cast<u64>(attr) | 0x3ul;
|
return address | static_cast<u64>(attr) | static_cast<u64>(PageTableMappingAttribute_AccessFlagAccessed) | 0x3ul;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr uintptr_t GetL2Offset(uintptr_t address) {
|
constexpr uintptr_t GetL2Offset(uintptr_t address) {
|
||||||
|
|
Loading…
Reference in a new issue