ianos: Remove sd (un)mount usage

This commit is contained in:
CTCaer 2020-06-14 13:17:26 +03:00
parent 5790c585f5
commit bb2b339b54
7 changed files with 19 additions and 35 deletions

View file

@ -63,26 +63,20 @@ static bool _ianos_read_cb(el_ctx *ctx, void *dest, size_t numberBytes, size_t o
} }
//TODO: Support shared libraries. //TODO: Support shared libraries.
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleConfig) uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
{ {
el_ctx ctx;
uintptr_t epaddr = 0; uintptr_t epaddr = 0;
if (sdmount) if (!sd_mount())
{ goto elfLoadFinalOut;
if (!sd_mount())
goto elfLoadFinalOut;
}
// Read library.
fileBuf = sd_file_read(path, NULL); fileBuf = sd_file_read(path, NULL);
if (sdmount)
sd_end();
if (!fileBuf) if (!fileBuf)
goto elfLoadFinalOut; goto elfLoadFinalOut;
el_ctx ctx;
ctx.pread = _ianos_read_cb; ctx.pread = _ianos_read_cb;
if (el_init(&ctx)) if (el_init(&ctx))
@ -94,7 +88,6 @@ uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleCon
case EXEC_ELF: case EXEC_ELF:
case AR64_ELF: case AR64_ELF:
elfBuf = (void *)DRAM_LIB_ADDR; elfBuf = (void *)DRAM_LIB_ADDR;
sd_end();
break; break;
default: default:
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default. elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
@ -123,6 +116,5 @@ elfFreeOut:
fileBuf = NULL; fileBuf = NULL;
elfLoadFinalOut: elfLoadFinalOut:
return epaddr; return epaddr;
} }

View file

@ -29,6 +29,6 @@ typedef enum
KEEP_IN_RAM = (1 << 31) // Shared library mask. KEEP_IN_RAM = (1 << 31) // Shared library mask.
} elfType_t; } elfType_t;
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void* config); uintptr_t ianos_loader(char *path, elfType_t type, void* config);
#endif #endif

View file

@ -1474,7 +1474,7 @@ void ipl_main()
sd_mount(); sd_mount();
// Save sdram lp0 config. // Save sdram lp0 config.
if (!ianos_loader(false, "bootloader/sys/libsys_lp0.bso", DRAM_LIB, (void *)sdram_get_params_patched())) if (!ianos_loader("bootloader/sys/libsys_lp0.bso", DRAM_LIB, (void *)sdram_get_params_patched()))
h_cfg.errors |= ERR_LIBSYS_LP0; h_cfg.errors |= ERR_LIBSYS_LP0;
// Train DRAM and switch to max frequency. // Train DRAM and switch to max frequency.

View file

@ -45,7 +45,7 @@ u32 minerva_init()
if (mtc_cfg->init_done == MTC_INIT_MAGIC) if (mtc_cfg->init_done == MTC_INIT_MAGIC)
{ {
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed. mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg); u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
minerva_cfg = (void *)ep_addr; minerva_cfg = (void *)ep_addr;
return 0; return 0;
@ -58,7 +58,7 @@ u32 minerva_init()
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F; mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
mtc_tmp.init_done = MTC_NEW_MAGIC; mtc_tmp.init_done = MTC_NEW_MAGIC;
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp); u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
// 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)
@ -79,7 +79,7 @@ u32 minerva_init()
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("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)

View file

@ -63,26 +63,20 @@ static bool _ianos_read_cb(el_ctx *ctx, void *dest, size_t numberBytes, size_t o
} }
//TODO: Support shared libraries. //TODO: Support shared libraries.
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleConfig) uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
{ {
el_ctx ctx;
uintptr_t epaddr = 0; uintptr_t epaddr = 0;
if (sdmount) if (!sd_mount())
{ goto elfLoadFinalOut;
if (!sd_mount())
goto elfLoadFinalOut;
}
// Read library.
fileBuf = sd_file_read(path, NULL); fileBuf = sd_file_read(path, NULL);
if (sdmount)
sd_end();
if (!fileBuf) if (!fileBuf)
goto elfLoadFinalOut; goto elfLoadFinalOut;
el_ctx ctx;
ctx.pread = _ianos_read_cb; ctx.pread = _ianos_read_cb;
if (el_init(&ctx)) if (el_init(&ctx))
@ -94,7 +88,6 @@ uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleCon
case EXEC_ELF: case EXEC_ELF:
case AR64_ELF: case AR64_ELF:
elfBuf = (void *)DRAM_LIB_ADDR; elfBuf = (void *)DRAM_LIB_ADDR;
sd_end;
break; break;
default: default:
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default. elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
@ -123,6 +116,5 @@ elfFreeOut:
fileBuf = NULL; fileBuf = NULL;
elfLoadFinalOut: elfLoadFinalOut:
return epaddr; return epaddr;
} }

View file

@ -29,6 +29,6 @@ typedef enum
KEEP_IN_RAM = (1 << 31) // Shared library mask. KEEP_IN_RAM = (1 << 31) // Shared library mask.
} elfType_t; } elfType_t;
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void* config); uintptr_t ianos_loader(char *path, elfType_t type, void* config);
#endif #endif

View file

@ -45,7 +45,7 @@ u32 minerva_init()
if (mtc_cfg->init_done == MTC_INIT_MAGIC) if (mtc_cfg->init_done == MTC_INIT_MAGIC)
{ {
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed. mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg); u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
minerva_cfg = (void *)ep_addr; minerva_cfg = (void *)ep_addr;
return 0; return 0;
@ -58,7 +58,7 @@ u32 minerva_init()
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F; mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
mtc_tmp.init_done = MTC_NEW_MAGIC; mtc_tmp.init_done = MTC_NEW_MAGIC;
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp); u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
// 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)
@ -79,7 +79,7 @@ u32 minerva_init()
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("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)