diff options
Diffstat (limited to 'arch/cris')
-rw-r--r-- | arch/cris/Makefile | 61 | ||||
-rw-r--r-- | arch/cris/arch-v10/vmlinux.lds.S | 118 | ||||
-rw-r--r-- | arch/cris/arch-v32/boot/compressed/head.S | 16 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/head.S | 20 | ||||
-rw-r--r-- | arch/cris/kernel/vmlinux.lds.S (renamed from arch/cris/arch-v32/vmlinux.lds.S) | 44 |
5 files changed, 81 insertions, 178 deletions
diff --git a/arch/cris/Makefile b/arch/cris/Makefile index 241e35bc3b5..3662cfb7b61 100644 --- a/arch/cris/Makefile +++ b/arch/cris/Makefile @@ -23,7 +23,8 @@ mach-$(CONFIG_ETRAXFS) := fs ifneq ($(arch-y),) SARCH := arch-$(arch-y) -inc := -Iarch/cris/include/arch-$(arch-y) -Iarch/cris/include/arch-$(arch-y)/arch +inc := -Iarch/cris/include/$(SARCH) +inc += -Iarch/cris/include/$(SARCH)/arch else SARCH := inc := @@ -52,72 +53,48 @@ KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g KBUILD_CFLAGS += -fno-omit-frame-pointer endif -head-y := arch/$(ARCH)/$(SARCH)/kernel/head.o +head-y := arch/cris/$(SARCH)/kernel/head.o LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a) -core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ -core-y += arch/$(ARCH)/$(SARCH)/kernel/ arch/$(ARCH)/$(SARCH)/mm/ +core-y += arch/cris/kernel/ arch/cris/mm/ +core-y += arch/cris/$(SARCH)/kernel/ arch/cris/$(SARCH)/mm/ ifdef CONFIG_ETRAX_ARCH_V32 -core-y += arch/$(ARCH)/$(SARCH)/$(MACH)/ +core-y += arch/cris/$(SARCH)/$(MACH)/ endif -drivers-y += arch/$(ARCH)/$(SARCH)/drivers/ -libs-y += arch/$(ARCH)/$(SARCH)/lib/ $(LIBGCC) +drivers-y += arch/cris/$(SARCH)/drivers/ +libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC) # cris source path -SRC_ARCH = $(srctree)/arch/$(ARCH) +SRC_ARCH = $(srctree)/arch/cris # cris object files path -OBJ_ARCH = $(objtree)/arch/$(ARCH) +OBJ_ARCH = $(objtree)/arch/cris -boot := arch/$(ARCH)/boot -MACHINE := arch/$(ARCH)/$(SARCH) +boot := arch/cris/$(SARCH)/boot +MACHINE := arch/cris/$(SARCH) all: zImage zImage Image: vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ -archprepare: $(SRC_ARCH)/.links FORCE - -# Create some links to make all tools happy -$(SRC_ARCH)/.links: - @rm -rf $(SRC_ARCH)/drivers - @ln -sfn $(SARCH)/drivers $(SRC_ARCH)/drivers - @rm -rf $(SRC_ARCH)/boot - @ln -sfn $(SARCH)/boot $(SRC_ARCH)/boot - @rm -rf $(SRC_ARCH)/lib - @ln -sfn $(SARCH)/lib $(SRC_ARCH)/lib - @rm -f $(SRC_ARCH)/arch/mach - @rm -rf $(SRC_ARCH)/arch - @ln -sfn $(SARCH) $(SRC_ARCH)/arch -ifdef CONFIG_ETRAX_ARCH_V32 - @ln -sfn ../$(SARCH)/$(MACH) $(SRC_ARCH)/arch/mach -endif - @rm -rf $(SRC_ARCH)/kernel/vmlinux.lds.S - @ln -sfn ../$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S - @touch $@ +archprepare: archclean: - $(Q)if [ -e arch/$(ARCH)/boot ]; then \ - $(MAKE) $(clean)=arch/$(ARCH)/boot; \ + $(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \ + $(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \ fi CLEAN_FILES += \ $(MACHINE)/boot/zImage \ $(MACHINE)/boot/compressed/decompress.bin \ $(MACHINE)/boot/compressed/piggy.gz \ - $(MACHINE)/boot/rescue/rescue.bin \ - $(SRC_ARCH)/.links + $(MACHINE)/boot/rescue/rescue.bin -MRPROPER_FILES += \ - $(SRC_ARCH)/drivers \ - $(SRC_ARCH)/boot \ - $(SRC_ARCH)/lib \ - $(SRC_ARCH)/arch \ - $(SRC_ARCH)/kernel/vmlinux.lds.S +# MRPROPER_FILES += define archhelp - echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' - echo '* Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' + echo '* zImage - Compressed kernel image (arch/cris/boot/zImage)' + echo '* Image - Uncompressed kernel image (arch/cris/boot/Image)' endef diff --git a/arch/cris/arch-v10/vmlinux.lds.S b/arch/cris/arch-v10/vmlinux.lds.S deleted file mode 100644 index 93c9f0ea286..00000000000 --- a/arch/cris/arch-v10/vmlinux.lds.S +++ /dev/null @@ -1,118 +0,0 @@ -/* ld script to make the Linux/CRIS kernel - * Authors: Bjorn Wesen (bjornw@axis.com) - * - * It is VERY DANGEROUS to fiddle around with the symbols in this - * script. It is for example quite vital that all generated sections - * that are used are actually named here, otherwise the linker will - * put them at the end, where the init stuff is which is FREED after - * the kernel has booted. - */ - -#include <asm-generic/vmlinux.lds.h> -#include <asm/page.h> - -jiffies = jiffies_64; -SECTIONS -{ - . = DRAM_VIRTUAL_BASE; - dram_start = .; - ibr_start = .; - . = . + 0x4000; /* see head.S and pages reserved at the start */ - - _text = .; /* Text and read-only data */ - text_start = .; /* lots of aliases */ - _stext = .; - __stext = .; - .text : { - TEXT_TEXT - SCHED_TEXT - LOCK_TEXT - *(.fixup) - *(.text.__*) - } - - _etext = . ; /* End of text section */ - __etext = .; - - . = ALIGN(4); /* Exception table */ - __start___ex_table = .; - __ex_table : { *(__ex_table) } - __stop___ex_table = .; - - RODATA - - . = ALIGN (4); - ___data_start = . ; - __Sdata = . ; - .data : { /* Data */ - DATA_DATA - } - __edata = . ; /* End of data section */ - _edata = . ; - - . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned */ - .data.init_task : { *(.data.init_task) } - - . = ALIGN(PAGE_SIZE); /* Init code and data */ - __init_begin = .; - .init.text : { - _sinittext = .; - INIT_TEXT - _einittext = .; - } - .init.data : { INIT_DATA } - . = ALIGN(16); - __setup_start = .; - .init.setup : { *(.init.setup) } - __setup_end = .; - .initcall.init : { - __initcall_start = .; - INITCALLS - __initcall_end = .; - } - - .con_initcall.init : { - __con_initcall_start = .; - *(.con_initcall.init) - __con_initcall_end = .; - } - SECURITY_INIT - -#ifdef CONFIG_BLK_DEV_INITRD - .init.ramfs : { - __initramfs_start = .; - *(.init.ramfs) - __initramfs_end = .; - } -#endif - __vmlinux_end = .; /* last address of the physical file */ - - /* - * We fill to the next page, so we can discard all init - * pages without needing to consider what payload might be - * appended to the kernel image. - */ - . = ALIGN(PAGE_SIZE); - - __init_end = .; - - __data_end = . ; /* Move to _edata ? */ - __bss_start = .; /* BSS */ - .bss : { - *(COMMON) - *(.bss) - } - - . = ALIGN (0x20); - _end = .; - __end = .; - - /* Sections to be discarded */ - /DISCARD/ : { - EXIT_TEXT - EXIT_DATA - *(.exitcall.exit) - } - - dram_end = dram_start + CONFIG_ETRAX_DRAM_SIZE*1024*1024; -} diff --git a/arch/cris/arch-v32/boot/compressed/head.S b/arch/cris/arch-v32/boot/compressed/head.S index ea3012993b0..a4a65c5c669 100644 --- a/arch/cris/arch-v32/boot/compressed/head.S +++ b/arch/cris/arch-v32/boot/compressed/head.S @@ -28,7 +28,13 @@ _start: beq dram_init_finished nop -#include "../../mach/dram_init.S" +#if defined CONFIG_ETRAXFS +#include "../../mach-fs/dram_init.S" +#elif defined CONFIG_CRIS_MACH_ARTPEC3 +#include "../../mach-a3/dram_init.S" +#else +#error Only ETRAXFS and ARTPEC-3 supported! +#endif dram_init_finished: @@ -130,4 +136,10 @@ _cmd_line_addr: _boot_source: .dword 0 -#include "../../mach/hw_settings.S" +#if defined CONFIG_ETRAXFS +#include "../../mach-fs/hw_settings.S" +#elif defined CONFIG_CRIS_MACH_ARTPEC3 +#include "../../mach-a3/hw_settings.S" +#else +#error Only ETRAXFS and ARTPEC-3 supported! +#endif diff --git a/arch/cris/arch-v32/kernel/head.S b/arch/cris/arch-v32/kernel/head.S index f902d87fb5d..3db478eb515 100644 --- a/arch/cris/arch-v32/kernel/head.S +++ b/arch/cris/arch-v32/kernel/head.S @@ -10,8 +10,9 @@ * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so * -traditional must not be used when assembling this file. */ -#include <hwregs/reg_rdwr.h> +#include <linux/autoconf.h> #include <arch/memmap.h> +#include <hwregs/reg_rdwr.h> #include <hwregs/intr_vect.h> #include <hwregs/asm/mmu_defs_asm.h> #include <hwregs/asm/reg_map_asm.h> @@ -217,7 +218,14 @@ _inflash: beq _dram_initialized nop -#include "../mach/dram_init.S" +#if defined CONFIG_ETRAXFS +#include "../mach-fs/dram_init.S" +#elif defined CONFIG_CRIS_MACH_ARTPEC3 +#include "../mach-a3/dram_init.S" +#else +#error Only ETRAXFS and ARTPEC-3 supported! +#endif + _dram_initialized: ;; Copy the text and data section to DRAM. This depends on that the @@ -472,4 +480,10 @@ swapper_pg_dir = 0xc0002000 .section ".init.data", "aw" -#include "../mach/hw_settings.S" +#if defined CONFIG_ETRAXFS +#include "../mach-fs/hw_settings.S" +#elif defined CONFIG_CRIS_MACH_ARTPEC3 +#include "../mach-a3/hw_settings.S" +#else +#error Only ETRAXFS and ARTPEC-3 supported! +#endif diff --git a/arch/cris/arch-v32/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S index d5f28e40717..0d2adfc794d 100644 --- a/arch/cris/arch-v32/vmlinux.lds.S +++ b/arch/cris/kernel/vmlinux.lds.S @@ -8,6 +8,7 @@ * the kernel has booted. */ +#include <linux/autoconf.h> #include <asm-generic/vmlinux.lds.h> #include <asm/page.h> @@ -17,22 +18,26 @@ #define __CONFIG_ETRAX_VMEM_SIZE 0 #endif + jiffies = jiffies_64; SECTIONS { . = DRAM_VIRTUAL_BASE; dram_start = .; +#ifdef CONFIG_ETRAX_ARCH_V10 + ibr_start = .; +#else ebp_start = .; - /* The boot section is only necessary until the VCS top */ /* level testbench includes both flash and DRAM. */ .boot : { *(.boot) } +#endif - /* See head.S and pages reserved at the start. */ + /* see head.S and pages reserved at the start */ . = DRAM_VIRTUAL_BASE + 0x4000; - _text = .; /* Text and read-only data. */ - text_start = .; /* Lots of aliases. */ + _text = .; /* Text and read-only data. */ + text_start = .; /* Lots of aliases. */ _stext = .; __stext = .; .text : { @@ -43,10 +48,10 @@ SECTIONS *(.text.__*) } - _etext = . ; /* End of text section. */ + _etext = . ; /* End of text section. */ __etext = .; - . = ALIGN(4); /* Exception table. */ + . = ALIGN(4); /* Exception table. */ __start___ex_table = .; __ex_table : { *(__ex_table) } __stop___ex_table = .; @@ -56,16 +61,16 @@ SECTIONS . = ALIGN (4); ___data_start = . ; __Sdata = . ; - .data : { /* Data */ + .data : { /* Data */ DATA_DATA } - __edata = . ; /* End of data section. */ + __edata = . ; /* End of data section. */ _edata = . ; . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */ .data.init_task : { *(.data.init_task) } - . = ALIGN(PAGE_SIZE); /* Init code and data. */ + . = ALIGN(PAGE_SIZE); /* Init code and data. */ __init_begin = .; .init.text : { _sinittext = .; @@ -77,9 +82,11 @@ SECTIONS __setup_start = .; .init.setup : { *(.init.setup) } __setup_end = .; +#ifdef CONFIG_ETRAX_ARCH_V32 __start___param = .; __param : { *(__param) } __stop___param = .; +#endif .initcall.init : { __initcall_start = .; INITCALLS @@ -93,7 +100,17 @@ SECTIONS } SECURITY_INIT - __vmlinux_end = .; /* Last address of the physical file. */ +#ifdef CONFIG_ETRAX_ARCH_V10 +#ifdef CONFIG_BLK_DEV_INITRD + .init.ramfs : { + __initramfs_start = .; + *(.init.ramfs) + __initramfs_end = .; + } +#endif +#endif + __vmlinux_end = .; /* Last address of the physical file. */ +#ifdef CONFIG_ETRAX_ARCH_V32 PERCPU(PAGE_SIZE) .init.ramfs : { @@ -101,18 +118,19 @@ SECTIONS *(.init.ramfs) __initramfs_end = .; } +#endif /* * We fill to the next page, so we can discard all init * pages without needing to consider what payload might be * appended to the kernel image. */ - . = ALIGN (PAGE_SIZE); + . = ALIGN(PAGE_SIZE); __init_end = .; - __data_end = . ; /* Move to _edata? */ - __bss_start = .; /* BSS. */ + __data_end = . ; /* Move to _edata ? */ + __bss_start = .; /* BSS. */ .bss : { *(COMMON) *(.bss) |