openwrtv3/target/linux/atheros/patches-3.8/001-get_c0_compare_int_fix.patch
Gabor Juhos 9cc3a60b5a atheros: add support for linux kernel v3.8
This builds and boots.

Because of the function pointer indirection (e.g. mtd_info's read
function pointer is assigned to spiflash_read), it is difficult for me
to understand where the calls are coming from (could be anywhere,
conditionally pointing at spiflash versions), so I punted and used the
renamed function pointers (_erase, _read, _write).  If someone knows
better what to do, please fix.

Cleaned up other sundry kernel tracking issues like get_phy_id and
__devinit,etc.

[juhosg: don't switch to that yet]

Signed-off-by: Russell Senior <russell@personaltelco.net>
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 35727
2013-02-21 17:45:54 +00:00

39 lines
1.1 KiB
Diff

Fix the usage of get_c0_compare_int: override cp0_compare_irq if the returned
value is in the MIPS CPU IRQ range to ensure that c0_compare_int_usable()
still works.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
--- a/arch/mips/kernel/cevt-r4k.c
+++ b/arch/mips/kernel/cevt-r4k.c
@@ -168,20 +168,23 @@ int __cpuinit r4k_clockevent_init(void)
struct clock_event_device *cd;
unsigned int irq;
- if (!cpu_has_counter || !mips_hpt_frequency)
- return -ENXIO;
-
- if (!c0_compare_int_usable())
- return -ENXIO;
-
/*
* With vectored interrupts things are getting platform specific.
* get_c0_compare_int is a hook to allow a platform to return the
* interrupt number of it's liking.
*/
irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
- if (get_c0_compare_int)
+ if (get_c0_compare_int) {
irq = get_c0_compare_int();
+ if ((irq >= MIPS_CPU_IRQ_BASE) && (irq < MIPS_CPU_IRQ_BASE + 8))
+ cp0_compare_irq = irq - MIPS_CPU_IRQ_BASE;
+ }
+
+ if (!cpu_has_counter || !mips_hpt_frequency)
+ return -ENXIO;
+
+ if (!c0_compare_int_usable())
+ return -ENXIO;
cd = &per_cpu(mips_clockevent_device, cpu);