All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <598461.73809.qm@web37603.mail.mud.yahoo.com>

diff --git a/a/1.txt b/N1/1.txt
index f5f8789..babff9b 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,37 +1,67 @@
-As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,=0A=
-older revisions of gianfar controllers will be unable to calculate a TCP/UD=
-P=0Apacket checksum for some alignments of the appropriate FCB. This patch =
-checks=0Afor FCB alignment on such controllers and falls back to software c=
-hecksumming=0Aif the alignment is known to be bad.=0A=0ASigned-off-by: Alex=
- Dubov <oakad@yahoo.com>=0A---=0ACan we, please, proceed with this patch?=
-=0AThe issue is badly annoying, breaking quite a few of the MPC8548 chips.=
-=0A=0AChanges for v2:=0A   - Make indentation slightly more consistent.=0A =
-  - Replace bizarre switch-based condition with plain boring one.=0A=0A dri=
-vers/net/gianfar.c |   16 ++++++++++++++--=0A drivers/net/gianfar.h |    1 =
-+=0A 2 files changed, 15 insertions(+), 2 deletions(-)=0A=0Adiff --git a/dr=
-ivers/net/gianfar.c b/drivers/net/gianfar.c=0Aindex 5ed8f9f..3da19a5 100644=
-=0A--- a/drivers/net/gianfar.c=0A+++ b/drivers/net/gianfar.c=0A@@ -950,6 +9=
-50,11 @@ static void gfar_detect_errata(struct gfar_private *priv)=0A =09=
-=09=09(pvr =3D=3D 0x80861010 && (mod & 0xfff9) =3D=3D 0x80c0))=0A =09=09pri=
-v->errata |=3D GFAR_ERRATA_A002;=0A =0A+=09/* MPC8313 Rev < 2.0, MPC8548 re=
-v 2.0 */=0A+=09if ((pvr =3D=3D 0x80850010 && mod =3D=3D 0x80b0 && rev < 0x0=
-020) ||=0A+=09=09=09(pvr =3D=3D 0x80210020 && mod =3D=3D 0x8030 && rev =3D=
-=3D 0x0020))=0A+=09=09priv->errata |=3D GFAR_ERRATA_12;=0A+=0A =09if (priv-=
->errata)=0A =09=09dev_info(dev, "enabled errata workarounds, flags: 0x%x\n"=
-,=0A =09=09=09 priv->errata);=0A@@ -2156,8 +2161,15 @@ static int gfar_star=
-t_xmit(struct sk_buff *skb, struct net_device *dev)=0A =09/* Set up checksu=
-mming */=0A =09if (CHECKSUM_PARTIAL =3D=3D skb->ip_summed) {=0A =09=09fcb =
-=3D gfar_add_fcb(skb);=0A-=09=09lstatus |=3D BD_LFLAG(TXBD_TOE);=0A-=09=09g=
-far_tx_checksum(skb, fcb);=0A+=09=09/* as specified by errata */=0A+=09=09i=
-f (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)=0A+=09=09=09     && ((uns=
-igned long)fcb % 0x20) > 0x18)) {=0A+=09=09=09__skb_pull(skb, GMAC_FCB_LEN)=
-;=0A+=09=09=09skb_checksum_help(skb);=0A+=09=09} else {=0A+=09=09=09lstatus=
- |=3D BD_LFLAG(TXBD_TOE);=0A+=09=09=09gfar_tx_checksum(skb, fcb);=0A+=09=09=
-}=0A =09}=0A =0A =09if (vlan_tx_tag_present(skb)) {=0Adiff --git a/drivers/=
-net/gianfar.h b/drivers/net/gianfar.h=0Aindex 54de413..ec5d595 100644=0A---=
- a/drivers/net/gianfar.h=0A+++ b/drivers/net/gianfar.h=0A@@ -1039,6 +1039,7=
- @@ enum gfar_errata {=0A =09GFAR_ERRATA_74=09=09=3D 0x01,=0A =09GFAR_ERRAT=
-A_76=09=09=3D 0x02,=0A =09GFAR_ERRATA_A002=09=3D 0x04,=0A+=09GFAR_ERRATA_12=
-=09=09=3D 0x08, /* a.k.a errata eTSEC49 */=0A };=0A =0A /* Struct stolen al=
-most completely (and shamelessly) from the FCC enet source=0A-- =0A1.7.3.2=
-=0A=0A=0A=0A=0A
+As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,
+older revisions of gianfar controllers will be unable to calculate a TCP/UDP
+packet checksum for some alignments of the appropriate FCB. This patch checks
+for FCB alignment on such controllers and falls back to software checksumming
+if the alignment is known to be bad.
+
+Signed-off-by: Alex Dubov <oakad@yahoo.com>
+---
+Can we, please, proceed with this patch?
+The issue is badly annoying, breaking quite a few of the MPC8548 chips.
+
+Changes for v2:
+   - Make indentation slightly more consistent.
+   - Replace bizarre switch-based condition with plain boring one.
+
+ drivers/net/gianfar.c |   16 ++++++++++++++--
+ drivers/net/gianfar.h |    1 +
+ 2 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
+index 5ed8f9f..3da19a5 100644
+--- a/drivers/net/gianfar.c
++++ b/drivers/net/gianfar.c
+@@ -950,6 +950,11 @@ static void gfar_detect_errata(struct gfar_private *priv)
+ 			(pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))
+ 		priv->errata |= GFAR_ERRATA_A002;
+ 
++	/* MPC8313 Rev < 2.0, MPC8548 rev 2.0 */
++	if ((pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020) ||
++			(pvr == 0x80210020 && mod == 0x8030 && rev == 0x0020))
++		priv->errata |= GFAR_ERRATA_12;
++
+ 	if (priv->errata)
+ 		dev_info(dev, "enabled errata workarounds, flags: 0x%x\n",
+ 			 priv->errata);
+@@ -2156,8 +2161,15 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ 	/* Set up checksumming */
+ 	if (CHECKSUM_PARTIAL == skb->ip_summed) {
+ 		fcb = gfar_add_fcb(skb);
+-		lstatus |= BD_LFLAG(TXBD_TOE);
+-		gfar_tx_checksum(skb, fcb);
++		/* as specified by errata */
++		if (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)
++			     && ((unsigned long)fcb % 0x20) > 0x18)) {
++			__skb_pull(skb, GMAC_FCB_LEN);
++			skb_checksum_help(skb);
++		} else {
++			lstatus |= BD_LFLAG(TXBD_TOE);
++			gfar_tx_checksum(skb, fcb);
++		}
+ 	}
+ 
+ 	if (vlan_tx_tag_present(skb)) {
+diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
+index 54de413..ec5d595 100644
+--- a/drivers/net/gianfar.h
++++ b/drivers/net/gianfar.h
+@@ -1039,6 +1039,7 @@ enum gfar_errata {
+ 	GFAR_ERRATA_74		= 0x01,
+ 	GFAR_ERRATA_76		= 0x02,
+ 	GFAR_ERRATA_A002	= 0x04,
++	GFAR_ERRATA_12		= 0x08, /* a.k.a errata eTSEC49 */
+ };
+ 
+ /* Struct stolen almost completely (and shamelessly) from the FCC enet source
+-- 
+1.7.3.2
diff --git a/a/content_digest b/N1/content_digest
index b53689e..c54cb36 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,48 +2,80 @@
  "Subject\0[PATCH v2] gianfar: Fall back to software tcp/udp checksum on older controllers\0"
  "Date\0Wed, 16 Mar 2011 20:57:13 -0700 (PDT)\0"
  "To\0linux-kernel@vger.kernel.org\0"
- "Cc\0netdev@vger.kernel.org"
+ "Cc\0galak@kernel.crashing.org"
+  cbouatmailru@gmail.com
+  mlcreech@gmail.com
   linuxppc-dev@lists.ozlabs.org
   davem@davemloft.net
- " mlcreech@gmail.com\0"
+ " netdev@vger.kernel.org\0"
  "\00:1\0"
  "b\0"
- "As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,=0A=\n"
- "older revisions of gianfar controllers will be unable to calculate a TCP/UD=\n"
- "P=0Apacket checksum for some alignments of the appropriate FCB. This patch =\n"
- "checks=0Afor FCB alignment on such controllers and falls back to software c=\n"
- "hecksumming=0Aif the alignment is known to be bad.=0A=0ASigned-off-by: Alex=\n"
- " Dubov <oakad@yahoo.com>=0A---=0ACan we, please, proceed with this patch?=\n"
- "=0AThe issue is badly annoying, breaking quite a few of the MPC8548 chips.=\n"
- "=0A=0AChanges for v2:=0A   - Make indentation slightly more consistent.=0A =\n"
- "  - Replace bizarre switch-based condition with plain boring one.=0A=0A dri=\n"
- "vers/net/gianfar.c |   16 ++++++++++++++--=0A drivers/net/gianfar.h |    1 =\n"
- "+=0A 2 files changed, 15 insertions(+), 2 deletions(-)=0A=0Adiff --git a/dr=\n"
- "ivers/net/gianfar.c b/drivers/net/gianfar.c=0Aindex 5ed8f9f..3da19a5 100644=\n"
- "=0A--- a/drivers/net/gianfar.c=0A+++ b/drivers/net/gianfar.c=0A@@ -950,6 +9=\n"
- "50,11 @@ static void gfar_detect_errata(struct gfar_private *priv)=0A =09=\n"
- "=09=09(pvr =3D=3D 0x80861010 && (mod & 0xfff9) =3D=3D 0x80c0))=0A =09=09pri=\n"
- "v->errata |=3D GFAR_ERRATA_A002;=0A =0A+=09/* MPC8313 Rev < 2.0, MPC8548 re=\n"
- "v 2.0 */=0A+=09if ((pvr =3D=3D 0x80850010 && mod =3D=3D 0x80b0 && rev < 0x0=\n"
- "020) ||=0A+=09=09=09(pvr =3D=3D 0x80210020 && mod =3D=3D 0x8030 && rev =3D=\n"
- "=3D 0x0020))=0A+=09=09priv->errata |=3D GFAR_ERRATA_12;=0A+=0A =09if (priv-=\n"
- ">errata)=0A =09=09dev_info(dev, \"enabled errata workarounds, flags: 0x%x\\n\"=\n"
- ",=0A =09=09=09 priv->errata);=0A@@ -2156,8 +2161,15 @@ static int gfar_star=\n"
- "t_xmit(struct sk_buff *skb, struct net_device *dev)=0A =09/* Set up checksu=\n"
- "mming */=0A =09if (CHECKSUM_PARTIAL =3D=3D skb->ip_summed) {=0A =09=09fcb =\n"
- "=3D gfar_add_fcb(skb);=0A-=09=09lstatus |=3D BD_LFLAG(TXBD_TOE);=0A-=09=09g=\n"
- "far_tx_checksum(skb, fcb);=0A+=09=09/* as specified by errata */=0A+=09=09i=\n"
- "f (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)=0A+=09=09=09     && ((uns=\n"
- "igned long)fcb % 0x20) > 0x18)) {=0A+=09=09=09__skb_pull(skb, GMAC_FCB_LEN)=\n"
- ";=0A+=09=09=09skb_checksum_help(skb);=0A+=09=09} else {=0A+=09=09=09lstatus=\n"
- " |=3D BD_LFLAG(TXBD_TOE);=0A+=09=09=09gfar_tx_checksum(skb, fcb);=0A+=09=09=\n"
- "}=0A =09}=0A =0A =09if (vlan_tx_tag_present(skb)) {=0Adiff --git a/drivers/=\n"
- "net/gianfar.h b/drivers/net/gianfar.h=0Aindex 54de413..ec5d595 100644=0A---=\n"
- " a/drivers/net/gianfar.h=0A+++ b/drivers/net/gianfar.h=0A@@ -1039,6 +1039,7=\n"
- " @@ enum gfar_errata {=0A =09GFAR_ERRATA_74=09=09=3D 0x01,=0A =09GFAR_ERRAT=\n"
- "A_76=09=09=3D 0x02,=0A =09GFAR_ERRATA_A002=09=3D 0x04,=0A+=09GFAR_ERRATA_12=\n"
- "=09=09=3D 0x08, /* a.k.a errata eTSEC49 */=0A };=0A =0A /* Struct stolen al=\n"
- "most completely (and shamelessly) from the FCC enet source=0A-- =0A1.7.3.2=\n"
- =0A=0A=0A=0A=0A
+ "As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,\n"
+ "older revisions of gianfar controllers will be unable to calculate a TCP/UDP\n"
+ "packet checksum for some alignments of the appropriate FCB. This patch checks\n"
+ "for FCB alignment on such controllers and falls back to software checksumming\n"
+ "if the alignment is known to be bad.\n"
+ "\n"
+ "Signed-off-by: Alex Dubov <oakad@yahoo.com>\n"
+ "---\n"
+ "Can we, please, proceed with this patch?\n"
+ "The issue is badly annoying, breaking quite a few of the MPC8548 chips.\n"
+ "\n"
+ "Changes for v2:\n"
+ "   - Make indentation slightly more consistent.\n"
+ "   - Replace bizarre switch-based condition with plain boring one.\n"
+ "\n"
+ " drivers/net/gianfar.c |   16 ++++++++++++++--\n"
+ " drivers/net/gianfar.h |    1 +\n"
+ " 2 files changed, 15 insertions(+), 2 deletions(-)\n"
+ "\n"
+ "diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c\n"
+ "index 5ed8f9f..3da19a5 100644\n"
+ "--- a/drivers/net/gianfar.c\n"
+ "+++ b/drivers/net/gianfar.c\n"
+ "@@ -950,6 +950,11 @@ static void gfar_detect_errata(struct gfar_private *priv)\n"
+ " \t\t\t(pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))\n"
+ " \t\tpriv->errata |= GFAR_ERRATA_A002;\n"
+ " \n"
+ "+\t/* MPC8313 Rev < 2.0, MPC8548 rev 2.0 */\n"
+ "+\tif ((pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020) ||\n"
+ "+\t\t\t(pvr == 0x80210020 && mod == 0x8030 && rev == 0x0020))\n"
+ "+\t\tpriv->errata |= GFAR_ERRATA_12;\n"
+ "+\n"
+ " \tif (priv->errata)\n"
+ " \t\tdev_info(dev, \"enabled errata workarounds, flags: 0x%x\\n\",\n"
+ " \t\t\t priv->errata);\n"
+ "@@ -2156,8 +2161,15 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)\n"
+ " \t/* Set up checksumming */\n"
+ " \tif (CHECKSUM_PARTIAL == skb->ip_summed) {\n"
+ " \t\tfcb = gfar_add_fcb(skb);\n"
+ "-\t\tlstatus |= BD_LFLAG(TXBD_TOE);\n"
+ "-\t\tgfar_tx_checksum(skb, fcb);\n"
+ "+\t\t/* as specified by errata */\n"
+ "+\t\tif (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)\n"
+ "+\t\t\t     && ((unsigned long)fcb % 0x20) > 0x18)) {\n"
+ "+\t\t\t__skb_pull(skb, GMAC_FCB_LEN);\n"
+ "+\t\t\tskb_checksum_help(skb);\n"
+ "+\t\t} else {\n"
+ "+\t\t\tlstatus |= BD_LFLAG(TXBD_TOE);\n"
+ "+\t\t\tgfar_tx_checksum(skb, fcb);\n"
+ "+\t\t}\n"
+ " \t}\n"
+ " \n"
+ " \tif (vlan_tx_tag_present(skb)) {\n"
+ "diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h\n"
+ "index 54de413..ec5d595 100644\n"
+ "--- a/drivers/net/gianfar.h\n"
+ "+++ b/drivers/net/gianfar.h\n"
+ "@@ -1039,6 +1039,7 @@ enum gfar_errata {\n"
+ " \tGFAR_ERRATA_74\t\t= 0x01,\n"
+ " \tGFAR_ERRATA_76\t\t= 0x02,\n"
+ " \tGFAR_ERRATA_A002\t= 0x04,\n"
+ "+\tGFAR_ERRATA_12\t\t= 0x08, /* a.k.a errata eTSEC49 */\n"
+ " };\n"
+ " \n"
+ " /* Struct stolen almost completely (and shamelessly) from the FCC enet source\n"
+ "-- \n"
+ 1.7.3.2
 
-8d0684fc03cb2a02a3ef850b2759eca1959b8eb53095419ab73f153043269e4e
+7c8511d542dd23d6b1dc55727528289a699a5807e1070048f7619bcf1bd8a7c5

diff --git a/a/1.txt b/N2/1.txt
index f5f8789..babff9b 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,37 +1,67 @@
-As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,=0A=
-older revisions of gianfar controllers will be unable to calculate a TCP/UD=
-P=0Apacket checksum for some alignments of the appropriate FCB. This patch =
-checks=0Afor FCB alignment on such controllers and falls back to software c=
-hecksumming=0Aif the alignment is known to be bad.=0A=0ASigned-off-by: Alex=
- Dubov <oakad@yahoo.com>=0A---=0ACan we, please, proceed with this patch?=
-=0AThe issue is badly annoying, breaking quite a few of the MPC8548 chips.=
-=0A=0AChanges for v2:=0A   - Make indentation slightly more consistent.=0A =
-  - Replace bizarre switch-based condition with plain boring one.=0A=0A dri=
-vers/net/gianfar.c |   16 ++++++++++++++--=0A drivers/net/gianfar.h |    1 =
-+=0A 2 files changed, 15 insertions(+), 2 deletions(-)=0A=0Adiff --git a/dr=
-ivers/net/gianfar.c b/drivers/net/gianfar.c=0Aindex 5ed8f9f..3da19a5 100644=
-=0A--- a/drivers/net/gianfar.c=0A+++ b/drivers/net/gianfar.c=0A@@ -950,6 +9=
-50,11 @@ static void gfar_detect_errata(struct gfar_private *priv)=0A =09=
-=09=09(pvr =3D=3D 0x80861010 && (mod & 0xfff9) =3D=3D 0x80c0))=0A =09=09pri=
-v->errata |=3D GFAR_ERRATA_A002;=0A =0A+=09/* MPC8313 Rev < 2.0, MPC8548 re=
-v 2.0 */=0A+=09if ((pvr =3D=3D 0x80850010 && mod =3D=3D 0x80b0 && rev < 0x0=
-020) ||=0A+=09=09=09(pvr =3D=3D 0x80210020 && mod =3D=3D 0x8030 && rev =3D=
-=3D 0x0020))=0A+=09=09priv->errata |=3D GFAR_ERRATA_12;=0A+=0A =09if (priv-=
->errata)=0A =09=09dev_info(dev, "enabled errata workarounds, flags: 0x%x\n"=
-,=0A =09=09=09 priv->errata);=0A@@ -2156,8 +2161,15 @@ static int gfar_star=
-t_xmit(struct sk_buff *skb, struct net_device *dev)=0A =09/* Set up checksu=
-mming */=0A =09if (CHECKSUM_PARTIAL =3D=3D skb->ip_summed) {=0A =09=09fcb =
-=3D gfar_add_fcb(skb);=0A-=09=09lstatus |=3D BD_LFLAG(TXBD_TOE);=0A-=09=09g=
-far_tx_checksum(skb, fcb);=0A+=09=09/* as specified by errata */=0A+=09=09i=
-f (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)=0A+=09=09=09     && ((uns=
-igned long)fcb % 0x20) > 0x18)) {=0A+=09=09=09__skb_pull(skb, GMAC_FCB_LEN)=
-;=0A+=09=09=09skb_checksum_help(skb);=0A+=09=09} else {=0A+=09=09=09lstatus=
- |=3D BD_LFLAG(TXBD_TOE);=0A+=09=09=09gfar_tx_checksum(skb, fcb);=0A+=09=09=
-}=0A =09}=0A =0A =09if (vlan_tx_tag_present(skb)) {=0Adiff --git a/drivers/=
-net/gianfar.h b/drivers/net/gianfar.h=0Aindex 54de413..ec5d595 100644=0A---=
- a/drivers/net/gianfar.h=0A+++ b/drivers/net/gianfar.h=0A@@ -1039,6 +1039,7=
- @@ enum gfar_errata {=0A =09GFAR_ERRATA_74=09=09=3D 0x01,=0A =09GFAR_ERRAT=
-A_76=09=09=3D 0x02,=0A =09GFAR_ERRATA_A002=09=3D 0x04,=0A+=09GFAR_ERRATA_12=
-=09=09=3D 0x08, /* a.k.a errata eTSEC49 */=0A };=0A =0A /* Struct stolen al=
-most completely (and shamelessly) from the FCC enet source=0A-- =0A1.7.3.2=
-=0A=0A=0A=0A=0A
+As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,
+older revisions of gianfar controllers will be unable to calculate a TCP/UDP
+packet checksum for some alignments of the appropriate FCB. This patch checks
+for FCB alignment on such controllers and falls back to software checksumming
+if the alignment is known to be bad.
+
+Signed-off-by: Alex Dubov <oakad@yahoo.com>
+---
+Can we, please, proceed with this patch?
+The issue is badly annoying, breaking quite a few of the MPC8548 chips.
+
+Changes for v2:
+   - Make indentation slightly more consistent.
+   - Replace bizarre switch-based condition with plain boring one.
+
+ drivers/net/gianfar.c |   16 ++++++++++++++--
+ drivers/net/gianfar.h |    1 +
+ 2 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
+index 5ed8f9f..3da19a5 100644
+--- a/drivers/net/gianfar.c
++++ b/drivers/net/gianfar.c
+@@ -950,6 +950,11 @@ static void gfar_detect_errata(struct gfar_private *priv)
+ 			(pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))
+ 		priv->errata |= GFAR_ERRATA_A002;
+ 
++	/* MPC8313 Rev < 2.0, MPC8548 rev 2.0 */
++	if ((pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020) ||
++			(pvr == 0x80210020 && mod == 0x8030 && rev == 0x0020))
++		priv->errata |= GFAR_ERRATA_12;
++
+ 	if (priv->errata)
+ 		dev_info(dev, "enabled errata workarounds, flags: 0x%x\n",
+ 			 priv->errata);
+@@ -2156,8 +2161,15 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ 	/* Set up checksumming */
+ 	if (CHECKSUM_PARTIAL == skb->ip_summed) {
+ 		fcb = gfar_add_fcb(skb);
+-		lstatus |= BD_LFLAG(TXBD_TOE);
+-		gfar_tx_checksum(skb, fcb);
++		/* as specified by errata */
++		if (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)
++			     && ((unsigned long)fcb % 0x20) > 0x18)) {
++			__skb_pull(skb, GMAC_FCB_LEN);
++			skb_checksum_help(skb);
++		} else {
++			lstatus |= BD_LFLAG(TXBD_TOE);
++			gfar_tx_checksum(skb, fcb);
++		}
+ 	}
+ 
+ 	if (vlan_tx_tag_present(skb)) {
+diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
+index 54de413..ec5d595 100644
+--- a/drivers/net/gianfar.h
++++ b/drivers/net/gianfar.h
+@@ -1039,6 +1039,7 @@ enum gfar_errata {
+ 	GFAR_ERRATA_74		= 0x01,
+ 	GFAR_ERRATA_76		= 0x02,
+ 	GFAR_ERRATA_A002	= 0x04,
++	GFAR_ERRATA_12		= 0x08, /* a.k.a errata eTSEC49 */
+ };
+ 
+ /* Struct stolen almost completely (and shamelessly) from the FCC enet source
+-- 
+1.7.3.2
diff --git a/a/content_digest b/N2/content_digest
index b53689e..4a69c1f 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -8,42 +8,72 @@
  " mlcreech@gmail.com\0"
  "\00:1\0"
  "b\0"
- "As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,=0A=\n"
- "older revisions of gianfar controllers will be unable to calculate a TCP/UD=\n"
- "P=0Apacket checksum for some alignments of the appropriate FCB. This patch =\n"
- "checks=0Afor FCB alignment on such controllers and falls back to software c=\n"
- "hecksumming=0Aif the alignment is known to be bad.=0A=0ASigned-off-by: Alex=\n"
- " Dubov <oakad@yahoo.com>=0A---=0ACan we, please, proceed with this patch?=\n"
- "=0AThe issue is badly annoying, breaking quite a few of the MPC8548 chips.=\n"
- "=0A=0AChanges for v2:=0A   - Make indentation slightly more consistent.=0A =\n"
- "  - Replace bizarre switch-based condition with plain boring one.=0A=0A dri=\n"
- "vers/net/gianfar.c |   16 ++++++++++++++--=0A drivers/net/gianfar.h |    1 =\n"
- "+=0A 2 files changed, 15 insertions(+), 2 deletions(-)=0A=0Adiff --git a/dr=\n"
- "ivers/net/gianfar.c b/drivers/net/gianfar.c=0Aindex 5ed8f9f..3da19a5 100644=\n"
- "=0A--- a/drivers/net/gianfar.c=0A+++ b/drivers/net/gianfar.c=0A@@ -950,6 +9=\n"
- "50,11 @@ static void gfar_detect_errata(struct gfar_private *priv)=0A =09=\n"
- "=09=09(pvr =3D=3D 0x80861010 && (mod & 0xfff9) =3D=3D 0x80c0))=0A =09=09pri=\n"
- "v->errata |=3D GFAR_ERRATA_A002;=0A =0A+=09/* MPC8313 Rev < 2.0, MPC8548 re=\n"
- "v 2.0 */=0A+=09if ((pvr =3D=3D 0x80850010 && mod =3D=3D 0x80b0 && rev < 0x0=\n"
- "020) ||=0A+=09=09=09(pvr =3D=3D 0x80210020 && mod =3D=3D 0x8030 && rev =3D=\n"
- "=3D 0x0020))=0A+=09=09priv->errata |=3D GFAR_ERRATA_12;=0A+=0A =09if (priv-=\n"
- ">errata)=0A =09=09dev_info(dev, \"enabled errata workarounds, flags: 0x%x\\n\"=\n"
- ",=0A =09=09=09 priv->errata);=0A@@ -2156,8 +2161,15 @@ static int gfar_star=\n"
- "t_xmit(struct sk_buff *skb, struct net_device *dev)=0A =09/* Set up checksu=\n"
- "mming */=0A =09if (CHECKSUM_PARTIAL =3D=3D skb->ip_summed) {=0A =09=09fcb =\n"
- "=3D gfar_add_fcb(skb);=0A-=09=09lstatus |=3D BD_LFLAG(TXBD_TOE);=0A-=09=09g=\n"
- "far_tx_checksum(skb, fcb);=0A+=09=09/* as specified by errata */=0A+=09=09i=\n"
- "f (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)=0A+=09=09=09     && ((uns=\n"
- "igned long)fcb % 0x20) > 0x18)) {=0A+=09=09=09__skb_pull(skb, GMAC_FCB_LEN)=\n"
- ";=0A+=09=09=09skb_checksum_help(skb);=0A+=09=09} else {=0A+=09=09=09lstatus=\n"
- " |=3D BD_LFLAG(TXBD_TOE);=0A+=09=09=09gfar_tx_checksum(skb, fcb);=0A+=09=09=\n"
- "}=0A =09}=0A =0A =09if (vlan_tx_tag_present(skb)) {=0Adiff --git a/drivers/=\n"
- "net/gianfar.h b/drivers/net/gianfar.h=0Aindex 54de413..ec5d595 100644=0A---=\n"
- " a/drivers/net/gianfar.h=0A+++ b/drivers/net/gianfar.h=0A@@ -1039,6 +1039,7=\n"
- " @@ enum gfar_errata {=0A =09GFAR_ERRATA_74=09=09=3D 0x01,=0A =09GFAR_ERRAT=\n"
- "A_76=09=09=3D 0x02,=0A =09GFAR_ERRATA_A002=09=3D 0x04,=0A+=09GFAR_ERRATA_12=\n"
- "=09=09=3D 0x08, /* a.k.a errata eTSEC49 */=0A };=0A =0A /* Struct stolen al=\n"
- "most completely (and shamelessly) from the FCC enet source=0A-- =0A1.7.3.2=\n"
- =0A=0A=0A=0A=0A
+ "As specified by errata eTSEC49 of MPC8548 and errata eTSEC12 of MPC83xx,\n"
+ "older revisions of gianfar controllers will be unable to calculate a TCP/UDP\n"
+ "packet checksum for some alignments of the appropriate FCB. This patch checks\n"
+ "for FCB alignment on such controllers and falls back to software checksumming\n"
+ "if the alignment is known to be bad.\n"
+ "\n"
+ "Signed-off-by: Alex Dubov <oakad@yahoo.com>\n"
+ "---\n"
+ "Can we, please, proceed with this patch?\n"
+ "The issue is badly annoying, breaking quite a few of the MPC8548 chips.\n"
+ "\n"
+ "Changes for v2:\n"
+ "   - Make indentation slightly more consistent.\n"
+ "   - Replace bizarre switch-based condition with plain boring one.\n"
+ "\n"
+ " drivers/net/gianfar.c |   16 ++++++++++++++--\n"
+ " drivers/net/gianfar.h |    1 +\n"
+ " 2 files changed, 15 insertions(+), 2 deletions(-)\n"
+ "\n"
+ "diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c\n"
+ "index 5ed8f9f..3da19a5 100644\n"
+ "--- a/drivers/net/gianfar.c\n"
+ "+++ b/drivers/net/gianfar.c\n"
+ "@@ -950,6 +950,11 @@ static void gfar_detect_errata(struct gfar_private *priv)\n"
+ " \t\t\t(pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))\n"
+ " \t\tpriv->errata |= GFAR_ERRATA_A002;\n"
+ " \n"
+ "+\t/* MPC8313 Rev < 2.0, MPC8548 rev 2.0 */\n"
+ "+\tif ((pvr == 0x80850010 && mod == 0x80b0 && rev < 0x0020) ||\n"
+ "+\t\t\t(pvr == 0x80210020 && mod == 0x8030 && rev == 0x0020))\n"
+ "+\t\tpriv->errata |= GFAR_ERRATA_12;\n"
+ "+\n"
+ " \tif (priv->errata)\n"
+ " \t\tdev_info(dev, \"enabled errata workarounds, flags: 0x%x\\n\",\n"
+ " \t\t\t priv->errata);\n"
+ "@@ -2156,8 +2161,15 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)\n"
+ " \t/* Set up checksumming */\n"
+ " \tif (CHECKSUM_PARTIAL == skb->ip_summed) {\n"
+ " \t\tfcb = gfar_add_fcb(skb);\n"
+ "-\t\tlstatus |= BD_LFLAG(TXBD_TOE);\n"
+ "-\t\tgfar_tx_checksum(skb, fcb);\n"
+ "+\t\t/* as specified by errata */\n"
+ "+\t\tif (unlikely(gfar_has_errata(priv, GFAR_ERRATA_12)\n"
+ "+\t\t\t     && ((unsigned long)fcb % 0x20) > 0x18)) {\n"
+ "+\t\t\t__skb_pull(skb, GMAC_FCB_LEN);\n"
+ "+\t\t\tskb_checksum_help(skb);\n"
+ "+\t\t} else {\n"
+ "+\t\t\tlstatus |= BD_LFLAG(TXBD_TOE);\n"
+ "+\t\t\tgfar_tx_checksum(skb, fcb);\n"
+ "+\t\t}\n"
+ " \t}\n"
+ " \n"
+ " \tif (vlan_tx_tag_present(skb)) {\n"
+ "diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h\n"
+ "index 54de413..ec5d595 100644\n"
+ "--- a/drivers/net/gianfar.h\n"
+ "+++ b/drivers/net/gianfar.h\n"
+ "@@ -1039,6 +1039,7 @@ enum gfar_errata {\n"
+ " \tGFAR_ERRATA_74\t\t= 0x01,\n"
+ " \tGFAR_ERRATA_76\t\t= 0x02,\n"
+ " \tGFAR_ERRATA_A002\t= 0x04,\n"
+ "+\tGFAR_ERRATA_12\t\t= 0x08, /* a.k.a errata eTSEC49 */\n"
+ " };\n"
+ " \n"
+ " /* Struct stolen almost completely (and shamelessly) from the FCC enet source\n"
+ "-- \n"
+ 1.7.3.2
 
-8d0684fc03cb2a02a3ef850b2759eca1959b8eb53095419ab73f153043269e4e
+5569baf39cc0bfb7c22a0a844349129130fcc46662aa93d2a0e339f702553d0b

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.