aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot/arch/sh/lib/zimageboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot/arch/sh/lib/zimageboot.c')
-rw-r--r--roms/u-boot/arch/sh/lib/zimageboot.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/roms/u-boot/arch/sh/lib/zimageboot.c b/roms/u-boot/arch/sh/lib/zimageboot.c
new file mode 100644
index 000000000..c38f0933f
--- /dev/null
+++ b/roms/u-boot/arch/sh/lib/zimageboot.c
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2010
+ * Renesas Solutions Corp.
+ * Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
+ */
+
+/*
+ * Linux SuperH zImage loading and boot
+ */
+
+#include <common.h>
+#include <command.h>
+#include <env.h>
+#include <irq_func.h>
+#include <asm/io.h>
+#include <asm/zimage.h>
+
+int do_sh_zimageboot(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ ulong (*zboot_entry)(int, char * const []) = NULL;
+ char *s0, *s1;
+ unsigned char *param = NULL;
+ char *cmdline;
+ char *bootargs;
+
+ disable_interrupts();
+
+ if (argc >= 3) {
+ /* argv[1] holds the address of the zImage */
+ s0 = argv[1];
+ /* argv[2] holds the address of zero page */
+ s1 = argv[2];
+ } else {
+ goto exit;
+ }
+
+ if (s0)
+ zboot_entry = (ulong (*)(int, char * const []))simple_strtoul(s0, NULL, 16);
+
+ /* empty_zero_page */
+ if (s1)
+ param = (unsigned char*)simple_strtoul(s1, NULL, 16);
+
+ /* Linux kernel command line */
+ cmdline = (char *)param + COMMAND_LINE;
+ bootargs = env_get("bootargs");
+
+ /* Clear zero page */
+ /* cppcheck-suppress nullPointer */
+ memset(param, 0, 0x1000);
+
+ /* Set commandline */
+ strcpy(cmdline, bootargs);
+
+ /* Boot */
+ zboot_entry(0, NULL);
+
+exit:
+ return -1;
+}
+
+U_BOOT_CMD(
+ zimageboot, 3, 0, do_sh_zimageboot,
+ "Boot zImage for Renesas SH",
+ ""
+);