From d6794070c4fff021d51f904f570d096d76eb207b Mon Sep 17 00:00:00 2001 From: shchmue Date: Mon, 9 Dec 2019 12:51:11 -0700 Subject: [PATCH] minerva: Fallback gracefully when old lib present --- source/mem/minerva.c | 14 ++++++++++---- source/mem/minerva.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/source/mem/minerva.c b/source/mem/minerva.c index 6683053..68aa66d 100644 --- a/source/mem/minerva.c +++ b/source/mem/minerva.c @@ -28,7 +28,7 @@ extern volatile nyx_storage_t *nyx_str; -void minerva_init() +u32 minerva_init() { u32 curr_ram_idx = 0; @@ -37,13 +37,17 @@ void minerva_init() // Set table to nyx storage. mtc_cfg->mtc_table = (emc_table_t *)&nyx_str->mtc_table; - mtc_cfg->init_done = MTC_NEW_MAGIC; mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F; + 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); - minerva_cfg = (void *)ep_addr; + + // Ensure that Minerva is new. + if (mtc_cfg->init_done == MTC_INIT_MAGIC) + minerva_cfg = (void *)ep_addr; if (!minerva_cfg) - return; + return 1; // Get current frequency for (curr_ram_idx = 0; curr_ram_idx < 10; curr_ram_idx++) @@ -69,6 +73,8 @@ void minerva_init() // Switch to max. mtc_cfg->rate_to = 1600000; minerva_cfg(mtc_cfg, NULL); + + return 0; } void minerva_change_freq(minerva_freq_t freq) diff --git a/source/mem/minerva.h b/source/mem/minerva.h index f1edbaa..00228f4 100644 --- a/source/mem/minerva.h +++ b/source/mem/minerva.h @@ -58,7 +58,7 @@ typedef enum } minerva_freq_t; void (*minerva_cfg)(mtc_config_t *mtc_cfg, void *); -void minerva_init(); +u32 minerva_init(); void minerva_change_freq(minerva_freq_t freq); void minerva_periodic_training();