[PATCH] SiS190/191 half-duplex initialization fix

Subsystems: networking drivers, the rest

STALE6023d

2 messages, 2 authors, 2010-02-16 · open the first message on its own page

[PATCH] SiS190/191 half-duplex initialization fix

From: Riccardo Ghetta <hidden>
Date: 2010-02-15 20:19:16

Adds half-duplex specific setup code (taken from SiS own GPL driver).
Without those, half-duplex connections are very unreliable, often
working on small transfers and failing after a while.

Signed-off-by: Riccardo Ghetta <redacted>
---
 drivers/net/sis190.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index 626de76..6f581e7 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -47,7 +47,7 @@
 #define PHY_ID_ANY		0x1f
 #define MII_REG_ANY		0x1f
 
-#define DRV_VERSION		"1.3"
+#define DRV_VERSION		"1.4"
 #define DRV_NAME		"sis190"
 #define SIS190_DRIVER_NAME	DRV_NAME " Gigabit Ethernet driver " DRV_VERSION
 #define PFX DRV_NAME ": "
@@ -294,6 +294,7 @@ struct sis190_private {
 	struct mii_if_info mii_if;
 	struct list_head first_phy;
 	u32 features;
+        u32 negotiated_lpa;
 };
 
 struct sis190_phy {
@@ -1004,6 +1005,8 @@ static void sis190_phy_task(struct work_struct *work)
 			SIS_W32(RGDelay, 0x0440);
 		}
 
+ 		tp->negotiated_lpa = p->val;
+
 		net_link(tp, KERN_INFO "%s: link on %s mode.\n", dev->name,
 			 p->msg);
 		netif_carrier_on(dev);
@@ -1211,6 +1214,13 @@ static netdev_tx_t sis190_start_xmit(struct sk_buff *skb,
 	wmb();
 
 	desc->status = cpu_to_le32(OWNbit | INTbit | DEFbit | CRCbit | PADbit);
+	if (tp->negotiated_lpa & (LPA_1000HALF | LPA_100HALF | LPA_10HALF))
+	{
+		/* Half Duplex */
+		desc->status |= cpu_to_le32(COLEN | CRSEN | BKFEN);
+ 		if (tp->negotiated_lpa & (LPA_1000HALF | LPA_1000FULL))
+			desc->status |= cpu_to_le32(EXTEN | BSTEN); /* gigabit HD */
+	}
 
 	tp->cur_tx++;
 
-- 
1.6.4.4

Re: [PATCH] SiS190/191 half-duplex initialization fix

From: David Miller <davem@davemloft.net>
Date: 2010-02-16 22:47:41

From: Riccardo Ghetta <redacted>
Date: Mon, 15 Feb 2010 21:19:00 +0100
+        u32 negotiated_lpa;
Uses spaces instead of tabs.
+ 		tp->negotiated_lpa = p->val;
Has a space then tabs, should be all tab characters.
+	if (tp->negotiated_lpa & (LPA_1000HALF | LPA_100HALF | LPA_10HALF))
+	{
Should be:

	if (condition) {

ie. the openning brace need to be on the same line as the if
statement.

Please fix these issues up and resubmit your patch, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help