瀏覽代碼

Merge branch 'arm/booting' of git://git.pengutronix.de/git/ukl/linux-2.6 into devel-stable

Conflicts:
	arch/arm/Kconfig
Russell King 15 年之前
父節點
當前提交
a20df564d1

+ 105 - 0
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"

+ 3 - 5
arch/arm/boot/Makefile

@@ -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)

+ 1 - 10
arch/arm/boot/compressed/Makefile

@@ -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

+ 0 - 23
arch/arm/boot/compressed/Makefile.debug

@@ -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
-

+ 29 - 11
arch/arm/boot/compressed/head.S

@@ -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})
- THUMB(		ldmia	r0, {r1, r2, r3, r4, r5, r6, r11, ip}	)
+ ARM(		ldmia	r0, {r1, r2, r3, r5, r6, r11, ip, sp})
+ 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
- * This routine must preserve: r4, r6, r7
+ * On exit,
+ *  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:

+ 0 - 20
arch/arm/boot/compressed/misc.c

@@ -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

+ 3 - 1
arch/arm/kernel/Makefile

@@ -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
 
 

+ 0 - 7
arch/arm/kernel/compat.c

@@ -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, &params->u2);
 	build_tag_list(params, &params->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;
-}

+ 0 - 2
arch/arm/kernel/compat.h

@@ -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);

+ 11 - 0
arch/arm/kernel/setup.c

@@ -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;