diff options
author | Zoltan Herpai <wigyori@uid0.hu> | 2014-03-06 00:09:30 +0000 |
---|---|---|
committer | Zoltan Herpai <wigyori@uid0.hu> | 2014-03-06 00:09:30 +0000 |
commit | ac4b9dbb3c9b056008e00ee3d02fe3dad65641b7 (patch) | |
tree | ef1ef8907c63a75c4ac441f8c95325a6d5abb9ec /target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch | |
parent | 2c771cc71f3b6aceda5fe81f44a79b724e0941d0 (diff) | |
download | mtk-20170518-ac4b9dbb3c9b056008e00ee3d02fe3dad65641b7.zip mtk-20170518-ac4b9dbb3c9b056008e00ee3d02fe3dad65641b7.tar.gz mtk-20170518-ac4b9dbb3c9b056008e00ee3d02fe3dad65641b7.tar.bz2 |
sunxi: driver refresh for 3.13 - update gmac / mmc / usb / ahci drivers to follow mainline dev trees - add driver for spi - update clock support - update a31 support - move to new DT compats where appropriate - re-order patchqueue where needed - verified working a20 smp - move most DTSes off files/ - update defconfig
Signed-off-by: Zoltan HERPAI <wigyori@uid0.hu>
SVN-Revision: 39782
Diffstat (limited to 'target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch')
-rw-r--r-- | target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch b/target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch new file mode 100644 index 0000000..188eaf0 --- /dev/null +++ b/target/linux/sunxi/patches-3.13/153-2-stmmac-add-support-for-optional-reset-control.patch @@ -0,0 +1,158 @@ +From c5e4ddbdfa1134a36589c1466ed4abb85fe6f976 Mon Sep 17 00:00:00 2001 +From: Chen-Yu Tsai <wens@csie.org> +Date: Fri, 17 Jan 2014 21:24:41 +0800 +Subject: [PATCH] net: stmmac: Add support for optional reset control + +The DWMAC has a reset assert line, which is used on some SoCs. Add an +optional reset control to stmmac driver core. + +To support reset control deferred probing, this patch changes the driver +probe function to return the actual error, instead of just -EINVAL. + +Signed-off-by: Chen-Yu Tsai <wens@csie.org> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + Documentation/devicetree/bindings/net/stmmac.txt | 3 +++ + drivers/net/ethernet/stmicro/stmmac/Kconfig | 1 + + drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 ++ + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 19 ++++++++++++++++++- + drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 4 ++-- + drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 4 ++-- + 6 files changed, 28 insertions(+), 5 deletions(-) + +diff --git a/Documentation/devicetree/bindings/net/stmmac.txt b/Documentation/devicetree/bindings/net/stmmac.txt +index eba0e5e..d132513 100644 +--- a/Documentation/devicetree/bindings/net/stmmac.txt ++++ b/Documentation/devicetree/bindings/net/stmmac.txt +@@ -30,6 +30,9 @@ Required properties: + + Optional properties: + - mac-address: 6 bytes, mac address ++- resets: Should contain a phandle to the STMMAC reset signal, if any ++- reset-names: Should contain the reset signal name "stmmaceth", if a ++ reset phandle is given + + Examples: + +diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig +index 6e52c0f..b59d1ef 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig ++++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig +@@ -5,6 +5,7 @@ config STMMAC_ETH + select PHYLIB + select CRC32 + select PTP_1588_CLOCK ++ select RESET_CONTROLLER + ---help--- + This is the driver for the Ethernet IPs are built around a + Synopsys IP Core and only tested on the STMicroelectronics +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h +index 73709e9..c1c141f 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h +@@ -32,6 +32,7 @@ + #include <linux/pci.h> + #include "common.h" + #include <linux/ptp_clock_kernel.h> ++#include <linux/reset.h> + + struct stmmac_priv { + /* Frequently used values are kept adjacent for cache effect */ +@@ -91,6 +92,7 @@ struct stmmac_priv { + int wolopts; + int wol_irq; + struct clk *stmmac_clk; ++ struct reset_control *stmmac_rst; + int clk_csr; + struct timer_list eee_ctrl_timer; + int lpi_irq; +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +index 0d2c4cb..0c5c120 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +@@ -51,6 +51,7 @@ + #include <linux/net_tstamp.h> + #include "stmmac_ptp.h" + #include "stmmac.h" ++#include <linux/reset.h> + + #define STMMAC_ALIGN(x) L1_CACHE_ALIGN(x) + #define JUMBO_LEN 9000 +@@ -2728,10 +2729,24 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, + if (IS_ERR(priv->stmmac_clk)) { + dev_warn(priv->device, "%s: warning: cannot get CSR clock\n", + __func__); ++ ret = PTR_ERR(priv->stmmac_clk); + goto error_clk_get; + } + clk_prepare_enable(priv->stmmac_clk); + ++ priv->stmmac_rst = devm_reset_control_get(priv->device, ++ STMMAC_RESOURCE_NAME); ++ if (IS_ERR(priv->stmmac_rst)) { ++ if (PTR_ERR(priv->stmmac_rst) == -EPROBE_DEFER) { ++ ret = -EPROBE_DEFER; ++ goto error_hw_init; ++ } ++ dev_info(priv->device, "no reset control found\n"); ++ priv->stmmac_rst = NULL; ++ } ++ if (priv->stmmac_rst) ++ reset_control_deassert(priv->stmmac_rst); ++ + /* Init MAC and get the capabilities */ + ret = stmmac_hw_init(priv); + if (ret) +@@ -2808,7 +2823,7 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, + error_clk_get: + free_netdev(ndev); + +- return NULL; ++ return ERR_PTR(ret); + } + + /** +@@ -2832,6 +2847,8 @@ int stmmac_dvr_remove(struct net_device *ndev) + stmmac_mdio_unregister(ndev); + netif_carrier_off(ndev); + unregister_netdev(ndev); ++ if (priv->stmmac_rst) ++ reset_control_assert(priv->stmmac_rst); + clk_disable_unprepare(priv->stmmac_clk); + free_netdev(ndev); + +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +index 37ba2e0..2916089 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +@@ -100,9 +100,9 @@ static int stmmac_pci_probe(struct pci_dev *pdev, + stmmac_default_data(); + + priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat, addr); +- if (!priv) { ++ if (IS_ERR(priv)) { + pr_err("%s: main driver probe failed", __func__); +- ret = -ENODEV; ++ ret = PTR_ERR(priv); + goto err_out; + } + priv->dev->irq = pdev->irq; +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +index 6d0bf22..cc6b89a7 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -152,9 +152,9 @@ static int stmmac_pltfr_probe(struct platform_device *pdev) + } + + priv = stmmac_dvr_probe(&(pdev->dev), plat_dat, addr); +- if (!priv) { ++ if (IS_ERR(priv)) { + pr_err("%s: main driver probe failed", __func__); +- return -ENODEV; ++ return PTR_ERR(priv); + } + + /* Get MAC address if available (DT) */ +-- +1.8.5.5 + |