From: Giuseppe Cavallaro <hidden> Date: 2016-03-11 13:27:02
These two patches are to fix the recent regressions raised
when test the stmmac on some platforms due to broken MDIO/PHY
management.
V2: use is_pseudo_fixed_link
V3: enforce the driver to support other configurations
The mdio bus will be allocated in case of a phy transceiver is on board;
it will be NULL if the fixed-link is configured.
If there is the "snps,dwmac-mdio" sub-node the mdio will be allocated
in any case (for DSA, mdio must be registered even if fixed-link).
The table below sums the supported configurations:
-------------------------------
snps,phy-addr | Y
-------------------------------
phy-handle | Y
-------------------------------
fixed-link | N
-------------------------------
snps,dwmac-mdio |
even if | Y
fixed-link |
-------------------------------
Giuseppe Cavallaro (2):
Revert "stmmac: Fix 'eth0: No PHY found' regression"
stmmac: fix MDIO settings
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 10 +--
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 84 +++++++++++++++-----
include/linux/stmmac.h | 1 -
4 files changed, 67 insertions(+), 39 deletions(-)
--
1.7.4.4
From: Giuseppe Cavallaro <hidden> Date: 2016-03-11 13:27:02
This reverts commit 88f8b1bb41c6208f81b6a480244533ded7b59493.
due to problems on GeekBox and Banana Pi M1 board when
connected to a real transceiver instead of a switch via
fixed-link.
Signed-off-by: Giuseppe Cavallaro <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Andreas Färber <afaerber@suse.de>
Cc: Frank Schäfer <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 11 ++++++++++-
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 9 +--------
include/linux/stmmac.h | 1 -
3 files changed, 11 insertions(+), 10 deletions(-)
@@ -141,19 +140,13 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)plat->phy_node=of_node_get(np);}-for_each_child_of_node(np,child_node)-if(of_device_is_compatible(child_node,"snps,dwmac-mdio")){-plat->mdio_node=child_node;-break;-}-/* "snps,phy-addr" is not a standard property. Mark it as deprecated*andwarnofitsuse.Removethiswhenphynodesupportisadded.*/if(of_property_read_u32(np,"snps,phy-addr",&plat->phy_addr)==0)dev_warn(&pdev->dev,"snps,phy-addr property is deprecated\n");-if((plat->phy_node&&!of_phy_is_fixed_link(np))||!plat->mdio_node)+if((plat->phy_node&&!of_phy_is_fixed_link(np))||plat->phy_bus_name)plat->mdio_bus_data=NULL;elseplat->mdio_bus_data=
From: Giuseppe Cavallaro <hidden> Date: 2016-03-11 13:27:02
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources considering
DSA case (+ fixed-link).
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +-----
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 77 ++++++++++++++++----
include/linux/stmmac.h | 2 +-
4 files changed, 68 insertions(+), 41 deletions(-)
@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)*/boolstmmac_eee_init(structstmmac_priv*priv){-char*phy_bus_name=priv->plat->phy_bus_name;unsignedlongflags;boolret=false;
@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)gotoout;/* Never init EEE in case of a switch is attached */-if(phy_bus_name&&(!strcmp(phy_bus_name,"fixed")))+if(priv->phydev->is_pseudo_fixed_link)gotoout;/* MAC core supports the EEE feature. */
@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev)phydev=of_phy_connect(dev,priv->plat->phy_node,&stmmac_adjust_link,0,interface);}else{-if(priv->plat->phy_bus_name)-snprintf(bus_id,MII_BUS_ID_SIZE,"%s-%x",-priv->plat->phy_bus_name,priv->plat->bus_id);-else-snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",-priv->plat->bus_id);+snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",+priv->plat->bus_id);snprintf(phy_id_fmt,MII_BUS_ID_SIZE+3,PHY_ID_FMT,bus_id,priv->plat->phy_addr);
@@ -96,6 +96,66 @@ static int dwmac1000_validate_ucast_entries(int ucast_entries)}/**+*stmmac_dt_phy-parsedevice-treedriverparameterstoallocatePHYresources+*@plat:driverdataplatformstructure+*@np:devicetreenode+*@dev:devicepointer+*Description:+*Themdiobuswillbeallocatedincaseofaphytransceiverisonboard;+*itwillbeNULLifthefixed-linkisconfigured.+*Ifthereisthe"snps,dwmac-mdio"sub-nodethemdiowillbeallocated+*inanycase(forDSA,mdiomustberegisteredeveniffixed-link).+*Thetablebelowsumsthesupportedconfigurations:+*-------------------------------+*snps,phy-addr|Y+*-------------------------------+*phy-handle|Y+*-------------------------------+*fixed-link|N+*-------------------------------+*snps,dwmac-mdio|+*evenif|Y+*fixed-link|+*-------------------------------+*+*Itreturnstrueincaseofthemdioneedstoberegisteredinthemain.+*/+staticboolstmmac_dt_phy(structplat_stmmacenet_data*plat,+structdevice_node*np,structdevice*dev)+{+boolret=true;++/* If phy-handle property is passed from DT, use it as the PHY */+plat->phy_node=of_parse_phandle(np,"phy-handle",0);+if(plat->phy_node)+dev_dbg(dev,"Found phy-handle subnode\n");++/* If phy-handle is not specified, check if we have a fixed-phy */+if(!plat->phy_node&&of_phy_is_fixed_link(np)){+if((of_phy_register_fixed_link(np)<0))+return-ENODEV;++dev_dbg(dev,"Found fixed-link subnode\n");+plat->phy_node=of_node_get(np);++ret=false;+}++/* If snps,dwmac-mdio is passed from DT, always register the MDIO */+for_each_child_of_node(np,plat->mdio_node){+if(of_device_is_compatible(plat->mdio_node,"snps,dwmac-mdio"))+break;+}++if(plat->mdio_node){+dev_dbg(dev,"Found MDIO subnode\n");+ret=true;+}++returnret;+}++/***stmmac_probe_config_dt-parsedevice-treedriverparameters*@pdev:platform_devicestructure*@plat:driverdataplatformstructure
@@ -129,30 +189,19 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)/* Default to phy auto-detection */plat->phy_addr=-1;-/* If we find a phy-handle property, use it as the PHY */-plat->phy_node=of_parse_phandle(np,"phy-handle",0);--/* If phy-handle is not specified, check if we have a fixed-phy */-if(!plat->phy_node&&of_phy_is_fixed_link(np)){-if((of_phy_register_fixed_link(np)<0))-returnERR_PTR(-ENODEV);--plat->phy_node=of_node_get(np);-}-/* "snps,phy-addr" is not a standard property. Mark it as deprecated*andwarnofitsuse.Removethiswhenphynodesupportisadded.*/if(of_property_read_u32(np,"snps,phy-addr",&plat->phy_addr)==0)dev_warn(&pdev->dev,"snps,phy-addr property is deprecated\n");-if((plat->phy_node&&!of_phy_is_fixed_link(np))||plat->phy_bus_name)-plat->mdio_bus_data=NULL;-else+/* To Configure PHY by using all device-tree supported properties */+if(stmmac_dt_phy(plat,np,&pdev->dev)){plat->mdio_bus_data=devm_kzalloc(&pdev->dev,sizeof(structstmmac_mdio_bus_data),GFP_KERNEL);+}of_property_read_u32(np,"tx-fifo-depth",&plat->tx_fifo_size);
From: Phil Reid <hidden> Date: 2016-03-11 15:15:07
G'day Giuseppe,
I wont be able to test until Monday.
Concept looks ok to me except for comment below.
On 11/03/2016 9:33 PM, Giuseppe Cavallaro wrote:
quoted hunk
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources considering
DSA case (+ fixed-link).
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +-----
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 77 ++++++++++++++++----
include/linux/stmmac.h | 2 +-
4 files changed, 68 insertions(+), 41 deletions(-)
@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)*/boolstmmac_eee_init(structstmmac_priv*priv){-char*phy_bus_name=priv->plat->phy_bus_name;unsignedlongflags;boolret=false;
@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)gotoout;/* Never init EEE in case of a switch is attached */-if(phy_bus_name&&(!strcmp(phy_bus_name,"fixed")))+if(priv->phydev->is_pseudo_fixed_link)gotoout;/* MAC core supports the EEE feature. */
@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev)phydev=of_phy_connect(dev,priv->plat->phy_node,&stmmac_adjust_link,0,interface);}else{-if(priv->plat->phy_bus_name)-snprintf(bus_id,MII_BUS_ID_SIZE,"%s-%x",-priv->plat->phy_bus_name,priv->plat->bus_id);-else-snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",-priv->plat->bus_id);+snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",+priv->plat->bus_id);snprintf(phy_id_fmt,MII_BUS_ID_SIZE+3,PHY_ID_FMT,bus_id,priv->plat->phy_addr);
@@ -96,6 +96,66 @@ static int dwmac1000_validate_ucast_entries(int ucast_entries)}/**+*stmmac_dt_phy-parsedevice-treedriverparameterstoallocatePHYresources+*@plat:driverdataplatformstructure+*@np:devicetreenode+*@dev:devicepointer+*Description:+*Themdiobuswillbeallocatedincaseofaphytransceiverisonboard;+*itwillbeNULLifthefixed-linkisconfigured.+*Ifthereisthe"snps,dwmac-mdio"sub-nodethemdiowillbeallocated+*inanycase(forDSA,mdiomustberegisteredeveniffixed-link).+*Thetablebelowsumsthesupportedconfigurations:+*-------------------------------+*snps,phy-addr|Y+*-------------------------------+*phy-handle|Y+*-------------------------------+*fixed-link|N+*-------------------------------+*snps,dwmac-mdio|+*evenif|Y+*fixed-link|+*-------------------------------+*+*Itreturnstrueincaseofthemdioneedstoberegisteredinthemain.+*/+staticboolstmmac_dt_phy(structplat_stmmacenet_data*plat,+structdevice_node*np,structdevice*dev)+{+boolret=true;++/* If phy-handle property is passed from DT, use it as the PHY */+plat->phy_node=of_parse_phandle(np,"phy-handle",0);+if(plat->phy_node)+dev_dbg(dev,"Found phy-handle subnode\n");++/* If phy-handle is not specified, check if we have a fixed-phy */+if(!plat->phy_node&&of_phy_is_fixed_link(np)){+if((of_phy_register_fixed_link(np)<0))+return-ENODEV;++dev_dbg(dev,"Found fixed-link subnode\n");+plat->phy_node=of_node_get(np);++ret=false;+}++/* If snps,dwmac-mdio is passed from DT, always register the MDIO */+for_each_child_of_node(np,plat->mdio_node){+if(of_device_is_compatible(plat->mdio_node,"snps,dwmac-mdio"))+break;+}+
Won't this always result in plat->mdio_node being assigned to something if np has a child.
Regardless of the compatible string.
Which is why I had the child_node temp.
Still learning so may be missing something.
@@ -129,30 +189,19 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) /* Default to phy auto-detection */ plat->phy_addr = -1;- /* If we find a phy-handle property, use it as the PHY */- plat->phy_node = of_parse_phandle(np, "phy-handle", 0);-- /* If phy-handle is not specified, check if we have a fixed-phy */- if (!plat->phy_node && of_phy_is_fixed_link(np)) {- if ((of_phy_register_fixed_link(np) < 0))- return ERR_PTR(-ENODEV);-- plat->phy_node = of_node_get(np);- }- /* "snps,phy-addr" is not a standard property. Mark it as deprecated * and warn of its use. Remove this when phy node support is added. */ if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr) == 0) dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n");- if ((plat->phy_node && !of_phy_is_fixed_link(np)) || plat->phy_bus_name)- plat->mdio_bus_data = NULL;- else+ /* To Configure PHY by using all device-tree supported properties */+ if (stmmac_dt_phy(plat, np, &pdev->dev)) { plat->mdio_bus_data = devm_kzalloc(&pdev->dev, sizeof(struct stmmac_mdio_bus_data), GFP_KERNEL);+ } of_property_read_u32(np, "tx-fifo-depth", &plat->tx_fifo_size);
From: Giuseppe CAVALLARO <hidden> Date: 2016-03-11 15:33:07
On 3/11/2016 4:14 PM, Phil Reid wrote:
G'day Giuseppe,
I wont be able to test until Monday.
Concept looks ok to me except for comment below.
On 11/03/2016 9:33 PM, Giuseppe Cavallaro wrote:
quoted
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources
considering
DSA case (+ fixed-link).
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +-----
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 77
++++++++++++++++----
include/linux/stmmac.h | 2 +-
4 files changed, 68 insertions(+), 41 deletions(-)
@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)*/boolstmmac_eee_init(structstmmac_priv*priv){-char*phy_bus_name=priv->plat->phy_bus_name;unsignedlongflags;boolret=false;
@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)gotoout;/* Never init EEE in case of a switch is attached */-if(phy_bus_name&&(!strcmp(phy_bus_name,"fixed")))+if(priv->phydev->is_pseudo_fixed_link)gotoout;/* MAC core supports the EEE feature. */
@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev)phydev=of_phy_connect(dev,priv->plat->phy_node,&stmmac_adjust_link,0,interface);}else{-if(priv->plat->phy_bus_name)-snprintf(bus_id,MII_BUS_ID_SIZE,"%s-%x",-priv->plat->phy_bus_name,priv->plat->bus_id);-else-snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",-priv->plat->bus_id);+snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",+priv->plat->bus_id);snprintf(phy_id_fmt,MII_BUS_ID_SIZE+3,PHY_ID_FMT,bus_id,priv->plat->phy_addr);
@@ -96,6 +96,66 @@ static int dwmac1000_validate_ucast_entries(int
ucast_entries)
}
/**
+ * stmmac_dt_phy - parse device-tree driver parameters to allocate
PHY resources
+ * @plat: driver data platform structure
+ * @np: device tree node
+ * @dev: device pointer
+ * Description:
+ * The mdio bus will be allocated in case of a phy transceiver is on
board;
+ * it will be NULL if the fixed-link is configured.
+ * If there is the "snps,dwmac-mdio" sub-node the mdio will be allocated
+ * in any case (for DSA, mdio must be registered even if fixed-link).
+ * The table below sums the supported configurations:
+ * -------------------------------
+ * snps,phy-addr | Y
+ * -------------------------------
+ * phy-handle | Y
+ * -------------------------------
+ * fixed-link | N
+ * -------------------------------
+ * snps,dwmac-mdio |
+ * even if | Y
+ * fixed-link |
+ * -------------------------------
+ *
+ * It returns true in case of the mdio needs to be registered in the
main.
+ */
+static bool stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+ struct device_node *np, struct device *dev)
+{
+ bool ret = true;
+
+ /* If phy-handle property is passed from DT, use it as the PHY */
+ plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
+ if (plat->phy_node)
+ dev_dbg(dev, "Found phy-handle subnode\n");
+
+ /* If phy-handle is not specified, check if we have a fixed-phy */
+ if (!plat->phy_node && of_phy_is_fixed_link(np)) {
+ if ((of_phy_register_fixed_link(np) < 0))
+ return -ENODEV;
+
+ dev_dbg(dev, "Found fixed-link subnode\n");
+ plat->phy_node = of_node_get(np);
+
+ ret = false;
+ }
+
+ /* If snps,dwmac-mdio is passed from DT, always register the MDIO */
+ for_each_child_of_node(np, plat->mdio_node) {
+ if (of_device_is_compatible(plat->mdio_node, "snps,dwmac-mdio"))
+ break;
+ }
+
Won't this always result in plat->mdio_node being assigned to something
if np has a child.
Regardless of the compatible string.
Which is why I had the child_node temp.
Still learning so may be missing something.
hmm, i think so, let me know as soon as you test it so I can
rework the patch and send a v4.
Thanks
peppe
*pdev, const char **mac)
/* Default to phy auto-detection */
plat->phy_addr = -1;
- /* If we find a phy-handle property, use it as the PHY */
- plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
-
- /* If phy-handle is not specified, check if we have a fixed-phy */
- if (!plat->phy_node && of_phy_is_fixed_link(np)) {
- if ((of_phy_register_fixed_link(np) < 0))
- return ERR_PTR(-ENODEV);
-
- plat->phy_node = of_node_get(np);
- }
-
/* "snps,phy-addr" is not a standard property. Mark it as
deprecated
* and warn of its use. Remove this when phy node support is added.
*/
if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr)
== 0)
dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n");
- if ((plat->phy_node && !of_phy_is_fixed_link(np)) ||
plat->phy_bus_name)
- plat->mdio_bus_data = NULL;
- else
+ /* To Configure PHY by using all device-tree supported properties */
+ if (stmmac_dt_phy(plat, np, &pdev->dev)) {
plat->mdio_bus_data =
devm_kzalloc(&pdev->dev,
sizeof(struct stmmac_mdio_bus_data),
GFP_KERNEL);
+ }
of_property_read_u32(np, "tx-fifo-depth", &plat->tx_fifo_size);
From: Frank Schäfer <hidden> Date: 2016-03-12 10:48:20
Hi Giuseppe,
Am 11.03.2016 um 14:33 schrieb Giuseppe Cavallaro:
quoted hunk
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources considering
DSA case (+ fixed-link).
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +-----
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 77 ++++++++++++++++----
include/linux/stmmac.h | 2 +-
4 files changed, 68 insertions(+), 41 deletions(-)
@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)*/boolstmmac_eee_init(structstmmac_priv*priv){-char*phy_bus_name=priv->plat->phy_bus_name;unsignedlongflags;boolret=false;
@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)gotoout;/* Never init EEE in case of a switch is attached */-if(phy_bus_name&&(!strcmp(phy_bus_name,"fixed")))+if(priv->phydev->is_pseudo_fixed_link)gotoout;/* MAC core supports the EEE feature. */
@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev)phydev=of_phy_connect(dev,priv->plat->phy_node,&stmmac_adjust_link,0,interface);}else{-if(priv->plat->phy_bus_name)-snprintf(bus_id,MII_BUS_ID_SIZE,"%s-%x",-priv->plat->phy_bus_name,priv->plat->bus_id);-else-snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",-priv->plat->bus_id);+snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",+priv->plat->bus_id);snprintf(phy_id_fmt,MII_BUS_ID_SIZE+3,PHY_ID_FMT,bus_id,priv->plat->phy_addr);
@@ -96,6 +96,66 @@ static int dwmac1000_validate_ucast_entries(int ucast_entries)}/**+*stmmac_dt_phy-parsedevice-treedriverparameterstoallocatePHYresources+*@plat:driverdataplatformstructure+*@np:devicetreenode+*@dev:devicepointer+*Description:+*Themdiobuswillbeallocatedincaseofaphytransceiverisonboard;+*itwillbeNULLifthefixed-linkisconfigured.+*Ifthereisthe"snps,dwmac-mdio"sub-nodethemdiowillbeallocated+*inanycase(forDSA,mdiomustberegisteredeveniffixed-link).+*Thetablebelowsumsthesupportedconfigurations:+*-------------------------------+*snps,phy-addr|Y+*-------------------------------+*phy-handle|Y+*-------------------------------+*fixed-link|N+*-------------------------------+*snps,dwmac-mdio|+*evenif|Y+*fixed-link|+*-------------------------------+*+*Itreturnstrueincaseofthemdioneedstoberegisteredinthemain.+*/+staticboolstmmac_dt_phy(structplat_stmmacenet_data*plat,+structdevice_node*np,structdevice*dev)+{+boolret=true;++/* If phy-handle property is passed from DT, use it as the PHY */+plat->phy_node=of_parse_phandle(np,"phy-handle",0);+if(plat->phy_node)+dev_dbg(dev,"Found phy-handle subnode\n");++/* If phy-handle is not specified, check if we have a fixed-phy */+if(!plat->phy_node&&of_phy_is_fixed_link(np)){+if((of_phy_register_fixed_link(np)<0))+return-ENODEV;++dev_dbg(dev,"Found fixed-link subnode\n");+plat->phy_node=of_node_get(np);++ret=false;+}++/* If snps,dwmac-mdio is passed from DT, always register the MDIO */+for_each_child_of_node(np,plat->mdio_node){+if(of_device_is_compatible(plat->mdio_node,"snps,dwmac-mdio"))+break;+}++if(plat->mdio_node){+dev_dbg(dev,"Found MDIO subnode\n");+ret=true;+}++returnret;+}++/***stmmac_probe_config_dt-parsedevice-treedriverparameters*@pdev:platform_devicestructure*@plat:driverdataplatformstructure
@@ -129,30 +189,19 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)/* Default to phy auto-detection */plat->phy_addr=-1;-/* If we find a phy-handle property, use it as the PHY */-plat->phy_node=of_parse_phandle(np,"phy-handle",0);--/* If phy-handle is not specified, check if we have a fixed-phy */-if(!plat->phy_node&&of_phy_is_fixed_link(np)){-if((of_phy_register_fixed_link(np)<0))-returnERR_PTR(-ENODEV);--plat->phy_node=of_node_get(np);-}-/* "snps,phy-addr" is not a standard property. Mark it as deprecated*andwarnofitsuse.Removethiswhenphynodesupportisadded.*/if(of_property_read_u32(np,"snps,phy-addr",&plat->phy_addr)==0)dev_warn(&pdev->dev,"snps,phy-addr property is deprecated\n");-if((plat->phy_node&&!of_phy_is_fixed_link(np))||plat->phy_bus_name)-plat->mdio_bus_data=NULL;-else+/* To Configure PHY by using all device-tree supported properties */+if(stmmac_dt_phy(plat,np,&pdev->dev)){plat->mdio_bus_data=devm_kzalloc(&pdev->dev,sizeof(structstmmac_mdio_bus_data),GFP_KERNEL);+}of_property_read_u32(np,"tx-fifo-depth",&plat->tx_fifo_size);
From: Phil Reid <hidden> Date: 2016-03-14 00:50:49
G'day Giuseppe,
On 11/03/2016 11:32 PM, Giuseppe CAVALLARO wrote:
On 3/11/2016 4:14 PM, Phil Reid wrote:
quoted
G'day Giuseppe,
I wont be able to test until Monday.
Concept looks ok to me except for comment below.
On 11/03/2016 9:33 PM, Giuseppe Cavallaro wrote:
quoted
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources
considering
DSA case (+ fixed-link).
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +--
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 19 +-----
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 77
++++++++++++++++----
include/linux/stmmac.h | 2 +-
4 files changed, 68 insertions(+), 41 deletions(-)
@@ -271,7 +271,6 @@ static void stmmac_eee_ctrl_timer(unsigned long arg)*/boolstmmac_eee_init(structstmmac_priv*priv){-char*phy_bus_name=priv->plat->phy_bus_name;unsignedlongflags;boolret=false;
@@ -283,7 +282,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)gotoout;/* Never init EEE in case of a switch is attached */-if(phy_bus_name&&(!strcmp(phy_bus_name,"fixed")))+if(priv->phydev->is_pseudo_fixed_link)gotoout;/* MAC core supports the EEE feature. */
@@ -820,12 +819,8 @@ static int stmmac_init_phy(struct net_device *dev)phydev=of_phy_connect(dev,priv->plat->phy_node,&stmmac_adjust_link,0,interface);}else{-if(priv->plat->phy_bus_name)-snprintf(bus_id,MII_BUS_ID_SIZE,"%s-%x",-priv->plat->phy_bus_name,priv->plat->bus_id);-else-snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",-priv->plat->bus_id);+snprintf(bus_id,MII_BUS_ID_SIZE,"stmmac-%x",+priv->plat->bus_id);snprintf(phy_id_fmt,MII_BUS_ID_SIZE+3,PHY_ID_FMT,bus_id,priv->plat->phy_addr);
@@ -96,6 +96,66 @@ static int dwmac1000_validate_ucast_entries(int
ucast_entries)
}
/**
+ * stmmac_dt_phy - parse device-tree driver parameters to allocate
PHY resources
+ * @plat: driver data platform structure
+ * @np: device tree node
+ * @dev: device pointer
+ * Description:
+ * The mdio bus will be allocated in case of a phy transceiver is on
board;
+ * it will be NULL if the fixed-link is configured.
+ * If there is the "snps,dwmac-mdio" sub-node the mdio will be allocated
+ * in any case (for DSA, mdio must be registered even if fixed-link).
+ * The table below sums the supported configurations:
+ * -------------------------------
+ * snps,phy-addr | Y
+ * -------------------------------
+ * phy-handle | Y
+ * -------------------------------
+ * fixed-link | N
+ * -------------------------------
+ * snps,dwmac-mdio |
+ * even if | Y
+ * fixed-link |
+ * -------------------------------
+ *
+ * It returns true in case of the mdio needs to be registered in the
main.
+ */
+static bool stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+ struct device_node *np, struct device *dev)
+{
+ bool ret = true;
+
+ /* If phy-handle property is passed from DT, use it as the PHY */
+ plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
+ if (plat->phy_node)
+ dev_dbg(dev, "Found phy-handle subnode\n");
+
+ /* If phy-handle is not specified, check if we have a fixed-phy */
+ if (!plat->phy_node && of_phy_is_fixed_link(np)) {
+ if ((of_phy_register_fixed_link(np) < 0))
+ return -ENODEV;
+
+ dev_dbg(dev, "Found fixed-link subnode\n");
+ plat->phy_node = of_node_get(np);
+
+ ret = false;
+ }
+
+ /* If snps,dwmac-mdio is passed from DT, always register the MDIO */
+ for_each_child_of_node(np, plat->mdio_node) {
+ if (of_device_is_compatible(plat->mdio_node, "snps,dwmac-mdio"))
+ break;
+ }
+
Won't this always result in plat->mdio_node being assigned to something
if np has a child.
Regardless of the compatible string.
Which is why I had the child_node temp.
Still learning so may be missing something.
hmm, i think so, let me know as soon as you test it so I can
rework the patch and send a v4.
Tested-by: Phil Reid <redacted>
Ignore my comment above. This works fine.
Test with / without compatible flag and it works as expected.
At the end of the loop for_each_child_of_node sets the node to NULL.
*pdev, const char **mac)
/* Default to phy auto-detection */
plat->phy_addr = -1;
- /* If we find a phy-handle property, use it as the PHY */
- plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
-
- /* If phy-handle is not specified, check if we have a fixed-phy */
- if (!plat->phy_node && of_phy_is_fixed_link(np)) {
- if ((of_phy_register_fixed_link(np) < 0))
- return ERR_PTR(-ENODEV);
-
- plat->phy_node = of_node_get(np);
- }
-
/* "snps,phy-addr" is not a standard property. Mark it as
deprecated
* and warn of its use. Remove this when phy node support is added.
*/
if (of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr)
== 0)
dev_warn(&pdev->dev, "snps,phy-addr property is deprecated\n");
- if ((plat->phy_node && !of_phy_is_fixed_link(np)) ||
plat->phy_bus_name)
- plat->mdio_bus_data = NULL;
- else
+ /* To Configure PHY by using all device-tree supported properties */
+ if (stmmac_dt_phy(plat, np, &pdev->dev)) {
plat->mdio_bus_data =
devm_kzalloc(&pdev->dev,
sizeof(struct stmmac_mdio_bus_data),
GFP_KERNEL);
+ }
of_property_read_u32(np, "tx-fifo-depth", &plat->tx_fifo_size);
+static bool stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+ struct device_node *np, struct device *dev)
+{
+ bool ret = true;
+
+ /* If phy-handle property is passed from DT, use it as the PHY */
+ plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
+ if (plat->phy_node)
+ dev_dbg(dev, "Found phy-handle subnode\n");
+
+ /* If phy-handle is not specified, check if we have a fixed-phy */
+ if (!plat->phy_node && of_phy_is_fixed_link(np)) {
+ if ((of_phy_register_fixed_link(np) < 0))
+ return -ENODEV;
+
stmmac_dt_phy() function should return a Boolean
Best Regards.
Gabriel
+static bool stmmac_dt_phy(struct plat_stmmacenet_data *plat,
+ struct device_node *np, struct device *dev)
+{
+ bool ret = true;
+
+ /* If phy-handle property is passed from DT, use it as the PHY */
+ plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
+ if (plat->phy_node)
+ dev_dbg(dev, "Found phy-handle subnode\n");
+
+ /* If phy-handle is not specified, check if we have a fixed-phy */
+ if (!plat->phy_node && of_phy_is_fixed_link(np)) {
+ if ((of_phy_register_fixed_link(np) < 0))
+ return -ENODEV;
+
From: Andreas Färber <afaerber@suse.de> Date: 2016-03-15 00:54:19
Hi Peppe,
Am 11.03.2016 um 14:33 schrieb Giuseppe Cavallaro:
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
"it"
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
Word missing after "main"? ("function"?)
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
Duplicate "removes".
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources considering
DSA case (+ fixed-link).
For next-20160314 I needed "i2c: immediately mark ourselves as
registered" plus this build fix:
@@ -866,9 +866,8 @@ static int stmmac_init_phy(struct net_device *dev)}/* If attached to a switch, there is no reason to poll phy
handler */
- if (priv->plat->phy_bus_name)
- if (!strcmp(priv->plat->phy_bus_name, "fixed"))
- phydev->irq = PHY_IGNORE_INTERRUPT;
+ if (phydev->is_pseudo_fixed_link)
+ phydev->irq = PHY_IGNORE_INTERRUPT;
pr_debug("stmmac_init_phy: %s: attached to PHY (UID 0x%x)"
" Link = %d\n", dev->name, phydev->phy_id, phydev->link);
It then fixes the PHY error on GeekBox, so for this mini-series:
Tested-by: Andreas Färber <afaerber@suse.de>
The connectivity issue still remains. Kernel log snippet:
[ +0.001117] rk_gmac-dwmac ff290000.ethernet: Looking up phy-supply
from device tree
[ +0.000028] rk808 0-001b: Looking up vcc12-supply from device tree
[ +0.000014] vcc_lan: supplied by vcc_io
[ +0.000101] rk_gmac-dwmac ff290000.ethernet: clock input or output?
(input).
[ +0.000009] rk_gmac-dwmac ff290000.ethernet: TX delay(0x30).
[ +0.000008] rk_gmac-dwmac ff290000.ethernet: RX delay(0x10).
[ +0.000014] rk_gmac-dwmac ff290000.ethernet: init for RGMII
[ +0.000104] rk_gmac-dwmac ff290000.ethernet: clock input from PHY
[ +0.005063] rk_gmac-dwmac ff290000.ethernet: no reset control found
[ +0.000007] stmmac - user ID: 0x10, Synopsys ID: 0x35
[ +0.000002] Ring mode enabled
[ +0.000006] DMA HW capability register supported
[ +0.000000] Normal descriptors
[ +0.000003] RX Checksum Offload Engine supported (type 2)
[ +0.000002] TX Checksum insertion supported
[ +0.000002] Wake-Up On Lan supported
[ +0.000053] Enable RX Mitigation via HW Watchdog Timer
[ +0.000771] of_get_named_gpiod_flags: can't parse 'snps,reset-gpio'
property of node '/ethernet@ff290000[0]'
[ +0.004250] libphy: stmmac: probed
[ +0.000009] eth0: PHY ID 001cc915 at 0 IRQ POLL (stmmac-0:00) active
[ +0.000005] eth0: PHY ID 001cc915 at 1 IRQ POLL (stmmac-0:01)
As before, reverting "stmmac: first frame prep at the end of xmit
routine" fixes it. My test cases are `ping 192.168.1.1` and `zypper up`.
Regards,
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
From: Giuseppe CAVALLARO <hidden> Date: 2016-03-15 15:53:43
Hi Andreas
On 3/15/2016 1:54 AM, Andreas Färber wrote:
Hi Peppe,
Am 11.03.2016 um 14:33 schrieb Giuseppe Cavallaro:
quoted
Initially the phy_bus_name was added to manipulate the
driver name but It was recently just used to manage the
"it"
quoted
fixed-link and then to take some decision at run-time
inside the main (for example to skip EEE).
Word missing after "main"? ("function"?)
quoted
So the patch uses the is_pseudo_fixed_link and removes
removes the phy_bus_name variable not necessary anymore.
Duplicate "removes".
Sure I will fix them in the v4
quoted
The driver can manage the mdio registration by using phy-handle,
dwmac-mdio and own parameter e.g. snps,phy-addr.
This patch takes care about all these possible configurations
and fixes the mdio registration in case of there is a real
transceiver or a switch (that needs to be managed by using
fixed-link).
Signed-off-by: Giuseppe Cavallaro <redacted>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Tested-by: Frank Schäfer <redacted>
Cc: Gabriel Fernandez <redacted>
Cc: Dinh Nguyen <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Phil Reid <redacted>
---
V2: use is_pseudo_fixed_link
V3: parse device-tree driver parameters to allocate PHY resources considering
DSA case (+ fixed-link).
For next-20160314 I needed "i2c: immediately mark ourselves as
registered" plus this build fix:
yes I will send it in a separate set for net-next.
@@ -866,9 +866,8 @@ static int stmmac_init_phy(struct net_device *dev)}/* If attached to a switch, there is no reason to poll phy
handler */
- if (priv->plat->phy_bus_name)
- if (!strcmp(priv->plat->phy_bus_name, "fixed"))
- phydev->irq = PHY_IGNORE_INTERRUPT;
+ if (phydev->is_pseudo_fixed_link)
+ phydev->irq = PHY_IGNORE_INTERRUPT;
pr_debug("stmmac_init_phy: %s: attached to PHY (UID 0x%x)"
" Link = %d\n", dev->name, phydev->phy_id, phydev->link);
It then fixes the PHY error on GeekBox, so for this mini-series:
Tested-by: Andreas Färber <afaerber@suse.de>
thx a lot for having tested it.
The connectivity issue still remains. Kernel log snippet:
[ +0.001117] rk_gmac-dwmac ff290000.ethernet: Looking up phy-supply
from device tree
[ +0.000028] rk808 0-001b: Looking up vcc12-supply from device tree
[ +0.000014] vcc_lan: supplied by vcc_io
[ +0.000101] rk_gmac-dwmac ff290000.ethernet: clock input or output?
(input).
[ +0.000009] rk_gmac-dwmac ff290000.ethernet: TX delay(0x30).
[ +0.000008] rk_gmac-dwmac ff290000.ethernet: RX delay(0x10).
[ +0.000014] rk_gmac-dwmac ff290000.ethernet: init for RGMII
[ +0.000104] rk_gmac-dwmac ff290000.ethernet: clock input from PHY
[ +0.005063] rk_gmac-dwmac ff290000.ethernet: no reset control found
[ +0.000007] stmmac - user ID: 0x10, Synopsys ID: 0x35
[ +0.000002] Ring mode enabled
[ +0.000006] DMA HW capability register supported
[ +0.000000] Normal descriptors
^^^^^^^^^^^^^^^^^^
[ +0.000003] RX Checksum Offload Engine supported (type 2)
[ +0.000002] TX Checksum insertion supported
[ +0.000002] Wake-Up On Lan supported
[ +0.000053] Enable RX Mitigation via HW Watchdog Timer
[ +0.000771] of_get_named_gpiod_flags: can't parse 'snps,reset-gpio'
property of node '/ethernet@ff290000[0]'
[ +0.004250] libphy: stmmac: probed
[ +0.000009] eth0: PHY ID 001cc915 at 0 IRQ POLL (stmmac-0:00) active
[ +0.000005] eth0: PHY ID 001cc915 at 1 IRQ POLL (stmmac-0:01)
As before, reverting "stmmac: first frame prep at the end of xmit
routine" fixes it. My test cases are `ping 192.168.1.1` and `zypper up`.
so on your side, this revert fixes the issue and you do not see any
tx watchdog as Tomeu's raised.
I have fixed some problems on top of
"stmmac: first frame prep at the end of xmit ..." please
see patch attached for net-next.
Indeed, the normal tx descriptors are well filled w/o
"stmmac: first frame prep at the end of xmit ..."
I wonder if you could try the attachment in order to understand if we
have to actually revert the patch (I ask you to not revert the
patch "stmmac: first frame...").
I cannot test on an HW with Normal descriptors, unfortunately.
I am continuing to review the code to try to find other issues
on this configuration.
Let me know.
Regards
peppe
From: Andreas Färber <afaerber@suse.de> Date: 2016-03-16 09:47:32
Hi Peppe,
Am 15.03.2016 um 16:53 schrieb Giuseppe CAVALLARO:
On 3/15/2016 1:54 AM, Andreas Färber wrote:
quoted
The connectivity issue still remains. Kernel log snippet:
[ +0.001117] rk_gmac-dwmac ff290000.ethernet: Looking up phy-supply
from device tree
[ +0.000028] rk808 0-001b: Looking up vcc12-supply from device tree
[ +0.000014] vcc_lan: supplied by vcc_io
[ +0.000101] rk_gmac-dwmac ff290000.ethernet: clock input or output?
(input).
[ +0.000009] rk_gmac-dwmac ff290000.ethernet: TX delay(0x30).
[ +0.000008] rk_gmac-dwmac ff290000.ethernet: RX delay(0x10).
[ +0.000014] rk_gmac-dwmac ff290000.ethernet: init for RGMII
[ +0.000104] rk_gmac-dwmac ff290000.ethernet: clock input from PHY
[ +0.005063] rk_gmac-dwmac ff290000.ethernet: no reset control found
[ +0.000007] stmmac - user ID: 0x10, Synopsys ID: 0x35
[ +0.000002] Ring mode enabled
[ +0.000006] DMA HW capability register supported
[ +0.000000] Normal descriptors
^^^^^^^^^^^^^^^^^^
quoted
[ +0.000003] RX Checksum Offload Engine supported (type 2)
[ +0.000002] TX Checksum insertion supported
[ +0.000002] Wake-Up On Lan supported
[ +0.000053] Enable RX Mitigation via HW Watchdog Timer
[ +0.000771] of_get_named_gpiod_flags: can't parse 'snps,reset-gpio'
property of node '/ethernet@ff290000[0]'
[ +0.004250] libphy: stmmac: probed
[ +0.000009] eth0: PHY ID 001cc915 at 0 IRQ POLL (stmmac-0:00) active
[ +0.000005] eth0: PHY ID 001cc915 at 1 IRQ POLL (stmmac-0:01)
As before, reverting "stmmac: first frame prep at the end of xmit
routine" fixes it. My test cases are `ping 192.168.1.1` and `zypper up`.
so on your side, this revert fixes the issue and you do not see any
tx watchdog as Tomeu's raised.
Confirmed, the system ran stable over night. I don't use NFS on that
system myself, having GMAC working only since v2.
I have fixed some problems on top of
"stmmac: first frame prep at the end of xmit ..." please
see patch attached for net-next.
Indeed, the normal tx descriptors are well filled w/o
"stmmac: first frame prep at the end of xmit ..."
I wonder if you could try the attachment in order to understand if we
have to actually revert the patch (I ask you to not revert the
patch "stmmac: first frame...").
Works great on top of next-20160314 with i2c plus this series, please
add my Tested-by. Thanks a lot for investigating!
Cheers,
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
From: Giuseppe CAVALLARO <hidden> Date: 2016-03-16 10:18:45
Hi Andreas
On 3/16/2016 10:47 AM, Andreas Färber wrote:
Hi Peppe,
Am 15.03.2016 um 16:53 schrieb Giuseppe CAVALLARO:
quoted
On 3/15/2016 1:54 AM, Andreas Färber wrote:
quoted
The connectivity issue still remains. Kernel log snippet:
[ +0.001117] rk_gmac-dwmac ff290000.ethernet: Looking up phy-supply
from device tree
[ +0.000028] rk808 0-001b: Looking up vcc12-supply from device tree
[ +0.000014] vcc_lan: supplied by vcc_io
[ +0.000101] rk_gmac-dwmac ff290000.ethernet: clock input or output?
(input).
[ +0.000009] rk_gmac-dwmac ff290000.ethernet: TX delay(0x30).
[ +0.000008] rk_gmac-dwmac ff290000.ethernet: RX delay(0x10).
[ +0.000014] rk_gmac-dwmac ff290000.ethernet: init for RGMII
[ +0.000104] rk_gmac-dwmac ff290000.ethernet: clock input from PHY
[ +0.005063] rk_gmac-dwmac ff290000.ethernet: no reset control found
[ +0.000007] stmmac - user ID: 0x10, Synopsys ID: 0x35
[ +0.000002] Ring mode enabled
[ +0.000006] DMA HW capability register supported
[ +0.000000] Normal descriptors
^^^^^^^^^^^^^^^^^^
quoted
[ +0.000003] RX Checksum Offload Engine supported (type 2)
[ +0.000002] TX Checksum insertion supported
[ +0.000002] Wake-Up On Lan supported
[ +0.000053] Enable RX Mitigation via HW Watchdog Timer
[ +0.000771] of_get_named_gpiod_flags: can't parse 'snps,reset-gpio'
property of node '/ethernet@ff290000[0]'
[ +0.004250] libphy: stmmac: probed
[ +0.000009] eth0: PHY ID 001cc915 at 0 IRQ POLL (stmmac-0:00) active
[ +0.000005] eth0: PHY ID 001cc915 at 1 IRQ POLL (stmmac-0:01)
As before, reverting "stmmac: first frame prep at the end of xmit
routine" fixes it. My test cases are `ping 192.168.1.1` and `zypper up`.
so on your side, this revert fixes the issue and you do not see any
tx watchdog as Tomeu's raised.
Confirmed, the system ran stable over night. I don't use NFS on that
system myself, having GMAC working only since v2.
quoted
I have fixed some problems on top of
"stmmac: first frame prep at the end of xmit ..." please
see patch attached for net-next.
Indeed, the normal tx descriptors are well filled w/o
"stmmac: first frame prep at the end of xmit ..."
I wonder if you could try the attachment in order to understand if we
have to actually revert the patch (I ask you to not revert the
patch "stmmac: first frame...").
Works great on top of next-20160314 with i2c plus this series, please
add my Tested-by. Thanks a lot for investigating!
you are welcome, I have just sent the patch
"[PATCH (net-next.git)] stmmac: fix TX normal DESC"
do not hesitate to contact me for further checks
and if I have missed something.
Cheers
peppe