Merge branch 'fman-next' of git://git.freescale.com/ppc/upstream/linux
authorDavid S. Miller <davem@davemloft.net>
Fri, 7 Oct 2016 00:32:05 +0000 (20:32 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 7 Oct 2016 00:32:05 +0000 (20:32 -0400)
Madalin Bucur says:

====================
fsl/fman: cleanup and small fixes

This series contains fixes for the DPAA FMan driver.
Adding myself as maintainer of the driver.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
MAINTAINERS
drivers/net/ethernet/freescale/fman/Makefile
drivers/net/ethernet/freescale/fman/fman.c
drivers/net/ethernet/freescale/fman/fman_mac.h
drivers/net/ethernet/freescale/fman/fman_memac.c
drivers/net/ethernet/freescale/fman/fman_muram.c
drivers/net/ethernet/freescale/fman/fman_muram.h
drivers/net/ethernet/freescale/fman/fman_port.c
drivers/net/ethernet/freescale/fman/fman_sp.c
drivers/net/ethernet/freescale/fman/mac.c
drivers/net/ethernet/freescale/fman/mac.h

index 464437d..93f718d 100644 (file)
@@ -5005,6 +5005,13 @@ F:       drivers/net/ethernet/freescale/fec_ptp.c
 F:     drivers/net/ethernet/freescale/fec.h
 F:     Documentation/devicetree/bindings/net/fsl-fec.txt
 
+FREESCALE QORIQ DPAA FMAN DRIVER
+M:     Madalin Bucur <madalin.bucur@nxp.com>
+L:     netdev@vger.kernel.org
+S:     Maintained
+F:     drivers/net/ethernet/freescale/fman
+F:     Documentation/devicetree/bindings/powerpc/fsl/fman.txt
+
 FREESCALE QUICC ENGINE LIBRARY
 L:     linuxppc-dev@lists.ozlabs.org
 S:     Orphan
index 51fd2e6..6049177 100644 (file)
@@ -1,7 +1,9 @@
 subdir-ccflags-y +=  -I$(srctree)/drivers/net/ethernet/freescale/fman
 
-obj-y          += fsl_fman.o fsl_fman_mac.o fsl_mac.o
+obj-$(CONFIG_FSL_FMAN) += fsl_fman.o
+obj-$(CONFIG_FSL_FMAN) += fsl_fman_port.o
+obj-$(CONFIG_FSL_FMAN) += fsl_mac.o
 
-fsl_fman-objs  := fman_muram.o fman.o fman_sp.o fman_port.o
-fsl_fman_mac-objs := fman_dtsec.o fman_memac.o fman_tgec.o
-fsl_mac-objs += mac.o
+fsl_fman-objs  := fman_muram.o fman.o fman_sp.o
+fsl_fman_port-objs := fman_port.o
+fsl_mac-objs:= mac.o fman_dtsec.o fman_memac.o fman_tgec.o
index 1de2e1e..dafd9e1 100644 (file)
@@ -618,7 +618,7 @@ struct fman {
        unsigned long cam_offset;
        size_t cam_size;
        /* Fifo in MURAM */
-       int fifo_offset;
+       unsigned long fifo_offset;
        size_t fifo_size;
 
        u32 liodn_base[64];
@@ -2036,7 +2036,7 @@ static int fman_init(struct fman *fman)
        /* allocate MURAM for FIFO according to total size */
        fman->fifo_offset = fman_muram_alloc(fman->muram,
                                             fman->state->total_fifo_size);
-       if (IS_ERR_VALUE(fman->cam_offset)) {
+       if (IS_ERR_VALUE(fman->fifo_offset)) {
                free_init_resources(fman);
                dev_err(fman->dev, "%s: MURAM alloc for BMI FIFO failed\n",
                        __func__);
@@ -2115,6 +2115,7 @@ void fman_register_intr(struct fman *fman, enum fman_event_modules module,
        fman->intr_mng[event].isr_cb = isr_cb;
        fman->intr_mng[event].src_handle = src_arg;
 }
+EXPORT_SYMBOL(fman_register_intr);
 
 /**
  * fman_unregister_intr
@@ -2138,6 +2139,7 @@ void fman_unregister_intr(struct fman *fman, enum fman_event_modules module,
        fman->intr_mng[event].isr_cb = NULL;
        fman->intr_mng[event].src_handle = NULL;
 }
+EXPORT_SYMBOL(fman_unregister_intr);
 
 /**
  * fman_set_port_params
@@ -2241,6 +2243,7 @@ return_err:
        spin_unlock_irqrestore(&fman->spinlock, flags);
        return err;
 }
+EXPORT_SYMBOL(fman_set_port_params);
 
 /**
  * fman_reset_mac
@@ -2310,6 +2313,7 @@ int fman_reset_mac(struct fman *fman, u8 mac_id)
 
        return 0;
 }
+EXPORT_SYMBOL(fman_reset_mac);
 
 /**
  * fman_set_mac_max_frame
@@ -2327,8 +2331,7 @@ int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
         * or equal to the port's max
         */
        if ((!fman->state->port_mfl[mac_id]) ||
-           (fman->state->port_mfl[mac_id] &&
-           (mfl <= fman->state->port_mfl[mac_id]))) {
+           (mfl <= fman->state->port_mfl[mac_id])) {
                fman->state->mac_mfl[mac_id] = mfl;
        } else {
                dev_warn(fman->dev, "%s: MAC max_frame_length is larger than Port max_frame_length\n",
@@ -2337,6 +2340,7 @@ int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
        }
        return 0;
 }
+EXPORT_SYMBOL(fman_set_mac_max_frame);
 
 /**
  * fman_get_clock_freq
@@ -2363,6 +2367,7 @@ u32 fman_get_bmi_max_fifo_size(struct fman *fman)
 {
        return fman->state->bmi_max_fifo_size;
 }
+EXPORT_SYMBOL(fman_get_bmi_max_fifo_size);
 
 /**
  * fman_get_revision
@@ -2384,6 +2389,7 @@ void fman_get_revision(struct fman *fman, struct fman_rev_info *rev_info)
                                FPM_REV1_MAJOR_SHIFT);
        rev_info->minor = tmp & FPM_REV1_MINOR_MASK;
 }
+EXPORT_SYMBOL(fman_get_revision);
 
 /**
  * fman_get_qman_channel_id
@@ -2419,6 +2425,7 @@ u32 fman_get_qman_channel_id(struct fman *fman, u32 port_id)
 
        return fman->state->qman_channel_base + i;
 }
+EXPORT_SYMBOL(fman_get_qman_channel_id);
 
 /**
  * fman_get_mem_region
@@ -2432,6 +2439,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
 {
        return fman->state->res;
 }
+EXPORT_SYMBOL(fman_get_mem_region);
 
 /* Bootargs defines */
 /* Extra headroom for RX buffers - Default, min and max */
@@ -2453,7 +2461,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
  * particular forwarding scenarios that add extra headers to the
  * forwarded frame.
  */
-int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
+static int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
 module_param(fsl_fm_rx_extra_headroom, int, 0);
 MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
 
@@ -2466,7 +2474,7 @@ MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
  * Could be overridden once, at boot-time, via the
  * fm_set_max_frm() callback.
  */
-int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
+static int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
 module_param(fsl_fm_max_frm, int, 0);
 MODULE_PARM_DESC(fsl_fm_max_frm, "Maximum frame size, across all interfaces");
 
@@ -2538,6 +2546,7 @@ struct fman *fman_bind(struct device *fm_dev)
 {
        return (struct fman *)(dev_get_drvdata(get_device(fm_dev)));
 }
+EXPORT_SYMBOL(fman_bind);
 
 static irqreturn_t fman_err_irq(int irq, void *handle)
 {
@@ -2727,8 +2736,8 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
        struct fman *fman;
        struct device_node *fm_node, *muram_node;
        struct resource *res;
-       const u32 *u32_prop;
-       int lenp, err, irq;
+       u32 val, range[2];
+       int err, irq;
        struct clk *clk;
        u32 clk_rate;
        phys_addr_t phys_base_addr;
@@ -2740,16 +2749,13 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
 
        fm_node = of_node_get(of_dev->dev.of_node);
 
-       u32_prop = (const u32 *)of_get_property(fm_node, "cell-index", &lenp);
-       if (!u32_prop) {
-               dev_err(&of_dev->dev, "%s: of_get_property(%s, cell-index) failed\n",
+       err = of_property_read_u32(fm_node, "cell-index", &val);
+       if (err) {
+               dev_err(&of_dev->dev, "%s: failed to read cell-index for %s\n",
                        __func__, fm_node->full_name);
                goto fman_node_put;
        }
-       if (WARN_ON(lenp != sizeof(u32)))
-               goto fman_node_put;
-
-       fman->dts_params.id = (u8)fdt32_to_cpu(u32_prop[0]);
+       fman->dts_params.id = (u8)val;
 
        /* Get the FM interrupt */
        res = platform_get_resource(of_dev, IORESOURCE_IRQ, 0);
@@ -2796,18 +2802,15 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
        /* Rounding to MHz */
        fman->dts_params.clk_freq = DIV_ROUND_UP(clk_rate, 1000000);
 
-       u32_prop = (const u32 *)of_get_property(fm_node,
-                                               "fsl,qman-channel-range",
-                                               &lenp);
-       if (!u32_prop) {
-               dev_err(&of_dev->dev, "%s: of_get_property(%s, fsl,qman-channel-range) failed\n",
+       err = of_property_read_u32_array(fm_node, "fsl,qman-channel-range",
+                                        &range[0], 2);
+       if (err) {
+               dev_err(&of_dev->dev, "%s: failed to read fsl,qman-channel-range for %s\n",
                        __func__, fm_node->full_name);
                goto fman_node_put;
        }
-       if (WARN_ON(lenp != sizeof(u32) * 2))
-               goto fman_node_put;
-       fman->dts_params.qman_channel_base = fdt32_to_cpu(u32_prop[0]);
-       fman->dts_params.num_of_qman_channels = fdt32_to_cpu(u32_prop[1]);
+       fman->dts_params.qman_channel_base = range[0];
+       fman->dts_params.num_of_qman_channels = range[1];
 
        /* Get the MURAM base address and size */
        muram_node = of_find_matching_node(fm_node, fman_muram_match);
@@ -2858,7 +2861,7 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
 
        fman->dts_params.base_addr =
                devm_ioremap(&of_dev->dev, phys_base_addr, mem_size);
-       if (fman->dts_params.base_addr == 0) {
+       if (!fman->dts_params.base_addr) {
                dev_err(&of_dev->dev, "%s: devm_ioremap() failed\n", __func__);
                goto fman_free;
        }
@@ -2930,7 +2933,7 @@ static const struct of_device_id fman_match[] = {
        {}
 };
 
-MODULE_DEVICE_TABLE(of, fm_match);
+MODULE_DEVICE_TABLE(of, fman_match);
 
 static struct platform_driver fman_driver = {
        .driver = {
@@ -2940,4 +2943,25 @@ static struct platform_driver fman_driver = {
        .probe = fman_probe,
 };
 
-builtin_platform_driver(fman_driver);
+static int __init fman_load(void)
+{
+       int err;
+
+       pr_debug("FSL DPAA FMan driver\n");
+
+       err = platform_driver_register(&fman_driver);
+       if (err < 0)
+               pr_err("Error, platform_driver_register() = %d\n", err);
+
+       return err;
+}
+module_init(fman_load);
+
+static void __exit fman_unload(void)
+{
+       platform_driver_unregister(&fman_driver);
+}
+module_exit(fman_unload);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Freescale DPAA Frame Manager driver");
index ddf0260..dd6d052 100644 (file)
@@ -191,10 +191,6 @@ struct fman_mac_params {
        u16 max_speed;
        /* A handle to the FM object this port related to */
        void *fm;
-       /* MDIO exceptions interrupt source - not valid for all
-        * MACs; MUST be set to 0 for MACs that don't have
-        * mdio-irq, or for polling
-        */
        void *dev_id; /* device cookie used by the exception cbs */
        fman_mac_exception_cb *event_cb;    /* MDIO Events Callback Routine */
        fman_mac_exception_cb *exception_cb;/* Exception Callback Routine */
index 45e98fd..53ef51e 100644 (file)
@@ -507,6 +507,9 @@ static void setup_sgmii_internal_phy(struct fman_mac *memac,
 {
        u16 tmp_reg16;
 
+       if (WARN_ON(!memac->pcsphy))
+               return;
+
        /* SGMII mode */
        tmp_reg16 = IF_MODE_SGMII_EN;
        if (!fixed_link)
@@ -1151,7 +1154,8 @@ struct fman_mac *memac_config(struct fman_mac_params *params)
        /* Save FMan revision */
        fman_get_revision(memac->fm, &memac->fm_rev_info);
 
-       if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) {
+       if (memac->phy_if == PHY_INTERFACE_MODE_SGMII ||
+           memac->phy_if == PHY_INTERFACE_MODE_QSGMII) {
                if (!params->internal_phy_node) {
                        pr_err("PCS PHY node is not available\n");
                        memac_free(memac);
index 47394c4..5ec94d2 100644 (file)
@@ -150,7 +150,8 @@ unsigned long fman_muram_alloc(struct muram_info *muram, size_t size)
  *
  * Free an allocated memory from FM-MURAM partition.
  */
-void fman_muram_free_mem(struct muram_info *muram, unsigned long offset, size_t size)
+void fman_muram_free_mem(struct muram_info *muram, unsigned long offset,
+                        size_t size)
 {
        unsigned long addr = fman_muram_offset_to_vbase(muram, offset);
 
index 889649a..453bf84 100644 (file)
@@ -46,6 +46,7 @@ unsigned long fman_muram_offset_to_vbase(struct muram_info *muram,
 
 unsigned long fman_muram_alloc(struct muram_info *muram, size_t size);
 
-void fman_muram_free_mem(struct muram_info *muram, unsigned long offset, size_t size);
+void fman_muram_free_mem(struct muram_info *muram, unsigned long offset,
+                        size_t size);
 
 #endif /* __FM_MURAM_EXT */
index 70c198d..9f3bb50 100644 (file)
@@ -1477,7 +1477,8 @@ EXPORT_SYMBOL(fman_port_cfg_buf_prefix_content);
  */
 int fman_port_disable(struct fman_port *port)
 {
-       u32 __iomem *bmi_cfg_reg, *bmi_status_reg, tmp;
+       u32 __iomem *bmi_cfg_reg, *bmi_status_reg;
+       u32 tmp;
        bool rx_port, failure = false;
        int count;
 
@@ -1553,7 +1554,8 @@ EXPORT_SYMBOL(fman_port_disable);
  */
 int fman_port_enable(struct fman_port *port)
 {
-       u32 __iomem *bmi_cfg_reg, tmp;
+       u32 __iomem *bmi_cfg_reg;
+       u32 tmp;
        bool rx_port;
 
        if (!is_init_done(port->cfg))
@@ -1623,7 +1625,7 @@ static int fman_port_probe(struct platform_device *of_dev)
        struct device_node *fm_node, *port_node;
        struct resource res;
        struct resource *dev_res;
-       const u32 *u32_prop;
+       u32 val;
        int err = 0, lenp;
        enum fman_port_type port_type;
        u16 port_speed;
@@ -1652,28 +1654,20 @@ static int fman_port_probe(struct platform_device *of_dev)
                goto return_err;
        }
 
-       u32_prop = (const u32 *)of_get_property(port_node, "cell-index", &lenp);
-       if (!u32_prop) {
-               dev_err(port->dev, "%s: of_get_property(%s, cell-index) failed\n",
+       err = of_property_read_u32(port_node, "cell-index", &val);
+       if (err) {
+               dev_err(port->dev, "%s: reading cell-index for %s failed\n",
                        __func__, port_node->full_name);
                err = -EINVAL;
                goto return_err;
        }
-       if (WARN_ON(lenp != sizeof(u32))) {
-               err = -EINVAL;
-               goto return_err;
-       }
-       port_id = (u8)fdt32_to_cpu(u32_prop[0]);
-
+       port_id = (u8)val;
        port->dts_params.id = port_id;
 
        if (of_device_is_compatible(port_node, "fsl,fman-v3-port-tx")) {
                port_type = FMAN_PORT_TYPE_TX;
                port_speed = 1000;
-               u32_prop = (const u32 *)of_get_property(port_node,
-                                                       "fsl,fman-10g-port",
-                                                       &lenp);
-               if (u32_prop)
+               if (of_find_property(port_node, "fsl,fman-10g-port", &lenp))
                        port_speed = 10000;
 
        } else if (of_device_is_compatible(port_node, "fsl,fman-v2-port-tx")) {
@@ -1686,9 +1680,7 @@ static int fman_port_probe(struct platform_device *of_dev)
        } else if (of_device_is_compatible(port_node, "fsl,fman-v3-port-rx")) {
                port_type = FMAN_PORT_TYPE_RX;
                port_speed = 1000;
-               u32_prop = (const u32 *)of_get_property(port_node,
-                                                 "fsl,fman-10g-port", &lenp);
-               if (u32_prop)
+               if (of_find_property(port_node, "fsl,fman-10g-port", &lenp))
                        port_speed = 10000;
 
        } else if (of_device_is_compatible(port_node, "fsl,fman-v2-port-rx")) {
@@ -1743,7 +1735,7 @@ static int fman_port_probe(struct platform_device *of_dev)
 
        port->dts_params.base_addr = devm_ioremap(port->dev, res.start,
                                                  resource_size(&res));
-       if (port->dts_params.base_addr == 0)
+       if (!port->dts_params.base_addr)
                dev_err(port->dev, "%s: devm_ioremap() failed\n", __func__);
 
        dev_set_drvdata(&of_dev->dev, port);
@@ -1775,4 +1767,25 @@ static struct platform_driver fman_port_driver = {
        .probe = fman_port_probe,
 };
 
-builtin_platform_driver(fman_port_driver);
+static int __init fman_port_load(void)
+{
+       int err;
+
+       pr_debug("FSL DPAA FMan driver\n");
+
+       err = platform_driver_register(&fman_port_driver);
+       if (err < 0)
+               pr_err("Error, platform_driver_register() = %d\n", err);
+
+       return err;
+}
+module_init(fman_port_load);
+
+static void __exit fman_port_unload(void)
+{
+       platform_driver_unregister(&fman_port_driver);
+}
+module_exit(fman_port_unload);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Freescale DPAA Frame Manager Port driver");
index f9e7aa3..248f5bc 100644 (file)
@@ -80,6 +80,7 @@ void fman_sp_set_buf_pools_in_asc_order_of_buf_sizes(struct fman_ext_pools
                }
        }
 }
+EXPORT_SYMBOL(fman_sp_set_buf_pools_in_asc_order_of_buf_sizes);
 
 int fman_sp_build_buffer_struct(struct fman_sp_int_context_data_copy *
                                int_context_data_copy,
@@ -164,3 +165,5 @@ int fman_sp_build_buffer_struct(struct fman_sp_int_context_data_copy *
 
        return 0;
 }
+EXPORT_SYMBOL(fman_sp_build_buffer_struct);
+
index e33d9d2..8fe6b3e 100644 (file)
@@ -469,9 +469,9 @@ static void adjust_link_memac(struct net_device *net_dev)
 /* Initializes driver's PHY state, and attaches to the PHY.
  * Returns 0 on success.
  */
-static int init_phy(struct net_device *net_dev,
-                   struct mac_device *mac_dev,
-                   void (*adj_lnk)(struct net_device *))
+static struct phy_device *init_phy(struct net_device *net_dev,
+                                  struct mac_device *mac_dev,
+                                  void (*adj_lnk)(struct net_device *))
 {
        struct phy_device       *phy_dev;
        struct mac_priv_s       *priv = mac_dev->priv;
@@ -480,7 +480,7 @@ static int init_phy(struct net_device *net_dev,
                                 priv->phy_if);
        if (!phy_dev) {
                netdev_err(net_dev, "Could not connect to PHY\n");
-               return -ENODEV;
+               return NULL;
        }
 
        /* Remove any features not supported by the controller */
@@ -493,23 +493,23 @@ static int init_phy(struct net_device *net_dev,
 
        mac_dev->phy_dev = phy_dev;
 
-       return 0;
+       return phy_dev;
 }
 
-static int dtsec_init_phy(struct net_device *net_dev,
-                         struct mac_device *mac_dev)
+static struct phy_device *dtsec_init_phy(struct net_device *net_dev,
+                                        struct mac_device *mac_dev)
 {
        return init_phy(net_dev, mac_dev, &adjust_link_dtsec);
 }
 
-static int tgec_init_phy(struct net_device *net_dev,
-                        struct mac_device *mac_dev)
+static struct phy_device *tgec_init_phy(struct net_device *net_dev,
+                                       struct mac_device *mac_dev)
 {
        return init_phy(net_dev, mac_dev, adjust_link_void);
 }
 
-static int memac_init_phy(struct net_device *net_dev,
-                         struct mac_device *mac_dev)
+static struct phy_device *memac_init_phy(struct net_device *net_dev,
+                                        struct mac_device *mac_dev)
 {
        return init_phy(net_dev, mac_dev, &adjust_link_memac);
 }
@@ -583,31 +583,6 @@ static void setup_memac(struct mac_device *mac_dev)
 
 static DEFINE_MUTEX(eth_lock);
 
-static const char phy_str[][11] = {
-       [PHY_INTERFACE_MODE_MII]                = "mii",
-       [PHY_INTERFACE_MODE_GMII]               = "gmii",
-       [PHY_INTERFACE_MODE_SGMII]              = "sgmii",
-       [PHY_INTERFACE_MODE_TBI]                = "tbi",
-       [PHY_INTERFACE_MODE_RMII]               = "rmii",
-       [PHY_INTERFACE_MODE_RGMII]              = "rgmii",
-       [PHY_INTERFACE_MODE_RGMII_ID]           = "rgmii-id",
-       [PHY_INTERFACE_MODE_RGMII_RXID] = "rgmii-rxid",
-       [PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid",
-       [PHY_INTERFACE_MODE_RTBI]               = "rtbi",
-       [PHY_INTERFACE_MODE_XGMII]              = "xgmii"
-};
-
-static phy_interface_t __pure __attribute__((nonnull)) str2phy(const char *str)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(phy_str); i++)
-               if (strcmp(str, phy_str[i]) == 0)
-                       return (phy_interface_t)i;
-
-       return PHY_INTERFACE_MODE_MII;
-}
-
 static const u16 phy2speed[] = {
        [PHY_INTERFACE_MODE_MII]                = SPEED_100,
        [PHY_INTERFACE_MODE_GMII]               = SPEED_1000,
@@ -678,7 +653,7 @@ MODULE_DEVICE_TABLE(of, mac_match);
 
 static int mac_probe(struct platform_device *_of_dev)
 {
-       int                      err, i, lenp, nph;
+       int                      err, i, nph;
        struct device           *dev;
        struct device_node      *mac_node, *dev_node;
        struct mac_device       *mac_dev;
@@ -686,9 +661,9 @@ static int mac_probe(struct platform_device *_of_dev)
        struct resource          res;
        struct mac_priv_s       *priv;
        const u8                *mac_addr;
-       const char              *char_prop;
-       const u32               *u32_prop;
+       u32                      val;
        u8                      fman_id;
+       int                     phy_if;
 
        dev = &_of_dev->dev;
        mac_node = dev->of_node;
@@ -749,16 +724,15 @@ static int mac_probe(struct platform_device *_of_dev)
        }
 
        /* Get the FMan cell-index */
-       u32_prop = of_get_property(dev_node, "cell-index", &lenp);
-       if (!u32_prop) {
-               dev_err(dev, "of_get_property(%s, cell-index) failed\n",
+       err = of_property_read_u32(dev_node, "cell-index", &val);
+       if (err) {
+               dev_err(dev, "failed to read cell-index for %s\n",
                        dev_node->full_name);
                err = -EINVAL;
                goto _return_of_node_put;
        }
-       WARN_ON(lenp != sizeof(u32));
        /* cell-index 0 => FMan id 1 */
-       fman_id = (u8)(fdt32_to_cpu(u32_prop[0]) + 1);
+       fman_id = (u8)(val + 1);
 
        priv->fman = fman_bind(&of_dev->dev);
        if (!priv->fman) {
@@ -805,15 +779,14 @@ static int mac_probe(struct platform_device *_of_dev)
        }
 
        /* Get the cell-index */
-       u32_prop = of_get_property(mac_node, "cell-index", &lenp);
-       if (!u32_prop) {
-               dev_err(dev, "of_get_property(%s, cell-index) failed\n",
+       err = of_property_read_u32(mac_node, "cell-index", &val);
+       if (err) {
+               dev_err(dev, "failed to read cell-index for %s\n",
                        mac_node->full_name);
                err = -EINVAL;
                goto _return_dev_set_drvdata;
        }
-       WARN_ON(lenp != sizeof(u32));
-       priv->cell_index = (u8)fdt32_to_cpu(u32_prop[0]);
+       priv->cell_index = (u8)val;
 
        /* Get the MAC address */
        mac_addr = of_get_mac_address(mac_node);
@@ -870,16 +843,14 @@ static int mac_probe(struct platform_device *_of_dev)
        }
 
        /* Get the PHY connection type */
-       char_prop = (const char *)of_get_property(mac_node,
-                                                 "phy-connection-type", NULL);
-       if (!char_prop) {
+       phy_if = of_get_phy_mode(mac_node);
+       if (phy_if < 0) {
                dev_warn(dev,
-                        "of_get_property(%s, phy-connection-type) failed. Defaulting to MII\n",
+                        "of_get_phy_mode() for %s failed. Defaulting to SGMII\n",
                         mac_node->full_name);
-               priv->phy_if = PHY_INTERFACE_MODE_MII;
-       } else {
-               priv->phy_if = str2phy(char_prop);
+               phy_if = PHY_INTERFACE_MODE_SGMII;
        }
+       priv->phy_if = phy_if;
 
        priv->speed             = phy2speed[priv->phy_if];
        priv->max_speed         = priv->speed;
index 0211cc9..d7313f0 100644 (file)
@@ -58,7 +58,8 @@ struct mac_device {
        bool tx_pause_active;
        bool promisc;
 
-       int (*init_phy)(struct net_device *net_dev, struct mac_device *mac_dev);
+       struct phy_device *(*init_phy)(struct net_device *net_dev,
+                                      struct mac_device *mac_dev);
        int (*init)(struct mac_device *mac_dev);
        int (*start)(struct mac_device *mac_dev);
        int (*stop)(struct mac_device *mac_dev);