diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-09-15 02:24:53 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-09-15 02:24:53 -0400 |
commit | d4b80afbba49e968623330f1336da8c724da8aad (patch) | |
tree | a9478bd77d8b001a6a7119328d34e9666d7bfe93 /drivers/net/ethernet/synopsys/dwc_eth_qos.c | |
parent | fcd709ef20a9d83bdb7524d27cd6719dac8690a0 (diff) | |
parent | 4cea8776571b18db7485930cb422faa739580c8c (diff) |
Merge branch 'linus' into x86/asm, to pick up recent fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/synopsys/dwc_eth_qos.c')
-rw-r--r-- | drivers/net/ethernet/synopsys/dwc_eth_qos.c | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/drivers/net/ethernet/synopsys/dwc_eth_qos.c b/drivers/net/ethernet/synopsys/dwc_eth_qos.c index 9f159a775af3..4490ebaed127 100644 --- a/drivers/net/ethernet/synopsys/dwc_eth_qos.c +++ b/drivers/net/ethernet/synopsys/dwc_eth_qos.c | |||
@@ -1246,7 +1246,7 @@ static int dwceqos_mii_init(struct net_local *lp) | |||
1246 | lp->mii_bus->read = &dwceqos_mdio_read; | 1246 | lp->mii_bus->read = &dwceqos_mdio_read; |
1247 | lp->mii_bus->write = &dwceqos_mdio_write; | 1247 | lp->mii_bus->write = &dwceqos_mdio_write; |
1248 | lp->mii_bus->priv = lp; | 1248 | lp->mii_bus->priv = lp; |
1249 | lp->mii_bus->parent = &lp->ndev->dev; | 1249 | lp->mii_bus->parent = &lp->pdev->dev; |
1250 | 1250 | ||
1251 | of_address_to_resource(lp->pdev->dev.of_node, 0, &res); | 1251 | of_address_to_resource(lp->pdev->dev.of_node, 0, &res); |
1252 | snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%.8llx", | 1252 | snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%.8llx", |
@@ -1622,13 +1622,7 @@ static void dwceqos_init_hw(struct net_local *lp) | |||
1622 | DWCEQOS_MMC_CTRL_RSTONRD); | 1622 | DWCEQOS_MMC_CTRL_RSTONRD); |
1623 | dwceqos_enable_mmc_interrupt(lp); | 1623 | dwceqos_enable_mmc_interrupt(lp); |
1624 | 1624 | ||
1625 | /* Enable Interrupts */ | 1625 | dwceqos_write(lp, REG_DWCEQOS_DMA_CH0_IE, 0); |
1626 | dwceqos_write(lp, REG_DWCEQOS_DMA_CH0_IE, | ||
1627 | DWCEQOS_DMA_CH0_IE_NIE | | ||
1628 | DWCEQOS_DMA_CH0_IE_RIE | DWCEQOS_DMA_CH0_IE_TIE | | ||
1629 | DWCEQOS_DMA_CH0_IE_AIE | | ||
1630 | DWCEQOS_DMA_CH0_IE_FBEE); | ||
1631 | |||
1632 | dwceqos_write(lp, REG_DWCEQOS_MAC_IE, 0); | 1626 | dwceqos_write(lp, REG_DWCEQOS_MAC_IE, 0); |
1633 | 1627 | ||
1634 | dwceqos_write(lp, REG_DWCEQOS_MAC_CFG, DWCEQOS_MAC_CFG_IPC | | 1628 | dwceqos_write(lp, REG_DWCEQOS_MAC_CFG, DWCEQOS_MAC_CFG_IPC | |
@@ -1905,6 +1899,15 @@ static int dwceqos_open(struct net_device *ndev) | |||
1905 | netif_start_queue(ndev); | 1899 | netif_start_queue(ndev); |
1906 | tasklet_enable(&lp->tx_bdreclaim_tasklet); | 1900 | tasklet_enable(&lp->tx_bdreclaim_tasklet); |
1907 | 1901 | ||
1902 | /* Enable Interrupts -- do this only after we enable NAPI and the | ||
1903 | * tasklet. | ||
1904 | */ | ||
1905 | dwceqos_write(lp, REG_DWCEQOS_DMA_CH0_IE, | ||
1906 | DWCEQOS_DMA_CH0_IE_NIE | | ||
1907 | DWCEQOS_DMA_CH0_IE_RIE | DWCEQOS_DMA_CH0_IE_TIE | | ||
1908 | DWCEQOS_DMA_CH0_IE_AIE | | ||
1909 | DWCEQOS_DMA_CH0_IE_FBEE); | ||
1910 | |||
1908 | return 0; | 1911 | return 0; |
1909 | } | 1912 | } |
1910 | 1913 | ||
@@ -2850,25 +2853,17 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2850 | 2853 | ||
2851 | ndev->features = ndev->hw_features; | 2854 | ndev->features = ndev->hw_features; |
2852 | 2855 | ||
2853 | netif_napi_add(ndev, &lp->napi, dwceqos_rx_poll, NAPI_POLL_WEIGHT); | ||
2854 | |||
2855 | ret = register_netdev(ndev); | ||
2856 | if (ret) { | ||
2857 | dev_err(&pdev->dev, "Cannot register net device, aborting.\n"); | ||
2858 | goto err_out_clk_dis_aper; | ||
2859 | } | ||
2860 | |||
2861 | lp->phy_ref_clk = devm_clk_get(&pdev->dev, "phy_ref_clk"); | 2856 | lp->phy_ref_clk = devm_clk_get(&pdev->dev, "phy_ref_clk"); |
2862 | if (IS_ERR(lp->phy_ref_clk)) { | 2857 | if (IS_ERR(lp->phy_ref_clk)) { |
2863 | dev_err(&pdev->dev, "phy_ref_clk clock not found.\n"); | 2858 | dev_err(&pdev->dev, "phy_ref_clk clock not found.\n"); |
2864 | ret = PTR_ERR(lp->phy_ref_clk); | 2859 | ret = PTR_ERR(lp->phy_ref_clk); |
2865 | goto err_out_unregister_netdev; | 2860 | goto err_out_clk_dis_aper; |
2866 | } | 2861 | } |
2867 | 2862 | ||
2868 | ret = clk_prepare_enable(lp->phy_ref_clk); | 2863 | ret = clk_prepare_enable(lp->phy_ref_clk); |
2869 | if (ret) { | 2864 | if (ret) { |
2870 | dev_err(&pdev->dev, "Unable to enable device clock.\n"); | 2865 | dev_err(&pdev->dev, "Unable to enable device clock.\n"); |
2871 | goto err_out_unregister_netdev; | 2866 | goto err_out_clk_dis_aper; |
2872 | } | 2867 | } |
2873 | 2868 | ||
2874 | lp->phy_node = of_parse_phandle(lp->pdev->dev.of_node, | 2869 | lp->phy_node = of_parse_phandle(lp->pdev->dev.of_node, |
@@ -2877,7 +2872,7 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2877 | ret = of_phy_register_fixed_link(lp->pdev->dev.of_node); | 2872 | ret = of_phy_register_fixed_link(lp->pdev->dev.of_node); |
2878 | if (ret < 0) { | 2873 | if (ret < 0) { |
2879 | dev_err(&pdev->dev, "invalid fixed-link"); | 2874 | dev_err(&pdev->dev, "invalid fixed-link"); |
2880 | goto err_out_unregister_clk_notifier; | 2875 | goto err_out_clk_dis_phy; |
2881 | } | 2876 | } |
2882 | 2877 | ||
2883 | lp->phy_node = of_node_get(lp->pdev->dev.of_node); | 2878 | lp->phy_node = of_node_get(lp->pdev->dev.of_node); |
@@ -2886,7 +2881,7 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2886 | ret = of_get_phy_mode(lp->pdev->dev.of_node); | 2881 | ret = of_get_phy_mode(lp->pdev->dev.of_node); |
2887 | if (ret < 0) { | 2882 | if (ret < 0) { |
2888 | dev_err(&lp->pdev->dev, "error in getting phy i/f\n"); | 2883 | dev_err(&lp->pdev->dev, "error in getting phy i/f\n"); |
2889 | goto err_out_unregister_clk_notifier; | 2884 | goto err_out_clk_dis_phy; |
2890 | } | 2885 | } |
2891 | 2886 | ||
2892 | lp->phy_interface = ret; | 2887 | lp->phy_interface = ret; |
@@ -2894,14 +2889,14 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2894 | ret = dwceqos_mii_init(lp); | 2889 | ret = dwceqos_mii_init(lp); |
2895 | if (ret) { | 2890 | if (ret) { |
2896 | dev_err(&lp->pdev->dev, "error in dwceqos_mii_init\n"); | 2891 | dev_err(&lp->pdev->dev, "error in dwceqos_mii_init\n"); |
2897 | goto err_out_unregister_clk_notifier; | 2892 | goto err_out_clk_dis_phy; |
2898 | } | 2893 | } |
2899 | 2894 | ||
2900 | ret = dwceqos_mii_probe(ndev); | 2895 | ret = dwceqos_mii_probe(ndev); |
2901 | if (ret != 0) { | 2896 | if (ret != 0) { |
2902 | netdev_err(ndev, "mii_probe fail.\n"); | 2897 | netdev_err(ndev, "mii_probe fail.\n"); |
2903 | ret = -ENXIO; | 2898 | ret = -ENXIO; |
2904 | goto err_out_unregister_clk_notifier; | 2899 | goto err_out_clk_dis_phy; |
2905 | } | 2900 | } |
2906 | 2901 | ||
2907 | dwceqos_set_umac_addr(lp, lp->ndev->dev_addr, 0); | 2902 | dwceqos_set_umac_addr(lp, lp->ndev->dev_addr, 0); |
@@ -2919,7 +2914,7 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2919 | if (ret) { | 2914 | if (ret) { |
2920 | dev_err(&lp->pdev->dev, "Unable to retrieve DT, error %d\n", | 2915 | dev_err(&lp->pdev->dev, "Unable to retrieve DT, error %d\n", |
2921 | ret); | 2916 | ret); |
2922 | goto err_out_unregister_clk_notifier; | 2917 | goto err_out_clk_dis_phy; |
2923 | } | 2918 | } |
2924 | dev_info(&lp->pdev->dev, "pdev->id %d, baseaddr 0x%08lx, irq %d\n", | 2919 | dev_info(&lp->pdev->dev, "pdev->id %d, baseaddr 0x%08lx, irq %d\n", |
2925 | pdev->id, ndev->base_addr, ndev->irq); | 2920 | pdev->id, ndev->base_addr, ndev->irq); |
@@ -2929,18 +2924,24 @@ static int dwceqos_probe(struct platform_device *pdev) | |||
2929 | if (ret) { | 2924 | if (ret) { |
2930 | dev_err(&lp->pdev->dev, "Unable to request IRQ %d, error %d\n", | 2925 | dev_err(&lp->pdev->dev, "Unable to request IRQ %d, error %d\n", |
2931 | ndev->irq, ret); | 2926 | ndev->irq, ret); |
2932 | goto err_out_unregister_clk_notifier; | 2927 | goto err_out_clk_dis_phy; |
2933 | } | 2928 | } |
2934 | 2929 | ||
2935 | if (netif_msg_probe(lp)) | 2930 | if (netif_msg_probe(lp)) |
2936 | netdev_dbg(ndev, "net_local@%p\n", lp); | 2931 | netdev_dbg(ndev, "net_local@%p\n", lp); |
2937 | 2932 | ||
2933 | netif_napi_add(ndev, &lp->napi, dwceqos_rx_poll, NAPI_POLL_WEIGHT); | ||
2934 | |||
2935 | ret = register_netdev(ndev); | ||
2936 | if (ret) { | ||
2937 | dev_err(&pdev->dev, "Cannot register net device, aborting.\n"); | ||
2938 | goto err_out_clk_dis_phy; | ||
2939 | } | ||
2940 | |||
2938 | return 0; | 2941 | return 0; |
2939 | 2942 | ||
2940 | err_out_unregister_clk_notifier: | 2943 | err_out_clk_dis_phy: |
2941 | clk_disable_unprepare(lp->phy_ref_clk); | 2944 | clk_disable_unprepare(lp->phy_ref_clk); |
2942 | err_out_unregister_netdev: | ||
2943 | unregister_netdev(ndev); | ||
2944 | err_out_clk_dis_aper: | 2945 | err_out_clk_dis_aper: |
2945 | clk_disable_unprepare(lp->apb_pclk); | 2946 | clk_disable_unprepare(lp->apb_pclk); |
2946 | err_out_free_netdev: | 2947 | err_out_free_netdev: |