usb-usbnet-driver-bugfix.patch
hda-codec-don-t-return-error-at-initialization-of-modem-codec.patch
missing-critical-phys_to_virt-in-lib-swiotlb.c.patch
+sky2-pci-write.patch
+sky2-napi-dual.patch
+sky2-netconsole-free.patch
+sky2-tx-timeout-deadlock.patch
+sky2-pause-flush.patch
+sky2-ramset.patch
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:12 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:35 -0800
+Subject: sky2: fix for NAPI with dual port boards
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.391931938@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-napi-dual.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+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.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/sky2.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.c
++++ linux-2.6.19.5/drivers/net/sky2.c
+@@ -1499,6 +1499,13 @@ static int sky2_down(struct net_device *
+ imask &= ~portirq_msk[port];
+ sky2_write32(hw, B0_IMSK, imask);
+
++ /*
++ * 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);
++
+ sky2_gmac_reset(hw, port);
+
+ /* Stop transmitter */
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:04 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:36 -0800
+Subject: sky2: kfree_skb with IRQ with netconsole
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.494864678@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-netconsole-free.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+When using netconsole, it is possible for the driver to try and
+free skb's with IRQ's disabled. This could cause problems if the skb
+had a destructor function that didn't expect this. The documented semantics
+is that skb->destructor callback happens in softirq.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/sky2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.c
++++ linux-2.6.19.5/drivers/net/sky2.c
+@@ -1454,7 +1454,7 @@ static void sky2_tx_complete(struct sky2
+ if (unlikely(netif_msg_tx_done(sky2)))
+ printk(KERN_DEBUG "%s: tx done %u\n",
+ dev->name, idx);
+- dev_kfree_skb(re->skb);
++ dev_kfree_skb_any(re->skb);
+ }
+
+ le->opcode = 0; /* paranoia */
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:20 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:38 -0800
+Subject: sky2: dont flush good pause frames
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.809906985@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-pause-flush.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+Don't mark pause frames as errors. This caused a bug that would
+lockup transmitter, as well as all the other ports on a switch.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/sky2.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.h
++++ linux-2.6.19.5/drivers/net/sky2.h
+@@ -1576,7 +1576,7 @@ enum {
+
+ GMR_FS_ANY_ERR = GMR_FS_RX_FF_OV | GMR_FS_CRC_ERR |
+ GMR_FS_FRAGMENT | GMR_FS_LONG_ERR |
+- GMR_FS_MII_ERR | GMR_FS_GOOD_FC | GMR_FS_BAD_FC |
++ GMR_FS_MII_ERR | GMR_FS_BAD_FC |
+ GMR_FS_UN_SIZE | GMR_FS_JABBER,
+ };
+
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:04 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:34 -0800
+Subject: sky2: pci config blocks phy power control
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.255367846@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-pci-write.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+PHY power control won't work because writes to PCI config space
+are not re-enabled.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/sky2.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.c
++++ linux-2.6.19.5/drivers/net/sky2.c
+@@ -569,8 +569,8 @@ static void sky2_phy_power(struct sky2_h
+ if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
+ onoff = !onoff;
+
++ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
+-
+ if (onoff)
+ /* Turn off phy power saving */
+ reg1 &= ~phy_power[port];
+@@ -579,6 +579,7 @@ static void sky2_phy_power(struct sky2_h
+
+ sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
+ sky2_pci_read32(hw, PCI_DEV_REG1);
++ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+ udelay(100);
+ }
+
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:27 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:39 -0800
+Subject: sky2: fix ram buffer allocation settings
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.877726206@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-ramset.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+Different chipsets have different amount of ram buffer (some have none),
+so need to make sure that driver does proper setup for all cases from 0 on
+to 48K, in units of 1K.
+
+This is a backport of the code from 2.6.19 or later
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/sky2.c | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.c
++++ linux-2.6.19.5/drivers/net/sky2.c
+@@ -700,8 +700,14 @@ static void sky2_mac_init(struct sky2_hw
+ }
+
+ /* Assign Ram Buffer allocation in units of 64bit (8 bytes) */
+-static void sky2_ramset(struct sky2_hw *hw, u16 q, u32 start, u32 end)
++static void sky2_ramset(struct sky2_hw *hw, u16 q, u32 start, u32 space)
+ {
++ u32 end;
++
++ start *= 1024/8;
++ space *= 1024/8;
++ end = start + space - 1;
++
+ pr_debug(PFX "q %d %#x %#x\n", q, start, end);
+
+ sky2_write8(hw, RB_ADDR(q, RB_CTRL), RB_RST_CLR);
+@@ -1193,20 +1199,21 @@ static int sky2_up(struct net_device *de
+
+ sky2_mac_init(hw, port);
+
+- /* Determine available ram buffer space in qwords. */
+- ramsize = sky2_read8(hw, B2_E_0) * 4096/8;
+-
+- if (ramsize > 6*1024/8)
+- rxspace = ramsize - (ramsize + 2) / 3;
+- else
+- rxspace = ramsize / 2;
++ /* Determine available ram buffer space (in 4K blocks). */
++ ramsize = sky2_read8(hw, B2_E_0) * 4;
++ if (ramsize != 0) {
++ if (ramsize < 16)
++ rxspace = ramsize / 2;
++ else
++ rxspace = 8 + (2*(ramsize - 16))/3;
+
+- sky2_ramset(hw, rxqaddr[port], 0, rxspace-1);
+- sky2_ramset(hw, txqaddr[port], rxspace, ramsize-1);
++ sky2_ramset(hw, rxqaddr[port], 0, rxspace);
++ sky2_ramset(hw, txqaddr[port], rxspace, ramsize - rxspace);
+
+- /* Make sure SyncQ is disabled */
+- sky2_write8(hw, RB_ADDR(port == 0 ? Q_XS1 : Q_XS2, RB_CTRL),
+- RB_RST_SET);
++ /* Make sure SyncQ is disabled */
++ sky2_write8(hw, RB_ADDR(port == 0 ? Q_XS1 : Q_XS2, RB_CTRL),
++ RB_RST_SET);
++ }
+
+ sky2_qset(hw, txqaddr[port]);
+
--- /dev/null
+From shemminger@linux-foundation.org Mon Feb 26 17:36:12 2007
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+Date: Mon, 26 Feb 2007 17:18:37 -0800
+Subject: sky2: transmit timeout deadlock
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20070227012021.597873758@linux-foundation.org>
+Content-Disposition: inline; filename=sky2-tx-timeout-deadlock.patch
+
+From: Stephen Hemminger <shemminger@linux-foundation.org>
+
+The code in transmit timeout incorrectly assumed that netif_tx_lock
+was not set.
+
+Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/sky2.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- linux-2.6.19.5.orig/drivers/net/sky2.c
++++ linux-2.6.19.5/drivers/net/sky2.c
+@@ -1783,6 +1783,7 @@ out:
+
+ /* Transmit timeout is only called if we are running, carries is up
+ * and tx queue is full (stopped).
++ * Called with netif_tx_lock held.
+ */
+ static void sky2_tx_timeout(struct net_device *dev)
+ {
+@@ -1808,17 +1809,14 @@ static void sky2_tx_timeout(struct net_d
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
+ } else if (report != sky2->tx_cons) {
+ printk(KERN_INFO PFX "status report lost?\n");
+-
+- netif_tx_lock_bh(dev);
+ sky2_tx_complete(sky2, report);
+- netif_tx_unlock_bh(dev);
+ } else {
+ printk(KERN_INFO PFX "hardware hung? flushing\n");
+
+ sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
+ sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET);
+
+- sky2_tx_clean(dev);
++ sky2_tx_complete(sky2, sky2->tx_prod);
+
+ sky2_qset(hw, txq);
+ sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1);