mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-26 13:52:21 +00:00
exo2: implement some mariko TODOs
This commit is contained in:
parent
99e0448f30
commit
4fe42eb997
3 changed files with 19 additions and 7 deletions
|
@ -168,7 +168,7 @@ namespace ams::sc7fw {
|
||||||
/* Request that DPD3 pads power down. */
|
/* Request that DPD3 pads power down. */
|
||||||
constexpr u32 EristaDpd3Mask = 0x0FFFFFFF;
|
constexpr u32 EristaDpd3Mask = 0x0FFFFFFF;
|
||||||
constexpr u32 MarikoDpd3Mask = 0x0FFF9FFF;
|
constexpr u32 MarikoDpd3Mask = 0x0FFF9FFF;
|
||||||
if (true /* TODO: IsErista */) {
|
if (fuse::GetSocType() == fuse::SocType_Erista) {
|
||||||
RequestAllPadsPowerDown(APBDEV_PMC_IO_DPD3_REQ, EristaDpd3Mask);
|
RequestAllPadsPowerDown(APBDEV_PMC_IO_DPD3_REQ, EristaDpd3Mask);
|
||||||
} else {
|
} else {
|
||||||
RequestAllPadsPowerDown(APBDEV_PMC_IO_DPD3_REQ, MarikoDpd3Mask);
|
RequestAllPadsPowerDown(APBDEV_PMC_IO_DPD3_REQ, MarikoDpd3Mask);
|
||||||
|
|
|
@ -29,6 +29,17 @@ namespace ams::secmon::boot {
|
||||||
secmon::boot::DecryptPackage2(reinterpret_cast<void *>(dst), size, reinterpret_cast<void *>(src), size, secmon::boot::GetPackage2AesKey(), crypto::AesEncryptor128::KeySize, iv, iv_size, key_generation);
|
secmon::boot::DecryptPackage2(reinterpret_cast<void *>(dst), size, reinterpret_cast<void *>(src), size, secmon::boot::GetPackage2AesKey(), crypto::AesEncryptor128::KeySize, iv, iv_size, key_generation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 GetChipId() {
|
||||||
|
constexpr u32 ChipIdErista = 0x210;
|
||||||
|
constexpr u32 ChipIdMariko = 0x214;
|
||||||
|
|
||||||
|
switch (GetSocType()) {
|
||||||
|
case fuse::SocType_Erista: return ChipIdErista;
|
||||||
|
case fuse::SocType_Mariko: return ChipIdMariko;
|
||||||
|
AMS_UNREACHABLE_DEFAULT_CASE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckVerifyResult(bool verify_result, pkg1::ErrorInfo error_info, const char *message) {
|
void CheckVerifyResult(bool verify_result, pkg1::ErrorInfo error_info, const char *message) {
|
||||||
|
@ -103,8 +114,6 @@ namespace ams::secmon::boot {
|
||||||
constexpr u32 GpuMagicNumber = 0xC0EDBBCC;
|
constexpr u32 GpuMagicNumber = 0xC0EDBBCC;
|
||||||
constexpr u32 SkuInfo = 0x83;
|
constexpr u32 SkuInfo = 0x83;
|
||||||
constexpr u32 HdcpMicroCodeVersion = 0x2;
|
constexpr u32 HdcpMicroCodeVersion = 0x2;
|
||||||
constexpr u32 ChipIdErista = 0x210;
|
|
||||||
constexpr u32 ChipIdMariko = 0x214;
|
|
||||||
|
|
||||||
/* Get our pointers. */
|
/* Get our pointers. */
|
||||||
u32 *gpu_magic = MemoryRegionDramGpuCarveout.GetEndPointer<u32>() - (0x004 / sizeof(*gpu_magic));
|
u32 *gpu_magic = MemoryRegionDramGpuCarveout.GetEndPointer<u32>() - (0x004 / sizeof(*gpu_magic));
|
||||||
|
@ -116,7 +125,7 @@ namespace ams::secmon::boot {
|
||||||
/* Write the tsec magic numbers. */
|
/* Write the tsec magic numbers. */
|
||||||
tsec_magic[0] = SkuInfo;
|
tsec_magic[0] = SkuInfo;
|
||||||
tsec_magic[1] = HdcpMicroCodeVersion;
|
tsec_magic[1] = HdcpMicroCodeVersion;
|
||||||
tsec_magic[2] = (false /* TODO: IsMariko */) ? ChipIdMariko : ChipIdErista;
|
tsec_magic[2] = GetChipId();
|
||||||
|
|
||||||
/* Flush the magic numbers. */
|
/* Flush the magic numbers. */
|
||||||
hw::FlushDataCache(gpu_magic, 1 * sizeof(u32));
|
hw::FlushDataCache(gpu_magic, 1 * sizeof(u32));
|
||||||
|
|
|
@ -327,9 +327,12 @@ namespace ams::se {
|
||||||
|
|
||||||
/* Set non per-key flags. */
|
/* Set non per-key flags. */
|
||||||
if ((flags & ~KeySlotLockFlags_PerKey) != 0) {
|
if ((flags & ~KeySlotLockFlags_PerKey) != 0) {
|
||||||
/* TODO: KeySlotLockFlags_DstKeyTableOnly is Mariko-only. How should we handle this? */
|
/* KeySlotLockFlags_DstKeyTableOnly is Mariko-only. */
|
||||||
/* TODO: Mariko bit support. */
|
if (fuse::GetSocType() == fuse::SocType_Mariko) {
|
||||||
reg::ReadWrite(SE->SE_CRYPTO_KEYTABLE_ACCESS[slot], REG_BITS_VALUE(0, 7, ~flags));
|
reg::ReadWrite(SE->SE_CRYPTO_KEYTABLE_ACCESS[slot], REG_BITS_VALUE(0, 7, ~flags), REG_BITS_VALUE(7, 1, ((flags & KeySlotLockFlags_DstKeyTableOnly) != 0) ? 1 : 0));
|
||||||
|
} else {
|
||||||
|
reg::ReadWrite(SE->SE_CRYPTO_KEYTABLE_ACCESS[slot], REG_BITS_VALUE(0, 7, ~flags));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set per-key flag. */
|
/* Set per-key flag. */
|
||||||
|
|
Loading…
Reference in a new issue