[oe-commits] org.oe.dev ep93xx kernel: add patch to make some more boards work

koen commit openembedded-commits at lists.openembedded.org
Mon Feb 5 18:28:07 UTC 2007


ep93xx kernel: add patch to make some more boards work

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 24a6bbd3a00726598e9a364df32f1abdff8750bf
ViewMTN: http://monotone.openembedded.org/revision.psp?id=24a6bbd3a00726598e9a364df32f1abdff8750bf
Files:
1
packages/linux/ep93xx-kernel/dynamic-phys-offset-2.6.20-rc7.diff
packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
Diffs:

#
# mt diff -r8cfe6d3e44146977743500b7b5685448935ff750 -r24a6bbd3a00726598e9a364df32f1abdff8750bf
#
# 
# 
# add_file "packages/linux/ep93xx-kernel/dynamic-phys-offset-2.6.20-rc7.diff"
#  content [49aebe8ea96b9d9067613aa8c8c7c74534a2755d]
# 
# patch "packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb"
#  from [881311a511ed7103c2bcf68fde48314dbc4c12db]
#    to [583762d115fd384256fd4fa5d93af163c6bc05df]
# 
============================================================
--- packages/linux/ep93xx-kernel/dynamic-phys-offset-2.6.20-rc7.diff	49aebe8ea96b9d9067613aa8c8c7c74534a2755d
+++ packages/linux/ep93xx-kernel/dynamic-phys-offset-2.6.20-rc7.diff	49aebe8ea96b9d9067613aa8c8c7c74534a2755d
@@ -0,0 +1,199 @@
+On the Cirrus Logic ep93xx, system RAM isn't one nice physically
+contiguous region as it is on most SoCs, but it is spread out over
+between one and four memory banks.
+
+What's worse, RAM doesn't necessarily start at any fixed physical
+memory location.  The start of RAM (PHYS_OFFSET) is not only board-
+specific, but on some boards also depends on jumper settings (whether
+async or sync boot mode is selected.)
+
+The attached patch adds the RUNTIME_PHYS_OFFSET config option, which,
+if selected, turns PHYS_OFFSET into a variable which is determined and
+set by __create_page_tables by looking at the current pc.  This allows
+booting a single kernel image on all the different flavors of ep93xx
+boards, reducing user confusion and hopefully pleasing our kautobuild
+admin :-)  If the option isn't selected, there's zero impact.
+
+Signed-off-by: Lennert Buytenhek <buytenh at wantstofly.org>
+===================================================================
+20070202 modified to apply cleanly to linux-2.6.20-rc7 - NZG
+===================================================================
+diff -Naur linux-2.6.20-rc7/arch/arm/Kconfig linux-2.6.20-rc7-e1.0/arch/arm/Kconfig
+--- linux-2.6.20-rc7/arch/arm/Kconfig	2007-02-02 10:26:21.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/Kconfig	2007-02-02 16:23:05.000000000 -0600
+@@ -113,6 +113,9 @@
+ 	help
+ 	  The base address of exception vectors.
+ 
++config RUNTIME_PHYS_OFFSET
++	bool
++
+ source "init/Kconfig"
+ 
+ menu "System Type"
+@@ -187,6 +190,7 @@
+ 	bool "EP93xx-based"
+ 	select ARM_AMBA
+ 	select ARM_VIC
++	select RUNTIME_PHYS_OFFSET
+ 	help
+ 	  This enables support for the Cirrus EP93xx series of CPUs.
+ 
+diff -Naur linux-2.6.20-rc7/arch/arm/boot/compressed/Makefile linux-2.6.20-rc7-e1.0/arch/arm/boot/compressed/Makefile
+--- linux-2.6.20-rc7/arch/arm/boot/compressed/Makefile	2006-11-29 15:57:37.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/boot/compressed/Makefile	2007-02-02 16:23:05.000000000 -0600
+@@ -78,13 +78,10 @@
+ EXTRA_CFLAGS  := -fpic
+ EXTRA_AFLAGS  :=
+ 
+-# 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.
++# Supply ZRELADDR and PARAMS_PHYS to the decompressor via linker
++# symbols.  We only define params_phys if the machine class defined
++# the corresponding makefile variable.
+ LDFLAGS_vmlinux := --defsym zreladdr=$(ZRELADDR)
+-ifneq ($(INITRD_PHYS),)
+-LDFLAGS_vmlinux += --defsym initrd_phys=$(INITRD_PHYS)
+-endif
+ ifneq ($(PARAMS_PHYS),)
+ LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS)
+ endif
+diff -Naur linux-2.6.20-rc7/arch/arm/boot/compressed/head.S linux-2.6.20-rc7-e1.0/arch/arm/boot/compressed/head.S
+--- linux-2.6.20-rc7/arch/arm/boot/compressed/head.S	2006-11-29 15:57:37.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/boot/compressed/head.S	2007-02-02 16:23:05.000000000 -0600
+@@ -156,6 +156,11 @@
+ 		.text
+ 		adr	r0, LC0
+ 		ldmia	r0, {r1, r2, r3, r4, r5, r6, ip, sp}
++#ifdef CONFIG_RUNTIME_PHYS_OFFSET
++		and	r10, pc, #0xf0000000	@ fix up zreladdr
++		add	r4, r4, r10
++#endif
++
+ 		subs	r0, r0, r1		@ calculate the delta offset
+ 
+ 						@ if delta is zero, we are
+diff -Naur linux-2.6.20-rc7/arch/arm/kernel/head.S linux-2.6.20-rc7-e1.0/arch/arm/kernel/head.S
+--- linux-2.6.20-rc7/arch/arm/kernel/head.S	2007-02-02 10:26:21.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/kernel/head.S	2007-02-02 16:36:21.000000000 -0600
+@@ -43,8 +43,8 @@
+ 	.globl	swapper_pg_dir
+ 	.equ	swapper_pg_dir, KERNEL_RAM_VADDR - 0x4000
+ 
+-	.macro	pgtbl, rd
+-	ldr	\rd, =(KERNEL_RAM_PADDR - 0x4000)
++	.macro	pgtbl, rd, phys_offset
++	add	\rd, \phys_offset, #(TEXT_OFFSET - 0x4000)
+ 	.endm
+ 
+ #ifdef CONFIG_XIP_KERNEL
+@@ -206,10 +206,22 @@
+  * Returns:
+  *  r0, r3, r6, r7 corrupted
+  *  r4 = physical page table address
++ *  r5 = PHYS_OFFSET
+  */
+ 	.type	__create_page_tables, %function
+ __create_page_tables:
+-	pgtbl	r4				@ page table address
++#ifdef CONFIG_RUNTIME_PHYS_OFFSET
++	adr	r5, stext
++	sub	r5, r5, #TEXT_OFFSET		@ r5 = phys_offset
++
++	ldr	r4, =(phys_offset - PAGE_OFFSET)
++	add	r4, r4, r5
++	str	r5, [r4]			@ save phys_offset
++#else
++	mov	r5, #PHYS_OFFSET		@ r5 = phys_offset
++#endif
++
++	pgtbl	r4, r5				@ r4 = page table address
+ 
+ 	/*
+ 	 * Clear the 16K level 1 swapper page table
+@@ -255,8 +267,7 @@
+ 	 * Then map first 1MB of ram in case it contains our boot params.
+ 	 */
+ 	add	r0, r4, #PAGE_OFFSET >> 18
+-	orr	r6, r7, #(PHYS_OFFSET & 0xff000000)
+-	orr	r6, r6, #(PHYS_OFFSET & 0x00e00000)
++	orr	r6, r7, r5
+ 	str	r6, [r0]
+ 
+ #ifdef CONFIG_XIP_KERNEL
+diff -Naur linux-2.6.20-rc7/arch/arm/kernel/setup.c linux-2.6.20-rc7-e1.0/arch/arm/kernel/setup.c
+--- linux-2.6.20-rc7/arch/arm/kernel/setup.c	2007-02-02 10:26:21.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/kernel/setup.c	2007-02-02 16:23:05.000000000 -0600
+@@ -59,6 +59,16 @@
+ extern int root_mountflags;
+ extern void _stext, _text, _etext, __data_start, _edata, _end;
+ 
++#ifdef CONFIG_RUNTIME_PHYS_OFFSET
++/*
++ * The assignment is here solely to prevent this variable from ending
++ * up in bss.  As the early startup code writes to it, we don't want it
++ * to be zeroed again later.
++ */
++unsigned long phys_offset = 0xdeadbeef;
++EXPORT_SYMBOL(phys_offset);
++#endif
++
+ unsigned int processor_id;
+ unsigned int __machine_arch_type;
+ EXPORT_SYMBOL(__machine_arch_type);
+@@ -749,7 +759,7 @@
+ 	{ tag_size(tag_core), ATAG_CORE },
+ 	{ 1, PAGE_SIZE, 0xff },
+ 	{ tag_size(tag_mem32), ATAG_MEM },
+-	{ MEM_SIZE, PHYS_OFFSET },
++	{ MEM_SIZE, 0 },
+ 	{ 0, ATAG_NONE }
+ };
+ 
+@@ -770,6 +780,8 @@
+ 	struct machine_desc *mdesc;
+ 	char *from = default_command_line;
+ 
++	init_tags.mem.start = PHYS_OFFSET;
++
+ 	setup_processor();
+ 	mdesc = setup_machine(machine_arch_type);
+ 	machine_name = mdesc->name;
+diff -Naur linux-2.6.20-rc7/arch/arm/mach-ep93xx/Makefile.boot linux-2.6.20-rc7-e1.0/arch/arm/mach-ep93xx/Makefile.boot
+--- linux-2.6.20-rc7/arch/arm/mach-ep93xx/Makefile.boot	2006-11-29 15:57:37.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/arch/arm/mach-ep93xx/Makefile.boot	2007-02-02 16:23:05.000000000 -0600
+@@ -1,2 +1 @@
+    zreladdr-y	:= 0x00008000
+-params_phys-y	:= 0x00000100
+diff -Naur linux-2.6.20-rc7/include/asm-arm/arch-ep93xx/memory.h linux-2.6.20-rc7-e1.0/include/asm-arm/arch-ep93xx/memory.h
+--- linux-2.6.20-rc7/include/asm-arm/arch-ep93xx/memory.h	2006-11-29 15:57:37.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/include/asm-arm/arch-ep93xx/memory.h	2007-02-02 16:23:05.000000000 -0600
+@@ -5,7 +5,9 @@
+ #ifndef __ASM_ARCH_MEMORY_H
+ #define __ASM_ARCH_MEMORY_H
+ 
++#ifndef CONFIG_RUNTIME_PHYS_OFFSET
+ #define PHYS_OFFSET		UL(0x00000000)
++#endif
+ 
+ #define __bus_to_virt(x)	__phys_to_virt(x)
+ #define __virt_to_bus(x)	__virt_to_phys(x)
+diff -Naur linux-2.6.20-rc7/include/asm-arm/memory.h linux-2.6.20-rc7-e1.0/include/asm-arm/memory.h
+--- linux-2.6.20-rc7/include/asm-arm/memory.h	2007-02-02 10:26:27.000000000 -0600
++++ linux-2.6.20-rc7-e1.0/include/asm-arm/memory.h	2007-02-02 16:23:05.000000000 -0600
+@@ -73,6 +73,14 @@
+  */
+ #define IOREMAP_MAX_ORDER	24
+ 
++/*
++ * PHYS_OFFSET determined at run time?
++ */
++#if defined(CONFIG_RUNTIME_PHYS_OFFSET) && !defined(__ASSEMBLY__)
++extern unsigned long phys_offset;
++#define PHYS_OFFSET		(phys_offset)
++#endif
++
+ #else /* CONFIG_MMU */
+ 
+ /*
============================================================
--- packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb	881311a511ed7103c2bcf68fde48314dbc4c12db
+++ packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb	583762d115fd384256fd4fa5d93af163c6bc05df
@@ -1,12 +1,13 @@ LICENSE = "GPL"
 DESCRIPTION = "Linux Kernel for Cirrus Logic ep39xx compatible machines"
 SECTION = "kernel"
 LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
 
 COMPATIBLE_MACHINE = "ep93xx"
 
 SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.19.tar.bz2 \
 	   ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.20-rc7.bz2;patch=1 \
+           file://dynamic-phys-offset-2.6.20-rc7.diff;patch=1 \ 
            file://defconfig \
 		   "
 






More information about the Openembedded-commits mailing list