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:
		
				commit
				
					
						a20df564d1
					
				
			
		
					 10 changed files with 152 additions and 79 deletions
				
			
		
							
								
								
									
										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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue