Secure Monitor: Difference between revisions
No edit summary |
|||
(5 intermediate revisions by the same user not shown) | |||
Line 208: | Line 208: | ||
| 2 || [[#DramId]] | | 2 || [[#DramId]] | ||
|- | |- | ||
| 3 || [[# | | 3 || [[#SecurityEngineInterruptNumber]] | ||
|- | |- | ||
| 4 || [[# | | 4 || [[#FuseVersion]] | ||
|- | |- | ||
| 5 || [[#HardwareType]] | | 5 || [[#HardwareType]] | ||
Line 230: | Line 230: | ||
| 13 || [[#IsChargerHiZModeEnabled]] | | 13 || [[#IsChargerHiZModeEnabled]] | ||
|- | |- | ||
| 14 || [4.0.0+] [[# | | 14 || [4.0.0+] [[#IsQuest]] | ||
|- | |- | ||
| 15 || [5.0.0+] [[#RegulatorType]] | | 15 || [5.0.0+] [[#RegulatorType]] | ||
|- | |- | ||
| 16 || [5.0.0+] [[# | | 16 || [5.0.0+] [[#DeviceUniqueKeyGeneration]] | ||
|- | |- | ||
| 17 || [5.0.0+] [[#Package2Hash]] | | 17 || [5.0.0+] [[#Package2Hash]] | ||
Line 550: | Line 550: | ||
|} | |} | ||
'''nx-abca2''' ('''Icosa''' in '''Erista''', '''Iowa''' in '''Mariko''') hardware types are variations of the retail and | '''nx-abca2''' ('''Icosa''' in '''Erista''', '''Iowa''' in '''Mariko''') hardware types are variations of the retail, EDEV and SDEV form factors. | ||
'''nx-abcb''' ('''Copper''') is | '''nx-abcb''' ('''Copper''' in '''Erista''', '''Calcio''' in '''Mariko''') is a prototype unit. Among other differences, this has extra hardware to support HDMI output. | ||
[8.0.0+] '''nx-abcc''' ('''Hoag''') was added for | [8.0.0+] '''nx-abcc''' ('''Hoag''') was added for the Lite retail and HDEV form factors. | ||
'''Erista''' memory is LPDDR4, while '''Mariko''' memory is LPDDR4X. | '''Erista''' memory is LPDDR4, while '''Mariko''' memory is LPDDR4X. | ||
===== | ===== SecurityEngineInterruptNumber ===== | ||
SPL uses this for setting up the security engine IRQ. | SPL uses this for setting up the security engine IRQ. | ||
===== | ===== FuseVersion ===== | ||
The current [[Package2#Versions|Package1 Maxver Constant]] - 1. | The current [[Package2#Versions|Package1 Maxver Constant]] - 1. | ||
===== HardwareType ===== | ===== HardwareType ===== | ||
[1.0.0+] This item is obtained by checking bits 8 and 2 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | [1.0.0+] This item is obtained by checking bits 8 and 2 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | ||
* 0 ('''Icosa'''; Erista retail and | * 0 ('''Icosa'''; Erista retail, EDEV and SDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''. | ||
* 1 ('''Copper'''; Erista | * 1 ('''Copper'''; Erista prototype), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''. | ||
* 3 (Invalid). | * 3 (Invalid). | ||
Line 573: | Line 573: | ||
[4.0.0+] This item is obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | [4.0.0+] This item is obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | ||
* 0 ('''Icosa'''; Erista retail and | * 0 ('''Icosa'''; Erista retail, EDEV and SDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''. | ||
* 1 ('''Copper'''; Erista | * 1 ('''Copper'''; Erista prototype), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''. | ||
* 3 ('''Iowa'''; Mariko retail and | * 3 ('''Iowa'''; Mariko retail, EDEV and SDEV), if new hardware type (bits 16-19) is '''Iowa'''. | ||
* 4 (Invalid). | * 4 (Invalid). | ||
Line 583: | Line 583: | ||
[8.0.0+] This item can be obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | [8.0.0+] This item can be obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be: | ||
* 0 ('''Icosa'''; Erista retail and | * 0 ('''Icosa'''; Erista retail, EDEV and SDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''. | ||
* 1 ('''Copper'''; Erista | * 1 ('''Copper'''; Erista prototype), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''. | ||
* 2 ('''Hoag'''; Mariko Lite retail and HDEV), if new hardware type (bits 16-19) is '''Hoag'''. | * 2 ('''Hoag'''; Mariko Lite retail and HDEV), if new hardware type (bits 16-19) is '''Hoag'''. | ||
* 3 ('''Iowa'''; Mariko retail and | * 3 ('''Iowa'''; Mariko retail, EDEV and SDEV), if new hardware type (bits 16-19) is '''Iowa'''. | ||
* 4 ('''Calcio'''). | * 4 ('''Calcio'''; Mariko prototype), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''. | ||
* 5 (Invalid). | * 5 (Invalid). | ||
Line 672: | Line 672: | ||
[3.0.0+] [[Loader services|RO]] checks this and if set then skipping NRR rsa signatures is allowed. | [3.0.0+] [[Loader services|RO]] checks this and if set then skipping NRR rsa signatures is allowed. | ||
===== KernelConfiguration ===== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| EnableNonZeroFillMemory | |||
|- | |||
| 1 | |||
| EnableUserExceptionHandler | |||
|- | |||
| 2 | |||
| PerformanceMonitoringUnit | |||
|- | |||
| 3 | |||
| [8.0.0+] EnableApplicationExtraThread | |||
|- | |||
| 8 | |||
| CallShowErrorOnPanic | |||
|- | |||
| 16-17 | |||
| MemorySize | |||
|} | |||
Kernel reads this when setting up memory-related code. | |||
Kernel reads this when setting up memory-related code. | |||
EnableNonZeroFillMemory 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. | |||
EnableUserExceptionHandler is a boolean determining whether kernel should forcefully enable usermode exception handlers (when false, only certain aborts (((1LL << (esr >> 26)) & 0x1115804400224001) == 0, typically data/prefetch aborts) that occur when the faulting address is in a readable region with MemoryType_CodeStatic will trigger usermode exception handlers). | |||
PerformanceMonitoringUnit is a boolean determining whether kernel should enable usermode access to the Performance Monitors (whether PMUSERENR_EL0 should be 1 or 0). | |||
EnableApplicationExtraThread is a boolean determining whether the kernel should increase the KThread slabheap capacity by 160. This also increases object capacities that are calculated based on number of threads. | |||
CallShowErrorOnPanic is a boolean determining whether kernel should call smcPanic on error instead of infinite-looping. | |||
MemorySize determines how much memory is available. 00/03 = 4 GB, 01 = 6 GB, 02 = 8 GB. | |||
===== IsChargerHiZModeEnabled ===== | ===== IsChargerHiZModeEnabled ===== | ||
This tells if the TI Charger (bq24192) is active. | This tells if the TI Charger (bq24192) is active. | ||
===== | ===== IsQuest ===== | ||
This item is bit 10 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. | This item is bit 10 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. | ||
Line 729: | Line 746: | ||
[5.0.0+] [[PCV_services|PCV]] uses this value in combination with [[#HardwareType|HardwareType]] to configure power blocks and memory tables for different hardware. | [5.0.0+] [[PCV_services|PCV]] uses this value in combination with [[#HardwareType|HardwareType]] to configure power blocks and memory tables for different hardware. | ||
===== DeviceUniqueKeyGeneration ===== | |||
This item is obtained from [[Fuse_registers#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]] if bit 11 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]] is set, [[Fuse_registers#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]] matches 0x8E61ECAE and [[Fuse_registers#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]] matches 0xF2BA3BB2. | |||
[5.0.0+] [[Filesystem services|FS]] can now use this value for the '''KeyGeneration''' parameter when calling [[#GenerateAesKek|GenerateAesKek]] during "GetBisEncryptionKey". | |||
===== Package2Hash ===== | ===== Package2Hash ===== |