Merge branch 'arm/booting' of git://git.pengutronix.de/git/ukl/linux-2.6 into devel-stable
Conflicts: arch/arm/Kconfig
This commit is contained in:
Коммит
a20df564d1
105
arch/arm/Kconfig
105
arch/arm/Kconfig
|
@ -1404,6 +1404,12 @@ config CC_STACKPROTECTOR
|
||||||
neutralized via a kernel panic.
|
neutralized via a kernel panic.
|
||||||
This feature requires gcc version 4.2 or above.
|
This feature requires gcc version 4.2 or above.
|
||||||
|
|
||||||
|
config DEPRECATED_PARAM_STRUCT
|
||||||
|
bool "Provide old way to pass kernel parameters"
|
||||||
|
help
|
||||||
|
This was deprecated in 2001 and announced to live on for 5 years.
|
||||||
|
Some old boot loaders still use this way.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Boot options"
|
menu "Boot options"
|
||||||
|
@ -1514,6 +1520,105 @@ config ATAGS_PROC
|
||||||
Should the atags used to boot the kernel be exported in an "atags"
|
Should the atags used to boot the kernel be exported in an "atags"
|
||||||
file in procfs. Useful with kexec.
|
file in procfs. Useful with kexec.
|
||||||
|
|
||||||
|
config AUTO_ZRELADDR
|
||||||
|
bool "Auto calculation of the decompressed kernel image address"
|
||||||
|
depends on !ZBOOT_ROM && !ARCH_U300
|
||||||
|
help
|
||||||
|
ZRELADDR is the physical address where the decompressed kernel
|
||||||
|
image will be placed. If AUTO_ZRELADDR is selected, the address
|
||||||
|
will be determined at run-time by masking the current IP with
|
||||||
|
0xf8000000. This assumes the zImage being placed in the first 128MB
|
||||||
|
from start of memory.
|
||||||
|
|
||||||
|
config ZRELADDR
|
||||||
|
hex "Physical address of the decompressed kernel image"
|
||||||
|
depends on !AUTO_ZRELADDR
|
||||||
|
default 0x00008000 if ARCH_BCMRING ||\
|
||||||
|
ARCH_CNS3XXX ||\
|
||||||
|
ARCH_DOVE ||\
|
||||||
|
ARCH_EBSA110 ||\
|
||||||
|
ARCH_FOOTBRIDGE ||\
|
||||||
|
ARCH_INTEGRATOR ||\
|
||||||
|
ARCH_IOP13XX ||\
|
||||||
|
ARCH_IOP33X ||\
|
||||||
|
ARCH_IXP2000 ||\
|
||||||
|
ARCH_IXP23XX ||\
|
||||||
|
ARCH_IXP4XX ||\
|
||||||
|
ARCH_KIRKWOOD ||\
|
||||||
|
ARCH_KS8695 ||\
|
||||||
|
ARCH_LOKI ||\
|
||||||
|
ARCH_MMP ||\
|
||||||
|
ARCH_MV78XX0 ||\
|
||||||
|
ARCH_NOMADIK ||\
|
||||||
|
ARCH_NUC93X ||\
|
||||||
|
ARCH_NS9XXX ||\
|
||||||
|
ARCH_ORION5X ||\
|
||||||
|
ARCH_SPEAR3XX ||\
|
||||||
|
ARCH_SPEAR6XX ||\
|
||||||
|
ARCH_U8500 ||\
|
||||||
|
ARCH_VERSATILE ||\
|
||||||
|
ARCH_W90X900
|
||||||
|
default 0x08008000 if ARCH_MX1 ||\
|
||||||
|
ARCH_SHARK
|
||||||
|
default 0x10008000 if ARCH_MSM ||\
|
||||||
|
ARCH_OMAP1 ||\
|
||||||
|
ARCH_RPC
|
||||||
|
default 0x20008000 if ARCH_S5P6440 ||\
|
||||||
|
ARCH_S5P6442 ||\
|
||||||
|
ARCH_S5PC100 ||\
|
||||||
|
ARCH_S5PV210
|
||||||
|
default 0x30008000 if ARCH_S3C2410 ||\
|
||||||
|
ARCH_S3C2400 ||\
|
||||||
|
ARCH_S3C2412 ||\
|
||||||
|
ARCH_S3C2416 ||\
|
||||||
|
ARCH_S3C2440 ||\
|
||||||
|
ARCH_S3C2443
|
||||||
|
default 0x40008000 if ARCH_STMP378X ||\
|
||||||
|
ARCH_STMP37XX ||\
|
||||||
|
ARCH_SH7372 ||\
|
||||||
|
ARCH_SH7377
|
||||||
|
default 0x50008000 if ARCH_S3C64XX ||\
|
||||||
|
ARCH_SH7367
|
||||||
|
default 0x60008000 if ARCH_VEXPRESS
|
||||||
|
default 0x80008000 if ARCH_MX25 ||\
|
||||||
|
ARCH_MX3 ||\
|
||||||
|
ARCH_NETX ||\
|
||||||
|
ARCH_OMAP2PLUS ||\
|
||||||
|
ARCH_PNX4008
|
||||||
|
default 0x90008000 if ARCH_MX5 ||\
|
||||||
|
ARCH_MX91231
|
||||||
|
default 0xa0008000 if ARCH_IOP32X ||\
|
||||||
|
ARCH_PXA ||\
|
||||||
|
MACH_MX27
|
||||||
|
default 0xc0008000 if ARCH_LH7A40X ||\
|
||||||
|
MACH_MX21
|
||||||
|
default 0xf0008000 if ARCH_AAEC2000 ||\
|
||||||
|
ARCH_L7200
|
||||||
|
default 0xc0028000 if ARCH_CLPS711X
|
||||||
|
default 0x70008000 if ARCH_AT91 && (ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
|
||||||
|
default 0x20008000 if ARCH_AT91 && !(ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
|
||||||
|
default 0xc0008000 if ARCH_DAVINCI && ARCH_DAVINCI_DA8XX
|
||||||
|
default 0x80008000 if ARCH_DAVINCI && !ARCH_DAVINCI_DA8XX
|
||||||
|
default 0x00008000 if ARCH_EP93XX && EP93XX_SDCE3_SYNC_PHYS_OFFSET
|
||||||
|
default 0xc0008000 if ARCH_EP93XX && EP93XX_SDCE0_PHYS_OFFSET
|
||||||
|
default 0xd0008000 if ARCH_EP93XX && EP93XX_SDCE1_PHYS_OFFSET
|
||||||
|
default 0xe0008000 if ARCH_EP93XX && EP93XX_SDCE2_PHYS_OFFSET
|
||||||
|
default 0xf0008000 if ARCH_EP93XX && EP93XX_SDCE3_ASYNC_PHYS_OFFSET
|
||||||
|
default 0x00008000 if ARCH_GEMINI && GEMINI_MEM_SWAP
|
||||||
|
default 0x10008000 if ARCH_GEMINI && !GEMINI_MEM_SWAP
|
||||||
|
default 0x70008000 if ARCH_REALVIEW && REALVIEW_HIGH_PHYS_OFFSET
|
||||||
|
default 0x00008000 if ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET
|
||||||
|
default 0xc0208000 if ARCH_SA1100 && SA1111
|
||||||
|
default 0xc0008000 if ARCH_SA1100 && !SA1111
|
||||||
|
default 0x30108000 if ARCH_S3C2410 && PM_H1940
|
||||||
|
default 0x28E08000 if ARCH_U300 && MACH_U300_SINGLE_RAM
|
||||||
|
default 0x48008000 if ARCH_U300 && !MACH_U300_SINGLE_RAM
|
||||||
|
help
|
||||||
|
ZRELADDR is the physical address where the decompressed kernel
|
||||||
|
image will be placed. ZRELADDR has to be specified when the
|
||||||
|
assumption of AUTO_ZRELADDR is not valid, or when ZBOOT_ROM is
|
||||||
|
selected.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "CPU Power Management"
|
menu "CPU Power Management"
|
||||||
|
|
|
@ -14,18 +14,16 @@
|
||||||
MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
||||||
|
|
||||||
ifneq ($(MACHINE),)
|
ifneq ($(MACHINE),)
|
||||||
include $(srctree)/$(MACHINE)/Makefile.boot
|
-include $(srctree)/$(MACHINE)/Makefile.boot
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Note: the following conditions must always be true:
|
# Note: the following conditions must always be true:
|
||||||
# ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)
|
|
||||||
# PARAMS_PHYS must be within 4MB of ZRELADDR
|
# PARAMS_PHYS must be within 4MB of ZRELADDR
|
||||||
# INITRD_PHYS must be in RAM
|
# INITRD_PHYS must be in RAM
|
||||||
ZRELADDR := $(zreladdr-y)
|
|
||||||
PARAMS_PHYS := $(params_phys-y)
|
PARAMS_PHYS := $(params_phys-y)
|
||||||
INITRD_PHYS := $(initrd_phys-y)
|
INITRD_PHYS := $(initrd_phys-y)
|
||||||
|
|
||||||
export ZRELADDR INITRD_PHYS PARAMS_PHYS
|
export INITRD_PHYS PARAMS_PHYS
|
||||||
|
|
||||||
targets := Image zImage xipImage bootpImage uImage
|
targets := Image zImage xipImage bootpImage uImage
|
||||||
|
|
||||||
|
@ -67,7 +65,7 @@ quiet_cmd_uimage = UIMAGE $@
|
||||||
ifeq ($(CONFIG_ZBOOT_ROM),y)
|
ifeq ($(CONFIG_ZBOOT_ROM),y)
|
||||||
$(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
|
$(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
|
||||||
else
|
else
|
||||||
$(obj)/uImage: LOADADDR=$(ZRELADDR)
|
$(obj)/uImage: LOADADDR=$(CONFIG_ZRELADDR)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
# create a compressed vmlinuz image from the original vmlinux
|
# create a compressed vmlinuz image from the original vmlinux
|
||||||
#
|
#
|
||||||
|
|
||||||
|
AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET)
|
||||||
HEAD = head.o
|
HEAD = head.o
|
||||||
OBJS = misc.o decompress.o
|
OBJS = misc.o decompress.o
|
||||||
FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
|
FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
|
||||||
|
@ -79,19 +80,9 @@ endif
|
||||||
EXTRA_CFLAGS := -fpic -fno-builtin
|
EXTRA_CFLAGS := -fpic -fno-builtin
|
||||||
EXTRA_AFLAGS := -Wa,-march=all
|
EXTRA_AFLAGS := -Wa,-march=all
|
||||||
|
|
||||||
# Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via
|
|
||||||
# linker symbols. We only define initrd_phys and params_phys if the
|
|
||||||
# machine class defined the corresponding makefile variable.
|
|
||||||
LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR)
|
|
||||||
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
||||||
LDFLAGS_vmlinux += --be8
|
LDFLAGS_vmlinux += --be8
|
||||||
endif
|
endif
|
||||||
ifneq ($(INITRD_PHYS),)
|
|
||||||
LDFLAGS_vmlinux += --defsym initrd_phys=$(INITRD_PHYS)
|
|
||||||
endif
|
|
||||||
ifneq ($(PARAMS_PHYS),)
|
|
||||||
LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS)
|
|
||||||
endif
|
|
||||||
# ?
|
# ?
|
||||||
LDFLAGS_vmlinux += -p
|
LDFLAGS_vmlinux += -p
|
||||||
# Report unresolved symbol references
|
# Report unresolved symbol references
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
#
|
|
||||||
# linux/arch/arm/boot/compressed/Makefile
|
|
||||||
#
|
|
||||||
# create a compressed vmlinux image from the original vmlinux
|
|
||||||
#
|
|
||||||
|
|
||||||
COMPRESSED_EXTRA=../../lib/ll_char_wr.o
|
|
||||||
OBJECTS=misc-debug.o ll_char_wr.aout.o
|
|
||||||
|
|
||||||
CFLAGS=-D__KERNEL__ -O2 -DSTDC_HEADERS -DSTANDALONE_DEBUG -Wall -I../../../../include -c
|
|
||||||
|
|
||||||
test-gzip: piggy.aout.o $(OBJECTS)
|
|
||||||
$(CC) -o $@ $(OBJECTS) piggy.aout.o
|
|
||||||
|
|
||||||
misc-debug.o: misc.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ misc.c
|
|
||||||
|
|
||||||
piggy.aout.o: piggy.o
|
|
||||||
arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux piggy.o piggy.aout.o
|
|
||||||
|
|
||||||
ll_char_wr.aout.o: $(COMPRESSED_EXTRA)
|
|
||||||
arm-linuxelf-objcopy --change-leading-char -I elf32-arm -O arm-aout32-linux $(COMPRESSED_EXTRA) ll_char_wr.aout.o
|
|
||||||
|
|
|
@ -170,9 +170,16 @@ not_angel:
|
||||||
|
|
||||||
.text
|
.text
|
||||||
adr r0, LC0
|
adr r0, LC0
|
||||||
ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp})
|
ARM( ldmia r0, {r1, r2, r3, r5, r6, r11, ip, sp})
|
||||||
THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} )
|
THUMB( ldmia r0, {r1, r2, r3, r5, r6, r11, ip} )
|
||||||
THUMB( ldr sp, [r0, #32] )
|
THUMB( ldr sp, [r0, #32] )
|
||||||
|
#ifdef CONFIG_AUTO_ZRELADDR
|
||||||
|
@ determine final kernel image address
|
||||||
|
and r4, pc, #0xf8000000
|
||||||
|
add r4, r4, #TEXT_OFFSET
|
||||||
|
#else
|
||||||
|
ldr r4, =CONFIG_ZRELADDR
|
||||||
|
#endif
|
||||||
subs r0, r0, r1 @ calculate the delta offset
|
subs r0, r0, r1 @ calculate the delta offset
|
||||||
|
|
||||||
@ if delta is zero, we are
|
@ if delta is zero, we are
|
||||||
|
@ -310,18 +317,17 @@ wont_overwrite: mov r0, r4
|
||||||
LC0: .word LC0 @ r1
|
LC0: .word LC0 @ r1
|
||||||
.word __bss_start @ r2
|
.word __bss_start @ r2
|
||||||
.word _end @ r3
|
.word _end @ r3
|
||||||
.word zreladdr @ r4
|
|
||||||
.word _start @ r5
|
.word _start @ r5
|
||||||
.word _image_size @ r6
|
.word _image_size @ r6
|
||||||
.word _got_start @ r11
|
.word _got_start @ r11
|
||||||
.word _got_end @ ip
|
.word _got_end @ ip
|
||||||
.word user_stack+4096 @ sp
|
.word user_stack_end @ sp
|
||||||
LC1: .word reloc_end - reloc_start
|
LC1: .word reloc_end - reloc_start
|
||||||
.size LC0, . - LC0
|
.size LC0, . - LC0
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_RPC
|
#ifdef CONFIG_ARCH_RPC
|
||||||
.globl params
|
.globl params
|
||||||
params: ldr r0, =params_phys
|
params: ldr r0, =0x10000100 @ params_phys for RPC
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
.ltorg
|
.ltorg
|
||||||
.align
|
.align
|
||||||
|
@ -339,9 +345,8 @@ params: ldr r0, =params_phys
|
||||||
* r4 = kernel execution address
|
* r4 = kernel execution address
|
||||||
* r7 = architecture number
|
* r7 = architecture number
|
||||||
* r8 = atags pointer
|
* r8 = atags pointer
|
||||||
* r9 = run-time address of "start" (???)
|
|
||||||
* On exit,
|
* On exit,
|
||||||
* r1, r2, r3, r9, r10, r12 corrupted
|
* r0, r1, r2, r3, r9, r10, r12 corrupted
|
||||||
* This routine must preserve:
|
* This routine must preserve:
|
||||||
* r4, r5, r6, r7, r8
|
* r4, r5, r6, r7, r8
|
||||||
*/
|
*/
|
||||||
|
@ -396,12 +401,18 @@ __armv3_mpu_cache_on:
|
||||||
|
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
|
/*
|
||||||
|
* ?? ARMv3 MMU does not allow reading the control register,
|
||||||
|
* does this really work on ARMv3 MPU?
|
||||||
|
*/
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||||
@ .... .... .... WC.M
|
@ .... .... .... WC.M
|
||||||
orr r0, r0, #0x000d @ .... .... .... 11.1
|
orr r0, r0, #0x000d @ .... .... .... 11.1
|
||||||
|
/* ?? this overwrites the value constructed above? */
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
||||||
|
|
||||||
|
/* ?? invalidate for the second time? */
|
||||||
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
|
@ -771,8 +782,10 @@ proc_types:
|
||||||
* Turn off the Cache and MMU. ARMv3 does not support
|
* Turn off the Cache and MMU. ARMv3 does not support
|
||||||
* reading the control register, but ARMv4 does.
|
* reading the control register, but ARMv4 does.
|
||||||
*
|
*
|
||||||
* On exit, r0, r1, r2, r3, r9, r12 corrupted
|
* On exit,
|
||||||
* This routine must preserve: r4, r6, r7
|
* r0, r1, r2, r3, r9, r12 corrupted
|
||||||
|
* This routine must preserve:
|
||||||
|
* r4, r6, r7
|
||||||
*/
|
*/
|
||||||
.align 5
|
.align 5
|
||||||
cache_off: mov r3, #12 @ cache_off function
|
cache_off: mov r3, #12 @ cache_off function
|
||||||
|
@ -845,7 +858,7 @@ __armv3_mmu_cache_off:
|
||||||
* Clean and flush the cache to maintain consistency.
|
* Clean and flush the cache to maintain consistency.
|
||||||
*
|
*
|
||||||
* On exit,
|
* On exit,
|
||||||
* r1, r2, r3, r9, r11, r12 corrupted
|
* r1, r2, r3, r9, r10, r11, r12 corrupted
|
||||||
* This routine must preserve:
|
* This routine must preserve:
|
||||||
* r0, r4, r5, r6, r7
|
* r0, r4, r5, r6, r7
|
||||||
*/
|
*/
|
||||||
|
@ -988,7 +1001,7 @@ no_cache_id:
|
||||||
__armv3_mmu_cache_flush:
|
__armv3_mmu_cache_flush:
|
||||||
__armv3_mpu_cache_flush:
|
__armv3_mpu_cache_flush:
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1001,6 +1014,7 @@ __armv3_mpu_cache_flush:
|
||||||
phexbuf: .space 12
|
phexbuf: .space 12
|
||||||
.size phexbuf, . - phexbuf
|
.size phexbuf, . - phexbuf
|
||||||
|
|
||||||
|
@ phex corrupts {r0, r1, r2, r3}
|
||||||
phex: adr r3, phexbuf
|
phex: adr r3, phexbuf
|
||||||
mov r2, #0
|
mov r2, #0
|
||||||
strb r2, [r3, r1]
|
strb r2, [r3, r1]
|
||||||
|
@ -1015,6 +1029,7 @@ phex: adr r3, phexbuf
|
||||||
strb r2, [r3, r1]
|
strb r2, [r3, r1]
|
||||||
b 1b
|
b 1b
|
||||||
|
|
||||||
|
@ puts corrupts {r0, r1, r2, r3}
|
||||||
puts: loadsp r3, r1
|
puts: loadsp r3, r1
|
||||||
1: ldrb r2, [r0], #1
|
1: ldrb r2, [r0], #1
|
||||||
teq r2, #0
|
teq r2, #0
|
||||||
|
@ -1029,12 +1044,14 @@ puts: loadsp r3, r1
|
||||||
teq r0, #0
|
teq r0, #0
|
||||||
bne 1b
|
bne 1b
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
@ putc corrupts {r0, r1, r2, r3}
|
||||||
putc:
|
putc:
|
||||||
mov r2, r0
|
mov r2, r0
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
loadsp r3, r1
|
loadsp r3, r1
|
||||||
b 2b
|
b 2b
|
||||||
|
|
||||||
|
@ memdump corrupts {r0, r1, r2, r3, r10, r11, r12, lr}
|
||||||
memdump: mov r12, r0
|
memdump: mov r12, r0
|
||||||
mov r10, lr
|
mov r10, lr
|
||||||
mov r11, #0
|
mov r11, #0
|
||||||
|
@ -1070,3 +1087,4 @@ reloc_end:
|
||||||
.align
|
.align
|
||||||
.section ".stack", "w"
|
.section ".stack", "w"
|
||||||
user_stack: .space 4096
|
user_stack: .space 4096
|
||||||
|
user_stack_end:
|
||||||
|
|
|
@ -28,9 +28,6 @@ unsigned int __machine_arch_type;
|
||||||
|
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#ifdef STANDALONE_DEBUG
|
|
||||||
#define putstr printf
|
|
||||||
#else
|
|
||||||
|
|
||||||
static void putstr(const char *ptr);
|
static void putstr(const char *ptr);
|
||||||
extern void error(char *x);
|
extern void error(char *x);
|
||||||
|
@ -116,7 +113,6 @@ static void putstr(const char *ptr)
|
||||||
flush();
|
flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
||||||
{
|
{
|
||||||
|
@ -186,7 +182,6 @@ asmlinkage void __div0(void)
|
||||||
|
|
||||||
extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
||||||
|
|
||||||
#ifndef STANDALONE_DEBUG
|
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
||||||
|
@ -211,18 +206,3 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
||||||
putstr(" done, booting the kernel.\n");
|
putstr(" done, booting the kernel.\n");
|
||||||
return output_ptr;
|
return output_ptr;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
|
|
||||||
char output_buffer[1500*1024];
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
output_data = output_buffer;
|
|
||||||
|
|
||||||
putstr("Uncompressing Linux...");
|
|
||||||
decompress(input_data, input_data_end - input_data,
|
|
||||||
NULL, NULL, output_data, NULL, error);
|
|
||||||
putstr("done.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -13,10 +13,12 @@ CFLAGS_REMOVE_return_address.o = -pg
|
||||||
|
|
||||||
# Object file lists.
|
# Object file lists.
|
||||||
|
|
||||||
obj-y := compat.o elf.o entry-armv.o entry-common.o irq.o \
|
obj-y := elf.o entry-armv.o entry-common.o irq.o \
|
||||||
process.o ptrace.o return_address.o setup.o signal.o \
|
process.o ptrace.o return_address.o setup.o signal.o \
|
||||||
sys_arm.o stacktrace.o time.o traps.o
|
sys_arm.o stacktrace.o time.o traps.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o
|
||||||
|
|
||||||
obj-$(CONFIG_LEDS) += leds.o
|
obj-$(CONFIG_LEDS) += leds.o
|
||||||
obj-$(CONFIG_OC_ETM) += etm.o
|
obj-$(CONFIG_OC_ETM) += etm.o
|
||||||
|
|
||||||
|
|
|
@ -217,10 +217,3 @@ void __init convert_to_tag_list(struct tag *tags)
|
||||||
struct param_struct *params = (struct param_struct *)tags;
|
struct param_struct *params = (struct param_struct *)tags;
|
||||||
build_tag_list(params, ¶ms->u2);
|
build_tag_list(params, ¶ms->u2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init squash_mem_tags(struct tag *tag)
|
|
||||||
{
|
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
|
||||||
if (tag->hdr.tag == ATAG_MEM)
|
|
||||||
tag->hdr.tag = ATAG_NONE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -9,5 +9,3 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void convert_to_tag_list(struct tag *tags);
|
extern void convert_to_tag_list(struct tag *tags);
|
||||||
|
|
||||||
extern void squash_mem_tags(struct tag *tag);
|
|
||||||
|
|
|
@ -44,7 +44,9 @@
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEPRECATED_PARAM_STRUCT)
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
#endif
|
||||||
#include "atags.h"
|
#include "atags.h"
|
||||||
#include "tcm.h"
|
#include "tcm.h"
|
||||||
|
|
||||||
|
@ -663,6 +665,13 @@ static int __init customize_machine(void)
|
||||||
}
|
}
|
||||||
arch_initcall(customize_machine);
|
arch_initcall(customize_machine);
|
||||||
|
|
||||||
|
static void __init squash_mem_tags(struct tag *tag)
|
||||||
|
{
|
||||||
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
|
if (tag->hdr.tag == ATAG_MEM)
|
||||||
|
tag->hdr.tag = ATAG_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
struct tag *tags = (struct tag *)&init_tags;
|
struct tag *tags = (struct tag *)&init_tags;
|
||||||
|
@ -683,12 +692,14 @@ void __init setup_arch(char **cmdline_p)
|
||||||
else if (mdesc->boot_params)
|
else if (mdesc->boot_params)
|
||||||
tags = phys_to_virt(mdesc->boot_params);
|
tags = phys_to_virt(mdesc->boot_params);
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEPRECATED_PARAM_STRUCT)
|
||||||
/*
|
/*
|
||||||
* If we have the old style parameters, convert them to
|
* If we have the old style parameters, convert them to
|
||||||
* a tag list.
|
* a tag list.
|
||||||
*/
|
*/
|
||||||
if (tags->hdr.tag != ATAG_CORE)
|
if (tags->hdr.tag != ATAG_CORE)
|
||||||
convert_to_tag_list(tags);
|
convert_to_tag_list(tags);
|
||||||
|
#endif
|
||||||
if (tags->hdr.tag != ATAG_CORE)
|
if (tags->hdr.tag != ATAG_CORE)
|
||||||
tags = (struct tag *)&init_tags;
|
tags = (struct tag *)&init_tags;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче