Send commitlog mailing list submissions to
        commitlog@lists.openmoko.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r4013 - in branches/src/target/kernel/2.6.24.x: config
      patches ([EMAIL PROTECTED])
--- Begin Message ---
Author: werner
Date: 2008-02-02 19:20:21 +0100 (Sat, 02 Feb 2008)
New Revision: 4013

Added:
   branches/src/target/kernel/2.6.24.x/patches/kexec-atags.patch
Modified:
   branches/src/target/kernel/2.6.24.x/config/defconfig-2.6.24
   branches/src/target/kernel/2.6.24.x/patches/series
Log:
This gives user space the ability to modify atags (boot parameters, etc.)
before kexec'ing.

patches/series: 
- added kexec-atags.patch

patches/kexec-atags.patch: 
- leapfrogged from upstream,
  http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4736/1

config/defconfig-2.6.24:
- added CONFIG_ATAGS_PROC (for kexec-atags.patch)
- added CONFIG_FIQ and CONFIG_S3C2440_C_FIQ, which are set implicitly



Modified: branches/src/target/kernel/2.6.24.x/config/defconfig-2.6.24
===================================================================
--- branches/src/target/kernel/2.6.24.x/config/defconfig-2.6.24 2008-02-02 
00:23:08 UTC (rev 4012)
+++ branches/src/target/kernel/2.6.24.x/config/defconfig-2.6.24 2008-02-02 
18:20:21 UTC (rev 4013)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.24
-# Fri Jan 25 02:10:53 2008
+# Sat Feb  2 15:15:40 2008
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -22,6 +22,7 @@
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_ZONE_DMA=y
+CONFIG_FIQ=y
 CONFIG_VECTORS_BASE=0xffff0000
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
@@ -193,6 +194,7 @@
 # CONFIG_MACH_VSTMS is not set
 CONFIG_CPU_S3C2440=y
 CONFIG_S3C2440_DMA=y
+CONFIG_S3C2440_C_FIQ=y
 
 #
 # S3C2440 Machines
@@ -281,6 +283,7 @@
 CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
 # CONFIG_XIP_KERNEL is not set
 CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
 
 #
 # Floating point emulation

