--- zzzz-none-000/linux-2.6.39.4/arch/arm/boot/compressed/head.S 2011-08-03 19:43:28.000000000 +0000 +++ puma6-arm-6490-729/linux-2.6.39.4/arch/arm/boot/compressed/head.S 2021-11-10 13:23:09.000000000 +0000 @@ -8,8 +8,40 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ + +/* Copyright 2008, Texas Instruments Incorporated + * + * This program has been modified from its original operation by + * Texas Instruments to do the following: + * + * Explanation of modification: + * Increased stack size for lzma support + * + * + * THIS MODIFIED SOFTWARE AND DOCUMENTATION ARE PROVIDED + * "AS IS," AND TEXAS INSTRUMENTS MAKES NO REPRESENTATIONS + * OR WARRENTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY + * PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR + * DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, + * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + * See The GNU General Public License for more details. + * + * These changes are covered under version 2 of the GNU General Public License, + * dated June 1991. + */ + +/* + Includes Intel Corporation's changes/modifications dated: December 20, 2013. + Changed/modified portions - Copyright © 2013, Intel Corporation. +*/ + + #include +#define ATAG_CORE 0x54410001 +#define ATAG_MEM 0x54410002 + /* * Debugging stuff * @@ -58,6 +90,21 @@ add \rb, \rb, #0x00010000 @ Ser1 #endif .endm +#elif defined(CONFIG_ARCH_OMAP2) + .macro loadsp, rb + mov \rb, #0x48000000 @ physical base address + add \rb, \rb, #0x0006a000 +#ifdef CONFIG_OMAP_LL_DEBUG_UART2 + add \rb, \rb, #0x00002000 +#endif +#ifdef CONFIG_OMAP_LL_DEBUG_UART3 + add \rb, \rb, #0x00004000 +#endif + .endm + .macro writeb, rb + strb \rb, [r3] + .endm + #elif defined(CONFIG_ARCH_S3C2410) .macro loadsp, rb, tmp mov \rb, #0x50000000 @@ -169,9 +216,37 @@ #ifdef CONFIG_AUTO_ZRELADDR @ determine final kernel image address - mov r4, pc +#ifdef CONFIG_ARM_PATCH_PHYS_VIRT + @ try get from atags first + ldr r0, [r8, #4] + ldr r1, =ATAG_CORE + cmp r0, r1 + bne 4f @ atag_core not found. not a atags list + mov r0, r8 @ atags pointer. r0 = current atag pointer + mov r1, #-1 @ keeps minimal address from all mem atags +1: ldr r2, [r0, #4] @ atag.hdr.tag + cmp r2, #0 @ atag_none + beq 3f + ldr r3, =ATAG_MEM + cmp r2, r3 + bne 2f + ldr r2, [r0, #0xc] @ mem start (skip hdr + mem.size) + cmp r2, r1 + bhi 2f + mov r1, r2 +2: ldr r3, [r0, #0] @ atag size + mov r3, r3, LSL#2 + add r0, r0, r3 + b 1b +3: mov r4, r1 + adds r1, r1, #1 @ check if it's still -1 + bne 1f + + @ so we have failed to take start mem from atags, try mask +#endif +4: mov r4, pc and r4, r4, #0xf8000000 - add r4, r4, #TEXT_OFFSET +1: add r4, r4, #TEXT_OFFSET #else ldr r4, =zreladdr #endif @@ -180,6 +255,12 @@ restart: adr r0, LC0 ldmia r0, {r1, r2, r3, r6, r9, r11, r12} + +#ifdef CONFIG_RUNTIME_PHYS_OFFSET + and r10, pc, #0xf0000000 @ fix up zreladdr + add r4, r4, r10 +#endif + ldr sp, [r0, #28] /* @@ -350,7 +431,11 @@ .word _image_size @ r9 .word _got_start @ r11 .word _got_end @ ip +#ifndef CONFIG_KERNEL_COMPRESS_7ZIP + .word user_stack_end @ sp +#else .word user_stack_end @ sp +#endif .size LC0, . - LC0 #ifdef CONFIG_ARCH_RPC @@ -1073,10 +1158,26 @@ mov pc, r10 #endif +#ifdef CONFIG_MCOUNT +/* CONFIG_MCOUNT causes boot header to be built with -pg requiring this + * trampoline + */ + .text + .align 0 + .type mcount %function + .global mcount +mcount: + mov pc, lr @ just return +#endif + .ltorg reloc_code_end: .align .section ".stack", "aw", %nobits +#ifndef CONFIG_KERNEL_COMPRESS_7ZIP user_stack: .space 4096 +#else +user_stack: .space 8192 +#endif user_stack_end: