• matthieu castet's avatar
    MIPS: BC47xx: Fix SSB irq setup · ea4bbfd0
    matthieu castet authored
    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_DEVICESSigned-off-by: default avatarMatthieu CASTET <castet.matthieu@free.fr>
    Acked-by : Michael Buesch <mb@bu3sch.de>
    Tested-by: default avatarFlorian Fainelli <florian@openwrt.org>
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    ea4bbfd0
driver_mipscore.c 6.83 KB