nuke 2.6.28 merged parisc patches
svn path=/dists/trunk/linux-2.6/; revision=12844
This commit is contained in:
parent
a60b8cedfa
commit
16e3ebcf3b
|
@ -1,135 +0,0 @@
|
|||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Tue, 29 Jul 2008 04:09:22 +0000 (-0400)
|
||||
Subject: parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fkyle%2Fparisc-2.6.git;a=commitdiff_plain;h=8735c10cff8486d58e03ee692ae9720f10cf9806
|
||||
|
||||
parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked
|
||||
|
||||
These functions are called only when bringing up the monarch cpu,
|
||||
so it is safe to call them without taking the pdc spinlock. In the
|
||||
future, this may become relevant for lockdep, since these functions were
|
||||
taking spinlocks before start_kernel called the lockdep initializers.
|
||||
---
|
||||
|
||||
Adjusted to apply to Debian's 2.6.26 by dann frazier <dannf@debian.org>
|
||||
|
||||
diff -urpN linux-source-2.6.26.orig/arch/parisc/kernel/firmware.c linux-source-2.6.26/arch/parisc/kernel/firmware.c
|
||||
--- linux-source-2.6.26.orig/arch/parisc/kernel/firmware.c 2008-07-13 15:51:29.000000000 -0600
|
||||
+++ linux-source-2.6.26/arch/parisc/kernel/firmware.c 2008-09-18 16:28:07.000000000 -0600
|
||||
@@ -150,26 +150,40 @@ static void convert_to_wide(unsigned lon
|
||||
#endif
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_64BIT
|
||||
+void __init set_firmware_width_unlocked(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES,
|
||||
+ __pa(pdc_result), 0);
|
||||
+ convert_to_wide(pdc_result);
|
||||
+ if (pdc_result[0] != NARROW_FIRMWARE)
|
||||
+ parisc_narrow_firmware = 0;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* set_firmware_width - Determine if the firmware is wide or narrow.
|
||||
*
|
||||
- * This function must be called before any pdc_* function that uses the convert_to_wide
|
||||
- * function.
|
||||
+ * This function must be called before any pdc_* function that uses the
|
||||
+ * convert_to_wide function.
|
||||
*/
|
||||
void __init set_firmware_width(void)
|
||||
{
|
||||
-#ifdef CONFIG_64BIT
|
||||
- int retval;
|
||||
unsigned long flags;
|
||||
+ spin_lock_irqsave(&pdc_lock, flags);
|
||||
+ set_firmware_width_unlocked();
|
||||
+ spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
+}
|
||||
+#else
|
||||
+void __init set_firmware_width_unlocked(void) {
|
||||
+ return;
|
||||
+}
|
||||
|
||||
- spin_lock_irqsave(&pdc_lock, flags);
|
||||
- retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0);
|
||||
- convert_to_wide(pdc_result);
|
||||
- if(pdc_result[0] != NARROW_FIRMWARE)
|
||||
- parisc_narrow_firmware = 0;
|
||||
- spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
-#endif
|
||||
+void __init set_firmware_width(void) {
|
||||
+ return;
|
||||
}
|
||||
+#endif /*CONFIG_64BIT*/
|
||||
|
||||
/**
|
||||
* pdc_emergency_unlock - Unlock the linux pdc lock
|
||||
@@ -288,6 +302,20 @@ int pdc_chassis_warn(unsigned long *warn
|
||||
return retval;
|
||||
}
|
||||
|
||||
+int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result));
|
||||
+ convert_to_wide(pdc_result);
|
||||
+ pdc_coproc_info->ccr_functional = pdc_result[0];
|
||||
+ pdc_coproc_info->ccr_present = pdc_result[1];
|
||||
+ pdc_coproc_info->revision = pdc_result[17];
|
||||
+ pdc_coproc_info->model = pdc_result[18];
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* pdc_coproc_cfg - To identify coprocessors attached to the processor.
|
||||
* @pdc_coproc_info: Return buffer address.
|
||||
@@ -297,19 +325,14 @@ int pdc_chassis_warn(unsigned long *warn
|
||||
*/
|
||||
int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
|
||||
{
|
||||
- int retval;
|
||||
+ int ret;
|
||||
unsigned long flags;
|
||||
|
||||
- spin_lock_irqsave(&pdc_lock, flags);
|
||||
- retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result));
|
||||
- convert_to_wide(pdc_result);
|
||||
- pdc_coproc_info->ccr_functional = pdc_result[0];
|
||||
- pdc_coproc_info->ccr_present = pdc_result[1];
|
||||
- pdc_coproc_info->revision = pdc_result[17];
|
||||
- pdc_coproc_info->model = pdc_result[18];
|
||||
- spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
+ spin_lock_irqsave(&pdc_lock, flags);
|
||||
+ ret = pdc_coproc_cfg_unlocked(pdc_coproc_info);
|
||||
+ spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
|
||||
- return retval;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
diff -urpN linux-source-2.6.26.orig/include/asm-parisc/pdc.h linux-source-2.6.26/include/asm-parisc/pdc.h
|
||||
--- linux-source-2.6.26.orig/include/asm-parisc/pdc.h 2008-07-13 15:51:29.000000000 -0600
|
||||
+++ linux-source-2.6.26/include/asm-parisc/pdc.h 2008-09-18 16:28:07.000000000 -0600
|
||||
@@ -600,6 +600,7 @@ int pdc_chassis_info(struct pdc_chassis_
|
||||
int pdc_chassis_disp(unsigned long disp);
|
||||
int pdc_chassis_warn(unsigned long *warn);
|
||||
int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
|
||||
+int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info);
|
||||
int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
|
||||
void *iodc_data, unsigned int iodc_data_size);
|
||||
int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
|
||||
@@ -638,6 +639,7 @@ int pdc_mem_mem_table(struct pdc_memory_
|
||||
#endif
|
||||
|
||||
void set_firmware_width(void);
|
||||
+void set_firmware_width_unlocked(void);
|
||||
int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
|
||||
int pdc_do_reset(void);
|
||||
int pdc_soft_power_info(unsigned long *power_reg);
|
|
@ -1,68 +0,0 @@
|
|||
From: Kyle McMartin <kyle@mcmartin.ca>
|
||||
Date: Tue, 29 Jul 2008 04:11:13 +0000 (-0400)
|
||||
Subject: parisc: hijack jump to start_kernel
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fkyle%2Fparisc-2.6.git;a=commitdiff_plain;h=1a189c07f9f65305442d6e99efac9ac44f86bc04
|
||||
|
||||
parisc: hijack jump to start_kernel
|
||||
|
||||
Bang in our own start_parisc call, which initializes the PDC
|
||||
width, and turns on the FPU.
|
||||
|
||||
Previously, if CONFIG_PRINTK_TIME was on, we'd attempt to use
|
||||
the FPU before we had enabled it, resulting in a difficult
|
||||
to diagnose panic.
|
||||
|
||||
This patch causes init_per_cpu to redundantly set these for
|
||||
cpu0, but this is harmless.
|
||||
---
|
||||
|
||||
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
|
||||
index a84e31e..0e3d9f9 100644
|
||||
--- a/arch/parisc/kernel/head.S
|
||||
+++ b/arch/parisc/kernel/head.S
|
||||
@@ -121,7 +121,7 @@ $pgt_fill_loop:
|
||||
copy %r0,%r2
|
||||
|
||||
/* And the RFI Target address too */
|
||||
- load32 start_kernel,%r11
|
||||
+ load32 start_parisc,%r11
|
||||
|
||||
/* And the initial task pointer */
|
||||
load32 init_thread_union,%r6
|
||||
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
|
||||
index 39e7c5a..a59b71e 100644
|
||||
--- a/arch/parisc/kernel/setup.c
|
||||
+++ b/arch/parisc/kernel/setup.c
|
||||
@@ -368,6 +368,31 @@ static int __init parisc_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-
|
||||
arch_initcall(parisc_init);
|
||||
|
||||
+void start_parisc(void)
|
||||
+{
|
||||
+ extern void start_kernel(void);
|
||||
+
|
||||
+ int ret, cpunum;
|
||||
+ struct pdc_coproc_cfg coproc_cfg;
|
||||
+
|
||||
+ cpunum = smp_processor_id();
|
||||
+
|
||||
+ set_firmware_width_unlocked();
|
||||
+
|
||||
+ ret = pdc_coproc_cfg_unlocked(&coproc_cfg);
|
||||
+ if (ret >= 0 && coproc_cfg.ccr_functional) {
|
||||
+ mtctl(coproc_cfg.ccr_functional, 10);
|
||||
+
|
||||
+ cpu_data[cpunum].fp_rev = coproc_cfg.revision;
|
||||
+ cpu_data[cpunum].fp_model = coproc_cfg.model;
|
||||
+
|
||||
+ asm volatile ("fstd %fr0,8(%sp)");
|
||||
+ } else {
|
||||
+ panic("must have an fpu to boot linux");
|
||||
+ }
|
||||
+
|
||||
+ start_kernel();
|
||||
+ // not reached
|
||||
+}
|
|
@ -22,8 +22,6 @@
|
|||
+ bugfix/powerpc/mm-mol.patch
|
||||
+ bugfix/powerpc/lpar-console.patch
|
||||
+ bugfix/all/sata_mv-clear_irq.patch
|
||||
#+ bugfix/parisc/add-lockless-fw-funcs.patch
|
||||
#+ bugfix/parisc/hijack-jump-to-start_kernel.patch
|
||||
#+ bugfix/all/wireless-regulatory-default-EU.patch
|
||||
#+ bugfix/all/ext3-add-support-for-non-native-signed-unsigned-htr.patch
|
||||
#+ bugfix/all/ext4-add-support-for-non-native-signed-unsigned-htr.patch
|
||||
|
|
Loading…
Reference in New Issue