Changes

Jump to navigation Jump to search
4,429 bytes added ,  19:43, 12 September 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.
   −
=== LoadRsaOaepKey ===
+
=== ComputeCmac ===
 +
Calculates CMAC over input data.
 +
 
 +
=== 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.
   −
=== UnwrapRsaOaepWrappedTitleKey ===
+
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptOrImportRsaPrivateKey]] and takes an [[#enum_SecureExpModMode]].
 +
 
 +
=== 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 283: Line 331:  
|-
 
|-
 
|  11
 
|  11
|  [5.0.0+] Reserved
+
[7.0.0+] DramId_MarikoIowaMicron4gb ([5.0.0-6.2.0] Reserved)
 
|-
 
|-
 
|  12
 
|  12
Line 290: Line 338:  
|  13
 
|  13
 
|  [5.0.0+] DramId_MarikoHoagSamsung8gb
 
|  [5.0.0+] DramId_MarikoHoagSamsung8gb
 +
|-
 +
|  14
 +
|  [7.0.0+] DramId_MarikoHoagHynix4gb ([5.0.0-6.2.0] Reserved)
 +
|-
 +
|  15
 +
|  [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 295: Line 370:  
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 +
!  SoC
 
!  Platform
 
!  Platform
 
!  DramId
 
!  DramId
Line 300: Line 376:  
!  DVFS version
 
!  DVFS version
 
|-
 
|-
 +
|  T210
 
|  jetson-tx1
 
|  jetson-tx1
 
|  N/A
 
|  N/A
Line 315: Line 392:  
  11_1600000_02_V9.8.3_V1.6
 
  11_1600000_02_V9.8.3_V1.6
 
|-
 
|-
 +
|  T210
 +
|  nx-abcb
 +
|  EristaIcosaSamsung4gb
 +
|  0x07
 +
|
 +
10_40800_NoCfgVersion_V9.8.7_V1.6
 +
10_68000_NoCfgVersion_V9.8.7_V1.6
 +
10_102000_NoCfgVersion_V9.8.7_V1.6
 +
10_204000_NoCfgVersion_V9.8.7_V1.6
 +
10_408000_NoCfgVersion_V9.8.7_V1.6
 +
10_665600_NoCfgVersion_V9.8.7_V1.6
 +
10_800000_NoCfgVersion_V9.8.7_V1.6
 +
10_1065600_NoCfgVersion_V9.8.7_V1.6
 +
10_1331200_NoCfgVersion_V9.8.7_V1.6
 +
10_1600000_NoCfgVersion_V9.8.7_V1.6
 +
|-
 +
|  T210
 +
|  nx-abcb
 +
|  EristaIcosaMicron4gb
 +
|  0x07
 +
|
 +
10_40800_NoCfgVersion_V9.8.4_V1.6
 +
10_68000_NoCfgVersion_V9.8.4_V1.6
 +
10_102000_NoCfgVersion_V9.8.4_V1.6
 +
10_204000_NoCfgVersion_V9.8.4_V1.6
 +
10_408000_NoCfgVersion_V9.8.4_V1.6
 +
10_665600_NoCfgVersion_V9.8.4_V1.6
 +
10_800000_NoCfgVersion_V9.8.4_V1.6
 +
10_1065600_NoCfgVersion_V9.8.4_V1.6
 +
10_1331200_NoCfgVersion_V9.8.4_V1.6
 +
10_1600000_NoCfgVersion_V9.8.4_V1.6
 +
|-
 +
|  T210
 +
|  nx-abcb
 +
|  EristaIcosaHynix4gb
 +
|  0x07
 +
|
 +
10_40800_NoCfgVersion_V9.8.4_V1.6
 +
10_68000_NoCfgVersion_V9.8.4_V1.6
 +
10_102000_NoCfgVersion_V9.8.4_V1.6
 +
10_204000_NoCfgVersion_V9.8.4_V1.6
 +
10_408000_NoCfgVersion_V9.8.4_V1.6
 +
10_665600_NoCfgVersion_V9.8.4_V1.6
 +
10_800000_NoCfgVersion_V9.8.4_V1.6
 +
10_1065600_NoCfgVersion_V9.8.4_V1.6
 +
10_1331200_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 330: 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 345: 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 360: 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 368: 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 376: 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 384: Line 515:  
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 
  01_1600000_NoCfgVersion_V0.4.2_V2.0
 
|-
 
|-
|  nx-abca2
+
|  T214
|  MarikoIowaHynix4gb
+
|  nx-abca2, nx-abcb, nx-abcc
 +
|  MarikoIowaHynix4gb, MarikoHoagHynix4gb
 
|  0x03
 
|  0x03
 
|   
 
|   
Line 392: Line 524:  
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
  01_1600000_NoCfgVersion_V0.3.1_V2.0
 
|-
 
|-
|  nx-abcb
+
T214
EristaIcosaSamsung4gb
+
|  nx-abca2, nx-abcb, nx-abcc
0x07
+
MarikoIowaMicron4gb, MarikoHoagMicron4gb
|
+
0x03
  10_40800_NoCfgVersion_V9.8.7_V1.6
+
|
  10_68000_NoCfgVersion_V9.8.7_V1.6
+
  01_204000_NoCfgVersion_V0.4.2_V2.0
  10_102000_NoCfgVersion_V9.8.7_V1.6
+
  01_1331200.0_NoCfgVersion_V0.4.2_V2.0
  10_204000_NoCfgVersion_V9.8.7_V1.6
+
  01_1600000_NoCfgVersion_V0.4.2_V2.0
  10_408000_NoCfgVersion_V9.8.7_V1.6
+
|-
  10_665600_NoCfgVersion_V9.8.7_V1.6
+
|  T214
  10_800000_NoCfgVersion_V9.8.7_V1.6
+
| nx-abca2, nx-abcb, nx-abcc
  10_1065600_NoCfgVersion_V9.8.7_V1.6
+
|  DramId_MarikoIowaSamsung4gbY
  10_1331200_NoCfgVersion_V9.8.7_V1.6
+
|  0x03
  10_1600000_NoCfgVersion_V9.8.7_V1.6
+
 +
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
 
|-
 
|-
|  nx-abcb
+
T214
EristaIcosaMicron4gb
+
|  nx-abca2, nx-abcb, nx-abcc
0x07
+
DramId_MarikoIowaSamsung1y8gbY
|
+
0x03
10_40800_NoCfgVersion_V9.8.4_V1.6
+
|   
10_68000_NoCfgVersion_V9.8.4_V1.6
+
  01_204000_NoCfgVersion_V0.4.2_V2.0
10_102000_NoCfgVersion_V9.8.4_V1.6
+
  01_1331200.0_NoCfgVersion_V0.4.2_V2.0
10_204000_NoCfgVersion_V9.8.4_V1.6
+
  01_1600000_NoCfgVersion_V0.4.2_V2.0
10_408000_NoCfgVersion_V9.8.4_V1.6
  −
  10_665600_NoCfgVersion_V9.8.4_V1.6
  −
  10_800000_NoCfgVersion_V9.8.4_V1.6
  −
  10_1065600_NoCfgVersion_V9.8.4_V1.6
  −
10_1331200_NoCfgVersion_V9.8.4_V1.6
  −
  10_1600000_NoCfgVersion_V9.8.4_V1.6
   
|-
 
|-
|  nx-abcb
+
T214
EristaIcosaHynix4gb
+
|  nx-abca2, nx-abcb, nx-abcc
0x07
+
DramId_MarikoIowaSamsung1y4gbA
|
+
0x03
10_40800_NoCfgVersion_V9.8.4_V1.6
+
|   
10_68000_NoCfgVersion_V9.8.4_V1.6
+
  01_204000_NoCfgVersion_V0.4.5_V2.0
10_102000_NoCfgVersion_V9.8.4_V1.6
+
  01_1331200.0_NoCfgVersion_V0.4.5_V2.0
10_204000_NoCfgVersion_V9.8.4_V1.6
+
  01_1600000_NoCfgVersion_V0.4.5_V2.0
10_408000_NoCfgVersion_V9.8.4_V1.6
  −
  10_665600_NoCfgVersion_V9.8.4_V1.6
  −
  10_800000_NoCfgVersion_V9.8.4_V1.6
  −
  10_1065600_NoCfgVersion_V9.8.4_V1.6
  −
10_1331200_NoCfgVersion_V9.8.4_V1.6
  −
  10_1600000_NoCfgVersion_V9.8.4_V1.6
   
|}
 
|}
   −
nx-abcb (Copper) is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.
+
'''nx-abca2''' ('''Icosa''' or '''Hoag''' in '''Erista''', '''Iowa''' or '''Hoag''' 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.
 +
 
 +
[8.0.0+] '''nx-abcc''' was added for '''Mariko'''.
   −
nx-abca2 (Icosa) hardware types are variations of the retail form factor.
+
'''Erista''' memory is LPDDR4, while '''Mariko''' memory is LPDDR4X.
    
==== SecurityEngineIrqNumber ====
 
==== SecurityEngineIrqNumber ====
Line 449: 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) 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), 1 (Copper), 2 (Hoag) or 3 (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), 3 (Mariko) or 4 (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 (Iowa) or 4 (Invalid).
   −
A value of 2 (Hoag) is always mapped to 4 (Invalid).
+
[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 0 (Icosa), 1 (Copper), 2 (Hoag), 3 (Iowa), 4 (Calcio) or 5 (Invalid). It still can only be 0 (Icosa) or 0xF (Invalid) in retail units.
    
==== IsRetail ====
 
==== IsRetail ====
Line 460: Line 625:  
==== IsRecoveryBoot ====
 
==== IsRecoveryBoot ====
 
Used to determine if the system is booting from SafeMode firmware.
 
Used to determine if the system is booting from SafeMode firmware.
 +
 +
Under normal circumstances, this just returns bit 0 of the active [[BCT#bootloader0_info|bootloader info]]'s attribute field.
    
==== DeviceId ====
 
==== DeviceId ====
Line 466: Line 633:  
==== 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 487: Line 668:     
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 495: Line 678:  
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 505: Line 688:  
[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.
   −
[5.0.0+] [[PCV_services|PCV]] overrides the value from [[#HardwareType|HardwareType]] and configures PMIC devices with this item.
+
[5.0.0+] [[PCV_services|PCV]] uses this value in combination with [[#HardwareType|HardwareType]] to configure power blocks and memory tables for different hardware.
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
!  Value
 
!  Value
Devices
+
SoC
 +
!  GPU
 +
!  Power Blocks
 
|-
 
|-
 
|  0
 
|  0
 +
|  T210
 +
|  GM20B (0x12B)
 
|  max77620_sd0, max77621_cpu and max77621_gpu
 
|  max77620_sd0, max77621_cpu and max77621_gpu
 
|-
 
|-
 
|  1
 
|  1
 +
|  T214
 +
|  GM20B_B (0x12E)
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|-
 
|-
 
|  2
 
|  2
 +
|  T214
 +
|  GM20B_B (0x12E)
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|  max77620_sd0, max77812_cpu and max77812_gpu
 
|}
 
|}
Line 527: Line 718:  
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 553: Line 744:  
! 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