diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2017-04-12 13:27:03 +1000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-04-12 10:17:01 -0400 |
commit | 6aff0bf641cf69e487d7b46fc8be773d161f814d (patch) | |
tree | 511cbe137d6afbf974821805c4725156d0b69d41 | |
parent | 78d28543a6093fad8f1b00a5debbde02f392ebb4 (diff) | |
download | linux-6aff0bf641cf69e487d7b46fc8be773d161f814d.tar.bz2 |
ftgmac100: Disable HW checksum generation on AST2400, enable on others
We found out that HW checksum generation only works from AST2500
onward. This disables it on AST2400 and removes the "no-hw-checksum"
properties in the device-trees. The problem we had wasn't related
to NC-SI.
Also rework the logic testing for that property so it can be used
to disable HW checksum generation and checking regardless of whether
NC-SI is used or not in case other variants out there need this.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/arm/boot/dts/aspeed-g4.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/aspeed-g5.dtsi | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/faraday/ftgmac100.c | 12 |
3 files changed, 6 insertions, 10 deletions
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi index 6068e79fb651..c79c937b0a8a 100644 --- a/arch/arm/boot/dts/aspeed-g4.dtsi +++ b/arch/arm/boot/dts/aspeed-g4.dtsi @@ -45,7 +45,6 @@ compatible = "aspeed,ast2400-mac", "faraday,ftgmac100"; reg = <0x1e660000 0x180>; interrupts = <2>; - no-hw-checksum; status = "disabled"; }; @@ -53,7 +52,6 @@ compatible = "aspeed,ast2400-mac", "faraday,ftgmac100"; reg = <0x1e680000 0x180>; interrupts = <3>; - no-hw-checksum; status = "disabled"; }; diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi index 4dbe91a02792..b6596633036c 100644 --- a/arch/arm/boot/dts/aspeed-g5.dtsi +++ b/arch/arm/boot/dts/aspeed-g5.dtsi @@ -36,7 +36,6 @@ compatible = "aspeed,ast2500-mac", "faraday,ftgmac100"; reg = <0x1e660000 0x180>; interrupts = <2>; - no-hw-checksum; status = "disabled"; }; @@ -44,7 +43,6 @@ compatible = "aspeed,ast2500-mac", "faraday,ftgmac100"; reg = <0x1e680000 0x180>; interrupts = <3>; - no-hw-checksum; status = "disabled"; }; diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index e793d353882f..099309920d6a 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c @@ -1473,15 +1473,15 @@ static int ftgmac100_probe(struct platform_device *pdev) goto err_setup_mdio; } - /* We have to disable on-chip IP checksum functionality - * when NCSI is enabled on the interface. It doesn't work - * in that case. - */ + /* Base feature set */ netdev->features = NETIF_F_RXCSUM | NETIF_F_HW_CSUM | NETIF_F_GRO | NETIF_F_SG; - if (priv->use_ncsi && - of_get_property(np, "no-hw-checksum", NULL)) + + /* AST2400 doesn't have working HW checksum generation */ + if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac"))) netdev->features &= ~NETIF_F_HW_CSUM; + if (np && of_get_property(np, "no-hw-checksum", NULL)) + netdev->features &= ~(NETIF_F_HW_CSUM | NETIF_F_RXCSUM); /* register network device */ err = register_netdev(netdev); |