Skip to contentSkip to conversation

sky2: patches for 2.6.16 -stable

PATCH In review Stephen Hemminger 2 participants 4 messages Feb 22, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover sky2: patches for 2.6.16 -stable

I compared the current sky2 driver against the version in 2.6.16.40. These were the only two patches that should be added. They both relate to dual port boards, and not to many people have them.

--
Stephen Hemminger <[email protected]>

#1 lore raw

PATCH 1/2 sky2: fix for NAPI with dual port boards

This driver uses port 0 to handle receives on both ports. So the netif_poll_disable call in dev_close would end up stopping the second port on dual port cards.

---
 drivers/net/sky2.c |    7 +++++++
 1 file changed, 7 insertions(+)
drivers/net/sky2.c +7 -0
@@ -1402,6 +1402,13 @@
 	/* Stop more packets from being queued */
 	netif_stop_queue(dev);
 
+ 	/*
+ 	 * Both ports share the NAPI poll on port 0, so if necessary undo the
+ 	 * the disable that is done in dev_close.
+ 	 */
+ 	if (sky2->port == 0 && hw->ports > 1)
+ 		netif_poll_enable(dev);
+
 	/* Disable port IRQ */
 	spin_lock_irq(&hw->hw_lock);
 	hw->intr_mask &= ~((sky2->port == 0) ? Y2_IS_IRQ_PHY1 : Y2_IS_IRQ_PHY2);

--
Stephen Hemminger <[email protected]>

#2 lore raw

PATCH 2/2 sky2: dual-port pci-x checksum fix

In reply to Stephen Hemminger

Add a workaround for dual port PCI-X card that returns status out of order sometimes because of split transactions.

drivers/net/sky2.c +19 -1
@@ -1031,7 +1031,25 @@
 	struct sky2_hw *hw = sky2->hw;
 	unsigned port = sky2->port;
 	u32 ramsize, rxspace;
-	int err = -ENOMEM;
+	int cap, err = -ENOMEM;
+	struct net_device *otherdev = hw->dev[sky2->port^1];
+
+	/*
+ 	 * On dual port PCI-X card, there is an problem where status
+	 * can be received out of order due to split transactions
+	 */
+	if (otherdev && netif_running(otherdev) &&
+ 	    (cap = pci_find_capability(hw->pdev, PCI_CAP_ID_PCIX))) {
+ 		struct sky2_port *osky2 = netdev_priv(otherdev);
+ 		u16 cmd;
+
+ 		cmd = sky2_pci_read16(hw, cap + PCI_X_CMD);
+ 		cmd &= ~PCI_X_CMD_MAX_SPLIT;
+ 		sky2_pci_write16(hw, cap + PCI_X_CMD, cmd);
+
+ 		sky2->rx_csum = 0;
+ 		osky2->rx_csum = 0;
+ 	}
 
 	if (netif_msg_ifup(sky2))
 		printk(KERN_INFO PFX "%s: enabling interface\n", dev->name);

--
Stephen Hemminger <[email protected]>

#3 lore raw
In reply to Stephen Hemminger
Quoted 4 lines · Stephen Hemminger

I compared the current sky2 driver against the version in 2.6.16.40. These were the only two patches that should be added. They both relate to dual port boards, and not to many people have them.

Thanks, I've applied both.

Quoted 1 line

Stephen Hemminger

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed