sparc32: added U-Boot build target: uImage
authorDaniel Hellstrom <daniel@gaisler.com>
Wed, 26 Jan 2011 06:36:35 +0000 (06:36 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Mar 2011 01:19:04 +0000 (18:19 -0700)
This is only for LEON as u-boot for SPARC only supports LEON.

Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/Kconfig
arch/sparc/Makefile
arch/sparc/boot/Makefile

index 13d2b6721da28c7dbc67704224f6a0c6cc900604..e48f471be547109b04e4d2124ff8b4c9498a3fad 100644 (file)
@@ -461,6 +461,39 @@ config SPARC_LEON
          from www.gaisler.com. You can download a sparc-linux cross-compilation
          toolchain at www.gaisler.com.
 
+if SPARC_LEON
+menu "U-Boot options"
+
+config UBOOT_LOAD_ADDR
+       hex "uImage Load Address"
+       default 0x40004000
+       ---help---
+        U-Boot kernel load address, the address in physical address space
+        where u-boot will place the Linux kernel before booting it.
+        This address is normally the base address of main memory + 0x4000.
+
+config UBOOT_FLASH_ADDR
+       hex "uImage.o Load Address"
+       default 0x00080000
+       ---help---
+        Optional setting only affecting the uImage.o ELF-image used to
+        download the uImage file to the target using a ELF-loader other than
+        U-Boot. It may for example be used to download an uImage to FLASH with
+        the GRMON utility before even starting u-boot.
+
+config UBOOT_ENTRY_ADDR
+       hex "uImage Entry Address"
+       default 0xf0004000
+       ---help---
+        Do not change this unless you know what you're doing. This is
+        hardcoded by the SPARC32 and LEON port.
+
+        This is the virtual address u-boot jumps to when booting the Linux
+        Kernel.
+
+endmenu
+endif
+
 endmenu
 
 menu "Bus options (PCI etc.)"
index 113225b241e0151f435a8a91dd41a79e8b0aaee4..ad1fb5d969f314823db89f4ea470edef1ac252ea 100644 (file)
@@ -88,7 +88,7 @@ boot := arch/sparc/boot
 # Default target
 all: zImage
 
-image zImage tftpboot.img vmlinux.aout: vmlinux
+image zImage uImage tftpboot.img vmlinux.aout: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
 archclean:
@@ -102,6 +102,7 @@ ifeq ($(ARCH),sparc)
 define archhelp
   echo  '* image        - kernel image ($(boot)/image)'
   echo  '* zImage       - stripped kernel image ($(boot)/zImage)'
+  echo  '  uImage       - U-Boot SPARC32 Image (only for LEON)'
   echo  '  tftpboot.img - image prepared for tftp'
 endef
 else
index a2c5898c1ab11eb17fd9e22c3d32a9a9bddd8b70..9205416b1e67e8db9d243f1013ad4063014f39ca 100644 (file)
@@ -5,6 +5,7 @@
 
 ROOT_IMG       := /usr/src/root.img
 ELFTOAOUT      := elftoaout
+MKIMAGE        := $(srctree)/scripts/mkuboot.sh
 
 hostprogs-y    := piggyback btfixupprep
 targets                := tftpboot.img btfix.o btfix.S image zImage vmlinux.aout
@@ -77,6 +78,36 @@ $(obj)/zImage: $(obj)/image
 $(obj)/vmlinux.aout: vmlinux FORCE
        $(call if_changed,elftoaout)
        @echo '  kernel: $@ is ready'
+else
+
+# The following lines make a readable image for U-Boot.
+#  uImage   - Binary file read by U-boot
+#  uImage.o - object file of uImage for loading with a
+#             flash programmer understanding ELF.
+
+OBJCOPYFLAGS_image.bin := -S -O binary -R .note -R .comment
+$(obj)/image.bin: $(obj)/image FORCE
+       $(call if_changed,objcopy)
+
+$(obj)/image.gz: $(obj)/image.bin
+       $(call if_changed,gzip)
+
+quiet_cmd_uimage = UIMAGE  $@
+      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A sparc -O linux -T kernel \
+               -C gzip -a $(CONFIG_UBOOT_LOAD_ADDR) \
+              -e $(CONFIG_UBOOT_ENTRY_ADDR) -n 'Linux-$(KERNELRELEASE)' \
+               -d $< $@
+
+quiet_cmd_uimage.o = UIMAGE.O $@
+      cmd_uimage.o = $(LD) -Tdata $(CONFIG_UBOOT_FLASH_ADDR) \
+                     -r -b binary $@ -o $@.o
+
+targets += uImage
+$(obj)/uImage: $(obj)/image.gz
+       $(call if_changed,uimage)
+       $(call if_changed,uimage.o)
+       @echo '  Image $@ is ready'
+
 endif
 
 $(obj)/tftpboot.img: $(obj)/image $(obj)/piggyback System.map $(ROOT_IMG) FORCE