diff options
| author | Chris Zankel <czankel@tensilica.com> | 2005-06-24 01:01:12 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-24 03:05:21 -0400 |
| commit | 4bedea94545165364618d403d03b61d797acba0b (patch) | |
| tree | 04626bb71e0fb5ea5c5d5aa4fedc813301bea6a6 /arch/xtensa/boot/boot-elf | |
| parent | 8e1a6dd2fddcc73c9e933758361e3d9c076c688a (diff) | |
[PATCH] xtensa: Architecture support for Tensilica Xtensa Part 2
The attached patches provides part 2 of an architecture implementation for the
Tensilica Xtensa CPU series.
Signed-off-by: Chris Zankel <chris@zankel.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/xtensa/boot/boot-elf')
| -rw-r--r-- | arch/xtensa/boot/boot-elf/Makefile | 52 | ||||
| -rw-r--r-- | arch/xtensa/boot/boot-elf/boot.ld | 71 | ||||
| -rw-r--r-- | arch/xtensa/boot/boot-elf/bootstrap.S | 37 |
3 files changed, 160 insertions, 0 deletions
diff --git a/arch/xtensa/boot/boot-elf/Makefile b/arch/xtensa/boot/boot-elf/Makefile new file mode 100644 index 000000000000..f6ef6a369667 --- /dev/null +++ b/arch/xtensa/boot/boot-elf/Makefile | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | # | ||
| 2 | # This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | # License. See the file "COPYING" in the main directory of this archive | ||
| 4 | # for more details. | ||
| 5 | # | ||
| 6 | |||
| 7 | GZIP = gzip | ||
| 8 | GZIP_FLAGS = -v9fc | ||
| 9 | |||
| 10 | ifeq ($(BIG_ENDIAN),1) | ||
| 11 | OBJCOPY_ARGS := -O elf32-xtensa-be | ||
| 12 | else | ||
| 13 | OBJCOPY_ARGS := -O elf32-xtensa-le | ||
| 14 | endif | ||
| 15 | |||
| 16 | export OBJCOPY_ARGS | ||
| 17 | |||
| 18 | boot-y := bootstrap.o | ||
| 19 | |||
| 20 | OBJS := $(addprefix $(obj)/,$(boot-y)) | ||
| 21 | |||
| 22 | Image: vmlinux $(OBJS) | ||
| 23 | $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \ | ||
| 24 | vmlinux vmlinux.tmp | ||
| 25 | $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \ | ||
| 26 | --add-section image=vmlinux.tmp \ | ||
| 27 | --set-section-flags image=contents,alloc,load,load,data \ | ||
| 28 | $(OBJS) $@.tmp | ||
| 29 | $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \ | ||
| 30 | -T arch/$(ARCH)/boot/boot-elf/boot.ld \ | ||
| 31 | -o arch/$(ARCH)/boot/$@.elf $@.tmp | ||
| 32 | rm -f $@.tmp vmlinux.tmp | ||
| 33 | |||
| 34 | Image.initrd: vmlinux $(OBJS) | ||
| 35 | $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \ | ||
| 36 | --add-section .initrd=arch/$(ARCH)/boot/ramdisk \ | ||
| 37 | --set-section-flags .initrd=contents,alloc,load,load,data \ | ||
| 38 | vmlinux vmlinux.tmp | ||
| 39 | $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \ | ||
| 40 | --add-section image=vmlinux.tmp \ | ||
| 41 | --set-section-flags image=contents,alloc,load,load,data \ | ||
| 42 | $(OBJS) $@.tmp | ||
| 43 | $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \ | ||
| 44 | -T arch/$(ARCH)/boot/boot-elf/boot.ld \ | ||
| 45 | -o arch/$(ARCH)/boot/$@.elf $@.tmp | ||
| 46 | rm -f $@.tmp vmlinux.tmp | ||
| 47 | |||
| 48 | |||
| 49 | zImage: Image | ||
| 50 | |||
| 51 | zImage.initrd: Image.initrd | ||
| 52 | |||
diff --git a/arch/xtensa/boot/boot-elf/boot.ld b/arch/xtensa/boot/boot-elf/boot.ld new file mode 100644 index 000000000000..4ab06a0a7a6b --- /dev/null +++ b/arch/xtensa/boot/boot-elf/boot.ld | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | OUTPUT_ARCH(xtensa) | ||
| 2 | |||
| 3 | SECTIONS | ||
| 4 | { | ||
| 5 | .start 0xD0000000 : { *(.start) } | ||
| 6 | |||
| 7 | .text 0xD0000000: | ||
| 8 | { | ||
| 9 | __reloc_start = . ; | ||
| 10 | _text_start = . ; | ||
| 11 | *(.literal .text.literal .text) | ||
| 12 | _text_end = . ; | ||
| 13 | } | ||
| 14 | |||
| 15 | .rodata ALIGN(0x04): | ||
| 16 | { | ||
| 17 | *(.rodata) | ||
| 18 | *(.rodata1) | ||
| 19 | } | ||
| 20 | |||
| 21 | .data ALIGN(0x04): | ||
| 22 | { | ||
| 23 | *(.data) | ||
| 24 | *(.data1) | ||
| 25 | *(.sdata) | ||
| 26 | *(.sdata2) | ||
| 27 | *(.got.plt) | ||
| 28 | *(.got) | ||
| 29 | *(.dynamic) | ||
| 30 | } | ||
| 31 | |||
| 32 | __reloc_end = . ; | ||
| 33 | |||
| 34 | .initrd ALIGN(0x10) : | ||
| 35 | { | ||
| 36 | boot_initrd_start = . ; | ||
| 37 | *(.initrd) | ||
| 38 | boot_initrd_end = .; | ||
| 39 | } | ||
| 40 | |||
| 41 | . = ALIGN(0x10); | ||
| 42 | __image_load = . ; | ||
| 43 | .image 0xd0001000: | ||
| 44 | { | ||
| 45 | _image_start = .; | ||
| 46 | *(image) | ||
| 47 | . = (. + 3) & ~ 3; | ||
| 48 | _image_end = . ; | ||
| 49 | } | ||
| 50 | |||
| 51 | |||
| 52 | .bss ((LOADADDR(.image) + SIZEOF(.image) + 3) & ~ 3): | ||
| 53 | { | ||
| 54 | __bss_start = .; | ||
| 55 | *(.sbss) | ||
| 56 | *(.scommon) | ||
| 57 | *(.dynbss) | ||
| 58 | *(.bss) | ||
| 59 | __bss_end = .; | ||
| 60 | } | ||
| 61 | _end = .; | ||
| 62 | _param_start = .; | ||
| 63 | |||
| 64 | .ResetVector.text 0xfe000020 : | ||
| 65 | { | ||
| 66 | *(.ResetVector.text) | ||
| 67 | } | ||
| 68 | |||
| 69 | |||
| 70 | PROVIDE (end = .); | ||
| 71 | } | ||
diff --git a/arch/xtensa/boot/boot-elf/bootstrap.S b/arch/xtensa/boot/boot-elf/bootstrap.S new file mode 100644 index 000000000000..7cba94abdab8 --- /dev/null +++ b/arch/xtensa/boot/boot-elf/bootstrap.S | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | |||
| 2 | #include <xtensa/config/specreg.h> | ||
| 3 | #include <xtensa/config/core.h> | ||
| 4 | |||
| 5 | #include <linux/config.h> | ||
| 6 | #include <asm/bootparam.h> | ||
| 7 | |||
| 8 | |||
| 9 | /* ResetVector | ||
| 10 | */ | ||
| 11 | .section .ResetVector.text, "ax" | ||
| 12 | .global _ResetVector | ||
| 13 | _ResetVector: | ||
| 14 | _j reset | ||
| 15 | .align 4 | ||
| 16 | RomInitAddr: | ||
| 17 | .word 0xd0001000 | ||
| 18 | RomBootParam: | ||
| 19 | .word _bootparam | ||
| 20 | reset: | ||
| 21 | l32r a0, RomInitAddr | ||
| 22 | l32r a2, RomBootParam | ||
| 23 | movi a3, 0 | ||
| 24 | movi a4, 0 | ||
| 25 | jx a0 | ||
| 26 | |||
| 27 | .align 4 | ||
| 28 | .section .bootstrap.data, "aw" | ||
| 29 | |||
| 30 | .globl _bootparam | ||
| 31 | _bootparam: | ||
| 32 | .short BP_TAG_FIRST | ||
| 33 | .short 4 | ||
| 34 | .long BP_VERSION | ||
| 35 | .short BP_TAG_LAST | ||
| 36 | .short 0 | ||
| 37 | .long 0 | ||
