summaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorClement Leger <cleger@kalray.eu>2020-06-12 09:10:36 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2020-06-15 16:15:21 +0200
commit5fe555384c2b4e0edd9a11f55c4953b09b196637 (patch)
treed0acb4bc7a993d4f61823cdd8924f1c84afedb12 /arch/mips
parent76c161b367ad78ed6212f46f547b1781939b6cc2 (diff)
downloadbarebox-5fe555384c2b4e0edd9a11f55c4953b09b196637.tar.gz
barebox-5fe555384c2b4e0edd9a11f55c4953b09b196637.tar.xz
mips: lib: bootm: use bootm elf loading capabilities
Now that the elf file is loaded by the bootm core, there is no need for elf pointer anymore. Thus all elf related fields can be removed and bootm_load_os can be used. Signed-off-by: Clement Leger <cleger@kalray.eu> Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/lib/bootm.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 8e16994b62..6c56202ea9 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -46,41 +46,35 @@ static struct binfmt_hook binfmt_barebox_hook = {
static int do_bootm_elf(struct image_data *data)
{
void (*entry)(int, void *);
- struct elf_image *elf;
void *fdt;
int ret = 0;
- elf = elf_open(data->os_file);
- if (IS_ERR(elf))
- return PTR_ERR(elf);
-
- ret = elf_load(elf);
+ ret = bootm_load_os(data, data->os_address);
if (ret)
- goto bootm_elf_done;
+ return ret;
fdt = bootm_get_devicetree(data);
if (IS_ERR(fdt)) {
ret = PTR_ERR(fdt);
- goto bootm_elf_done;
+ goto bootm_free_fdt;
}
pr_info("Starting application at 0x%08lx, dts 0x%08lx...\n",
- phys_to_virt(elf->entry), data->of_root_node);
+ phys_to_virt(data->os_address), data->of_root_node);
if (data->dryrun)
- goto bootm_elf_done;
+ goto bootm_free_fdt;
shutdown_barebox();
- entry = (void *) (unsigned long) elf->entry;
+ entry = (void *) (unsigned long) data->os_address;
entry(-2, phys_to_virt((unsigned long)fdt));
pr_err("ELF application terminated\n");
ret = -EINVAL;
-bootm_elf_done:
- elf_close(elf);
+bootm_free_fdt:
free(fdt);
return ret;