[patch 2/4] [ARM] mmp: support marvell ARMADA610
Eric Miao
eric.y.miao at gmail.com
Thu Dec 31 22:46:14 EST 2009
On Thu, Dec 31, 2009 at 10:42 PM, Haojian Zhuang
<haojian.zhuang at gmail.com> wrote:
> On Mon, Dec 28, 2009 at 10:49 PM, Eric Miao <eric.y.miao at gmail.com> wrote:
>> Haojian,
>>
>> Several suggestions:
>>
>> 1. entry-macro.S, could we simplify (and improve the performance a bit) to
>> something like (haven't tested yet - let me know the result):
>>
>> .macro get_irqnr_preamble, base, tmp
>> mrc p15, 0, \tmp, c0, c0, 0 @ CPUID
>> mov \tmp, \tmp, lsr #4
>> and \tmp, \tmp, #0xfff
>
> We shouldn't use #0xfff in and instruction. Immediate number shouldn't
> beyond 8bit. We have to use ldr instruction or multiple instrunctions.
Well, 0xff0 then, or ldr, whichever I don't mind.
>
>> cmp \tmp, #0x581 @ MMP2
>> moveq \base, #MMP2_ICU_PJ4_IRQ_SEL
>> movne \base, #ICU_AP_IRQ_SEL_INT_NUM
>> .endm
>>
>> .macro arch_ret_to_user, tmp1, tmp2
>> .endm
>>
>> .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
>> ldr \tmp, [\base, #0]
>> and \irqnr, \tmp, #0x3f @ Interrupt Number
>> tst \tmp, #(1 << 6) @ Interrupt Pending ?
>> .endm
>>
>
> I don't like this way. Although more jump instructions are used in irq
> entry, it can be extended easier for supporting more silicons.
>
It really hurt performance a lot. While the difference between MMP series
is just the offset of the IRQ_NUM register, it could be calculated in
get_irqnr_preamble, which doesn't have to be executed each time
in the IRQ handling loop. See arch/arm/kernel/entry-armv.S
PXA is different since PXA25x checks the IRQ status by MMIO
register while PXA27x and above check that by co-processor.
> I've updated these patches in attached mail.
>
Thanks, I'll take a look and happy new year.
More information about the linux-arm-kernel
mailing list