2014-04-27 22:43 GMT+04:00 Felix Fietkau <[email protected]>:
> On 2014-04-18 22:22, Sergey Ryazanov wrote:
>> Remove get_c0_compare_int fix which is useless for latest kernels.
> What upstream change makes it useless?
When I faced this patch, I could not find a lot info about this bug,
and I done a simple code analysis. And I got the following results
(all paths are relative to arch/mips):

MIPS_CPU_IRQ_BASE is 0 (defined in include/asm/mach-generic/irq.h)
CP0_LEGACY_COMPARE_IRQ is 7 (defined in include/asm/irq.h)

cp0_compare_irq is initialized in kernel/traps.c to CP0_LEGACY_COMPARE_IRQ

get_c0_compare_int() defined in ar231x/board.c and return
CP0_LEGACY_COMPARE_IRQ value.

So the following code does not change the value of cp0_compare_irq:
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;
}

and further more: c0_compare_int_usable() does not rely more on
cp0_compare_irq, and uses cp0_compare_irq_shift variable which is
initialized to CP0_LEGACY_PERFCNT_IRQ (defined as 7 in
include/asm/irq.h) in kernel/traps.c

For all these reasons, I have concluded that this patch is no longer needed.

Since cp0_compare_irq already initialized to CP0_LEGACY_COMPARE_IRQ,
seems that get_c0_compare_int realization could be also safely removed
(from ar231x/board.c).

>> Tested on Ubnt Bullet2, which could successfully boot without this
>> workaround.
> I think both AR2135 and AR5312 should be tested. I don't remember the
> details about the issue that well (this was many years ago), but I think
> the failure was appearing only on one of those two.
>
>From preceding analysis, code seems chip-independed.

-- 
BR,
Sergey
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to