git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git]
/
arch
/
powerpc
/
kernel
/
setup_64.c
diff --git
a/arch/powerpc/kernel/setup_64.c
b/arch/powerpc/kernel/setup_64.c
index
fd1785e
..
4467c49
100644
(file)
--- a/
arch/powerpc/kernel/setup_64.c
+++ b/
arch/powerpc/kernel/setup_64.c
@@
-12,6
+12,7
@@
#undef DEBUG
#undef DEBUG
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/sched.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/sched.h>
@@
-99,6
+100,12
@@
unsigned long SYSRQ_KEY;
#endif /* CONFIG_MAGIC_SYSRQ */
#endif /* CONFIG_MAGIC_SYSRQ */
+static int ppc64_panic_event(struct notifier_block *, unsigned long, void *);
+static struct notifier_block ppc64_panic_block = {
+ .notifier_call = ppc64_panic_event,
+ .priority = INT_MIN /* may not return; must be done last */
+};
+
#ifdef CONFIG_SMP
static int smt_enabled_cmdline;
#ifdef CONFIG_SMP
static int smt_enabled_cmdline;
@@
-148,13
+155,6
@@
early_param("smt-enabled", early_smt_enabled);
#define check_smt_enabled()
#endif /* CONFIG_SMP */
#define check_smt_enabled()
#endif /* CONFIG_SMP */
-/* Put the paca pointer into r13 and SPRG3 */
-void __init setup_paca(int cpu)
-{
- local_paca = &paca[cpu];
- mtspr(SPRN_SPRG3, local_paca);
-}
-
/*
* Early initialization entry point. This is called by head.S
* with MMU translation disabled. We rely on the "feature" of
/*
* Early initialization entry point. This is called by head.S
* with MMU translation disabled. We rely on the "feature" of
@@
-176,9
+176,6
@@
void __init setup_paca(int cpu)
void __init early_setup(unsigned long dt_ptr)
{
void __init early_setup(unsigned long dt_ptr)
{
- /* Assume we're on cpu 0 for now. Don't write to the paca yet! */
- setup_paca(0);
-
/* Enable early debugging if any specified (see udbg.h) */
udbg_early_init();
/* Enable early debugging if any specified (see udbg.h) */
udbg_early_init();
@@
-192,7
+189,7
@@
void __init early_setup(unsigned long dt_ptr)
early_init_devtree(__va(dt_ptr));
/* Now we know the logical id of our boot cpu, setup the paca. */
early_init_devtree(__va(dt_ptr));
/* Now we know the logical id of our boot cpu, setup the paca. */
- setup_
paca(boot_cpuid
);
+ setup_
boot_paca(
);
/* Fix up paca fields required for the boot cpu */
get_paca()->cpu_start = 1;
/* Fix up paca fields required for the boot cpu */
get_paca()->cpu_start = 1;
@@
-202,7
+199,9
@@
void __init early_setup(unsigned long dt_ptr)
/* Probe the machine type */
probe_machine();
/* Probe the machine type */
probe_machine();
- setup_kdump_trampoline();
+#ifdef CONFIG_CRASH_DUMP
+ kdump_setup();
+#endif
DBG("Found, Initializing memory management...\n");
DBG("Found, Initializing memory management...\n");
@@
-354,22
+353,30
@@
void __init setup_system(void)
{
DBG(" -> setup_system()\n");
{
DBG(" -> setup_system()\n");
+#ifdef CONFIG_KEXEC
+ kdump_move_device_tree();
+#endif
/*
* Unflatten the device-tree passed by prom_init or kexec
*/
unflatten_device_tree();
/*
* Unflatten the device-tree passed by prom_init or kexec
*/
unflatten_device_tree();
+#ifdef CONFIG_KEXEC
+ kexec_setup(); /* requires unflattened device tree. */
+#endif
+
/*
* Fill the ppc64_caches & systemcfg structures with informations
/*
* Fill the ppc64_caches & systemcfg structures with informations
- * retrieved from the device-tree.
+ * retrieved from the device-tree. Need to be called before
+ * finish_device_tree() since the later requires some of the
+ * informations filled up here to properly parse the interrupt
+ * tree.
+ * It also sets up the cache line sizes which allows to call
+ * routines like flush_icache_range (used by the hash init
+ * later on).
*/
initialize_cache_info();
*/
initialize_cache_info();
- /*
- * Initialize irq remapping subsystem
- */
- irq_early_init();
-
#ifdef CONFIG_PPC_RTAS
/*
* Initialize RTAS if available
#ifdef CONFIG_PPC_RTAS
/*
* Initialize RTAS if available
@@
-396,6
+403,12
@@
void __init setup_system(void)
*/
find_legacy_serial_ports();
*/
find_legacy_serial_ports();
+ /*
+ * "Finish" the device-tree, that is do the actual parsing of
+ * some of the properties like the interrupt map
+ */
+ finish_device_tree();
+
/*
* Initialize xmon
*/
/*
* Initialize xmon
*/
@@
-407,8
+420,10
@@
void __init setup_system(void)
*/
register_early_udbg_console();
*/
register_early_udbg_console();
- if (do_early_xmon)
- debugger(NULL);
+ /* Save unparsed command line copy for /proc/cmdline */
+ strlcpy(saved_command_line, cmd_line, COMMAND_LINE_SIZE);
+
+ parse_early_param();
check_smt_enabled();
smp_setup_cpu_maps();
check_smt_enabled();
smp_setup_cpu_maps();
@@
-424,6
+439,8
@@
void __init setup_system(void)
printk("-----------------------------------------------------\n");
printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size);
printk("-----------------------------------------------------\n");
printk("ppc64_pft_size = 0x%lx\n", ppc64_pft_size);
+ printk("ppc64_interrupt_controller = 0x%ld\n",
+ ppc64_interrupt_controller);
printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size());
printk("ppc64_caches.dcache_line_size = 0x%x\n",
ppc64_caches.dline_size);
printk("physicalMemorySize = 0x%lx\n", lmb_phys_mem_size());
printk("ppc64_caches.dcache_line_size = 0x%x\n",
ppc64_caches.dline_size);
@@
-439,6
+456,13
@@
void __init setup_system(void)
DBG(" <- setup_system()\n");
}
DBG(" <- setup_system()\n");
}
+static int ppc64_panic_event(struct notifier_block *this,
+ unsigned long event, void *ptr)
+{
+ ppc_md.panic((char *)ptr); /* May not return */
+ return NOTIFY_DONE;
+}
+
#ifdef CONFIG_IRQSTACKS
static void __init irqstack_early_init(void)
{
#ifdef CONFIG_IRQSTACKS
static void __init irqstack_early_init(void)
{
@@
-493,6
+517,8
@@
static void __init emergency_stack_init(void)
*/
void __init setup_arch(char **cmdline_p)
{
*/
void __init setup_arch(char **cmdline_p)
{
+ extern void do_init_bootmem(void);
+
ppc64_boot_msg(0x12, "Setup Arch");
*cmdline_p = cmd_line;
ppc64_boot_msg(0x12, "Setup Arch");
*cmdline_p = cmd_line;
@@
-509,7
+535,8
@@
void __init setup_arch(char **cmdline_p)
panic_timeout = 180;
if (ppc_md.panic)
panic_timeout = 180;
if (ppc_md.panic)
- setup_panic();
+ atomic_notifier_chain_register(&panic_notifier_list,
+ &ppc64_panic_block);
init_mm.start_code = PAGE_OFFSET;
init_mm.end_code = (unsigned long) _etext;
init_mm.start_code = PAGE_OFFSET;
init_mm.end_code = (unsigned long) _etext;