Commit 80fcdb95 authored by Mike Frysinger's avatar Mike Frysinger

Blackfin: SIC: cut down on IAR MMR reads a bit

Tweak the for loops that operate on the SIC IAR system MMRs to avoid
re-reading them multiple times in a row.  System MMRs are a little
slower to access, so avoid the penalty when possible.
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 11cabcb9
...@@ -92,26 +92,29 @@ static void __init search_IAR(void) ...@@ -92,26 +92,29 @@ static void __init search_IAR(void)
{ {
unsigned ivg, irq_pos = 0; unsigned ivg, irq_pos = 0;
for (ivg = 0; ivg <= IVG13 - IVG7; ivg++) { for (ivg = 0; ivg <= IVG13 - IVG7; ivg++) {
int irqn; int irqN;
ivg7_13[ivg].istop = ivg7_13[ivg].ifirst = &ivg_table[irq_pos]; ivg7_13[ivg].istop = ivg7_13[ivg].ifirst = &ivg_table[irq_pos];
for (irqn = 0; irqn < NR_PERI_INTS; irqn++) { for (irqN = 0; irqN < NR_PERI_INTS; irqN += 4) {
int iar_shift = (irqn & 7) * 4; int irqn;
if (ivg == (0xf & u32 iar = bfin_read32((unsigned long *)SIC_IAR0 +
#if defined(CONFIG_BF52x) || defined(CONFIG_BF538) \ #if defined(CONFIG_BF51x) || defined(CONFIG_BF52x) || \
|| defined(CONFIG_BF539) || defined(CONFIG_BF51x) defined(CONFIG_BF538) || defined(CONFIG_BF539)
bfin_read32((unsigned long *)SIC_IAR0 + ((irqN % 32) >> 3) + ((irqN / 32) * ((SIC_IAR4 - SIC_IAR0) / 4))
((irqn % 32) >> 3) + ((irqn / 32) *
((SIC_IAR4 - SIC_IAR0) / 4))) >> iar_shift)) {
#else #else
bfin_read32((unsigned long *)SIC_IAR0 + (irqN >> 3)
(irqn >> 3)) >> iar_shift)) {
#endif #endif
ivg_table[irq_pos].irqno = IVG7 + irqn; );
ivg_table[irq_pos].isrflag = 1 << (irqn % 32);
ivg7_13[ivg].istop++; for (irqn = irqN; irqn < irqN + 4; ++irqn) {
irq_pos++; int iar_shift = (irqn & 7) * 4;
if (ivg == (0xf & (iar >> iar_shift))) {
ivg_table[irq_pos].irqno = IVG7 + irqn;
ivg_table[irq_pos].isrflag = 1 << (irqn % 32);
ivg7_13[ivg].istop++;
irq_pos++;
}
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment