From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gabor Juhos Date: Mon, 07 Jan 2013 21:31:32 +0100 Subject: [U-Boot] [PATCH 3/3] MIPS: bootm.c: add support for 'prep' and 'go' subcommands In-Reply-To: <50EB25AA.2040009@openwrt.org> References: <1357563222-18426-1-git-send-email-juhosg@openwrt.org> <1357563222-18426-3-git-send-email-juhosg@openwrt.org> <50EB25AA.2040009@openwrt.org> Message-ID: <50EB30A4.3010801@openwrt.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 2013.01.07. 20:44 keltez?ssel, Gabor Juhos ?rta: > 2013.01.07. 18:15 keltez?ssel, Daniel Schwierzeck ?rta: >> 2013/1/7 Gabor Juhos : >>> The bootm command supports subcommands since long time >>> however those subcommands are not yet usable on MIPS. >>> >>> The patch is based on the ARM implementation, and it adds >>> support for the 'prep' and 'go' subcommands only. >>> >>> Signed-off-by: Gabor Juhos >>> Cc: Daniel Schwierzeck >>> --- >>> arch/mips/lib/bootm.c | 15 +++++++++++++-- >>> 1 file changed, 13 insertions(+), 2 deletions(-) >>> >> >> thanks but how did you test it? > > I have tested it with the following commands: > > U-Boot> setenv serverip 192.168.1.254; setenv ipaddr 192.168.1.1 > U-Boot> tftp 0xa0800000 openwrt-ath79-uImage-initramfs-lzma.bin > dup 1 speed 100 > Using eth0 device > TFTP from server 192.168.1.254; our IP address is 192.168.1.1 > Filename 'openwrt-ath79-uImage-initramfs-lzma.bin'. > Load address: 0xa0800000 > Loading: ################################################################# > ################################################################# > ################################################################# > ################################################################# > ################################################################# > ################################################################# > ################################################################# > ########################################################### > done > Bytes transferred = 2627082 (28160a hex) > U-Boot> bootm loados > Trying to execute a command out of order > bootm - boot application image from memory > > U-Boot> bootm start 0xa0800000 > ## Booting kernel from Legacy Image at a0800000 ... > Image Name: MIPS OpenWrt Linux-3.8-rc2 > Created: 2013-01-07 19:19:26 UTC > Image Type: MIPS Linux Kernel Image (lzma compressed) > Data Size: 2627018 Bytes = 2.5 MiB > Load Address: 80100000 > Entry Point: 80100000 > Verifying Checksum ... OK > U-Boot> bootm loados > Uncompressing Kernel Image ... OK > U-Boot> bootm prep > U-Boot> bootm go > > Starting kernel ... > > Linux version 3.8.0-rc2 (juhosg at mag2) (gcc version 4.6.4 20121106 (prerelease) > (Linaro GCC 4.6-2012.11) ) #24 Mon Jan 7 20:19:20 CET 2013 > bootconsole [early0] enabled > CPU revision is: 00019374 (MIPS 24Kc) > ... > >> I needed to fix a relocation problem in cmd_bootm.c [1] to make it >> properly working. > > Hm, I think that I know why I did not notice that. I have tested it on a board > which uses an old U-Boot version as the primary bootloader. Because lots of > features are disabled in that I have compiled a more usable version and I'm > using that as a 2nd stage loader. It is loaded to address 0x80060000 by the > original bootloader. The Linux kernel uncompressed to 0x80100000 so it did not > clobber the strings. I have changed the load address of the kernel and it indeed fails: U-Boot> setenv serverip 192.168.1.254; setenv ipaddr 192.168.1.1 U-Boot> tftp 0xa0800000 openwrt-ath79-uImage-initramfs-lzma.bin dup 1 speed 100 Using eth0 device TFTP from server 192.168.1.254; our IP address is 192.168.1.1 Filename 'openwrt-ath79-uImage-initramfs-lzma.bin'. Load address: 0xa0800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ########################################################### done Bytes transferred = 2627551 (2817df hex) U-Boot> bootm start 0xa0800000 ## Booting kernel from Legacy Image at a0800000 ... Image Name: MIPS OpenWrt Linux-3.8-rc2 Created: 2013-01-07 19:54:05 UTC Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 2627487 Bytes = 2.5 MiB Load Address: 80060000 Entry Point: 80060000 Verifying Checksum ... OK U-Boot> bootm loados Uncompressing Kernel Image ... OK U-Boot> bootm prep bootm - boot application image from memory Usage: bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...'; when booting a Linux kernel, 'arg' can be the address of an initrd image When booting a Linux kernel which requires a flat device-tree a third argument is required which is the address of the device-tree blob. To boot that kernel without an initrd image, use a '-' for the second argument. If you do not pass a third a bd_info struct will be passed instead Sub-commands to do part of the bootm sequence. The sub-commands must be issued in the order below (it's ok to not issue all sub-commands): start [addr [arg ...]] loados - load OS image fdt - relocate flat device tree cmdline - OS specific command line processing/setup bdt - OS specific bd_t processing prep - OS specific prep before relocation or go go - start OS U-Boot> With your relocation patch the problem is gone. -Gabor