minerva: Make use of new minerva

- Training and switch is now faster
- Compatibility checks: New Minerva does not allow old binaries. New binaries do not allow old Minerva
- MTC table is now in a safe region
- Periodic training period increased to every 250ms
This commit is contained in:
CTCaer
2019-12-04 21:56:45 +02:00
parent 66c4f30bdf
commit 84328aa676
10 changed files with 63 additions and 22 deletions

View File

@@ -30,7 +30,9 @@
#define EMC_BASE 0x7001B000
#define EMC0_BASE 0x7001E000
#define EMC1_BASE 0x7001F000
#define MTC_TABLE 0x8F000000
#define MTC_INIT_MAGIC 0x3043544D
#define MTC_NEW_MAGIC 0x5243544D
#define _REG(base, off) *(vu32 *)((base) + (off))
@@ -61,6 +63,7 @@ typedef struct
bool emc_2X_clk_src_is_pllmb;
bool fsp_for_src_freq;
bool train_ram_patterns;
bool init_done;
} mtc_config_t;
enum train_mode_t

View File

@@ -3857,19 +3857,17 @@ static void _minerva_get_table(mtc_config_t *mtc_cfg)
switch (mtc_cfg->sdram_id)
{
case 1:
memcpy((void *)MTC_TABLE, nx_abca2_2_10NoCfgVersion_V9_8_7_V1_6, EMC_TABLE_SIZE_R7);
memcpy(mtc_cfg->mtc_table, nx_abca2_2_10NoCfgVersion_V9_8_7_V1_6, EMC_TABLE_SIZE_R7);
break;
case 0:
case 2:
case 3:
case 4:
default:
memcpy((void *)MTC_TABLE, nx_abca2_0_3_10NoCfgVersion_V9_8_7_V1_6, EMC_TABLE_SIZE_R7);
memcpy(mtc_cfg->mtc_table, nx_abca2_0_3_10NoCfgVersion_V9_8_7_V1_6, EMC_TABLE_SIZE_R7);
break;
}
mtc_cfg->mtc_table = (emc_table_t *)MTC_TABLE;
mtc_cfg->table_entries = 10;
mtc_cfg->rate_to = 0;
mtc_cfg->rate_from = 0;
@@ -3881,6 +3879,7 @@ static void _minerva_get_table(mtc_config_t *mtc_cfg)
mtc_cfg->emc_2X_clk_src_is_pllmb = false;
mtc_cfg->fsp_for_src_freq = false;
mtc_cfg->train_ram_patterns = true;
mtc_cfg->init_done = MTC_INIT_MAGIC;
}
void _minerva_init(mtc_config_t *mtc_cfg, void* bp)
@@ -3891,9 +3890,10 @@ void _minerva_init(mtc_config_t *mtc_cfg, void* bp)
fsp_for_src_freq = mtc_cfg->fsp_for_src_freq;
emc_2X_clk_src_is_pllmb = mtc_cfg->emc_2X_clk_src_is_pllmb;
if (!mtc_cfg->mtc_table)
if (mtc_cfg->init_done != MTC_INIT_MAGIC)
{
_minerva_get_table(mtc_cfg);
if (mtc_cfg->init_done == MTC_NEW_MAGIC)
_minerva_get_table(mtc_cfg);
return;
}