mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
hos/mtc: Add FSP WAR and boost HOS booting times
By implementing FSP WAR we can allow HOS to boot in 1600MHz and be able to switch frequency without hanging.
This commit is contained in:
parent
84328aa676
commit
641a57a4f6
4 changed files with 12 additions and 4 deletions
|
@ -745,7 +745,7 @@ int hos_launch(ini_sec_t *cfg)
|
||||||
// Flush cache and disable MMU.
|
// Flush cache and disable MMU.
|
||||||
bpmp_mmu_disable();
|
bpmp_mmu_disable();
|
||||||
bpmp_clk_rate_set(BPMP_CLK_NORMAL);
|
bpmp_clk_rate_set(BPMP_CLK_NORMAL);
|
||||||
minerva_change_freq(FREQ_800);
|
minerva_change_freq(FREQ_1600);
|
||||||
|
|
||||||
// emuMMC: Some cards (Sandisk U1), do not like a fast power cycle. Wait min 100ms.
|
// emuMMC: Some cards (Sandisk U1), do not like a fast power cycle. Wait min 100ms.
|
||||||
sdmmc_storage_init_wait_sd();
|
sdmmc_storage_init_wait_sd();
|
||||||
|
|
|
@ -1265,7 +1265,6 @@ void ipl_main()
|
||||||
|
|
||||||
// Train DRAM and switch to max frequency.
|
// Train DRAM and switch to max frequency.
|
||||||
minerva_init();
|
minerva_init();
|
||||||
minerva_change_freq(FREQ_1600);
|
|
||||||
|
|
||||||
display_init();
|
display_init();
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,15 @@ void minerva_init()
|
||||||
minerva_cfg(mtc_cfg, NULL);
|
minerva_cfg(mtc_cfg, NULL);
|
||||||
mtc_cfg->rate_to = 1600000;
|
mtc_cfg->rate_to = 1600000;
|
||||||
minerva_cfg(mtc_cfg, NULL);
|
minerva_cfg(mtc_cfg, NULL);
|
||||||
|
|
||||||
|
// FSP WAR.
|
||||||
|
mtc_cfg->train_mode = OP_SWITCH;
|
||||||
|
mtc_cfg->rate_to = 800000;
|
||||||
|
minerva_cfg(mtc_cfg, NULL);
|
||||||
|
|
||||||
|
// Switch to max.
|
||||||
|
mtc_cfg->rate_to = 1600000;
|
||||||
|
minerva_cfg(mtc_cfg, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void minerva_change_freq(minerva_freq_t freq)
|
void minerva_change_freq(minerva_freq_t freq)
|
||||||
|
@ -102,7 +111,7 @@ void minerva_periodic_training()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg;
|
mtc_config_t *mtc_cfg = (mtc_config_t *)&nyx_str->mtc_cfg;
|
||||||
if (minerva_cfg && mtc_cfg->rate_from == FREQ_1600)
|
if (mtc_cfg->rate_from == FREQ_1600)
|
||||||
{
|
{
|
||||||
mtc_cfg->train_mode = OP_PERIODIC_TRAIN;
|
mtc_cfg->train_mode = OP_PERIODIC_TRAIN;
|
||||||
minerva_cfg(mtc_cfg, NULL);
|
minerva_cfg(mtc_cfg, NULL);
|
||||||
|
|
|
@ -374,8 +374,8 @@ void nyx_init_load_res()
|
||||||
|
|
||||||
sd_mount();
|
sd_mount();
|
||||||
|
|
||||||
|
// Train DRAM and switch to max frequency.
|
||||||
minerva_init();
|
minerva_init();
|
||||||
minerva_change_freq(FREQ_1600);
|
|
||||||
|
|
||||||
load_saved_configuration();
|
load_saved_configuration();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue