Secure Monitor: Difference between revisions

as seen on 5.0.1 kernel
GetConfig: better name, description for other bits.
Line 225: Line 225:
| 11 || [[#IsDebugMode]]
| 11 || [[#IsDebugMode]]
|-
|-
| 12 || [[#UnitConfiguration]]
| 12 || [[#KernelFlags]]
|-
|-
| 13 || [[#IsChargerHiZModeEnabled]]
| 13 || [[#IsChargerHiZModeEnabled]]
Line 381: Line 381:
The value of this field is loaded from [[BootConfig]] unsigned-config+0x10 u8 bit1.
The value of this field is loaded from [[BootConfig]] unsigned-config+0x10 u8 bit1.


==== UnitConfiguration ====
==== KernelFlags ====
Kernel reads this when setting up memory-related code. If bit0 is set, it will memset various allocated memory-regions with 0x58, 0x59, 0x5A ('X', 'Y', 'Z') instead of zero. This allows Nintendo devs to find uninitialized memory bugs. If bit17-16 is 0b01, the kernel assumes 6GB of DRAM instead of 4GB.
Kernel reads this when setting up memory-related code.  


bit1 and bit2 are boolean values.
Bit 0 is a boolean determining whether kernel should it will memset various allocated memory-regions with 0x58, 0x59, 0x5A ('X', 'Y', 'Z') instead of zero. This allows Nintendo devs to find uninitialized memory bugs.
If bit15-8 is zero, kernel will loop forever without calling smcPanic, nonzero smcPanics with 0xf00 and then loops.
 
Bit 1 is a boolean determining whether kernel should forcefully enable usermode exception handlers (when false, only data aborts/prefetch aborts that occur when the faulting address is in a readable region with MemoryType_CodeStatic will trigger usermode exception handlers).
 
Bit 2 is a boolean determining whether kernel should enable usermode access to the Performance Monitors (whether PMUSERENR_EL0 should be 1 or 0).
 
Bits 8-15 are a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.
 
Bits 16-17 determine how much memory is available. 00/03 = 4 GB, 01 = 6 GB, 02 = 8 GB.


==== IsChargerHiZModeEnabled ====
==== IsChargerHiZModeEnabled ====