Xtensa improvements for v4.11:
- clean up bootable image build targets: provide separate 'Image', 'zImage' and 'uImage' make targets that only build corresponding image type. Make 'all' build all images appropriate for a platform; - allow merging vectors code into .text section as a preparation step for XIP support; - fix handling external FDT when the kernel is built without BLK_DEV_INITRD support. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJYucw+AAoJEFH5zJH4P6BE8VwP/1AXxAxh2z8P0lu4Ay5XsBFI sIFGgTow8Hw5NNyj3td3USLvLM/cHi/Bl1FE94P3XaezJn/lIMIJscY08GUqJhLQ cu6AfztQHW/Cl6E5YQRDCAgSETtz4P0gQSZn4TIf6APTdlGeQjNhCcwpqYASNU/a BFxoNNAJ6hlf7ahNAHK/wQdJbV9YKOd3T+HNXyOYEiyhk/flqk9NAKt+ObBCUT2r W09mpDu2WPNI2fQBua7txxx7Kq2R4HE1cnbGxB63v+inwkp/bPl94NAEBNCJsOaG QAAnqWfn+WM/IF0kiEVgrQMd0TrsDMwalhPd9iwl30Gc6Z/pNgIwVEEGv2N0PKcx WNwSAwojFdGmNozJRAJj76UDqDPfJIHnKBfOVOmq7unMm4i6SbW2zjS67ZEm6DKX Qyj+Y+evVbW6tsVU0hPR4Nevh9Ha15IvVkMm1T8MzwudKVJW2jrU4ZUUE9yGUwXH lD8rJT/dbPQrSnYM/ARsqCT5AiZ9vakaI92vqBc9L/exwsWIfxQdcUs/7FXYf8Yx cpJ36MkwRJ6n+4nDAX9xMOejO5FoRrnH7puYvpbgdr+uj5DvZawheLyVht4xZ6Ed ZWknak0rlJW0z4SqdCXOTRMTpgUXw06AKerzkrx49dosHa1FVKaeuekMYo5HYBDw hfJbvj1a1UgTnAmJG9wv =gihR -----END PGP SIGNATURE----- Merge tag 'xtensa-20170303' of git://github.com/jcmvbkbc/linux-xtensa Pull Xtensa updates from Max Filippov: - clean up bootable image build targets: provide separate 'Image', 'zImage' and 'uImage' make targets that only build corresponding image type. Make 'all' build all images appropriate for a platform - allow merging vectors code into .text section as a preparation step for XIP support - fix handling external FDT when the kernel is built without BLK_DEV_INITRD support * tag 'xtensa-20170303' of git://github.com/jcmvbkbc/linux-xtensa: xtensa: allow merging vectors into .text section xtensa: clean up bootable image build targets xtensa: move parse_tag_fdt out of #ifdef CONFIG_BLK_DEV_INITRD
This commit is contained in:
commit
606ed721af
|
@ -93,11 +93,7 @@ endif
|
|||
|
||||
boot := arch/xtensa/boot
|
||||
|
||||
all: zImage
|
||||
|
||||
bzImage : zImage
|
||||
|
||||
zImage: vmlinux
|
||||
all Image zImage uImage: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $@
|
||||
|
||||
%.dtb:
|
||||
|
@ -107,6 +103,8 @@ dtbs: scripts
|
|||
$(Q)$(MAKE) $(build)=$(boot)/dts
|
||||
|
||||
define archhelp
|
||||
@echo '* Image - Kernel ELF image with reset vector'
|
||||
@echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)'
|
||||
@echo '* uImage - U-Boot wrapped image'
|
||||
@echo ' dtbs - Build device tree blobs for enabled boards'
|
||||
endef
|
||||
|
|
|
@ -21,14 +21,17 @@ subdir-y := lib
|
|||
|
||||
# Subdirs for the boot loader(s)
|
||||
|
||||
bootdir-$(CONFIG_XTENSA_PLATFORM_ISS) += boot-elf
|
||||
bootdir-$(CONFIG_XTENSA_PLATFORM_XT2000) += boot-redboot boot-elf boot-uboot
|
||||
bootdir-$(CONFIG_XTENSA_PLATFORM_XTFPGA) += boot-redboot boot-elf boot-uboot
|
||||
boot-$(CONFIG_XTENSA_PLATFORM_ISS) += Image
|
||||
boot-$(CONFIG_XTENSA_PLATFORM_XT2000) += Image zImage uImage
|
||||
boot-$(CONFIG_XTENSA_PLATFORM_XTFPGA) += Image zImage uImage
|
||||
|
||||
zImage Image: $(bootdir-y)
|
||||
all: $(boot-y)
|
||||
Image: boot-elf
|
||||
zImage: boot-redboot
|
||||
uImage: $(obj)/uImage
|
||||
|
||||
$(bootdir-y): $(addprefix $(obj)/,$(subdir-y)) \
|
||||
$(addprefix $(obj)/,$(host-progs))
|
||||
boot-elf boot-redboot: $(addprefix $(obj)/,$(subdir-y)) \
|
||||
$(addprefix $(obj)/,$(host-progs))
|
||||
$(Q)$(MAKE) $(build)=$(obj)/$@ $(MAKECMDGOALS)
|
||||
|
||||
OBJCOPYFLAGS = --strip-all -R .comment -R .note.gnu.build-id -O binary
|
||||
|
@ -41,4 +44,10 @@ vmlinux.bin.gz: vmlinux.bin FORCE
|
|||
|
||||
boot-elf: vmlinux.bin
|
||||
boot-redboot: vmlinux.bin.gz
|
||||
boot-uboot: vmlinux.bin.gz
|
||||
|
||||
UIMAGE_LOADADDR = $(CONFIG_KERNEL_LOAD_ADDRESS)
|
||||
UIMAGE_COMPRESSION = gzip
|
||||
|
||||
$(obj)/uImage: vmlinux.bin.gz FORCE
|
||||
$(call if_changed,uimage)
|
||||
$(Q)$(kecho) ' Kernel: $@ is ready'
|
||||
|
|
|
@ -31,4 +31,4 @@ $(obj)/../Image.elf: $(obj)/Image.o $(obj)/boot.lds
|
|||
-o $@ $(obj)/Image.o
|
||||
$(Q)$(kecho) ' Kernel: $@ is ready'
|
||||
|
||||
zImage: $(obj)/../Image.elf
|
||||
all Image: $(obj)/../Image.elf
|
||||
|
|
|
@ -32,4 +32,4 @@ $(obj)/../zImage.redboot: $(obj)/zImage.elf
|
|||
$(Q)$(OBJCOPY) -S -O binary $< $@
|
||||
$(Q)$(kecho) ' Kernel: $@ is ready'
|
||||
|
||||
zImage: $(obj)/../zImage.redboot
|
||||
all zImage: $(obj)/../zImage.redboot
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
# for more details.
|
||||
#
|
||||
|
||||
UIMAGE_LOADADDR = $(CONFIG_KERNEL_LOAD_ADDRESS)
|
||||
UIMAGE_COMPRESSION = gzip
|
||||
|
||||
$(obj)/../uImage: vmlinux.bin.gz FORCE
|
||||
$(call if_changed,uimage)
|
||||
$(Q)$(kecho) ' Kernel: $@ is ready'
|
||||
|
||||
zImage: $(obj)/../uImage
|
|
@ -67,7 +67,11 @@ static inline unsigned long xtensa_get_kio_paddr(void)
|
|||
#endif /* CONFIG_MMU */
|
||||
|
||||
#define RESET_VECTOR1_VADDR (XCHAL_RESET_VECTOR1_VADDR)
|
||||
#ifdef CONFIG_VECTORS_OFFSET
|
||||
#define VECBASE_VADDR (KERNELOFFSET - CONFIG_VECTORS_OFFSET)
|
||||
#else
|
||||
#define VECBASE_VADDR _vecbase
|
||||
#endif
|
||||
|
||||
#if defined(XCHAL_HAVE_VECBASE) && XCHAL_HAVE_VECBASE
|
||||
|
||||
|
|
|
@ -126,6 +126,8 @@ static int __init parse_tag_initrd(const bp_tag_t* tag)
|
|||
|
||||
__tagtable(BP_TAG_INITRD, parse_tag_initrd);
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
||||
static int __init parse_tag_fdt(const bp_tag_t *tag)
|
||||
|
@ -138,8 +140,6 @@ __tagtable(BP_TAG_FDT, parse_tag_fdt);
|
|||
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
|
||||
static int __init parse_tag_cmdline(const bp_tag_t* tag)
|
||||
{
|
||||
strlcpy(command_line, (char *)(tag->data), COMMAND_LINE_SIZE);
|
||||
|
@ -334,6 +334,7 @@ void __init setup_arch(char **cmdline_p)
|
|||
|
||||
mem_reserve(__pa(&_stext), __pa(&_end));
|
||||
|
||||
#ifdef CONFIG_VECTORS_OFFSET
|
||||
mem_reserve(__pa(&_WindowVectors_text_start),
|
||||
__pa(&_WindowVectors_text_end));
|
||||
|
||||
|
@ -370,6 +371,8 @@ void __init setup_arch(char **cmdline_p)
|
|||
__pa(&_Level6InterruptVector_text_end));
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_VECTORS_OFFSET */
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
mem_reserve(__pa(&_SecondaryResetVector_text_start),
|
||||
__pa(&_SecondaryResetVector_text_end));
|
||||
|
|
|
@ -59,6 +59,7 @@ jiffies = jiffies_64;
|
|||
* garbage.)
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_VECTORS_OFFSET
|
||||
#define SECTION_VECTOR(sym, section, addr, max_prevsec_size, prevsec) \
|
||||
section addr : AT((MIN(LOADADDR(prevsec) + max_prevsec_size, \
|
||||
LOADADDR(prevsec) + SIZEOF(prevsec)) + 3) & ~ 3) \
|
||||
|
@ -68,6 +69,11 @@ jiffies = jiffies_64;
|
|||
*(section) \
|
||||
sym ## _end = ABSOLUTE(.); \
|
||||
}
|
||||
#else
|
||||
#define SECTION_VECTOR(section, addr) \
|
||||
. = addr; \
|
||||
*(section)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Mapping of input sections to output sections when linking.
|
||||
|
@ -85,6 +91,37 @@ SECTIONS
|
|||
{
|
||||
/* The HEAD_TEXT section must be the first section! */
|
||||
HEAD_TEXT
|
||||
|
||||
#ifndef CONFIG_VECTORS_OFFSET
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
_vecbase = .;
|
||||
|
||||
SECTION_VECTOR (.WindowVectors.text, WINDOW_VECTORS_VADDR)
|
||||
#if XCHAL_EXCM_LEVEL >= 2
|
||||
SECTION_VECTOR (.Level2InterruptVector.text, INTLEVEL2_VECTOR_VADDR)
|
||||
#endif
|
||||
#if XCHAL_EXCM_LEVEL >= 3
|
||||
SECTION_VECTOR (.Level3InterruptVector.text, INTLEVEL3_VECTOR_VADDR)
|
||||
#endif
|
||||
#if XCHAL_EXCM_LEVEL >= 4
|
||||
SECTION_VECTOR (.Level4InterruptVector.text, INTLEVEL4_VECTOR_VADDR)
|
||||
#endif
|
||||
#if XCHAL_EXCM_LEVEL >= 5
|
||||
SECTION_VECTOR (.Level5InterruptVector.text, INTLEVEL5_VECTOR_VADDR)
|
||||
#endif
|
||||
#if XCHAL_EXCM_LEVEL >= 6
|
||||
SECTION_VECTOR (.Level6InterruptVector.text, INTLEVEL6_VECTOR_VADDR)
|
||||
#endif
|
||||
SECTION_VECTOR (.DebugInterruptVector.literal, DEBUG_VECTOR_VADDR - 4)
|
||||
SECTION_VECTOR (.DebugInterruptVector.text, DEBUG_VECTOR_VADDR)
|
||||
SECTION_VECTOR (.KernelExceptionVector.literal, KERNEL_VECTOR_VADDR - 4)
|
||||
SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
|
||||
SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4)
|
||||
SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
|
||||
SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 48)
|
||||
SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
|
||||
#endif
|
||||
|
||||
TEXT_TEXT
|
||||
VMLINUX_SYMBOL(__sched_text_start) = .;
|
||||
*(.sched.literal .sched.text)
|
||||
|
@ -132,6 +169,7 @@ SECTIONS
|
|||
. = ALIGN(16);
|
||||
__boot_reloc_table_start = ABSOLUTE(.);
|
||||
|
||||
#ifdef CONFIG_VECTORS_OFFSET
|
||||
RELOCATE_ENTRY(_WindowVectors_text,
|
||||
.WindowVectors.text);
|
||||
#if XCHAL_EXCM_LEVEL >= 2
|
||||
|
@ -164,6 +202,7 @@ SECTIONS
|
|||
.DoubleExceptionVector.text);
|
||||
RELOCATE_ENTRY(_DebugInterruptVector_text,
|
||||
.DebugInterruptVector.text);
|
||||
#endif
|
||||
#if defined(CONFIG_SMP)
|
||||
RELOCATE_ENTRY(_SecondaryResetVector_text,
|
||||
.SecondaryResetVector.text);
|
||||
|
@ -186,6 +225,7 @@ SECTIONS
|
|||
. = ALIGN(4);
|
||||
.dummy : { LONG(0) }
|
||||
|
||||
#ifdef CONFIG_VECTORS_OFFSET
|
||||
/* The vectors are relocated to the real position at startup time */
|
||||
|
||||
SECTION_VECTOR (_WindowVectors_text,
|
||||
|
@ -277,6 +317,7 @@ SECTIONS
|
|||
|
||||
. = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
|
||||
|
||||
#endif
|
||||
#if defined(CONFIG_SMP)
|
||||
|
||||
SECTION_VECTOR (_SecondaryResetVector_text,
|
||||
|
|
Loading…
Reference in New Issue