MIPS: BC47xx: Fix SSB irq setup
authormatthieu castet <castet.matthieu@free.fr>
Tue, 30 Jun 2009 21:04:55 +0000 (23:04 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 3 Jul 2009 14:45:27 +0000 (15:45 +0100)
commitea4bbfd0048c53c24f72ef668b39f1247bc243c0
treedf871a70349f18842c0a38b51cad2dd3ee65b07a
parenteb9b5141a9815ef898ef6b6441f733e81c272600
MIPS: BC47xx: Fix SSB irq setup

The current ssb irq setup in ssb_mipscore_init has the problem that it
configures some device on some irq without checking that the irq is not
taken by an other device.

For example in my case PCI host is on irq 0 and IPSEC on irq 3.
The current code:
  - store in dev->irq that IPSEC irq is 3 + 2
  - do a set_irq 0->3 on PCI host

But now IPSEC irq is not routed anymore to the mips code and dev->irq is
wrong.  This causes a problem described in [1].

This patch tries to solve the problem by making set_irq configure the
device we want to take the irq on the shared irq0. The previous example
becomes:
  - store in dev->irq that IPSEC irq is 3 + 2
  - do a set_irq 0->3 on PCI host:
  - irq 3 is already taken by IPSEC. do a set_irq 3->0 on IPSEC

I also added some code to print the irq configuration after irq setup to
allow easier debugging. And I add extra checking in ssb_mips_irq to report
device without irq or device with not routed irq.

[1] http://www.danm.de/files/src/bcm5365p/REPORTED_DEVICES

Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
Acked-by : Michael Buesch <mb@bu3sch.de>
Tested-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
drivers/ssb/driver_mipscore.c