minerva: More protections

This commit is contained in:
CTCaer 2020-03-21 22:10:06 +02:00
parent 91a241dafa
commit 52874f9113
4 changed files with 9 additions and 4 deletions

View file

@ -34,18 +34,21 @@ u32 minerva_init()
minerva_cfg = NULL; minerva_cfg = NULL;
mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg; mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg;
memset(mtc_cfg, 0, sizeof(mtc_config_t));
// Set table to nyx storage. // Set table to nyx storage.
mtc_cfg->mtc_table = (emc_table_t *)&nyx_str->mtc_table; mtc_cfg->mtc_table = (emc_table_t *)&nyx_str->mtc_table;
mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F; mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table. mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table.
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg); u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
// Ensure that Minerva is new. // Ensure that Minerva is new.
if (mtc_cfg->init_done == MTC_INIT_MAGIC) if (mtc_cfg->init_done == MTC_INIT_MAGIC)
minerva_cfg = (void *)ep_addr; minerva_cfg = (void *)ep_addr;
else
mtc_cfg->init_done = 0;
if (!minerva_cfg) if (!minerva_cfg)
return 1; return 1;

View file

@ -57,7 +57,7 @@ typedef struct _nyx_storage_t
u8 rsvd[0x800000 - sizeof(nyx_info_t)]; u8 rsvd[0x800000 - sizeof(nyx_info_t)];
nyx_info_t info; nyx_info_t info;
mtc_config_t mtc_cfg; mtc_config_t mtc_cfg;
emc_table_t mtc_table; emc_table_t mtc_table[10];
} nyx_storage_t; } nyx_storage_t;
u32 get_tmr_us(); u32 get_tmr_us();

View file

@ -36,7 +36,7 @@ u32 minerva_init()
mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg; mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg;
// Set table to nyx storage. // Set table to nyx storage.
mtc_cfg->mtc_table = (emc_table_t *)&nyx_str->mtc_table; mtc_cfg->mtc_table = (emc_table_t *)nyx_str->mtc_table;
// Check if Minerva is already initialized. // Check if Minerva is already initialized.
if (mtc_cfg->init_done == MTC_INIT_MAGIC) if (mtc_cfg->init_done == MTC_INIT_MAGIC)
@ -60,6 +60,8 @@ u32 minerva_init()
// Ensure that Minerva is new. // Ensure that Minerva is new.
if (mtc_tmp.init_done == MTC_INIT_MAGIC) if (mtc_tmp.init_done == MTC_INIT_MAGIC)
minerva_cfg = (void *)ep_addr; minerva_cfg = (void *)ep_addr;
else
mtc_cfg->init_done = 0;
// Copy Minerva context to Nyx storage. // Copy Minerva context to Nyx storage.
if (minerva_cfg) if (minerva_cfg)

View file

@ -57,7 +57,7 @@ typedef struct _nyx_storage_t
u8 rsvd[0x800000 - sizeof(nyx_info_t)]; u8 rsvd[0x800000 - sizeof(nyx_info_t)];
nyx_info_t info; nyx_info_t info;
mtc_config_t mtc_cfg; mtc_config_t mtc_cfg;
emc_table_t mtc_table; emc_table_t mtc_table[10];
} nyx_storage_t; } nyx_storage_t;
u32 get_tmr_us(); u32 get_tmr_us();