fusee_cpp: implement tsec_keygen firmware execution
This commit is contained in:
@@ -17,8 +17,8 @@
|
||||
|
||||
namespace ams::nxboot {
|
||||
|
||||
void DoMemoryTrainingErista();
|
||||
void DoMemoryTrainingMariko();
|
||||
void DoMemoryTrainingErista(int index);
|
||||
void DoMemoryTrainingMariko(int index);
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -56,21 +56,23 @@ namespace ams::nxboot {
|
||||
/* DramId_MarikoAulaSamsung1y8gbX */ 0x0D,
|
||||
};
|
||||
|
||||
int GetMemoryTrainingTableIndex() {
|
||||
if (const auto dram_id = fuse::GetDramId(); dram_id < util::size(MemoryTrainingTableIndices) && MemoryTrainingTableIndices[dram_id] != MemoryTrainingTableIndex_Invalid) {
|
||||
return static_cast<int>(MemoryTrainingTableIndices[dram_id]);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DoMemoryTraining() {
|
||||
if (fuse::GetSocType() == fuse::SocType_Erista) {
|
||||
DoMemoryTrainingErista();
|
||||
} else {
|
||||
DoMemoryTrainingMariko();
|
||||
}
|
||||
}
|
||||
const auto index = GetMemoryTrainingTableIndex();
|
||||
|
||||
int GetMemoryTrainingTableIndex() {
|
||||
if (const auto dram_id = fuse::GetDramId(); dram_id < util::size(MemoryTrainingTableIndices) && MemoryTrainingTableIndices[dram_id] != MemoryTrainingTableIndex_Invalid) {
|
||||
return static_cast<int>(MemoryTrainingTableIndices[dram_id]);
|
||||
if (fuse::GetSocType() == fuse::SocType_Erista) {
|
||||
DoMemoryTrainingErista(index);
|
||||
} else {
|
||||
return -1;
|
||||
DoMemoryTrainingMariko(index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,4 @@ namespace ams::nxboot {
|
||||
|
||||
void DoMemoryTraining();
|
||||
|
||||
int GetMemoryTrainingTableIndex();
|
||||
|
||||
}
|
||||
|
||||
@@ -72,8 +72,7 @@ namespace ams::nxboot {
|
||||
|
||||
using EmcDvfsTimingTable = erista::EmcDvfsTimingTable;
|
||||
|
||||
EmcDvfsTimingTable *GetEmcDvfsTimingTables() {
|
||||
const auto index = GetMemoryTrainingTableIndex();
|
||||
EmcDvfsTimingTable *GetEmcDvfsTimingTables(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
case 3:
|
||||
@@ -2830,11 +2829,11 @@ namespace ams::nxboot {
|
||||
|
||||
}
|
||||
|
||||
void DoMemoryTrainingErista() {
|
||||
void DoMemoryTrainingErista(int index) {
|
||||
/* Get timing tables. */
|
||||
auto *timing_tables = GetEmcDvfsTimingTables();
|
||||
auto *src_timing = timing_tables + 0;
|
||||
auto *dst_timing = timing_tables + 1;
|
||||
auto *timing_tables = GetEmcDvfsTimingTables(index);
|
||||
auto *src_timing = timing_tables + 0;
|
||||
auto *dst_timing = timing_tables + 1;
|
||||
|
||||
/* Check timing tables. */
|
||||
if (src_timing->rate_khz != 204000 || dst_timing->rate_khz != 1600000) {
|
||||
|
||||
@@ -27,9 +27,7 @@ namespace ams::nxboot {
|
||||
|
||||
using EmcDvfsTimingTable = mariko::EmcDvfsTimingTable;
|
||||
|
||||
EmcDvfsTimingTable *GetEmcDvfsTimingTables() {
|
||||
const auto index = GetMemoryTrainingTableIndex();
|
||||
|
||||
EmcDvfsTimingTable *GetEmcDvfsTimingTables(int index) {
|
||||
/* Get the compressed table. */
|
||||
u8 *cmp_table;
|
||||
size_t cmp_table_size;
|
||||
@@ -65,9 +63,9 @@ namespace ams::nxboot {
|
||||
|
||||
}
|
||||
|
||||
void DoMemoryTrainingMariko() {
|
||||
void DoMemoryTrainingMariko(int index) {
|
||||
/* Get timing tables. */
|
||||
auto *timing_tables = GetEmcDvfsTimingTables();
|
||||
auto *timing_tables = GetEmcDvfsTimingTables(index);
|
||||
auto *src_timing_tables = timing_tables + 0;
|
||||
auto *dst_timing_tables = timing_tables + 1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user