powerpc/pasemi: Add Nemo board IRQ initroutine
authorDarren Stevens <darren@stevens-zone.net>
Sun, 19 Aug 2018 20:26:28 +0000 (21:26 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 20 Dec 2018 11:21:20 +0000 (22:21 +1100)
Add a IRQ init routine for the Nemo board which inits and attatches
the i8259 found in the SB600, and a cascade routine to dispatch the
interrupts.

Signed-off-by: Darren Stevens <darren@stevens-zone.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/pasemi/pci.c
arch/powerpc/platforms/pasemi/setup.c

index 116c0fe..fdc839d 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/pci.h>
 
 #include <asm/pci-bridge.h>
+#include <asm/isa-bridge.h>
 #include <asm/machdep.h>
 
 #include <asm/ppc-pci.h>
@@ -181,6 +182,8 @@ static int pa_pxp_read_config(struct pci_bus *bus, unsigned int devfn,
 
        addr = pa_pxp_cfg_addr(hose, bus->number, devfn, offset);
 
+       sb600_set_flag(bus->number);
+
        /*
         * Note: the caller has already checked that offset is
         * suitably aligned and that len is 1, 2 or 4.
@@ -215,6 +218,8 @@ static int pa_pxp_write_config(struct pci_bus *bus, unsigned int devfn,
 
        addr = pa_pxp_cfg_addr(hose, bus->number, devfn, offset);
 
+       sb600_set_flag(bus->number);
+
        /*
         * Note: the caller has already checked that offset is
         * suitably aligned and that len is 1, 2 or 4.
@@ -265,6 +270,12 @@ static int __init pas_add_bridge(struct device_node *dev)
        /* Interpret the "ranges" property */
        pci_process_bridge_OF_ranges(hose, dev, 1);
 
+       /*
+        * Scan for an isa bridge. This is needed to find the SB600 on the nemo
+        * and does nothing on machines without one.
+        */
+       isa_bridge_find_early(hose);
+
        return 0;
 }
 
index 5c1a1d9..c053299 100644 (file)
@@ -314,6 +314,8 @@ static __init void pas_init_IRQ(void)
                mpic_unmask_irq(irq_get_irq_data(nmi_virq));
        }
 
+       nemo_init_IRQ(mpic);
+
        of_node_put(mpic_node);
        of_node_put(root);
 }
@@ -475,6 +477,8 @@ static int __init pasemi_publish_devices(void)
        /* Publish OF platform devices for SDC and other non-PCI devices */
        of_platform_bus_probe(NULL, pasemi_bus_ids, NULL);
 
+       nemo_init_rtc();
+
        return 0;
 }
 machine_device_initcall(pasemi, pasemi_publish_devices);
@@ -489,6 +493,17 @@ static int __init pas_probe(void)
            !of_machine_is_compatible("pasemi,pwrficient"))
                return 0;
 
+#ifdef CONFIG_PPC_PASEMI_NEMO
+       /*
+        * Check for the Nemo motherboard here, if we are running on one
+        * change the machine definition to fit
+        */
+       if (of_machine_is_compatible("pasemi,nemo")) {
+               pm_power_off            = pas_shutdown;
+               ppc_md.name             = "A-EON Amigaone X1000";
+       }
+#endif
+
        iommu_init_early_pasemi();
 
        return 1;