[PATCH] Slight refactor of interrupt mapping for FSL parts
Andy Fleming [Fri, 20 Oct 2006 00:52:26 +0000 (19:52 -0500)]
* Cleaned up interrupt mapping a little by adding a helper
  function which parses the irq out of the device-tree, and puts
  it into a resource.
* Changed the arch/ppc platform files to specify PHY_POLL, instead of -1
* Changed the fixed phy to use PHY_IGNORE_INTERRUPT
* Added ethtool.h and mii.h to phy.h includes

Signed-off-by: Paul Mackerras <paulus@samba.org>

13 files changed:
arch/powerpc/sysdev/fsl_soc.c
arch/ppc/platforms/83xx/mpc834x_sys.c
arch/ppc/platforms/85xx/mpc8540_ads.c
arch/ppc/platforms/85xx/mpc8560_ads.c
arch/ppc/platforms/85xx/mpc85xx_cds_common.c
arch/ppc/platforms/85xx/sbc8560.c
arch/ppc/platforms/85xx/stx_gp3.c
arch/ppc/platforms/85xx/tqm85xx.c
arch/ppc/platforms/mpc8272ads_setup.c
arch/ppc/platforms/mpc866ads_setup.c
drivers/net/phy/fixed.c
include/asm-powerpc/prom.h
include/linux/phy.h

index dbe92ae..ad31e56 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/platform_device.h>
+#include <linux/phy.h>
 #include <linux/fsl_devices.h>
 #include <linux/fs_enet_pd.h>
 #include <linux/fs_uart_pd.h>
@@ -146,7 +147,7 @@ static int __init gfar_mdio_of_init(void)
                }
 
                for (k = 0; k < 32; k++)
-                       mdio_data.irq[k] = -1;
+                       mdio_data.irq[k] = PHY_POLL;
 
                while ((child = of_get_next_child(np, child)) != NULL) {
                        int irq = irq_of_parse_and_map(child, 0);
@@ -177,6 +178,7 @@ static const char *gfar_tx_intr = "tx";
 static const char *gfar_rx_intr = "rx";
 static const char *gfar_err_intr = "error";
 
+
 static int __init gfar_of_init(void)
 {
        struct device_node *np;
@@ -204,8 +206,7 @@ static int __init gfar_of_init(void)
                if (ret)
                        goto err;
 
-               r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
-               r[1].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[1]);
 
                model = get_property(np, "model", NULL);
 
@@ -214,12 +215,10 @@ static int __init gfar_of_init(void)
                        r[1].name = gfar_tx_intr;
 
                        r[2].name = gfar_rx_intr;
-                       r[2].start = r[2].end = irq_of_parse_and_map(np, 1);
-                       r[2].flags = IORESOURCE_IRQ;
+                       of_irq_to_resource(np, 1, &r[2]);
 
                        r[3].name = gfar_err_intr;
-                       r[3].start = r[3].end = irq_of_parse_and_map(np, 2);
-                       r[3].flags = IORESOURCE_IRQ;
+                       of_irq_to_resource(np, 2, &r[3]);
 
                        n_res += 2;
                }
@@ -323,8 +322,7 @@ static int __init fsl_i2c_of_init(void)
                if (ret)
                        goto err;
 
-               r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
-               r[1].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[1]);
 
                i2c_dev = platform_device_register_simple("fsl-i2c", i, r, 2);
                if (IS_ERR(i2c_dev)) {
@@ -459,8 +457,7 @@ static int __init fsl_usb_of_init(void)
                if (ret)
                        goto err;
 
-               r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
-               r[1].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[1]);
 
                usb_dev_mph =
                    platform_device_register_simple("fsl-ehci", i, r, 2);
@@ -507,8 +504,7 @@ static int __init fsl_usb_of_init(void)
                if (ret)
                        goto unreg_mph;
 
-               r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
-               r[1].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[1]);
 
                usb_dev_dr =
                    platform_device_register_simple("fsl-ehci", i, r, 2);
@@ -591,8 +587,7 @@ static int __init fs_enet_of_init(void)
                r[2].name = fcc_regs_c;
                fs_enet_data.fcc_regs_c = r[2].start;
 
-               r[3].start = r[3].end = irq_of_parse_and_map(np, 0);
-               r[3].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[3]);
 
                fs_enet_dev =
                    platform_device_register_simple("fsl-cpm-fcc", i, &r[0], 4);
@@ -754,8 +749,7 @@ static int __init cpm_uart_of_init(void)
                        goto err;
                r[1].name = scc_pram;
 
-               r[2].start = r[2].end = irq_of_parse_and_map(np, 0);
-               r[2].flags = IORESOURCE_IRQ;
+               of_irq_to_resource(np, 0, &r[2]);
 
                cpm_uart_dev =
                    platform_device_register_simple("fsl-cpm-scc:uart", i, &r[0], 3);
index 3397f0d..b84f8df 100644 (file)
@@ -121,8 +121,8 @@ mpc834x_sys_setup_arch(void)
 
        mdata->irq[0] = MPC83xx_IRQ_EXT1;
        mdata->irq[1] = MPC83xx_IRQ_EXT2;
-       mdata->irq[2] = -1;
-       mdata->irq[31] = -1;
+       mdata->irq[2] = PHY_POLL;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1);
index 4f839da..00a3ba5 100644 (file)
@@ -92,9 +92,9 @@ mpc8540ads_setup_arch(void)
 
        mdata->irq[0] = MPC85xx_IRQ_EXT5;
        mdata->irq[1] = MPC85xx_IRQ_EXT5;
-       mdata->irq[2] = -1;
+       mdata->irq[2] = PHY_POLL;
        mdata->irq[3] = MPC85xx_IRQ_EXT5;
