net/cadence/macb: Simplify OF dependencies
[pandora-kernel.git] / drivers / net / ethernet / cadence / macb.c
index 7903943..7fd0e3e 100644 (file)
@@ -485,6 +485,8 @@ static void macb_tx_interrupt(struct macb *bp)
        status = macb_readl(bp, TSR);
        macb_writel(bp, TSR, status);
 
+       macb_writel(bp, ISR, MACB_BIT(TCOMP));
+
        netdev_vdbg(bp->dev, "macb_tx_interrupt status = 0x%03lx\n",
                (unsigned long)status);
 
@@ -736,6 +738,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
                         * now.
                         */
                        macb_writel(bp, IDR, MACB_RX_INT_FLAGS);
+                       macb_writel(bp, ISR, MACB_BIT(RCOMP));
 
                        if (napi_schedule_prep(&bp->napi)) {
                                netdev_vdbg(bp->dev, "scheduling RX softirq\n");
@@ -1054,6 +1057,7 @@ static void macb_configure_dma(struct macb *bp)
                dmacfg |= GEM_BF(RXBS, RX_BUFFER_SIZE / 64);
                dmacfg |= GEM_BF(FBLDO, 16);
                dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L);
+               dmacfg &= ~GEM_BIT(ENDIA);
                gem_writel(bp, DMACFG, dmacfg);
        }
 }
@@ -1472,41 +1476,7 @@ static const struct of_device_id macb_dt_ids[] = {
        { .compatible = "cdns,gem" },
        { /* sentinel */ }
 };
-
 MODULE_DEVICE_TABLE(of, macb_dt_ids);
-
-static int macb_get_phy_mode_dt(struct platform_device *pdev)
-{
-       struct device_node *np = pdev->dev.of_node;
-
-       if (np)
-               return of_get_phy_mode(np);
-
-       return -ENODEV;
-}
-
-static int macb_get_hwaddr_dt(struct macb *bp)
-{
-       struct device_node *np = bp->pdev->dev.of_node;
-       if (np) {
-               const char *mac = of_get_mac_address(np);
-               if (mac) {
-                       memcpy(bp->dev->dev_addr, mac, ETH_ALEN);
-                       return 0;
-               }
-       }
-
-       return -ENODEV;
-}
-#else
-static int macb_get_phy_mode_dt(struct platform_device *pdev)
-{
-       return -ENODEV;
-}
-static int macb_get_hwaddr_dt(struct macb *bp)
-{
-       return -ENODEV;
-}
 #endif
 
 static int __init macb_probe(struct platform_device *pdev)
@@ -1519,6 +1489,7 @@ static int __init macb_probe(struct platform_device *pdev)
        u32 config;
        int err = -ENXIO;
        struct pinctrl *pinctrl;
+       const char *mac;
 
        regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!regs) {
@@ -1557,14 +1528,14 @@ static int __init macb_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "failed to get macb_clk\n");
                goto err_out_free_dev;
        }
-       clk_enable(bp->pclk);
+       clk_prepare_enable(bp->pclk);
 
        bp->hclk = clk_get(&pdev->dev, "hclk");
        if (IS_ERR(bp->hclk)) {
                dev_err(&pdev->dev, "failed to get hclk\n");
                goto err_out_put_pclk;
        }
-       clk_enable(bp->hclk);
+       clk_prepare_enable(bp->hclk);
 
        bp->regs = ioremap(regs->start, resource_size(regs));
        if (!bp->regs) {
@@ -1592,11 +1563,13 @@ static int __init macb_probe(struct platform_device *pdev)
        config |= macb_dbw(bp);
        macb_writel(bp, NCFGR, config);
 
-       err = macb_get_hwaddr_dt(bp);
-       if (err < 0)
+       mac = of_get_mac_address(pdev->dev.of_node);
+       if (mac)
+               memcpy(bp->dev->dev_addr, mac, ETH_ALEN);
+       else
                macb_get_hwaddr(bp);
 
-       err = macb_get_phy_mode_dt(pdev);
+       err = of_get_phy_mode(pdev->dev.of_node);
        if (err < 0) {
                pdata = pdev->dev.platform_data;
                if (pdata && pdata->is_rmii)
@@ -1654,9 +1627,9 @@ err_out_free_irq:
 err_out_iounmap:
        iounmap(bp->regs);
 err_out_disable_clocks:
-       clk_disable(bp->hclk);
+       clk_disable_unprepare(bp->hclk);
        clk_put(bp->hclk);
-       clk_disable(bp->pclk);
+       clk_disable_unprepare(bp->pclk);
 err_out_put_pclk:
        clk_put(bp->pclk);
 err_out_free_dev:
@@ -1683,9 +1656,9 @@ static int __exit macb_remove(struct platform_device *pdev)
                unregister_netdev(dev);
                free_irq(dev->irq, dev);
                iounmap(bp->regs);
-               clk_disable(bp->hclk);
+               clk_disable_unprepare(bp->hclk);
                clk_put(bp->hclk);
-               clk_disable(bp->pclk);
+               clk_disable_unprepare(bp->pclk);
                clk_put(bp->pclk);
                free_netdev(dev);
                platform_set_drvdata(pdev, NULL);
@@ -1703,8 +1676,8 @@ static int macb_suspend(struct platform_device *pdev, pm_message_t state)
        netif_carrier_off(netdev);
        netif_device_detach(netdev);
 
-       clk_disable(bp->hclk);
-       clk_disable(bp->pclk);
+       clk_disable_unprepare(bp->hclk);
+       clk_disable_unprepare(bp->pclk);
 
        return 0;
 }
@@ -1714,8 +1687,8 @@ static int macb_resume(struct platform_device *pdev)
        struct net_device *netdev = platform_get_drvdata(pdev);
        struct macb *bp = netdev_priv(netdev);
 
-       clk_enable(bp->pclk);
-       clk_enable(bp->hclk);
+       clk_prepare_enable(bp->pclk);
+       clk_prepare_enable(bp->hclk);
 
        netif_device_attach(netdev);
 
@@ -1737,18 +1710,7 @@ static struct platform_driver macb_driver = {
        },
 };
 
-static int __init macb_init(void)
-{
-       return platform_driver_probe(&macb_driver, macb_probe);
-}
-
-static void __exit macb_exit(void)
-{
-       platform_driver_unregister(&macb_driver);
-}
-
-module_init(macb_init);
-module_exit(macb_exit);
+module_platform_driver_probe(macb_driver, macb_probe);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Cadence MACB/GEM Ethernet driver");