aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch')
-rw-r--r--target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch316
1 files changed, 0 insertions, 316 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch
deleted file mode 100644
index e3f2c2b548..0000000000
--- a/target/linux/s3c24xx/patches-2.6.24/1070-kexec-atags.patch.patch
+++ /dev/null
@@ -1,316 +0,0 @@
-From 68bcfea9ab5d8947f711a97dcc291cb9da47c7da Mon Sep 17 00:00:00 2001
-From: mokopatches <mokopatches@openmoko.org>
-Date: Sun, 13 Apr 2008 07:23:59 +0100
-Subject: [PATCH] kexec-atags.patch
- Leapfrogged from upstream (ARM Linux)
- http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4736/1
-
----
- arch/arm/Kconfig | 7 +++
- arch/arm/kernel/Makefile | 1 +
- arch/arm/kernel/atags.c | 86 +++++++++++++++++++++++++++++++++++++
- arch/arm/kernel/atags.h | 5 ++
- arch/arm/kernel/machine_kexec.c | 2 +
- arch/arm/kernel/relocate_kernel.S | 30 ++-----------
- arch/arm/kernel/setup.c | 32 +-------------
- include/asm-arm/kexec.h | 3 +
- 8 files changed, 110 insertions(+), 56 deletions(-)
- create mode 100644 arch/arm/kernel/atags.c
- create mode 100644 arch/arm/kernel/atags.h
-
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 23e3d6b..ef7b9ff 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -865,6 +865,13 @@ config KEXEC
- 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 )
-diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
-index 593b565..5cf694c 100644
---- a/arch/arm/kernel/Makefile
-+++ b/arch/arm/kernel/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_ISA_DMA) += dma-isa.o
- 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
-diff --git a/arch/arm/kernel/atags.c b/arch/arm/kernel/atags.c
-new file mode 100644
-index 0000000..e2e934c
---- /dev/null
-+++ b/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);
-diff --git a/arch/arm/kernel/atags.h b/arch/arm/kernel/atags.h
-new file mode 100644
-index 0000000..e5f028d
---- /dev/null
-+++ b/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
-diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
-index 863c664..db8f54a 100644
---- a/arch/arm/kernel/machine_kexec.c
-+++ b/arch/arm/kernel/machine_kexec.c
-@@ -21,6 +21,7 @@ extern void setup_mm_for_reboot(char mode);
- 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 @@ void machine_kexec(struct kimage *image)
- 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,
-diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
-index 062c111..61930eb 100644
---- a/arch/arm/kernel/relocate_kernel.S
-+++ b/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 @@ relocate_new_kernel:
- 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_indirection_page:
- 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:
-diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index bf56eb3..ae3712d 100644
---- a/arch/arm/kernel/setup.c
-+++ b/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 @@ static int __init customize_machine(void)
- }
- 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 @@ void __init setup_arch(char **cmdline_p)
- 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 @@ void __init setup_arch(char **cmdline_p)
- if (tags->hdr.tag == ATAG_CORE) {
- if (meminfo.nr_banks != 0)
- squash_mem_tags(tags);
-+ save_atags(tags);
- parse_tags(tags);
- }
-
-diff --git a/include/asm-arm/kexec.h b/include/asm-arm/kexec.h
-index 46dcc4d..1ee17b6 100644
---- a/include/asm-arm/kexec.h
-+++ b/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;
---
-1.5.6.5
-