Added: branches/src/target/kernel/2.6.24.x/patches/kexec-atags.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/kexec-atags.patch       
2008-02-02 00:23:08 UTC (rev 4012)
+++ branches/src/target/kernel/2.6.24.x/patches/kexec-atags.patch       
2008-02-02 18:20:21 UTC (rev 4013)
@@ -0,0 +1,294 @@
+Leapfrogged from upstream (ARM Linux)
+http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4736/1
+
+Index: linux-2.6.24/arch/arm/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/Kconfig
++++ linux-2.6.24/arch/arm/Kconfig
+@@ -865,6 +865,13 @@
+         initially work for you.  It may help to enable device hotplugging
+         support.
+ 
++config ATAGS_PROC
++      bool "Export atags in procfs"
++      default n
++      help
++        Should the atags used to boot the kernel be exported in an "atags"
++        file in procfs. Useful with kexec.
++
+ endmenu
+ 
+ if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX )
+Index: linux-2.6.24/arch/arm/kernel/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/kernel/Makefile
++++ linux-2.6.24/arch/arm/kernel/Makefile
+@@ -19,6 +19,7 @@
+ obj-$(CONFIG_PCI)             += bios32.o isa.o
+ obj-$(CONFIG_SMP)             += smp.o
+ obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
++obj-$(CONFIG_ATAGS_PROC)      += atags.o
+ obj-$(CONFIG_OABI_COMPAT)     += sys_oabi-compat.o
+ 
+ obj-$(CONFIG_CRUNCH)          += crunch.o crunch-bits.o
+Index: linux-2.6.24/arch/arm/kernel/atags.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/kernel/atags.c
+@@ -0,0 +1,86 @@
++#include <linux/slab.h>
++#include <linux/kexec.h>
++#include <linux/proc_fs.h>
++#include <asm/setup.h>
++#include <asm/types.h>
++#include <asm/page.h>
++
++struct buffer {
++      size_t size;
++      char *data;
++};
++static struct buffer tags_buffer;
++
++static int
++read_buffer(char* page, char** start, off_t off, int count,
++      int* eof, void* data)
++{
++      struct buffer *buffer = (struct buffer *)data;
++
++      if (off >= buffer->size) {
++              *eof = 1;
++              return 0;
++      }
++
++      count = min((int) (buffer->size - off), count);
++
++      memcpy(page, &buffer->data[off], count);
++
++      return count;
++}
++
++
++static int
++create_proc_entries(void)
++{
++      struct proc_dir_entry* tags_entry;
++
++      tags_entry = create_proc_read_entry("atags", 0400, &proc_root, 
read_buffer, &tags_buffer);
++      if (!tags_entry)
++              return -ENOMEM;
++
++      return 0;
++}
++
++
++static char __initdata atags_copy_buf[KEXEC_BOOT_PARAMS_SIZE];
++static char __initdata *atags_copy;
++
++void __init save_atags(const struct tag *tags)
++{
++      atags_copy = atags_copy_buf;
++      memcpy(atags_copy, tags, KEXEC_BOOT_PARAMS_SIZE);
++}
++
++
++static int __init init_atags_procfs(void)
++{
++      struct tag *tag;
++      int error;
++
++      if (!atags_copy) {
++              printk(KERN_WARNING "Exporting ATAGs: No saved tags found\n");
++              return -EIO;
++      }
++
++      for (tag = (struct tag *) atags_copy; tag->hdr.size; tag = 
tag_next(tag))
++              ;
++
++      tags_buffer.size = ((char *) tag - atags_copy) + sizeof(tag->hdr);
++      tags_buffer.data = kmalloc(tags_buffer.size, GFP_KERNEL);
++      if (tags_buffer.data == NULL)
++              return -ENOMEM;
++      memcpy(tags_buffer.data, atags_copy, tags_buffer.size);
++
++      error = create_proc_entries();
++      if (error) {
++              printk(KERN_ERR "Exporting ATAGs: not enough memory\n");
++              kfree(tags_buffer.data);
++              tags_buffer.size = 0;
++              tags_buffer.data = NULL;
++      }
++
++      return error;
++}
++
++arch_initcall(init_atags_procfs);
+Index: linux-2.6.24/arch/arm/kernel/atags.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/kernel/atags.h
+@@ -0,0 +1,5 @@
++#ifdef CONFIG_ATAGS_PROC
++extern void save_atags(struct tag *tags);
++#else
++static inline void save_atags(struct tag *tags) { }
++#endif
+Index: linux-2.6.24/arch/arm/kernel/machine_kexec.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/kernel/machine_kexec.c
++++ linux-2.6.24/arch/arm/kernel/machine_kexec.c
+@@ -21,6 +21,7 @@
+ extern unsigned long kexec_start_address;
+ extern unsigned long kexec_indirection_page;
+ extern unsigned long kexec_mach_type;
++extern unsigned long kexec_boot_atags;
+ 
+ /*
+  * Provide a dummy crash_notes definition while crash dump arrives to arm.
+@@ -62,6 +63,7 @@
+       kexec_start_address = image->start;
+       kexec_indirection_page = page_list;
+       kexec_mach_type = machine_arch_type;
++      kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + 
KEXEC_ARM_ATAGS_OFFSET;
+ 
+       /* copy our kernel relocation code to the control code page */
+       memcpy(reboot_code_buffer,
+Index: linux-2.6.24/arch/arm/kernel/relocate_kernel.S
+===================================================================
+--- linux-2.6.24.orig/arch/arm/kernel/relocate_kernel.S
++++ linux-2.6.24/arch/arm/kernel/relocate_kernel.S
+@@ -7,23 +7,6 @@
+       .globl relocate_new_kernel
+ relocate_new_kernel:
+ 
+-      /* Move boot params back to where the kernel expects them */
+-
+-      ldr     r0,kexec_boot_params_address
+-      teq     r0,#0
+-      beq     8f
+-
+-      ldr     r1,kexec_boot_params_copy
+-      mov     r6,#KEXEC_BOOT_PARAMS_SIZE/4
+-7:
+-      ldr     r5,[r1],#4
+-      str     r5,[r0],#4
+-      subs    r6,r6,#1
+-      bne     7b
+-
+-8:
+-      /* Boot params moved, now go on with the kernel */
+-
+       ldr     r0,kexec_indirection_page
+       ldr     r1,kexec_start_address
+ 
+@@ -67,7 +50,7 @@
+       mov lr,r1
+       mov r0,#0
+       ldr r1,kexec_mach_type
+-      ldr r2,kexec_boot_params_address
++      ldr r2,kexec_boot_atags
+       mov pc,lr
+ 
+       .globl kexec_start_address
+@@ -82,14 +65,9 @@
+ kexec_mach_type:
+       .long   0x0
+ 
+-      /* phy addr where new kernel will expect to find boot params */
+-      .globl kexec_boot_params_address
+-kexec_boot_params_address:
+-      .long   0x0
+-
+-      /* phy addr where old kernel put a copy of orig boot params */
+-      .globl kexec_boot_params_copy
+-kexec_boot_params_copy:
++      /* phy addr of the atags for the new kernel */
++      .globl kexec_boot_atags
++kexec_boot_atags:
+       .long   0x0
+ 
+ relocate_new_kernel_end:
+Index: linux-2.6.24/arch/arm/kernel/setup.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/kernel/setup.c
++++ linux-2.6.24/arch/arm/kernel/setup.c
+@@ -24,7 +24,6 @@
+ #include <linux/interrupt.h>
+ #include <linux/smp.h>
+ #include <linux/fs.h>
+-#include <linux/kexec.h>
+ 
+ #include <asm/cpu.h>
+ #include <asm/elf.h>
+@@ -39,6 +38,7 @@
+ #include <asm/mach/time.h>
+ 
+ #include "compat.h"
++#include "atags.h"
+ 
+ #ifndef MEM_SIZE
+ #define MEM_SIZE      (16*1024*1024)
+@@ -784,23 +784,6 @@
+ }
+ arch_initcall(customize_machine);
+ 
+-#ifdef CONFIG_KEXEC
+-
+-/* Physical addr of where the boot params should be for this machine */
+-extern unsigned long kexec_boot_params_address;
+-
+-/* Physical addr of the buffer into which the boot params are copied */
+-extern unsigned long kexec_boot_params_copy;
+-
+-/* Pointer to the boot params buffer, for manipulation and display */
+-unsigned long kexec_boot_params;
+-EXPORT_SYMBOL(kexec_boot_params);
+-
+-/* The buffer itself - make sure it is sized correctly */
+-static unsigned long kexec_boot_params_buf[(KEXEC_BOOT_PARAMS_SIZE + 3) / 4];
+-
+-#endif
+-
+ void __init setup_arch(char **cmdline_p)
+ {
+       struct tag *tags = (struct tag *)&init_tags;
+@@ -819,18 +802,6 @@
+       else if (mdesc->boot_params)
+               tags = phys_to_virt(mdesc->boot_params);
+ 
+-#ifdef CONFIG_KEXEC
+-      kexec_boot_params_copy = virt_to_phys(kexec_boot_params_buf);
+-      kexec_boot_params = (unsigned long)kexec_boot_params_buf;
+-      if (__atags_pointer) {
+-              kexec_boot_params_address = __atags_pointer;
+-              memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE);
+-      } else if (mdesc->boot_params) {
+-              kexec_boot_params_address = mdesc->boot_params;
+-              memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE);
+-      }
+-#endif
+-
+       /*
+        * If we have the old style parameters, convert them to
+        * a tag list.
+@@ -846,6 +817,7 @@
+       if (tags->hdr.tag == ATAG_CORE) {
+               if (meminfo.nr_banks != 0)
+                       squash_mem_tags(tags);
++              save_atags(tags);
+               parse_tags(tags);
+       }
+ 
+Index: linux-2.6.24/include/asm-arm/kexec.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/kexec.h
++++ linux-2.6.24/include/asm-arm/kexec.h
+@@ -16,6 +16,9 @@
+ 
+ #define KEXEC_BOOT_PARAMS_SIZE 1536
+ 
++#define KEXEC_ARM_ATAGS_OFFSET  0x1000
++#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
++
+ #ifndef __ASSEMBLY__
+ 
+ struct kimage;

Modified: branches/src/target/kernel/2.6.24.x/patches/series
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/series  2008-02-02 00:23:08 UTC 
(rev 4012)
+++ branches/src/target/kernel/2.6.24.x/patches/series  2008-02-02 18:20:21 UTC 
(rev 4013)
@@ -92,5 +92,8 @@
 # bad bug
 fix-hwecc-2410.patch
 
+# leapfrogged from upstream
+kexec-atags.patch
+
 # Preliminary suspend/resume power saving improvements
 suspend-prelim1.patch




--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to