• Paul Burton's avatar
    MIPS: SEAD-3: Set interrupt-parent per-device, not at root node · fbdc674b
    Paul Burton authored
    The SEAD-3 board may be configured with or without a MIPS Global
    Interrupt Controller (GIC). Because of this we have a device tree with a
    default case of a GIC present, and code to fixup the device tree based
    upon a configuration register that indicates the presence of the GIC.
    
    In order to keep this DT fixup code simple, the interrupt-parent
    property was specified at the root node of the SEAD-3 DT, allowing the
    fixup code to simply change this property to the phandle of the CPU
    interrupt controller if a GIC is not present & affect all
    interrupt-using devices at once. This however causes a problem if we do
    have a GIC & the device tree is used as-is, because the interrupt-parent
    property of the root node applies to the CPU interrupt controller node.
    This causes a cycle when of_irq_init() attempts to probe interrupt
    controllers in order and boots fail due to a lack of configured
    interrupts, with this message printed on the kernel console:
    
    [    0.000000] OF: of_irq_init: children remain, but no parents
    
    Fix this by removing the interrupt-parent property from the DT root node
    & instead setting it for each device which uses interrupts, ensuring
    that the CPU interrupt controller node has no interrupt-parent &
    allowing of_irq_init() to identify it as the root interrupt controller.
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Reported-by: default avatarKeng Koh <keng.koh@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16187/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    fbdc674b
board-sead3.c 5.44 KB