-       mdata->irq[31] = -1;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index 14ecec7..3a06046 100644 (file)
@@ -156,9 +156,9 @@ mpc8560ads_setup_arch(void)
 
        mdata->irq[0] = MPC85xx_IRQ_EXT5;
        mdata->irq[1] = MPC85xx_IRQ_EXT5;
-       mdata->irq[2] = -1;
+       mdata->irq[2] = PHY_POLL;
        mdata->irq[3] = MPC85xx_IRQ_EXT5;
-       mdata->irq[31] = -1;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index 5ce0f69..2d59eb7 100644 (file)
@@ -451,9 +451,9 @@ mpc85xx_cds_setup_arch(void)
 
        mdata->irq[0] = MPC85xx_IRQ_EXT5;
        mdata->irq[1] = MPC85xx_IRQ_EXT5;
-       mdata->irq[2] = -1;
-       mdata->irq[3] = -1;
-       mdata->irq[31] = -1;
+       mdata->irq[2] = PHY_POLL;
+       mdata->irq[3] = PHY_POLL;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index 764d580..1d10ab9 100644 (file)
@@ -129,7 +129,7 @@ sbc8560_setup_arch(void)
 
        mdata->irq[25] = MPC85xx_IRQ_EXT6;
        mdata->irq[26] = MPC85xx_IRQ_EXT7;
-       mdata->irq[31] = -1;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index 4bb18ab..b1f5b73 100644 (file)
@@ -123,7 +123,7 @@ gp3_setup_arch(void)
 
        mdata->irq[2] = MPC85xx_IRQ_EXT5;
        mdata->irq[4] = MPC85xx_IRQ_EXT5;
-       mdata->irq[31] = -1;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index dd45f2e..4ee2bd1 100644 (file)
@@ -137,9 +137,9 @@ tqm85xx_setup_arch(void)
 
        mdata->irq[0] = MPC85xx_IRQ_EXT8;
        mdata->irq[1] = MPC85xx_IRQ_EXT8;
-       mdata->irq[2] = -1;
+       mdata->irq[2] = PHY_POLL;
        mdata->irq[3] = MPC85xx_IRQ_EXT8;
-       mdata->irq[31] = -1;
+       mdata->irq[31] = PHY_POLL;
 
        /* setup the board related information for the enet controllers */
        pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
index 1f9ea36..0bc0676 100644 (file)
@@ -266,10 +266,10 @@ static void __init mpc8272ads_fixup_mdio_pdata(struct platform_device *pdev,
                                              int idx)
 {
        m82xx_mii_bb_pdata.irq[0] = PHY_INTERRUPT;
-       m82xx_mii_bb_pdata.irq[1] = -1;
-       m82xx_mii_bb_pdata.irq[2] = -1;
+       m82xx_mii_bb_pdata.irq[1] = PHY_POLL;
+       m82xx_mii_bb_pdata.irq[2] = PHY_POLL;
        m82xx_mii_bb_pdata.irq[3] = PHY_INTERRUPT;
-       m82xx_mii_bb_pdata.irq[31] = -1;
+       m82xx_mii_bb_pdata.irq[31] = PHY_POLL;
 
 
        m82xx_mii_bb_pdata.mdio_dat.offset =
index e95d2c1..8a0c07e 100644 (file)
@@ -361,7 +361,7 @@ int __init mpc866ads_init(void)
 
        fmpi->mii_speed = ((((bd->bi_intfreq + 4999999) / 2500000) / 2) & 0x3F) << 1;
        /* No PHY interrupt line here */
-       fmpi->irq[0xf] = -1;
+       fmpi->irq[0xf] = PHY_POLL;
 
 /* Since either of the uarts could be used as console, they need to ready */
 #ifdef CONFIG_SERIAL_CPM_SMC1
@@ -380,7 +380,7 @@ int __init mpc866ads_init(void)
 
        fmpi->mii_speed = ((((bd->bi_intfreq + 4999999) / 2500000) / 2) & 0x3F) << 1;
        /* No PHY interrupt line here */
-       fmpi->irq[0xf] = -1;
+       fmpi->irq[0xf] = PHY_POLL;
 
        return 0;
 }
index f14e992..096d4a1 100644 (file)
@@ -254,7 +254,7 @@ static int fixed_mdio_register_device(int number, int speed, int duplex)
                goto device_create_fail;
        }
 
-       phydev->irq = -1;
+       phydev->irq = PHY_IGNORE_INTERRUPT;
        phydev->dev.bus = &mdio_bus_type;
 
        if(number)
index 5246297..39f04ef 100644 (file)
@@ -17,6 +17,7 @@
  */
 #include <linux/types.h>
 #include <linux/proc_fs.h>
+#include <linux/platform_device.h>
 #include <asm/atomic.h>
 
 /* Definitions used by the flattened device tree */
@@ -331,6 +332,12 @@ extern int of_irq_map_one(struct device_node *device, int index,
 struct pci_dev;
 extern int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq);
 
+static inline void of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
+{
+       r->start = r->end = irq_of_parse_and_map(dev, index);
+       r->flags = IORESOURCE_IRQ;
+}
+
 
 #endif /* __KERNEL__ */
 #endif /* _POWERPC_PROM_H */
index 9447a57..892d6ab 100644 (file)
@@ -20,6 +20,9 @@
 
 #include <linux/spinlock.h>
 #include <linux/device.h>
+#include <linux/ethtool.h>
+#include <linux/mii.h>
+#include <asm/irq.h>
 
 #define PHY_BASIC_FEATURES     (SUPPORTED_10baseT_Half | \
                                 SUPPORTED_10baseT_Full | \