# # Author: Robert Schwebel # # Description: Changelog Entry: # # * Patch by Holger Schurig, Robert Schwebel, 13 May 2004: # Add a 'bootz' command to boot normal Linux zImages in # case you don't need the features of U-Boot's uImage. # # State: 2004-05-13: submit # # # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher # --- /dev/null 1970-01-01 01:00:00.000000000 +0100 +++ u-boot-maintainance1/include/cmd_bootz.h 2004-05-13 08:35:03.000000000 +0200 @@ -0,0 +1,38 @@ +/* + * (C) Copyright 2003 + * Holger Schurig, M&N Logistik-Loesungen Online GmbH, + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Linux zImage Boot support + */ +#ifndef _CMD_BOOTZ_H +#define _CMD_BOOTZ_H +int do_bootz(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]); + +#define CMD_TBL_BOOTZ MK_CMD_TBL_ENTRY( \ + "bootz", 5, CFG_MAXARGS, 1, do_bootz, \ + "bootz - boot Linux zImage from memory\n", \ + "[addr [arg ...]]\n - boot zImage stored in memory\n" \ + " passing arguments 'arg ...'\n" \ +), + +#endif /* _CMD_BOOTZ_H */ --- u-boot-maintainance1/include/cmd_confdefs.h~cmdbootz 2004-05-13 08:31:20.000000000 +0200 +++ u-boot-maintainance1/include/cmd_confdefs.h 2004-05-13 08:33:54.000000000 +0200 @@ -90,6 +90,7 @@ #define CFG_CMD_REISER 0x0100000000000000U /* Reiserfs support */ #define CFG_CMD_CDP 0x0200000000000000U /* Cisco Discovery Protocol */ #define CFG_CMD_XIMG 0x0400000000000000U /* Load part of Multi Image */ +#define CFG_CMD_BOOTZ 0x0800000000000000U /* directly boot Linux zImage */ #define CFG_CMD_ALL 0xFFFFFFFFFFFFFFFFU /* ALL commands */ --- /dev/null 1970-01-01 01:00:00.000000000 +0100 +++ u-boot-maintainance1/common/cmd_bootz.c 2004-05-13 08:34:29.000000000 +0200 @@ -0,0 +1,100 @@ +/* + * (C) Copyright 2003 + * Holger Schurig, M&N Logistik-Loesungen Online GmbH, + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Linux zImage boot support + */ +#include +#include +#include +#include + +#define DEBUG + +#ifdef CONFIG_SHOW_BOOT_PROGRESS +# include +# define SHOW_BOOT_PROGRESS(arg) show_boot_progress(arg) +#else +# define SHOW_BOOT_PROGRESS(arg) +#endif + +#define CONFIG_KERNEL_RAM_BASE 0x40000 + +int +do_bootz(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{ + DECLARE_GLOBAL_DATA_PTR; + + ulong addr = 0x40000; + ulong initrd_start = 0; + ulong initrd_end = 0; + ulong data; + void (*theKernel) (int zero, int arch, struct tag * params); + bd_t *bd = gd->bd; +#ifdef CONFIG_CMDLINE_TAG + char *commandline = getenv("bootargs"); +#endif + addr = simple_strtoul(argv[1], NULL, 16); + + theKernel = (void (*)(int, int, struct tag *)) addr; + + SHOW_BOOT_PROGRESS(14); + +#ifdef DEBUG + printf("## Transferring control to Linux (at address %08lx) ...\n", + (ulong) theKernel); +#endif + +#if defined (CONFIG_SETUP_MEMORY_TAGS) || \ + defined (CONFIG_CMDLINE_TAG) || \ + defined (CONFIG_INITRD_TAG) || \ + defined (CONFIG_VFD) + setup_start_tag(bd); +#ifdef CONFIG_SETUP_MEMORY_TAGS + setup_memory_tags(bd); +#endif +#ifdef CONFIG_CMDLINE_TAG + setup_commandline_tag(bd, commandline); +#endif +#ifdef CONFIG_INITRD_TAG + setup_initrd_tag(bd, initrd_start, initrd_end); +#endif +#if 0 + setup_ramdisk_tag(bd); +#endif +#if defined (CONFIG_VFD) + setup_videolfb_tag(gd); +#endif + setup_end_tag(bd); +#endif + + /* we assume that the kernel is in place */ + printf("\nStarting kernel ...\n\n"); + + cleanup_before_linux(); + + theKernel(0, bd->bi_arch_number, params); + + printf("ERROR: we should never come to this place ...\n\n"); + return 0; +}