Changes

Jump to navigation Jump to search
4,826 bytes added ,  18:43, 7 October 2019
Line 34: Line 34:  
| 0xC3000002 || GetConfig (Same as ID 1, Sub-ID 4) || ||
 
| 0xC3000002 || GetConfig (Same as ID 1, Sub-ID 4) || ||
 
|-
 
|-
| 0xC3000003 || CheckStatus || ||
+
| 0xC3000003 || GetResult || ||
 
|-
 
|-
| 0xC3000404 || GetResult || ||
+
| 0xC3000404 || GetResultData || ||
 
|-
 
|-
 
| 0xC3000E05 || ExpMod || ||
 
| 0xC3000E05 || ExpMod || ||
 
|-
 
|-
| 0xC3000006 || GetRandomBytes (Same as ID 1, Sub-ID 5) || ||
+
| 0xC3000006 || GenerateRandomBytes (Same as ID 1, Sub-ID 5) || ||
 
|-
 
|-
 
| 0xC3000007 || [[#GenerateAesKek]] || ||
 
| 0xC3000007 || [[#GenerateAesKek]] || ||
Line 46: Line 46:  
| 0xC3000008 || [[#LoadAesKey]] || ||
 
| 0xC3000008 || [[#LoadAesKey]] || ||
 
|-
 
|-
| 0xC3000009 || [[#CryptAes]] || ||
+
| 0xC3000009 || [[#ComputeAes]] || ||
 
|-
 
|-
 
| 0xC300000A || [[#GenerateSpecificAesKey]] || ||
 
| 0xC300000A || [[#GenerateSpecificAesKey]] || ||
Line 52: Line 52:  
| 0xC300040B || [[#ComputeCmac]] || ||
 
| 0xC300040B || [[#ComputeCmac]] || ||
 
|-
 
|-
| [1.0.0-4.1.0] 0xC300100C || [[#LoadRsaOaepKey]] || ||
+
| [1.0.0-4.1.0] 0xC300100C || [[#ImportEsKey]] || ||
 
|-
 
|-
| [5.0.0+] 0xC300D60C || [[#EncryptRsaKeyForImport]] || ||
+
| [5.0.0+] 0xC300D60C || [[#ReEncryptRsaPrivateKey]] || ||
 
|-
 
|-
 
| [1.0.0-4.1.0] 0xC300100D || [[#DecryptRsaPrivateKey]] || ||
 
| [1.0.0-4.1.0] 0xC300100D || [[#DecryptRsaPrivateKey]] || ||
 
|-
 
|-
| [5.0.0] 0xC300100D || [[#DecryptOrImportRsaKey]] || ||
+
| [5.0.0+] 0xC300100D || [[#DecryptOrImportRsaPrivateKey]] || ||
 
|-
 
|-
| [1.0.0-4.1.0] 0xC300100E || [[#LoadSecureExpModKey]] || ||
+
| [1.0.0-4.1.0] 0xC300100E || [[#ImportLotusKey]] || ||
 
|-
 
|-
| 0xC300060F || [[#SecureExpMod]] || ||
+
| 0xC300060F || [[#StorageExpMod]] || ||
 
|-
 
|-
| 0xC3000610 || [[#UnwrapRsaOaepWrappedTitleKey]] || ||
+
| 0xC3000610 || [[#UnwrapTitleKey]] || ||
 
|-
 
|-
 
| 0xC3000011 || [[#LoadTitleKey]] || ||
 
| 0xC3000011 || [[#LoadTitleKey]] || ||
 
|-
 
|-
| 0xC3000012 || [2.0.0+] UnwrapAesWrappedTitleKey || ||
+
| 0xC3000012 || [2.0.0+] [[#UnwrapCommonTitleKey]] || ||
 
|}
 
|}
   Line 80: Line 80:  
** This means: Plaintext kek keys never leave TrustZone.
 
** This means: Plaintext kek keys never leave TrustZone.
 
** Further, this means: Actual AES/RSA keys never leave TrustZone.
 
** Further, this means: Actual AES/RSA keys never leave TrustZone.
  −
Note:
  −
The [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]] represents a RSA wrapped AES key.
      
=== GenerateAesKek ===
 
=== GenerateAesKek ===
Line 94: Line 91:  
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_Aes]].
 
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_Aes]].
   −
=== CryptAes ===
+
=== ComputeAes ===
Encrypts/decrypts using Aes (CTR and CBC).
+
Encrypts/decrypts using AES (CTR and CBC). Takes an [[#enum_CipherMode]].
   −
Key must be set prior using one of the [[#LoadAesKey]], [[#GenerateSpecificAesKey]] or [[#LoadRsaWrappedAesKey]] commands.
+
Key must be set prior using one of the [[#LoadAesKey]] or [[#GenerateSpecificAesKey]] commands.
    
=== GenerateSpecificAesKey ===
 
=== GenerateSpecificAesKey ===
Todo: This one seems unrelated to [[#enum_CryptoUsecase]].
+
Takes a wrapped AES key and decrypts it using static data.
 +
 
 +
=== ComputeCmac ===
 +
Calculates CMAC over input data.
   −
=== LoadRsaOaepKey ===
+
=== ImportEsKey ===
 
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, and a wrapped RSA private key.
 
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, and a wrapped RSA private key.
   −
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaOaep]].
+
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]].
   −
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].
+
[5.0.0] This function was removed and replaced with [[#ReEncryptRsaPrivateKey]].
   −
=== EncryptRsaKeyForImport ===
+
=== ReEncryptRsaPrivateKey ===
 
Takes in two session keks created with [[#GenerateAesKek]], two wrapped AES keys, an enum member, and a wrapped RSA private key.
 
Takes in two session keks created with [[#GenerateAesKek]], two wrapped AES keys, an enum member, and a wrapped RSA private key.
    
Decrypts and validates the wrapped RSA private key with the first kek/wrapped key, and re-encrypts it with the second if valid.
 
Decrypts and validates the wrapped RSA private key with the first kek/wrapped key, and re-encrypts it with the second if valid.
   −
The re-encrypted key is then passed to the user, for use with [[#DecryptOrImportRsaKey]].
+
The re-encrypted key is then passed to the user, for use with [[#DecryptOrImportRsaPrivateKey]].
    
=== DecryptRsaPrivateKey ===
 
=== DecryptRsaPrivateKey ===
Line 123: Line 123:  
[4.0.0+] The SMC handler when certain conditions pass and SMC_ID==0xC300100D now returns error 0x6 instead of calling the handler funcptr.
 
[4.0.0+] The SMC handler when certain conditions pass and SMC_ID==0xC300100D now returns error 0x6 instead of calling the handler funcptr.
   −
=== DecryptOrImportRsaKey ===
+
[5.0.0+] This function was replaced by [[#DecryptOrImportRsaPrivateKey]].
   −
This function replaced [[#DecryptRsaPrivateKey]] in [[5.0.0]], adding an additional enum member argument.
+
=== DecryptOrImportRsaPrivateKey ===
 +
This function replaced [[#DecryptRsaPrivateKey]] in [[5.0.0]], adding an additional [[#enum_DecryptOrImportMode]].
    
This SMC extends DecryptRsaPrivateKey's original functionality to enable importing private keys into the security engine instead of decrypting them, when certain enum members are passed.
 
This SMC extends DecryptRsaPrivateKey's original functionality to enable importing private keys into the security engine instead of decrypting them, when certain enum members are passed.
   −
=== LoadSecureExpModKey ===
+
=== ImportLotusKey ===
 
Takes a session kek created with [[#GenerateAesKek]], and a wrapped RSA key.
 
Takes a session kek created with [[#GenerateAesKek]], and a wrapped RSA key.
    
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaSecureExpMod]].
 
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaSecureExpMod]].
   −
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].
+
[5.0.0] This function was removed.
    
=== SecureExpMod ===
 
=== SecureExpMod ===
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadSecureExpModKey]] command.
+
Performs an ExpMod operation using an exponent previously loaded with the [[#ImportLotusKey]] command.
 +
 
 +
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptOrImportRsaPrivateKey]] and takes an [[#enum_SecureExpModMode]].
   −
=== UnwrapRsaOaepWrappedTitleKey ===
+
=== UnwrapTitleKey ===
 
Takes an Rsa-Oaep-wrapped TitleKey, an RSA Public Key, and a label hash.
 
Takes an Rsa-Oaep-wrapped TitleKey, an RSA Public Key, and a label hash.
   −
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadRsaOaepKey]] command, and then validates/extracts a Titlekey from the resulting message.
+
Performs an ExpMod operation using an exponent previously loaded with the [[#ImportEsKey]] command, and then validates/extracts a Titlekey from the resulting message.
    
Returns a session-unique AES key especially for use in [[#LoadTitleKey]].
 
Returns a session-unique AES key especially for use in [[#LoadTitleKey]].
 +
 +
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptOrImportRsaPrivateKey]].
    
=== LoadTitleKey ===
 
=== LoadTitleKey ===
Takes a session-unique AES key from [[#UnwrapAesWrappedTitleKey]] or [[#UnwrapRsaOaepWrappedTitleKey]].
+
Takes a session-unique AES key from [[#UnwrapCommonTitleKey]] or [[#UnwrapTitleKey]].
 +
 
 +
=== UnwrapCommonTitleKey ===
 +
Takes an AES-wrapped TitleKey and returns a sealed AES key.
    
=== enum CryptoUsecase ===
 
=== enum CryptoUsecase ===
Line 159: Line 167:  
| 2 || CryptoUsecase_RsaSecureExpMod
 
| 2 || CryptoUsecase_RsaSecureExpMod
 
|-
 
|-
| 3 || CryptoUsecase_RsaOaep
+
| 3 || CryptoUsecase_TitleKey
 +
|}
 +
 
 +
Note:
 +
The [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]] represents a RSA wrapped AES key.
 +
 
 +
=== enum CipherMode ===
 +
{| class=wikitable
 +
! Value || Name
 +
|-
 +
| 0 || CipherMode_CbcEncrypt
 +
|-
 +
| 1 || CipherMode_CbcDecrypt
 +
|-
 +
| 2 || CipherMode_Ctr
 +
|}
 +
 
 +
=== enum DecryptOrImportMode ===
 +
{| class=wikitable
 +
! Value || Name
 +
|-
 +
| 0 || DecryptOrImportMode_DecryptRsaPrivateKey
 +
|-
 +
| 1 || DecryptOrImportMode_ImportLotusKey
 +
|-
 +
| 2 || DecryptOrImportMode_ImportEsKey
 +
|-
 +
| 3 || DecryptOrImportMode_ImportSslKey
 +
|-
 +
| 4 || DecryptOrImportMode_ImportDrmKey
 +
|}
 +
 
 +
=== enum SecureExpModMode ===
 +
{| class=wikitable
 +
! Value || Name
 +
|-
 +
| 0 || SecureExpModMode_Lotus
 +
|-
 +
| 1 || SecureExpModMode_Ssl
 +
|-
 +
| 2 || SecureExpModMode_Drm
 
|}
 
|}
   Line 176: Line 224:  
| 0xC3000004 || [[#GetConfig]] (Same as ID 0, Sub-ID 2) || W1=config_item, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4=config_val
 
| 0xC3000004 || [[#GetConfig]] (Same as ID 0, Sub-ID 2) || W1=config_item, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4=config_val
 
|-
 
|-
| 0xC3000005 || [[#GetRandomBytes]] (Same as ID 0, Sub-ID 6) || X1=size, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4,X5,X6,X7=rand_bytes
+
| 0xC3000005 || [[#GenerateRandomBytes]] (Same as ID 0, Sub-ID 6) || X1=size, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4,X5,X6,X7=rand_bytes
 
|-
 
|-
 
| 0xC3000006 || [[#Panic]] || W1=panic_color, X2,X3,X4,X5,X6,X7=0 || X0=result
 
| 0xC3000006 || [[#Panic]] || W1=panic_color, X2,X3,X4,X5,X6,X7=0 || X0=result
Line 231: Line 279:  
| 14 || [4.0.0+] [[#IsKiosk]]
 
| 14 || [4.0.0+] [[#IsKiosk]]
 
|-
 
|-
| 15 || [5.0.0+] [[#NewHardwareType]]
+
| 15 || [5.0.0+] [[#RegulatorType]]
 
|-
 
|-
| 16 || [5.0.0+] [[#NewKeyGeneration]]
+
| 16 || [5.0.0+] [[#KeyGeneration]]
 
|-
 
|-
 
| 17 || [5.0.0+] [[#Package2Hash]]
 
| 17 || [5.0.0+] [[#Package2Hash]]
Line 265: Line 313:  
|-
 
|-
 
|  5
 
|  5
|  [4.0.0+] Reserved (DramId_EristaIcosaHynix6gb)
+
|  [4.0.0+] Reserved
 
|-
 
|-
 
|  6
 
|  6
|  [4.0.0+] Reserved (DramId_EristaIcosaMicron6gb)
+
|  [4.0.0+] Reserved
 
|-
 
|-
 
|  7
 
|  7
Line 296: Line 344:  
|  15
 
|  15
 
|  [7.0.0+] DramId_MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)
 
|  [7.0.0+] DramId_MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)
 +
|-
 +
|  16
 +
|  [8.0.0+] DramId_MarikoIowaSamsung4gbY
 +
|-
 +
|  17
 +
|  [9.0.0+] DramId_MarikoIowaSamsung1y4gbX
 +
|-
 +
|  18
 +
|  [9.0.0+] DramId_MarikoIowaSamsung1y8gbX
 +
|-
 +
|  19
 +
|  [9.0.0+] DramId_MarikoHoagSamsung1y4gbX
 +
|-
 +
|  20
 +
|  [9.0.0+] DramId_MarikoIowaSamsung1y4gbY
 +
|-
 +
|  21
 +
|  [9.0.0+] DramId_MarikoIowaSamsung1y8gbY
 +
|-
 +
|  22
 +
|  [9.0.0+] DramId_MarikoIowaSamsung1y4gbA
 
|}
 
|}
   Line 301: Line 370:  
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 +
!  SoC
 
!  Platform
 
!  Platform
 
!  DramId
 
!  DramId
Line 306: Line 376:  
!  DVFS version
 
!  DVFS version
 
|-
 
|-
 +
|  T210
 
|  jetson-tx1
 
|  jetson-tx1
 
|  N/A
 
|  N/A
Line 321: Line 392:  
  11_1600000_02_V9.8.3_V1.6
 
  11_1600000_02_V9.8.3_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abcb
 
|  nx-abcb
 
|  EristaIcosaSamsung4gb
 
|  EristaIcosaSamsung4gb
Line 336: Line 408:  
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abcb
 
|  nx-abcb
 
|  EristaIcosaMicron4gb
 
|  EristaIcosaMicron4gb
Line 351: Line 424:  
  10_1600000_NoCfgVersion_V9.8.4_V1.6
 
  10_1600000_NoCfgVersion_V9.8.4_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abcb
 
|  nx-abcb
 
|  EristaIcosaHynix4gb
 
|  EristaIcosaHynix4gb
Line 366: Line 440:  
  10_1600000_NoCfgVersion_V9.8.4_V1.6
 
  10_1600000_NoCfgVersion_V9.8.4_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abca2
 
|  nx-abca2
|  EristaIcosaSamsung4gb or EristaIcosaMicron4gb
+
|  EristaIcosaSamsung4gb, EristaIcosaMicron4gb
 
|  0x07
 
|  0x07
 
|  
 
|  
Line 381: Line 456:  
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abca2
 
|  nx-abca2
 
|  EristaIcosaHynix4gb
 
|  EristaIcosaHynix4gb
Line 396: Line 472:  
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
|-
 
|-
 +
|  T210
 
|  nx-abca2
 
|  nx-abca2
 
|  EristaIcosaSamsung6gb
 
|  EristaIcosaSamsung6gb
Line 411: Line 488:  
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
  10_1600000_NoCfgVersion_V9.8.7_V1.6
 
|-
 
|-
|  nx-abca2
+
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 
|  MarikoIowax1x2Samsung4gb
 
|  MarikoIowax1x2Samsung4gb
 
|  0x03
 
|  0x03
Line 419: Line 497:  
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
|-
 
|-
|  nx-abca2
+
|  T214
|  MarikoIowaSamsung4gb or MarikoHoagSamsung4gb
+
|  nx-abca2, nx-abcb, nx-abcc
 +
|  MarikoIowaSamsung4gb, MarikoHoagSamsung4gb
 
|  0x03
 
|  0x03
 
|   
 
|   
Line 427: Line 506:  
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
|-
 
|-
|  nx-abca2
+
|  T214
|  MarikoIowaSamsung8gb or MarikoHoagSamsung8gb
+
|  nx-abca2, nx-abcb, nx-abcc
 +
|  MarikoIowaSamsung8gb, MarikoHoagSamsung8gb
 
|  0x03
 
|  0x03
 
|
 
|
Line 435: Line 515:  
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 
|-
 
|-
|  nx-abca2
+
|  T214
|  MarikoIowaHynix4gb or MarikoHoagHynix4gb
+
|  nx-abca2, nx-abcb, nx-abcc
 +
|  MarikoIowaHynix4gb, MarikoHoagHynix4gb
 
|  0x03
 
|  0x03
 
|   
 
|   
Line 443: Line 524:  
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
|-
 
|-
|  nx-abca2
+
|  T214
|  MarikoIowaMicron4gb or MarikoHoagMicron4gb
+
|  nx-abca2, nx-abcb, nx-abcc
 +
|  MarikoIowaMicron4gb, MarikoHoagMicron4gb
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung4gbY
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung1y4gbX
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung1y8gbX
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoHoagSamsung1y4gbX
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung1y4gbY
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.2_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 +
01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung1y8gbY
 
|  0x03
 
|  0x03
 
|   
 
|   
Line 450: Line 586:  
  01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 
  01_1331200.0_NoCfgVersion_V0.4.2_V2.0
 
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 +
|-
 +
|  T214
 +
|  nx-abca2, nx-abcb, nx-abcc
 +
|  DramId_MarikoIowaSamsung1y4gbA
 +
|  0x03
 +
 +
01_204000_NoCfgVersion_V0.4.5_V2.0
 +
01_1331200.0_NoCfgVersion_V0.4.5_V2.0
 +
01_1600000_NoCfgVersion_V0.4.5_V2.0
 
|}
 
|}
   −
nx-abcb (Copper) is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.
+
'''nx-abca2''' ('''Icosa''' in '''Erista''', '''Iowa''' in '''Mariko''') hardware types are variations of the retail and EDEV form factors.
 +
 
 +
'''nx-abcb''' ('''Copper''') is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.
   −
nx-abca2 (Icosa) hardware types are variations of the retail form factor.
+
[8.0.0+] '''nx-abcc''' ('''Hoag''') was added for '''Mariko'''.
   −
Erista memory is LPDDR4, while Mariko memory is LPDDR4X.
+
'''Erista''' memory is LPDDR4, while '''Mariko''' memory is LPDDR4X.
    
==== SecurityEngineIrqNumber ====
 
==== SecurityEngineIrqNumber ====
Line 465: Line 612:     
==== 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 0 (Icosa), 1 (Copper), 2 (Hoag) or 3 (Invalid).
+
[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 EDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''.
 +
* 1 ('''Copper'''; Erista SDEV), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''.
 +
* 3 (Invalid).
 +
 
 +
Value 2 is reserved and considered invalid.
 +
 
 +
[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 EDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''.
 +
* 1 ('''Copper'''; Erista SDEV), if development flag (bit 8) is '''Development''' and production flag (bit 2) is '''Prototype'''.
 +
* 3 ('''Iowa'''; Mariko retail and EDEV), if new hardware type (bits 16-19) is '''Iowa'''.
 +
* 4 (Invalid).
 +
 
 +
Value 2 is reserved and considered invalid.
   −
[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), 1 (Copper), 2 (Hoag), 3 (Mariko) or 4 (Invalid).
+
[7.0.0+] This item can be obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]], but is now only 0 (Icosa) or 0xF (Invalid) in retail units.
   −
[7.0.0+] This item no longer depends on fuses and can only be 0 (Icosa) or 0xF (Invalid) in retail units.
+
[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 EDEV), if development flag (bit 8) is '''Retail''' and production flag (bit 2) is '''Production'''.
 +
* 1 ('''Copper'''; Erista SDEV), 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'''.
 +
* 3 ('''Iowa'''; Mariko retail and EDEV), if new hardware type (bits 16-19) is '''Iowa'''.
 +
* 4 ('''Calcio''').
 +
* 5 (Invalid).
 +
 
 +
It is still only 0 (Icosa) or 0xF (Invalid) in retail units.
    
==== IsRetail ====
 
==== IsRetail ====
Line 484: Line 652:  
==== BootReason ====
 
==== BootReason ====
 
Used to determine how the system booted.
 
Used to determine how the system booted.
 +
 +
{| class=wikitable
 +
! Value || Description
 +
|-
 +
| 0 || Invalid
 +
|-
 +
| 1 || AcOk
 +
|-
 +
| 2 || OnKey
 +
|-
 +
| 3 || RtcAlarm1
 +
|-
 +
| 4 || RtcAlarm2
 +
|}
    
==== MemoryArrange ====
 
==== MemoryArrange ====
Line 505: Line 687:     
Bit 2 is a boolean determining whether kernel should enable usermode access to the Performance Monitors (whether PMUSERENR_EL0 should be 1 or 0).
 
Bit 2 is a boolean determining whether kernel should enable usermode access to the Performance Monitors (whether PMUSERENR_EL0 should be 1 or 0).
 +
 +
[8.0.0+] Bit 3 is a boolean determining whether the kernldr should allocate 0x68000 extra bytes before INI1 data
    
Bits 8-15 are a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.
 
Bits 8-15 are a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.
Line 513: Line 697:  
This tells if the TI Charger (bq24192) is active.
 
This tells if the TI Charger (bq24192) is active.
   −
==== NewKeyGeneration ====
+
==== KeyGeneration ====
 
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.
 
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.
   Line 523: Line 707:  
[4.0.0+] [[Settings_services|Settings]] uses this value to overwrite the quest flag from [[Settings_services#set:sys|GetQuestFlag]]. This is used to detect if a Switch is a kiosk unit for display at retail stores.
 
[4.0.0+] [[Settings_services|Settings]] uses this value to overwrite the quest flag from [[Settings_services#set:sys|GetQuestFlag]]. This is used to detect if a Switch is a kiosk unit for display at retail stores.
   −
==== NewHardwareType ====
+
==== RegulatorType ====
 
This item is currently hardcoded to 0.
 
This item is currently hardcoded to 0.
   Line 541: Line 725:  
|  1
 
|  1
 
|  T214
 
|  T214
GM2?? (0x12E)
+
GM20B_B (0x12E)
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|-
 
|-
 
|  2
 
|  2
 
|  T214
 
|  T214
GM2?? (0x12E)
+
GM20B_B (0x12E)
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|}
 
|}
Line 553: Line 737:  
This is a SHA-256 hash calculated over the [[Package2|package2]] image. Since the hash calculation is an optional step in pkg2ldr, this item is only valid in recovery mode. Otherwise, an error is returned instead.
 
This is a SHA-256 hash calculated over the [[Package2|package2]] image. Since the hash calculation is an optional step in pkg2ldr, this item is only valid in recovery mode. Otherwise, an error is returned instead.
   −
=== GetRandomBytes ===
+
=== GenerateRandomBytes ===
 
Takes a '''size''' and returns '''rand_bytes'''.
 
Takes a '''size''' and returns '''rand_bytes'''.
   Line 579: Line 763:  
! Value || Description
 
! Value || Description
 
|-
 
|-
| 2 || Invalid input
+
| 0 || Success
 +
|-
 +
| 1 || Not implemented
 +
|-
 +
| 2 || Invalid argument
 +
|-
 +
| 3 || In progress
 +
|-
 +
| 4 || No async operation
 +
|-
 +
| 5 || Invalid async operation
 
|-
 
|-
| 3 || Busy
+
| [8.0.0+] 6 || Blacklisted
 
|}
 
|}

Navigation menu