Netdev List
 help / color / mirror / Atom feed
* [net-next-2.6 PATCH 5/8] e1000e: initial support for 82579 LOMs
From: Jeff Kirsher @ 2010-06-16 23:27 UTC (permalink / raw)
  To: davem; +Cc: netdev, gospo, bphilips, Bruce Allan, Jeff Kirsher
In-Reply-To: <20100616232523.4834.84849.stgit@localhost.localdomain>

From: Bruce Allan <bruce.w.allan@intel.com>

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/e1000e/defines.h |    2 
 drivers/net/e1000e/e1000.h   |    4 +
 drivers/net/e1000e/ethtool.c |   13 ++
 drivers/net/e1000e/hw.h      |   12 +-
 drivers/net/e1000e/ich8lan.c |  328 ++++++++++++++++++++++++++++++++++++++++--
 drivers/net/e1000e/netdev.c  |   70 ++++++---
 drivers/net/e1000e/phy.c     |    3 
 7 files changed, 386 insertions(+), 46 deletions(-)

diff --git a/drivers/net/e1000e/defines.h b/drivers/net/e1000e/defines.h
index 4dc02c7..5a6de34 100644
--- a/drivers/net/e1000e/defines.h
+++ b/drivers/net/e1000e/defines.h
@@ -359,6 +359,7 @@
 #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE       0x00000001
 #define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE       0x00000008
 #define E1000_EXTCNF_CTRL_SWFLAG                 0x00000020
+#define E1000_EXTCNF_CTRL_GATE_PHY_CFG           0x00000080
 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK   0x00FF0000
 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT          16
 #define E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK   0x0FFF0000
@@ -714,6 +715,7 @@
 #define BME1000_E_PHY_ID_R2  0x01410CB1
 #define I82577_E_PHY_ID      0x01540050
 #define I82578_E_PHY_ID      0x004DD040
+#define I82579_E_PHY_ID      0x01540090
 
 /* M88E1000 Specific Registers */
 #define M88E1000_PHY_SPEC_CTRL     0x10  /* PHY Specific Control Register */
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index 79e7c4c..0e59f15 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -164,6 +164,7 @@ enum e1000_boards {
 	board_ich9lan,
 	board_ich10lan,
 	board_pchlan,
+	board_pch2lan,
 };
 
 struct e1000_queue_stats {
@@ -477,6 +478,7 @@ extern struct e1000_info e1000_ich8_info;
 extern struct e1000_info e1000_ich9_info;
 extern struct e1000_info e1000_ich10_info;
 extern struct e1000_info e1000_pch_info;
+extern struct e1000_info e1000_pch2_info;
 extern struct e1000_info e1000_es2_info;
 
 extern s32 e1000e_read_pba_num(struct e1000_hw *hw, u32 *pba_num);
@@ -495,6 +497,8 @@ extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
 extern void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
 extern void e1000e_disable_gig_wol_ich8lan(struct e1000_hw *hw);
 extern s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
+extern s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable);
+extern void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw);
 
 extern s32 e1000e_check_for_copper_link(struct e1000_hw *hw);
 extern s32 e1000e_check_for_fiber_link(struct e1000_hw *hw);
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index 86c6a26..312c704 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -880,6 +880,7 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
 	switch (mac->type) {
 	case e1000_ich10lan:
 	case e1000_pchlan:
+	case e1000_pch2lan:
 		mask |= (1 << 18);
 		break;
 	default:
@@ -1321,6 +1322,17 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
 		/* Workaround: K1 must be disabled for stable 1Gbps operation */
 		e1000_configure_k1_ich8lan(hw, false);
 		break;
+	case e1000_phy_82579:
+		/* Disable PHY energy detect power down */
+		e1e_rphy(hw, PHY_REG(0, 21), &phy_reg);
+		e1e_wphy(hw, PHY_REG(0, 21), phy_reg & ~(1 << 3));
+		/* Disable full chip energy detect */
+		e1e_rphy(hw, PHY_REG(776, 18), &phy_reg);
+		e1e_wphy(hw, PHY_REG(776, 18), phy_reg | 1);
+		/* Enable loopback on the PHY */
+#define I82577_PHY_LBK_CTRL          19
+		e1e_wphy(hw, I82577_PHY_LBK_CTRL, 0x8001);
+		break;
 	default:
 		break;
 	}
@@ -1878,6 +1890,7 @@ static int e1000_phys_id(struct net_device *netdev, u32 data)
 
 	if ((hw->phy.type == e1000_phy_ife) ||
 	    (hw->mac.type == e1000_pchlan) ||
+	    (hw->mac.type == e1000_pch2lan) ||
 	    (hw->mac.type == e1000_82583) ||
 	    (hw->mac.type == e1000_82574)) {
 		INIT_WORK(&adapter->led_blink_task, e1000e_led_blink_task);
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
index 5d1220d..96116ce 100644
--- a/drivers/net/e1000e/hw.h
+++ b/drivers/net/e1000e/hw.h
@@ -217,7 +217,10 @@ enum e1e_registers {
 	E1000_SWSM      = 0x05B50, /* SW Semaphore */
 	E1000_FWSM      = 0x05B54, /* FW Semaphore */
 	E1000_SWSM2     = 0x05B58, /* Driver-only SW semaphore */
-	E1000_CRC_OFFSET = 0x05F50, /* CRC Offset register */
+	E1000_FFLT_DBG  = 0x05F04, /* Debug Register */
+	E1000_PCH_RAICC_BASE = 0x05F50, /* Receive Address Initial CRC */
+#define E1000_PCH_RAICC(_n)	(E1000_PCH_RAICC_BASE + ((_n) * 4))
+#define E1000_CRC_OFFSET	E1000_PCH_RAICC_BASE
 	E1000_HICR      = 0x08F00, /* Host Interface Control */
 };
 
@@ -303,13 +306,14 @@ enum e1e_registers {
 #define E1000_KMRNCTRLSTA_OFFSET	0x001F0000
 #define E1000_KMRNCTRLSTA_OFFSET_SHIFT	16
 #define E1000_KMRNCTRLSTA_REN		0x00200000
+#define E1000_KMRNCTRLSTA_CTRL_OFFSET	0x1    /* Kumeran Control */
 #define E1000_KMRNCTRLSTA_DIAG_OFFSET	0x3    /* Kumeran Diagnostic */
 #define E1000_KMRNCTRLSTA_TIMEOUTS	0x4    /* Kumeran Timeouts */
 #define E1000_KMRNCTRLSTA_INBAND_PARAM	0x9    /* Kumeran InBand Parameters */
 #define E1000_KMRNCTRLSTA_DIAG_NELPBK	0x1000 /* Nearend Loopback mode */
 #define E1000_KMRNCTRLSTA_K1_CONFIG	0x7
 #define E1000_KMRNCTRLSTA_K1_ENABLE	0x140E
-#define E1000_KMRNCTRLSTA_K1_DISABLE	0x1400
+#define E1000_KMRNCTRLSTA_HD_CTRL	0x0002
 
 #define IFE_PHY_EXTENDED_STATUS_CONTROL	0x10
 #define IFE_PHY_SPECIAL_CONTROL		0x11 /* 100BaseTx PHY Special Control */
@@ -387,6 +391,8 @@ enum e1e_registers {
 #define E1000_DEV_ID_PCH_M_HV_LC		0x10EB
 #define E1000_DEV_ID_PCH_D_HV_DM		0x10EF
 #define E1000_DEV_ID_PCH_D_HV_DC		0x10F0
+#define E1000_DEV_ID_PCH2_LV_LM			0x1502
+#define E1000_DEV_ID_PCH2_LV_V			0x1503
 
 #define E1000_REVISION_4 4
 
@@ -406,6 +412,7 @@ enum e1000_mac_type {
 	e1000_ich9lan,
 	e1000_ich10lan,
 	e1000_pchlan,
+	e1000_pch2lan,
 };
 
 enum e1000_media_type {
@@ -442,6 +449,7 @@ enum e1000_phy_type {
 	e1000_phy_bm,
 	e1000_phy_82578,
 	e1000_phy_82577,
+	e1000_phy_82579,
 };
 
 enum e1000_bus_width {
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 7e2f98c..8274499 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -52,6 +52,8 @@
  * 82577LC Gigabit Network Connection
  * 82578DM Gigabit Network Connection
  * 82578DC Gigabit Network Connection
+ * 82579LM Gigabit Network Connection
+ * 82579V Gigabit Network Connection
  */
 
 #include "e1000.h"
@@ -126,6 +128,9 @@
 #define HV_SMB_ADDR_PEC_EN     0x0200
 #define HV_SMB_ADDR_VALID      0x0080
 
+/* PHY Power Management Control */
+#define HV_PM_CTRL		PHY_REG(770, 17)
+
 /* Strapping Option Register - RO */
 #define E1000_STRAP                     0x0000C
 #define E1000_STRAP_SMBUS_ADDRESS_MASK  0x00FE0000
@@ -279,13 +284,13 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 	phy->ops.power_down           = e1000_power_down_phy_copper_ich8lan;
 	phy->autoneg_mask             = AUTONEG_ADVERTISE_SPEED_DEFAULT;
 
+	/*
+	 * The MAC-PHY interconnect may still be in SMBus mode
+	 * after Sx->S0.  If the manageability engine (ME) is
+	 * disabled, then toggle the LANPHYPC Value bit to force
+	 * the interconnect to PCIe mode.
+	 */
 	if (!(er32(FWSM) & E1000_ICH_FWSM_FW_VALID)) {
-		/*
-		 * The MAC-PHY interconnect may still be in SMBus mode
-		 * after Sx->S0.  Toggle the LANPHYPC Value bit to force
-		 * the interconnect to PCIe mode, but only if there is no
-		 * firmware present otherwise firmware will have done it.
-		 */
 		ctrl = er32(CTRL);
 		ctrl |=  E1000_CTRL_LANPHYPC_OVERRIDE;
 		ctrl &= ~E1000_CTRL_LANPHYPC_VALUE;
@@ -326,6 +331,7 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 
 	switch (phy->type) {
 	case e1000_phy_82577:
+	case e1000_phy_82579:
 		phy->ops.check_polarity = e1000_check_polarity_82577;
 		phy->ops.force_speed_duplex =
 			e1000_phy_force_speed_duplex_82577;
@@ -530,6 +536,7 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
 		mac->ops.led_off = e1000_led_off_ich8lan;
 		break;
 	case e1000_pchlan:
+	case e1000_pch2lan:
 		/* check management mode */
 		mac->ops.check_mng_mode = e1000_check_mng_mode_pchlan;
 		/* ID LED init */
@@ -550,6 +557,14 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
 	if (mac->type == e1000_ich8lan)
 		e1000e_set_kmrn_lock_loss_workaround_ich8lan(hw, true);
 
+	/* Disable PHY configuration by hardware, config by software */
+	if (mac->type == e1000_pch2lan) {
+		u32 extcnf_ctrl = er32(EXTCNF_CTRL);
+
+		extcnf_ctrl |= E1000_EXTCNF_CTRL_GATE_PHY_CFG;
+		ew32(EXTCNF_CTRL, extcnf_ctrl);
+	}
+
 	return 0;
 }
 
@@ -653,10 +668,19 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
 	if (rc)
 		return rc;
 
-	if (hw->mac.type == e1000_pchlan)
-		rc = e1000_init_phy_params_pchlan(hw);
-	else
+	switch (hw->mac.type) {
+	case e1000_ich8lan:
+	case e1000_ich9lan:
+	case e1000_ich10lan:
 		rc = e1000_init_phy_params_ich8lan(hw);
+		break;
+	case e1000_pchlan:
+	case e1000_pch2lan:
+		rc = e1000_init_phy_params_pchlan(hw);
+		break;
+	default:
+		break;
+	}
 	if (rc)
 		return rc;
 
@@ -861,6 +885,7 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 		}
 		/* Fall-thru */
 	case e1000_pchlan:
+	case e1000_pch2lan:
 		sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
 		break;
 	default:
@@ -880,8 +905,10 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	 * extended configuration before SW configuration
 	 */
 	data = er32(EXTCNF_CTRL);
-	if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
-		goto out;
+	if (!(hw->mac.type == e1000_pch2lan)) {
+		if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
+			goto out;
+	}
 
 	cnf_size = er32(EXTCNF_SIZE);
 	cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
@@ -893,7 +920,8 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
 
 	if (!(data & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) &&
-	    (hw->mac.type == e1000_pchlan)) {
+	    ((hw->mac.type == e1000_pchlan) ||
+	     (hw->mac.type == e1000_pch2lan))) {
 		/*
 		 * HW configures the SMBus address and LEDs when the
 		 * OEM and LCD Write Enable bits are set in the NVM.
@@ -1100,16 +1128,18 @@ static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)
 	u32 mac_reg;
 	u16 oem_reg;
 
-	if (hw->mac.type != e1000_pchlan)
+	if ((hw->mac.type != e1000_pch2lan) && (hw->mac.type != e1000_pchlan))
 		return ret_val;
 
 	ret_val = hw->phy.ops.acquire(hw);
 	if (ret_val)
 		return ret_val;
 
-	mac_reg = er32(EXTCNF_CTRL);
-	if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE)
-		goto out;
+	if (!(hw->mac.type == e1000_pch2lan)) {
+		mac_reg = er32(EXTCNF_CTRL);
+		if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE)
+			goto out;
+	}
 
 	mac_reg = er32(FEXTNVM);
 	if (!(mac_reg & E1000_FEXTNVM_SW_CONFIG_ICH8M))
@@ -1250,6 +1280,243 @@ out:
 }
 
 /**
+ *  e1000_copy_rx_addrs_to_phy_ich8lan - Copy Rx addresses from MAC to PHY
+ *  @hw:   pointer to the HW structure
+ **/
+void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw)
+{
+	u32 mac_reg;
+	u16 i;
+
+	/* Copy both RAL/H (rar_entry_count) and SHRAL/H (+4) to PHY */
+	for (i = 0; i < (hw->mac.rar_entry_count + 4); i++) {
+		mac_reg = er32(RAL(i));
+		e1e_wphy(hw, BM_RAR_L(i), (u16)(mac_reg & 0xFFFF));
+		e1e_wphy(hw, BM_RAR_M(i), (u16)((mac_reg >> 16) & 0xFFFF));
+		mac_reg = er32(RAH(i));
+		e1e_wphy(hw, BM_RAR_H(i), (u16)(mac_reg & 0xFFFF));
+		e1e_wphy(hw, BM_RAR_CTRL(i), (u16)((mac_reg >> 16) & 0x8000));
+	}
+}
+
+static u32 e1000_calc_rx_da_crc(u8 mac[])
+{
+	u32 poly = 0xEDB88320;	/* Polynomial for 802.3 CRC calculation */
+	u32 i, j, mask, crc;
+
+	crc = 0xffffffff;
+	for (i = 0; i < 6; i++) {
+		crc = crc ^ mac[i];
+		for (j = 8; j > 0; j--) {
+			mask = (crc & 1) * (-1);
+			crc = (crc >> 1) ^ (poly & mask);
+		}
+	}
+	return ~crc;
+}
+
+/**
+ *  e1000_lv_jumbo_workaround_ich8lan - required for jumbo frame operation
+ *  with 82579 PHY
+ *  @hw: pointer to the HW structure
+ *  @enable: flag to enable/disable workaround when enabling/disabling jumbos
+ **/
+s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable)
+{
+	s32 ret_val = 0;
+	u16 phy_reg, data;
+	u32 mac_reg;
+	u16 i;
+
+	if (hw->mac.type != e1000_pch2lan)
+		goto out;
+
+	/* disable Rx path while enabling/disabling workaround */
+	e1e_rphy(hw, PHY_REG(769, 20), &phy_reg);
+	ret_val = e1e_wphy(hw, PHY_REG(769, 20), phy_reg | (1 << 14));
+	if (ret_val)
+		goto out;
+
+	if (enable) {
+		/*
+		 * Write Rx addresses (rar_entry_count for RAL/H, +4 for
+		 * SHRAL/H) and initial CRC values to the MAC
+		 */
+		for (i = 0; i < (hw->mac.rar_entry_count + 4); i++) {
+			u8 mac_addr[ETH_ALEN] = {0};
+			u32 addr_high, addr_low;
+
+			addr_high = er32(RAH(i));
+			if (!(addr_high & E1000_RAH_AV))
+				continue;
+			addr_low = er32(RAL(i));
+			mac_addr[0] = (addr_low & 0xFF);
+			mac_addr[1] = ((addr_low >> 8) & 0xFF);
+			mac_addr[2] = ((addr_low >> 16) & 0xFF);
+			mac_addr[3] = ((addr_low >> 24) & 0xFF);
+			mac_addr[4] = (addr_high & 0xFF);
+			mac_addr[5] = ((addr_high >> 8) & 0xFF);
+
+			ew32(PCH_RAICC(i),
+					e1000_calc_rx_da_crc(mac_addr));
+		}
+
+		/* Write Rx addresses to the PHY */
+		e1000_copy_rx_addrs_to_phy_ich8lan(hw);
+
+		/* Enable jumbo frame workaround in the MAC */
+		mac_reg = er32(FFLT_DBG);
+		mac_reg &= ~(1 << 14);
+		mac_reg |= (7 << 15);
+		ew32(FFLT_DBG, mac_reg);
+
+		mac_reg = er32(RCTL);
+		mac_reg |= E1000_RCTL_SECRC;
+		ew32(RCTL, mac_reg);
+
+		ret_val = e1000e_read_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_CTRL_OFFSET,
+						&data);
+		if (ret_val)
+			goto out;
+		ret_val = e1000e_write_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_CTRL_OFFSET,
+						data | (1 << 0));
+		if (ret_val)
+			goto out;
+		ret_val = e1000e_read_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_HD_CTRL,
+						&data);
+		if (ret_val)
+			goto out;
+		data &= ~(0xF << 8);
+		data |= (0xB << 8);
+		ret_val = e1000e_write_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_HD_CTRL,
+						data);
+		if (ret_val)
+			goto out;
+
+		/* Enable jumbo frame workaround in the PHY */
+		e1e_rphy(hw, PHY_REG(769, 20), &data);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 20), data & ~(1 << 14));
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(769, 23), &data);
+		data &= ~(0x7F << 5);
+		data |= (0x37 << 5);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 23), data);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(769, 16), &data);
+		data &= ~(1 << 13);
+		data |= (1 << 12);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 16), data);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(776, 20), &data);
+		data &= ~(0x3FF << 2);
+		data |= (0x1A << 2);
+		ret_val = e1e_wphy(hw, PHY_REG(776, 20), data);
+		if (ret_val)
+			goto out;
+		ret_val = e1e_wphy(hw, PHY_REG(776, 23), 0xFE00);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, HV_PM_CTRL, &data);
+		ret_val = e1e_wphy(hw, HV_PM_CTRL, data | (1 << 10));
+		if (ret_val)
+			goto out;
+	} else {
+		/* Write MAC register values back to h/w defaults */
+		mac_reg = er32(FFLT_DBG);
+		mac_reg &= ~(0xF << 14);
+		ew32(FFLT_DBG, mac_reg);
+
+		mac_reg = er32(RCTL);
+		mac_reg &= ~E1000_RCTL_SECRC;
+		ew32(FFLT_DBG, mac_reg);
+
+		ret_val = e1000e_read_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_CTRL_OFFSET,
+						&data);
+		if (ret_val)
+			goto out;
+		ret_val = e1000e_write_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_CTRL_OFFSET,
+						data & ~(1 << 0));
+		if (ret_val)
+			goto out;
+		ret_val = e1000e_read_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_HD_CTRL,
+						&data);
+		if (ret_val)
+			goto out;
+		data &= ~(0xF << 8);
+		data |= (0xB << 8);
+		ret_val = e1000e_write_kmrn_reg(hw,
+						E1000_KMRNCTRLSTA_HD_CTRL,
+						data);
+		if (ret_val)
+			goto out;
+
+		/* Write PHY register values back to h/w defaults */
+		e1e_rphy(hw, PHY_REG(769, 20), &data);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 20), data & ~(1 << 14));
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(769, 23), &data);
+		data &= ~(0x7F << 5);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 23), data);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(769, 16), &data);
+		data &= ~(1 << 12);
+		data |= (1 << 13);
+		ret_val = e1e_wphy(hw, PHY_REG(769, 16), data);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, PHY_REG(776, 20), &data);
+		data &= ~(0x3FF << 2);
+		data |= (0x8 << 2);
+		ret_val = e1e_wphy(hw, PHY_REG(776, 20), data);
+		if (ret_val)
+			goto out;
+		ret_val = e1e_wphy(hw, PHY_REG(776, 23), 0x7E00);
+		if (ret_val)
+			goto out;
+		e1e_rphy(hw, HV_PM_CTRL, &data);
+		ret_val = e1e_wphy(hw, HV_PM_CTRL, data & ~(1 << 10));
+		if (ret_val)
+			goto out;
+	}
+
+	/* re-enable Rx path after enabling/disabling workaround */
+	ret_val = e1e_wphy(hw, PHY_REG(769, 20), phy_reg & ~(1 << 14));
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_lv_phy_workarounds_ich8lan - A series of Phy workarounds to be
+ *  done after every PHY reset.
+ **/
+static s32 e1000_lv_phy_workarounds_ich8lan(struct e1000_hw *hw)
+{
+	s32 ret_val = 0;
+
+	if (hw->mac.type != e1000_pch2lan)
+		goto out;
+
+	/* Set MDIO slow mode before any other MDIO access */
+	ret_val = e1000_set_mdio_slow_mode_hv(hw);
+
+out:
+	return ret_val;
+}
+
+/**
  *  e1000_lan_init_done_ich8lan - Check for PHY config completion
  *  @hw: pointer to the HW structure
  *
@@ -1300,12 +1567,17 @@ static s32 e1000_post_phy_reset_ich8lan(struct e1000_hw *hw)
 		if (ret_val)
 			goto out;
 		break;
+	case e1000_pch2lan:
+		ret_val = e1000_lv_phy_workarounds_ich8lan(hw);
+		if (ret_val)
+			goto out;
+		break;
 	default:
 		break;
 	}
 
 	/* Dummy read to clear the phy wakeup bit after lcd reset */
-	if (hw->mac.type == e1000_pchlan)
+	if (hw->mac.type >= e1000_pchlan)
 		e1e_rphy(hw, BM_WUC, &reg);
 
 	/* Configure the LCD with the extended configuration region in NVM */
@@ -2829,6 +3101,7 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw)
 
 	ew32(FCTTV, hw->fc.pause_time);
 	if ((hw->phy.type == e1000_phy_82578) ||
+	    (hw->phy.type == e1000_phy_82579) ||
 	    (hw->phy.type == e1000_phy_82577)) {
 		ew32(FCRTV_PCH, hw->fc.refresh_time);
 
@@ -2892,6 +3165,7 @@ static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw)
 			return ret_val;
 		break;
 	case e1000_phy_82577:
+	case e1000_phy_82579:
 		ret_val = e1000_copper_link_setup_82577(hw);
 		if (ret_val)
 			return ret_val;
@@ -3399,6 +3673,7 @@ static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw)
 
 	/* Clear PHY statistics registers */
 	if ((hw->phy.type == e1000_phy_82578) ||
+	    (hw->phy.type == e1000_phy_82579) ||
 	    (hw->phy.type == e1000_phy_82577)) {
 		hw->phy.ops.read_reg(hw, HV_SCC_UPPER, &phy_data);
 		hw->phy.ops.read_reg(hw, HV_SCC_LOWER, &phy_data);
@@ -3534,3 +3809,22 @@ struct e1000_info e1000_pch_info = {
 	.phy_ops		= &ich8_phy_ops,
 	.nvm_ops		= &ich8_nvm_ops,
 };
+
+struct e1000_info e1000_pch2_info = {
+	.mac			= e1000_pch2lan,
+	.flags			= FLAG_IS_ICH
+				  | FLAG_HAS_WOL
+				  | FLAG_RX_CSUM_ENABLED
+				  | FLAG_HAS_CTRLEXT_ON_LOAD
+				  | FLAG_HAS_AMT
+				  | FLAG_HAS_FLASH
+				  | FLAG_HAS_JUMBO_FRAMES
+				  | FLAG_APME_IN_WUC,
+	.flags2			= FLAG2_HAS_PHY_STATS,
+	.pba			= 18,
+	.max_hw_frame_size	= DEFAULT_JUMBO,
+	.get_variants		= e1000_get_variants_ich8lan,
+	.mac_ops		= &ich8_mac_ops,
+	.phy_ops		= &ich8_phy_ops,
+	.nvm_ops		= &ich8_nvm_ops,
+};
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index b4c431d..f296f6f 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -67,6 +67,7 @@ static const struct e1000_info *e1000_info_tbl[] = {
 	[board_ich9lan]		= &e1000_ich9_info,
 	[board_ich10lan]	= &e1000_ich10_info,
 	[board_pchlan]		= &e1000_pch_info,
+	[board_pch2lan]		= &e1000_pch2_info,
 };
 
 struct e1000_reg_info {
@@ -2723,6 +2724,16 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
 		e1e_wphy(hw, 22, phy_data);
 	}
 
+	/* Workaround Si errata on 82579 - configure jumbo frame flow */
+	if (hw->mac.type == e1000_pch2lan) {
+		s32 ret_val;
+
+		if (rctl & E1000_RCTL_LPE)
+			ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, true);
+		else
+			ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, false);
+	}
+
 	/* Setup buffer sizes */
 	rctl &= ~E1000_RCTL_SZ_4096;
 	rctl |= E1000_RCTL_BSEX;
@@ -3118,7 +3129,27 @@ void e1000e_reset(struct e1000_adapter *adapter)
 	 *   with ERT support assuming ERT set to E1000_ERT_2048), or
 	 * - the full Rx FIFO size minus one full frame
 	 */
-	if (hw->mac.type == e1000_pchlan) {
+	if (adapter->flags & FLAG_DISABLE_FC_PAUSE_TIME)
+		fc->pause_time = 0xFFFF;
+	else
+		fc->pause_time = E1000_FC_PAUSE_TIME;
+	fc->send_xon = 1;
+	fc->current_mode = fc->requested_mode;
+
+	switch (hw->mac.type) {
+	default:
+		if ((adapter->flags & FLAG_HAS_ERT) &&
+		    (adapter->netdev->mtu > ETH_DATA_LEN))
+			hwm = min(((pba << 10) * 9 / 10),
+				  ((pba << 10) - (E1000_ERT_2048 << 3)));
+		else
+			hwm = min(((pba << 10) * 9 / 10),
+				  ((pba << 10) - adapter->max_frame_size));
+
+		fc->high_water = hwm & E1000_FCRTH_RTH; /* 8-byte granularity */
+		fc->low_water = fc->high_water - 8;
+		break;
+	case e1000_pchlan:
 		/*
 		 * Workaround PCH LOM adapter hangs with certain network
 		 * loads.  If hangs persist, try disabling Tx flow control.
@@ -3131,26 +3162,15 @@ void e1000e_reset(struct e1000_adapter *adapter)
 			fc->low_water  = 0x3000;
 		}
 		fc->refresh_time = 0x1000;
-	} else {
-		if ((adapter->flags & FLAG_HAS_ERT) &&
-		    (adapter->netdev->mtu > ETH_DATA_LEN))
-			hwm = min(((pba << 10) * 9 / 10),
-				  ((pba << 10) - (E1000_ERT_2048 << 3)));
-		else
-			hwm = min(((pba << 10) * 9 / 10),
-				  ((pba << 10) - adapter->max_frame_size));
-
-		fc->high_water = hwm & E1000_FCRTH_RTH; /* 8-byte granularity */
-		fc->low_water = fc->high_water - 8;
+		break;
+	case e1000_pch2lan:
+		fc->high_water = 0x05C20;
+		fc->low_water = 0x05048;
+		fc->pause_time = 0x0650;
+		fc->refresh_time = 0x0400;
+		break;
 	}
 
-	if (adapter->flags & FLAG_DISABLE_FC_PAUSE_TIME)
-		fc->pause_time = 0xFFFF;
-	else
-		fc->pause_time = E1000_FC_PAUSE_TIME;
-	fc->send_xon = 1;
-	fc->current_mode = fc->requested_mode;
-
 	/* Allow time for pending master requests to run */
 	mac->ops.reset_hw(hw);
 
@@ -4918,14 +4938,7 @@ static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc)
 	int retval = 0;
 
 	/* copy MAC RARs to PHY RARs */
-	for (i = 0; i < adapter->hw.mac.rar_entry_count; i++) {
-		mac_reg = er32(RAL(i));
-		e1e_wphy(hw, BM_RAR_L(i), (u16)(mac_reg & 0xFFFF));
-		e1e_wphy(hw, BM_RAR_M(i), (u16)((mac_reg >> 16) & 0xFFFF));
-		mac_reg = er32(RAH(i));
-		e1e_wphy(hw, BM_RAR_H(i), (u16)(mac_reg & 0xFFFF));
-		e1e_wphy(hw, BM_RAR_CTRL(i), (u16)((mac_reg >> 16) & 0xFFFF));
-	}
+	e1000_copy_rx_addrs_to_phy_ich8lan(hw);
 
 	/* copy MAC MTA to PHY MTA */
 	for (i = 0; i < adapter->hw.mac.mta_reg_count; i++) {
@@ -5976,6 +5989,9 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DM), board_pchlan },
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DC), board_pchlan },
 
+	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_LM), board_pch2lan },
+	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_V), board_pch2lan },
+
 	{ }	/* terminate list */
 };
 MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
index b4ac82d..e471357 100644
--- a/drivers/net/e1000e/phy.c
+++ b/drivers/net/e1000e/phy.c
@@ -2319,6 +2319,9 @@ enum e1000_phy_type e1000e_get_phy_type_from_id(u32 phy_id)
 	case I82577_E_PHY_ID:
 		phy_type = e1000_phy_82577;
 		break;
+	case I82579_E_PHY_ID:
+		phy_type = e1000_phy_82579;
+		break;
 	default:
 		phy_type = e1000_phy_unknown;
 		break;


^ permalink raw reply related

* [net-next-2.6 PATCH 4/8] e1000e: fix check for manageability on ICHx/PCH
From: Jeff Kirsher @ 2010-06-16 23:27 UTC (permalink / raw)
  To: davem; +Cc: netdev, gospo, bphilips, Bruce Allan, Jeff Kirsher
In-Reply-To: <20100616232523.4834.84849.stgit@localhost.localdomain>

From: Bruce Allan <bruce.w.allan@intel.com>

Do not check for all the bits in E1000_FWSM_MODE_MASK when checking for
manageability on 82577/82578; only check if iAMT is enabled.  Both of the
manageability checks (for 82577/82578 and ICHx) must check the firmware
valid bit too since the other bits are only valid when the latter is set.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/e1000e/ich8lan.c |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 70cd681..7e2f98c 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -226,6 +226,8 @@ static void e1000_power_down_phy_copper_ich8lan(struct e1000_hw *hw);
 static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
 static s32  e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
 static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw);
+static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw);
+static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw);
 
 static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
 {
@@ -515,6 +517,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
 	case e1000_ich8lan:
 	case e1000_ich9lan:
 	case e1000_ich10lan:
+		/* check management mode */
+		mac->ops.check_mng_mode = e1000_check_mng_mode_ich8lan;
 		/* ID LED init */
 		mac->ops.id_led_init = e1000e_id_led_init;
 		/* setup LED */
@@ -526,6 +530,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
 		mac->ops.led_off = e1000_led_off_ich8lan;
 		break;
 	case e1000_pchlan:
+		/* check management mode */
+		mac->ops.check_mng_mode = e1000_check_mng_mode_pchlan;
 		/* ID LED init */
 		mac->ops.id_led_init = e1000_id_led_init_pchlan;
 		/* setup LED */
@@ -774,7 +780,7 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
  *  e1000_check_mng_mode_ich8lan - Checks management mode
  *  @hw: pointer to the HW structure
  *
- *  This checks if the adapter has manageability enabled.
+ *  This checks if the adapter has any manageability enabled.
  *  This is a function pointer entry point only called by read/write
  *  routines for the PHY and NVM parts.
  **/
@@ -783,9 +789,26 @@ static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw)
 	u32 fwsm;
 
 	fwsm = er32(FWSM);
+	return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
+	       ((fwsm & E1000_FWSM_MODE_MASK) ==
+		(E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
+}
 
-	return (fwsm & E1000_FWSM_MODE_MASK) ==
-		(E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT);
+/**
+ *  e1000_check_mng_mode_pchlan - Checks management mode
+ *  @hw: pointer to the HW structure
+ *
+ *  This checks if the adapter has iAMT enabled.
+ *  This is a function pointer entry point only called by read/write
+ *  routines for the PHY and NVM parts.
+ **/
+static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw)
+{
+	u32 fwsm;
+
+	fwsm = er32(FWSM);
+	return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
+	       (fwsm & (E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
 }
 
 /**
@@ -3396,7 +3419,7 @@ static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw)
 
 static struct e1000_mac_operations ich8_mac_ops = {
 	.id_led_init		= e1000e_id_led_init,
-	.check_mng_mode		= e1000_check_mng_mode_ich8lan,
+	/* check_mng_mode dependent on mac type */
 	.check_for_link		= e1000_check_for_copper_link_ich8lan,
 	/* cleanup_led dependent on mac type */
 	.clear_hw_cntrs		= e1000_clear_hw_cntrs_ich8lan,


^ permalink raw reply related

* [net-next-2.6 PATCH 3/8] e1000e: separate out PHY statistics register updates
From: Jeff Kirsher @ 2010-06-16 23:26 UTC (permalink / raw)
  To: davem; +Cc: netdev, gospo, bphilips, Bruce Allan, Jeff Kirsher
In-Reply-To: <20100616232523.4834.84849.stgit@localhost.localdomain>

From: Bruce Allan <bruce.w.allan@intel.com>

The 82577/82578 parts have half-duplex statistics in PHY registers.  These
need only be read when in half-duplex and should all be read at once rather
than one at a time to prevent excessive cycles of acquiring/releasing the
PHY semaphore.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/e1000e/e1000.h   |    1 
 drivers/net/e1000e/ich8lan.c |    1 
 drivers/net/e1000e/netdev.c  |  171 ++++++++++++++++++++++++++++++------------
 3 files changed, 126 insertions(+), 47 deletions(-)

diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index c0b3db4..79e7c4c 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -421,6 +421,7 @@ struct e1000_info {
 #define FLAG2_HAS_PHY_WAKEUP              (1 << 1)
 #define FLAG2_IS_DISCARDING               (1 << 2)
 #define FLAG2_DISABLE_ASPM_L1             (1 << 3)
+#define FLAG2_HAS_PHY_STATS               (1 << 4)
 
 #define E1000_RX_DESC_PS(R, i)	    \
 	(&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 5d8fad3..70cd681 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -3503,6 +3503,7 @@ struct e1000_info e1000_pch_info = {
 				  | FLAG_HAS_JUMBO_FRAMES
 				  | FLAG_DISABLE_FC_PAUSE_TIME /* errata */
 				  | FLAG_APME_IN_WUC,
+	.flags2			= FLAG2_HAS_PHY_STATS,
 	.pba			= 26,
 	.max_hw_frame_size	= 4096,
 	.get_variants		= e1000_get_variants_ich8lan,
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 57a7e41..b4c431d 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3672,6 +3672,110 @@ static void e1000_update_phy_info(unsigned long data)
 }
 
 /**
+ * e1000e_update_phy_stats - Update the PHY statistics counters
+ * @adapter: board private structure
+ **/
+static void e1000e_update_phy_stats(struct e1000_adapter *adapter)
+{
+	struct e1000_hw *hw = &adapter->hw;
+	s32 ret_val;
+	u16 phy_data;
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return;
+
+	hw->phy.addr = 1;
+
+#define HV_PHY_STATS_PAGE	778
+	/*
+	 * A page set is expensive so check if already on desired page.
+	 * If not, set to the page with the PHY status registers.
+	 */
+	ret_val = e1000e_read_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
+					   &phy_data);
+	if (ret_val)
+		goto release;
+	if (phy_data != (HV_PHY_STATS_PAGE << IGP_PAGE_SHIFT)) {
+		ret_val = e1000e_write_phy_reg_mdic(hw,
+						    IGP01E1000_PHY_PAGE_SELECT,
+						    (HV_PHY_STATS_PAGE <<
+						     IGP_PAGE_SHIFT));
+		if (ret_val)
+			goto release;
+	}
+
+	/* Read/clear the upper 16-bit registers and read/accumulate lower */
+
+	/* Single Collision Count */
+	e1000e_read_phy_reg_mdic(hw, HV_SCC_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_SCC_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.scc += phy_data;
+
+	/* Excessive Collision Count */
+	e1000e_read_phy_reg_mdic(hw, HV_ECOL_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_ECOL_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.ecol += phy_data;
+
+	/* Multiple Collision Count */
+	e1000e_read_phy_reg_mdic(hw, HV_MCC_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_MCC_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.mcc += phy_data;
+
+	/* Late Collision Count */
+	e1000e_read_phy_reg_mdic(hw, HV_LATECOL_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_LATECOL_LOWER &
+					   MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.latecol += phy_data;
+
+	/* Collision Count - also used for adaptive IFS */
+	e1000e_read_phy_reg_mdic(hw, HV_COLC_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_COLC_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		hw->mac.collision_delta = phy_data;
+
+	/* Defer Count */
+	e1000e_read_phy_reg_mdic(hw, HV_DC_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_DC_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.dc += phy_data;
+
+	/* Transmit with no CRS */
+	e1000e_read_phy_reg_mdic(hw, HV_TNCRS_UPPER & MAX_PHY_REG_ADDRESS,
+				 &phy_data);
+	ret_val = e1000e_read_phy_reg_mdic(hw,
+					   HV_TNCRS_LOWER & MAX_PHY_REG_ADDRESS,
+					   &phy_data);
+	if (!ret_val)
+		adapter->stats.tncrs += phy_data;
+
+release:
+	hw->phy.ops.release(hw);
+}
+
+/**
  * e1000e_update_stats - Update the board statistics counters
  * @adapter: board private structure
  **/
@@ -3680,7 +3784,6 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
 	struct net_device *netdev = adapter->netdev;
 	struct e1000_hw *hw = &adapter->hw;
 	struct pci_dev *pdev = adapter->pdev;
-	u16 phy_data;
 
 	/*
 	 * Prevent stats update while adapter is being reset, or if the pci
@@ -3700,34 +3803,27 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
 	adapter->stats.roc += er32(ROC);
 
 	adapter->stats.mpc += er32(MPC);
-	if ((hw->phy.type == e1000_phy_82578) ||
-	    (hw->phy.type == e1000_phy_82577)) {
-		e1e_rphy(hw, HV_SCC_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_SCC_LOWER, &phy_data))
-			adapter->stats.scc += phy_data;
-
-		e1e_rphy(hw, HV_ECOL_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_ECOL_LOWER, &phy_data))
-			adapter->stats.ecol += phy_data;
-
-		e1e_rphy(hw, HV_MCC_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_MCC_LOWER, &phy_data))
-			adapter->stats.mcc += phy_data;
-
-		e1e_rphy(hw, HV_LATECOL_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data))
-			adapter->stats.latecol += phy_data;
-
-		e1e_rphy(hw, HV_DC_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_DC_LOWER, &phy_data))
-			adapter->stats.dc += phy_data;
-	} else {
-		adapter->stats.scc += er32(SCC);
-		adapter->stats.ecol += er32(ECOL);
-		adapter->stats.mcc += er32(MCC);
-		adapter->stats.latecol += er32(LATECOL);
-		adapter->stats.dc += er32(DC);
+
+	/* Half-duplex statistics */
+	if (adapter->link_duplex == HALF_DUPLEX) {
+		if (adapter->flags2 & FLAG2_HAS_PHY_STATS) {
+			e1000e_update_phy_stats(adapter);
+		} else {
+			adapter->stats.scc += er32(SCC);
+			adapter->stats.ecol += er32(ECOL);
+			adapter->stats.mcc += er32(MCC);
+			adapter->stats.latecol += er32(LATECOL);
+			adapter->stats.dc += er32(DC);
+
+			hw->mac.collision_delta = er32(COLC);
+
+			if ((hw->mac.type != e1000_82574) &&
+			    (hw->mac.type != e1000_82583))
+				adapter->stats.tncrs += er32(TNCRS);
+		}
+		adapter->stats.colc += hw->mac.collision_delta;
 	}
+
 	adapter->stats.xonrxc += er32(XONRXC);
 	adapter->stats.xontxc += er32(XONTXC);
 	adapter->stats.xoffrxc += er32(XOFFRXC);
@@ -3745,28 +3841,9 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
 
 	hw->mac.tx_packet_delta = er32(TPT);
 	adapter->stats.tpt += hw->mac.tx_packet_delta;
-	if ((hw->phy.type == e1000_phy_82578) ||
-	    (hw->phy.type == e1000_phy_82577)) {
-		e1e_rphy(hw, HV_COLC_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_COLC_LOWER, &phy_data))
-			hw->mac.collision_delta = phy_data;
-	} else {
-		hw->mac.collision_delta = er32(COLC);
-	}
-	adapter->stats.colc += hw->mac.collision_delta;
 
 	adapter->stats.algnerrc += er32(ALGNERRC);
 	adapter->stats.rxerrc += er32(RXERRC);
-	if ((hw->phy.type == e1000_phy_82578) ||
-	    (hw->phy.type == e1000_phy_82577)) {
-		e1e_rphy(hw, HV_TNCRS_UPPER, &phy_data);
-		if (!e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data))
-			adapter->stats.tncrs += phy_data;
-	} else {
-		if ((hw->mac.type != e1000_82574) &&
-		    (hw->mac.type != e1000_82583))
-			adapter->stats.tncrs += er32(TNCRS);
-	}
 	adapter->stats.cexterr += er32(CEXTERR);
 	adapter->stats.tsctc += er32(TSCTC);
 	adapter->stats.tsctfc += er32(TSCTFC);


^ permalink raw reply related

* [net-next-2.6 PATCH 2/8] e1000e: cleanup e1000_sw_lcd_config_ich8lan()
From: Jeff Kirsher @ 2010-06-16 23:26 UTC (permalink / raw)
  To: davem; +Cc: netdev, gospo, bphilips, Bruce Allan, Jeff Kirsher
In-Reply-To: <20100616232523.4834.84849.stgit@localhost.localdomain>

From: Bruce Allan <bruce.w.allan@intel.com>

Do not acquire and release the PHY unnecessarily for parts that return
from this workaround without actually accessing the PHY registers.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/e1000e/ich8lan.c |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index b2507d9..5d8fad3 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -820,14 +820,6 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	s32 ret_val = 0;
 	u16 word_addr, reg_data, reg_addr, phy_page = 0;
 
-	if (!(hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) &&
-		!(hw->mac.type == e1000_pchlan))
-		return ret_val;
-
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		return ret_val;
-
 	/*
 	 * Initialize the PHY from the NVM on ICH platforms.  This
 	 * is needed due to an issue where the NVM configuration is
@@ -835,12 +827,26 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 	 * Therefore, after each PHY reset, we will load the
 	 * configuration data out of the NVM manually.
 	 */
-	if ((adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M_AMT) ||
-	    (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_M) ||
-	    (hw->mac.type == e1000_pchlan))
+	switch (hw->mac.type) {
+	case e1000_ich8lan:
+		if (phy->type != e1000_phy_igp_3)
+			return ret_val;
+
+		if (adapter->pdev->device == E1000_DEV_ID_ICH8_IGP_AMT) {
+			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
+			break;
+		}
+		/* Fall-thru */
+	case e1000_pchlan:
 		sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
-	else
-		sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
+		break;
+	default:
+		return ret_val;
+	}
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
 
 	data = er32(FEXTNVM);
 	if (!(data & sw_cfg_mask))


^ permalink raw reply related

* [net-next-2.6 PATCH 1/8] e1000e: cleanup ethtool loopback setup code
From: Jeff Kirsher @ 2010-06-16 23:25 UTC (permalink / raw)
  To: davem; +Cc: netdev, gospo, bphilips, Bruce Allan, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Refactor the loopback setup code to first handle the only 10/100 PHY
supported by the driver if applicable and then handle the 1Gig PHYs in a
switch statement for PHY-specific setups.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/e1000e/ethtool.c |   74 ++++++++++++++++++++++++------------------
 1 files changed, 42 insertions(+), 32 deletions(-)

diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index 2c52121..86c6a26 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -1263,33 +1263,36 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
 
 	hw->mac.autoneg = 0;
 
-	/* Workaround: K1 must be disabled for stable 1Gbps operation */
-	if (hw->mac.type == e1000_pchlan)
-		e1000_configure_k1_ich8lan(hw, false);
-
-	if (hw->phy.type == e1000_phy_m88) {
-		/* Auto-MDI/MDIX Off */
-		e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808);
-		/* reset to update Auto-MDI/MDIX */
-		e1e_wphy(hw, PHY_CONTROL, 0x9140);
-		/* autoneg off */
-		e1e_wphy(hw, PHY_CONTROL, 0x8140);
-	} else if (hw->phy.type == e1000_phy_gg82563)
-		e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x1CC);
-
-	ctrl_reg = er32(CTRL);
-
-	switch (hw->phy.type) {
-	case e1000_phy_ife:
+	if (hw->phy.type == e1000_phy_ife) {
 		/* force 100, set loopback */
 		e1e_wphy(hw, PHY_CONTROL, 0x6100);
 
 		/* Now set up the MAC to the same speed/duplex as the PHY. */
+		ctrl_reg = er32(CTRL);
 		ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
 		ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
 			     E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
 			     E1000_CTRL_SPD_100 |/* Force Speed to 100 */
 			     E1000_CTRL_FD);	 /* Force Duplex to FULL */
+
+		ew32(CTRL, ctrl_reg);
+		udelay(500);
+
+		return 0;
+	}
+
+	/* Specific PHY configuration for loopback */
+	switch (hw->phy.type) {
+	case e1000_phy_m88:
+		/* Auto-MDI/MDIX Off */
+		e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808);
+		/* reset to update Auto-MDI/MDIX */
+		e1e_wphy(hw, PHY_CONTROL, 0x9140);
+		/* autoneg off */
+		e1e_wphy(hw, PHY_CONTROL, 0x8140);
+		break;
+	case e1000_phy_gg82563:
+		e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x1CC);
 		break;
 	case e1000_phy_bm:
 		/* Set Default MAC Interface speed to 1GB */
@@ -1312,23 +1315,30 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
 		/* Set Early Link Enable */
 		e1e_rphy(hw, PHY_REG(769, 20), &phy_reg);
 		e1e_wphy(hw, PHY_REG(769, 20), phy_reg | 0x0400);
-		/* fall through */
+		break;
+	case e1000_phy_82577:
+	case e1000_phy_82578:
+		/* Workaround: K1 must be disabled for stable 1Gbps operation */
+		e1000_configure_k1_ich8lan(hw, false);
+		break;
 	default:
-		/* force 1000, set loopback */
-		e1e_wphy(hw, PHY_CONTROL, 0x4140);
-		mdelay(250);
+		break;
+	}
 
-		/* Now set up the MAC to the same speed/duplex as the PHY. */
-		ctrl_reg = er32(CTRL);
-		ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
-		ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
-			     E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
-			     E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
-			     E1000_CTRL_FD);	 /* Force Duplex to FULL */
+	/* force 1000, set loopback */
+	e1e_wphy(hw, PHY_CONTROL, 0x4140);
+	mdelay(250);
 
-		if (adapter->flags & FLAG_IS_ICH)
-			ctrl_reg |= E1000_CTRL_SLU;	/* Set Link Up */
-	}
+	/* Now set up the MAC to the same speed/duplex as the PHY. */
+	ctrl_reg = er32(CTRL);
+	ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
+	ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
+		     E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
+		     E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
+		     E1000_CTRL_FD);	 /* Force Duplex to FULL */
+
+	if (adapter->flags & FLAG_IS_ICH)
+		ctrl_reg |= E1000_CTRL_SLU;	/* Set Link Up */
 
 	if (hw->phy.media_type == e1000_media_type_copper &&
 	    hw->phy.type == e1000_phy_m88) {


^ permalink raw reply related

* Re: [PATCH 0/8] Support unix domain sockets across namespaces
From: David Miller @ 2010-06-16 23:17 UTC (permalink / raw)
  To: ebiederm; +Cc: serue, containers, daniel.lezcano, netdev, xemul
In-Reply-To: <20100616.151536.70195214.davem@davemloft.net>

From: David Miller <davem@davemloft.net>
Date: Wed, 16 Jun 2010 15:15:36 -0700 (PDT)

> From: ebiederm@xmission.com (Eric W. Biederman)
> Date: Sun, 13 Jun 2010 06:25:32 -0700
> 
>> This patchset takes a addressing all of the issues that crop up with
>> unix domain sockets when the senders and receivers are in separate
>> namespaces.
>> 
>> Without this patchset we can report the wrong pid and uid
>> values in our unix domain credentials.
>> 
>> As a finally this patchset removes the now unnecessary restriction
>> that we only allow unix domain sockets between processes in the
>> same network namespace.
> 
> Looks good, all applied to net-next-2.6, thanks Eric.

I had to add a module export of cred_to_ucread to fix the allmodconfig
build since AF_UNIX makes a reference to it.

^ permalink raw reply

* Re: patch "net: deliver skbs on inactive slaves to exact matches" stalls nfs mounts
From: Fred Isaman @ 2010-06-16 23:11 UTC (permalink / raw)
  To: John Fastabend; +Cc: netdev@vger.kernel.org, NFS list, David S. Miller
In-Reply-To: <4C1951F1.9010004@intel.com>

On Wed, Jun 16, 2010 at 6:36 PM, John Fastabend
<john.r.fastabend@intel.com> wrote:
> Fred Isaman wrote:
>>
>> I am using vmware fusion 3.1.0 on a macbook pro host with a fedora 12
>> guest running a 2.6.35-rc3 based kernel,  Upgrading from rc2 to rc3
>> introduced a long delay when the guest attempts an nfs mount (~120
>> secs).  Reverting patch 597a264b1a9c7e36d1728f677c66c5c1f7e3b837
>> "net: deliver skbs on inactive slaves to exact matches" changes back
>> to normal behavior.
>>
>> Fred
>
> This should be fixed here,

OK, thanks.

Fred

>
> From e897082fe7a5b591dc4dd5599ac39081a7c8e482 Mon Sep 17 00:00:00 2001
> From: John Fastabend <john.r.fastabend@intel.com>
> Date: Sun, 13 Jun 2010 10:36:30 +0000
> Subject: [PATCH] net: fix deliver_no_wcard regression on loopback device
>
> deliver_no_wcard is not being set in skb_copy_header.
> In the skb_cloned case it is not being cleared and
> may cause the skb to be dropped when the loopback device
> pushes it back up the stack.
>
> Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
> Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
> Tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply

* Re: [0/8] netpoll/bridge fixes
From: Paul E. McKenney @ 2010-06-16 23:02 UTC (permalink / raw)
  To: David Miller
  Cc: herbert, eric.dumazet, shemminger, mst, frzhang, netdev, amwang,
	mpm
In-Reply-To: <20100615.214702.57478137.davem@davemloft.net>

On Tue, Jun 15, 2010 at 09:47:02PM -0700, David Miller wrote:
> From: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Wed, 16 Jun 2010 13:33:36 +1000
> 
> > On Wed, Jun 16, 2010 at 05:03:20AM +0200, Eric Dumazet wrote:
> >>
> >> I wonder how these patches were tested, Herbert ?
> > 
> > You know, not everyone enables RCU debugging...
> 
> Even though I'm as guilty as you, I have to agree with Eric that
> especially us core folks should be running with the various lock
> debugging options on all the time.
> 
> Maybe someone should add the RCU debugging config option to
> Documentation/SubmitChecklist :-)

How about the following added to Documentation/RCU/checklist.txt?

The first is in mainline, the second partly there, and the third
is still languishing in my tree.  I did manage to remove a dependency
on other maintainers, so things will hopefully move a bit faster.

							Thanx, Paul

diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt
index 790d1a8..c7c6788 100644
--- a/Documentation/RCU/checklist.txt
+++ b/Documentation/RCU/checklist.txt
@@ -365,3 +365,26 @@ over a rather long period of time, but improvements are always welcome!
 	and the compiler to freely reorder code into and out of RCU
 	read-side critical sections.  It is the responsibility of the
 	RCU update-side primitives to deal with this.
+
+17.	Use CONFIG_PROVE_RCU, CONFIG_DEBUG_OBJECTS_RCU_HEAD, and
+	the __rcu sparse checks to validate your RCU code.  These
+	can help find problems as follows:
+
+	CONFIG_PROVE_RCU: check that accesses to RCU-protected data
+		structures are carried out under the proper RCU
+		read-side critical section, while holding the right
+		combination of locks, or whatever other conditions
+		are appropriate.
+
+	CONFIG_DEBUG_OBJECTS_RCU_HEAD: check that you don't pass the
+		same object to call_rcu() (or friends) before an RCU
+		grace period has elapsed since the last time that you
+		passed that same object to call_rcu() (or friends).
+
+	__rcu sparse checks: tag the pointer to the RCU-protected data
+		structure with __rcu, and sparse will warn you if you
+		access that pointer without the services of one of the
+		variants of rcu_dereference().
+
+	These debugging aids can help you find problems that are
+	otherwise extremely difficult to spot.

^ permalink raw reply related

* Re: pull request: wireless-2.6 2010-06-16 v2
From: Sedat Dilek @ 2010-06-16 22:57 UTC (permalink / raw)
  To: John W. Linville; +Cc: David Miller, linux-wireless, netdev, linux-kernel
In-Reply-To: <20100616201300.GD3138@tuxdriver.com>

[-- Attachment #1: Type: text/plain, Size: 17488 bytes --]

Quick feedback:

I have applied latest wireless-2.6 master GIT against 2.6.35-rc3:

wireless-2.6/0001-iwlwifi-serialize-station-management-actions.patch
wireless-2.6/0002-iwlagn-verify-flow-id-in-compressed-BA-packet.patch
wireless-2.6/0003-libertas_tf-Fix-warning-in-lbtf_rx-for-stats-struct.patch
wireless-2.6/0004-p54pci-add-Symbol-AP-300-minipci-adapters-pciid.patch
wireless-2.6/0005-wireless-orphan-ipw2x00-drivers.patch
wireless-2.6/0006-iwlwifi-cancel-scan-watchdog-in-iwl_bg_abort_scan.patch
wireless-2.6/0007-hostap-Protect-against-initialization-interrupt.patch
wireless-2.6/0008-mac80211-fix-warn-enum-may-be-used-uninitialized.patch

Unfortunately, I get here an issue with iwl3945 (full dmesg attached):

[ dmesg ]
[   26.423844]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
...
[   26.432470] iwl3945 0000:10:00.0: Can't stop Rx DMA.

Hope this helps.

- Sedat -


On Wed, Jun 16, 2010 at 10:13 PM, John W. Linville
<linville@tuxdriver.com> wrote:
> On Wed, Jun 16, 2010 at 11:50:08AM -0700, David Miller wrote:
>> From: "John W. Linville" <linville@tuxdriver.com>
>> Date: Wed, 16 Jun 2010 14:28:48 -0400
>>
>> > Here is another passel of of fixes intended for 2.6.35.  Included are
>> > some build warning fixes, a PCI identifier, a fix for premature
>> > IRQs during hostap initialization, a fix for a warning caused by
>> > failing to cancel a scan watchdog in iwlwifi, a fix for a null
>> > pointer dereference in iwlwifi, and a fix for a race condition in
>> > the same driver.  Also included is the MAINTAINERS change for the
>> > orphaning of the older Intel wireless drivers.  All but the last few
>> > warning fixes have spent some time in linux-next already.
>> >
>> > Please let me know if there are problems!
>>
>> The patches removing unused function variables just to kill compile
>> warnings are not appropriate, _at_ _all_.  They don't fix any real
>> bug, and they definitely don't fix entries in the regression list do
>> they?
>>
>> Kill all of those and resend this pull request.
>
> Fair enough...I dropped the warning fixes for the unused variables.
> But I kept the ones related to uninitialized variables, since
> those seem potentially more dangerous to ignore.  Hopefully that
> is acceptable.
>
> Please let me know if there are problems!
>
> John
>
> ---
>
> The following changes since commit fed396a585d8e1870b326f2e8e1888a72957abb8:
>  Herbert Xu (1):
>        bridge: Fix OOM crash in deliver_clone
>
> are available in the git repository at:
>
>  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git master
>
> Christoph Fritz (1):
>      mac80211: fix warn, enum may be used uninitialized
>
> Joerg Albert (1):
>      p54pci: add Symbol AP-300 minipci adapters pciid
>
> John W. Linville (1):
>      iwlwifi: cancel scan watchdog in iwl_bg_abort_scan
>
> Prarit Bhargava (1):
>      libertas_tf: Fix warning in lbtf_rx for stats struct
>
> Reinette Chatre (1):
>      iwlwifi: serialize station management actions
>
> Shanyu Zhao (1):
>      iwlagn: verify flow id in compressed BA packet
>
> Tim Gardner (1):
>      hostap: Protect against initialization interrupt
>
> Zhu Yi (1):
>      wireless: orphan ipw2x00 drivers
>
>  MAINTAINERS                                 |   10 ++--------
>  drivers/net/wireless/hostap/hostap_cs.c     |   15 +++++++++++++--
>  drivers/net/wireless/hostap/hostap_hw.c     |   13 +++++++++++++
>  drivers/net/wireless/hostap/hostap_wlan.h   |    2 +-
>  drivers/net/wireless/iwlwifi/iwl-agn-tx.c   |    5 +++++
>  drivers/net/wireless/iwlwifi/iwl-agn.c      |    8 ++++++--
>  drivers/net/wireless/iwlwifi/iwl-scan.c     |    1 +
>  drivers/net/wireless/iwlwifi/iwl-sta.c      |    4 ++++
>  drivers/net/wireless/iwlwifi/iwl3945-base.c |    9 +++++++--
>  drivers/net/wireless/libertas_tf/main.c     |    2 +-
>  drivers/net/wireless/p54/p54pci.c           |    2 ++
>  net/mac80211/work.c                         |    2 +-
>  12 files changed, 56 insertions(+), 17 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 83be538..837a754 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2966,20 +2966,14 @@ F:      drivers/net/ixgb/
>  F:     drivers/net/ixgbe/
>
>  INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
> -M:     Reinette Chatre <reinette.chatre@intel.com>
> -M:     Intel Linux Wireless <ilw@linux.intel.com>
>  L:     linux-wireless@vger.kernel.org
> -W:     http://ipw2100.sourceforge.net
> -S:     Odd Fixes
> +S:     Orphan
>  F:     Documentation/networking/README.ipw2100
>  F:     drivers/net/wireless/ipw2x00/ipw2100.*
>
>  INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
> -M:     Reinette Chatre <reinette.chatre@intel.com>
> -M:     Intel Linux Wireless <ilw@linux.intel.com>
>  L:     linux-wireless@vger.kernel.org
> -W:     http://ipw2200.sourceforge.net
> -S:     Odd Fixes
> +S:     Orphan
>  F:     Documentation/networking/README.ipw2200
>  F:     drivers/net/wireless/ipw2x00/ipw2200.*
>
> diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
> index db72461..29b31a6 100644
> --- a/drivers/net/wireless/hostap/hostap_cs.c
> +++ b/drivers/net/wireless/hostap/hostap_cs.c
> @@ -594,6 +594,7 @@ static int prism2_config(struct pcmcia_device *link)
>        local_info_t *local;
>        int ret = 1;
>        struct hostap_cs_priv *hw_priv;
> +       unsigned long flags;
>
>        PDEBUG(DEBUG_FLOW, "prism2_config()\n");
>
> @@ -625,9 +626,15 @@ static int prism2_config(struct pcmcia_device *link)
>        local->hw_priv = hw_priv;
>        hw_priv->link = link;
>
> +       /*
> +        * Make sure the IRQ handler cannot proceed until at least
> +        * dev->base_addr is initialized.
> +        */
> +       spin_lock_irqsave(&local->irq_init_lock, flags);
> +
>        ret = pcmcia_request_irq(link, prism2_interrupt);
>        if (ret)
> -               goto failed;
> +               goto failed_unlock;
>
>        /*
>         * This actually configures the PCMCIA socket -- setting up
> @@ -636,11 +643,13 @@ static int prism2_config(struct pcmcia_device *link)
>         */
>        ret = pcmcia_request_configuration(link, &link->conf);
>        if (ret)
> -               goto failed;
> +               goto failed_unlock;
>
>        dev->irq = link->irq;
>        dev->base_addr = link->io.BasePort1;
>
> +       spin_unlock_irqrestore(&local->irq_init_lock, flags);
> +
>        /* Finally, report what we've done */
>        printk(KERN_INFO "%s: index 0x%02x: ",
>               dev_info, link->conf.ConfigIndex);
> @@ -667,6 +676,8 @@ static int prism2_config(struct pcmcia_device *link)
>
>        return ret;
>
> + failed_unlock:
> +        spin_unlock_irqrestore(&local->irq_init_lock, flags);
>  failed:
>        kfree(hw_priv);
>        prism2_release((u_long)link);
> diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
> index ff9b5c8..2f999fc 100644
> --- a/drivers/net/wireless/hostap/hostap_hw.c
> +++ b/drivers/net/wireless/hostap/hostap_hw.c
> @@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
>        iface = netdev_priv(dev);
>        local = iface->local;
>
> +       /* Detect early interrupt before driver is fully configued */
> +       spin_lock(&local->irq_init_lock);
> +       if (!dev->base_addr) {
> +               if (net_ratelimit()) {
> +                       printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n",
> +                              dev->name);
> +               }
> +               spin_unlock(&local->irq_init_lock);
> +               return IRQ_HANDLED;
> +       }
> +       spin_unlock(&local->irq_init_lock);
> +
>        prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
>
>        if (local->func->card_present && !local->func->card_present(local)) {
> @@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
>        spin_lock_init(&local->cmdlock);
>        spin_lock_init(&local->baplock);
>        spin_lock_init(&local->lock);
> +       spin_lock_init(&local->irq_init_lock);
>        mutex_init(&local->rid_bap_mtx);
>
>        if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES)
> diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h
> index 3d23891..1ba33be 100644
> --- a/drivers/net/wireless/hostap/hostap_wlan.h
> +++ b/drivers/net/wireless/hostap/hostap_wlan.h
> @@ -654,7 +654,7 @@ struct local_info {
>        rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock
>                              * when removing entries from the list.
>                              * TX and RX paths can use read lock. */
> -       spinlock_t cmdlock, baplock, lock;
> +       spinlock_t cmdlock, baplock, lock, irq_init_lock;
>        struct mutex rid_bap_mtx;
>        u16 infofid; /* MAC buffer id for info frame */
>        /* txfid, intransmitfid, next_txtid, and next_alloc are protected by
> diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
> index a732f10..7d614c4 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
> @@ -1299,6 +1299,11 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
>        sta_id = ba_resp->sta_id;
>        tid = ba_resp->tid;
>        agg = &priv->stations[sta_id].tid[tid].agg;
> +       if (unlikely(agg->txq_id != scd_flow)) {
> +               IWL_ERR(priv, "BA scd_flow %d does not match txq_id %d\n",
> +                       scd_flow, agg->txq_id);
> +               return;
> +       }
>
>        /* Find index just before block-ack window */
>        index = iwl_queue_dec_wrap(ba_resp_scd_ssn & 0xff, txq->q.n_bd);
> diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
> index 7726e67..24aff65 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
> @@ -3391,10 +3391,12 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
>        int ret;
>        u8 sta_id;
>
> -       sta_priv->common.sta_id = IWL_INVALID_STATION;
> -
>        IWL_DEBUG_INFO(priv, "received request to add station %pM\n",
>                        sta->addr);
> +       mutex_lock(&priv->mutex);
> +       IWL_DEBUG_INFO(priv, "proceeding to add station %pM\n",
> +                       sta->addr);
> +       sta_priv->common.sta_id = IWL_INVALID_STATION;
>
>        atomic_set(&sta_priv->pending_frames, 0);
>        if (vif->type == NL80211_IFTYPE_AP)
> @@ -3406,6 +3408,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
>                IWL_ERR(priv, "Unable to add station %pM (%d)\n",
>                        sta->addr, ret);
>                /* Should we return success if return code is EEXIST ? */
> +               mutex_unlock(&priv->mutex);
>                return ret;
>        }
>
> @@ -3415,6 +3418,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
>        IWL_DEBUG_INFO(priv, "Initializing rate scaling for station %pM\n",
>                       sta->addr);
>        iwl_rs_rate_init(priv, sta, sta_id);
> +       mutex_unlock(&priv->mutex);
>
>        return 0;
>  }
> diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
> index 5d3f51f..386c5f9 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-scan.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
> @@ -491,6 +491,7 @@ void iwl_bg_abort_scan(struct work_struct *work)
>
>        mutex_lock(&priv->mutex);
>
> +       cancel_delayed_work_sync(&priv->scan_check);
>        set_bit(STATUS_SCAN_ABORTING, &priv->status);
>        iwl_send_scan_abort(priv);
>
> diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
> index 83a2636..c27c13f 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-sta.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
> @@ -1373,10 +1373,14 @@ int iwl_mac_sta_remove(struct ieee80211_hw *hw,
>
>        IWL_DEBUG_INFO(priv, "received request to remove station %pM\n",
>                        sta->addr);
> +       mutex_lock(&priv->mutex);
> +       IWL_DEBUG_INFO(priv, "proceeding to remove station %pM\n",
> +                       sta->addr);
>        ret = iwl_remove_station(priv, sta_common->sta_id, sta->addr);
>        if (ret)
>                IWL_ERR(priv, "Error removing station %pM\n",
>                        sta->addr);
> +       mutex_unlock(&priv->mutex);
>        return ret;
>  }
>  EXPORT_SYMBOL(iwl_mac_sta_remove);
> diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
> index 6c353ca..a27872d 100644
> --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
> +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
> @@ -3437,10 +3437,13 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
>        bool is_ap = vif->type == NL80211_IFTYPE_STATION;
>        u8 sta_id;
>
> -       sta_priv->common.sta_id = IWL_INVALID_STATION;
> -
>        IWL_DEBUG_INFO(priv, "received request to add station %pM\n",
>                        sta->addr);
> +       mutex_lock(&priv->mutex);
> +       IWL_DEBUG_INFO(priv, "proceeding to add station %pM\n",
> +                       sta->addr);
> +       sta_priv->common.sta_id = IWL_INVALID_STATION;
> +
>
>        ret = iwl_add_station_common(priv, sta->addr, is_ap, &sta->ht_cap,
>                                     &sta_id);
> @@ -3448,6 +3451,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
>                IWL_ERR(priv, "Unable to add station %pM (%d)\n",
>                        sta->addr, ret);
>                /* Should we return success if return code is EEXIST ? */
> +               mutex_unlock(&priv->mutex);
>                return ret;
>        }
>
> @@ -3457,6 +3461,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
>        IWL_DEBUG_INFO(priv, "Initializing rate scaling for station %pM\n",
>                       sta->addr);
>        iwl3945_rs_rate_init(priv, sta, sta_id);
> +       mutex_unlock(&priv->mutex);
>
>        return 0;
>  }
> diff --git a/drivers/net/wireless/libertas_tf/main.c b/drivers/net/wireless/libertas_tf/main.c
> index 6a04c21..817fffc 100644
> --- a/drivers/net/wireless/libertas_tf/main.c
> +++ b/drivers/net/wireless/libertas_tf/main.c
> @@ -549,7 +549,7 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
>
>        prxpd = (struct rxpd *) skb->data;
>
> -       stats.flag = 0;
> +       memset(&stats, 0, sizeof(stats));
>        if (!(prxpd->status & cpu_to_le16(MRVDRV_RXPD_STATUS_OK)))
>                stats.flag |= RX_FLAG_FAILED_FCS_CRC;
>        stats.freq = priv->cur_freq;
> diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
> index 07c4528..a5ea89c 100644
> --- a/drivers/net/wireless/p54/p54pci.c
> +++ b/drivers/net/wireless/p54/p54pci.c
> @@ -41,6 +41,8 @@ static DEFINE_PCI_DEVICE_TABLE(p54p_table) = {
>        { PCI_DEVICE(0x1260, 0x3877) },
>        /* Intersil PRISM Javelin/Xbow Wireless LAN adapter */
>        { PCI_DEVICE(0x1260, 0x3886) },
> +       /* Intersil PRISM Xbow Wireless LAN adapter (Symbol AP-300) */
> +       { PCI_DEVICE(0x1260, 0xffff) },
>        { },
>  };
>
> diff --git a/net/mac80211/work.c b/net/mac80211/work.c
> index be3d4a6..b025dc7 100644
> --- a/net/mac80211/work.c
> +++ b/net/mac80211/work.c
> @@ -715,7 +715,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,
>        struct ieee80211_rx_status *rx_status;
>        struct ieee80211_mgmt *mgmt;
>        struct ieee80211_work *wk;
> -       enum work_action rma;
> +       enum work_action rma = WORK_ACT_NONE;
>        u16 fc;
>
>        rx_status = (struct ieee80211_rx_status *) skb->cb;
> --
> John W. Linville                Someday the world will need a hero, and you
> linville@tuxdriver.com                  might be all we have.  Be ready.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

[-- Attachment #2: dmesg.txt --]
[-- Type: text/plain, Size: 62977 bytes --]

    0.310984] pci 0000:00:1c.3: PCI bridge to [bus 20-20]
[    0.310988] pci 0000:00:1c.3:   bridge window [io  0x2000-0x3fff]
[    0.310995] pci 0000:00:1c.3:   bridge window [mem 0xdc000000-0xdfffffff]
[    0.311001] pci 0000:00:1c.3:   bridge window [mem 0x84400000-0x845fffff 64bit pref]
[    0.311011] pci 0000:02:06.0: BAR 15: assigned [mem 0x80000000-0x83ffffff pref]
[    0.311014] pci 0000:02:06.0: BAR 16: assigned [mem 0x88000000-0x8bffffff]
[    0.311017] pci 0000:02:06.0: BAR 13: assigned [io  0x8000-0x80ff]
[    0.311020] pci 0000:02:06.0: BAR 14: assigned [io  0x8400-0x84ff]
[    0.311022] pci 0000:02:06.0: CardBus bridge to [bus 03-06]
[    0.311025] pci 0000:02:06.0:   bridge window [io  0x8000-0x80ff]
[    0.311031] pci 0000:02:06.0:   bridge window [io  0x8400-0x84ff]
[    0.311038] pci 0000:02:06.0:   bridge window [mem 0x80000000-0x83ffffff pref]
[    0.311044] pci 0000:02:06.0:   bridge window [mem 0x88000000-0x8bffffff]
[    0.311051] pci 0000:00:1e.0: PCI bridge to [bus 02-03]
[    0.311054] pci 0000:00:1e.0:   bridge window [io  0x8000-0x8fff]
[    0.311062] pci 0000:00:1e.0:   bridge window [mem 0xe0200000-0xe05fffff]
[    0.311067] pci 0000:00:1e.0:   bridge window [mem 0x80000000-0x83ffffff pref]
[    0.311081]   alloc irq_desc for 16 on node -1
[    0.311083]   alloc kstat_irqs on node -1
[    0.311089] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.311093] pci 0000:00:01.0: setting latency timer to 64
[    0.311103] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.311109] pci 0000:00:1c.0: setting latency timer to 64
[    0.311119]   alloc irq_desc for 17 on node -1
[    0.311121]   alloc kstat_irqs on node -1
[    0.311125] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17
[    0.311130] pci 0000:00:1c.1: setting latency timer to 64
[    0.311141]   alloc irq_desc for 19 on node -1
[    0.311142]   alloc kstat_irqs on node -1
[    0.311146] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19
[    0.311151] pci 0000:00:1c.3: setting latency timer to 64
[    0.311160] pci 0000:00:1e.0: setting latency timer to 64
[    0.311173]   alloc irq_desc for 18 on node -1
[    0.311175]   alloc kstat_irqs on node -1
[    0.311179] pci 0000:02:06.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.311186] pci_bus 0000:00: resource 0 [io  0x0000-0xffff]
[    0.311189] pci_bus 0000:00: resource 1 [mem 0x00000000-0xffffffff]
[    0.311191] pci_bus 0000:01: resource 0 [io  0x4000-0x4fff]
[    0.311194] pci_bus 0000:01: resource 1 [mem 0xe0600000-0xe06fffff]
[    0.311196] pci_bus 0000:01: resource 2 [mem 0xd8000000-0xdbffffff 64bit pref]
[    0.311199] pci_bus 0000:08: resource 0 [io  0x6000-0x6fff]
[    0.311201] pci_bus 0000:08: resource 1 [mem 0xe0100000-0xe01fffff]
[    0.311204] pci_bus 0000:08: resource 2 [mem 0x84000000-0x841fffff 64bit pref]
[    0.311207] pci_bus 0000:10: resource 0 [io  0x7000-0x7fff]
[    0.311209] pci_bus 0000:10: resource 1 [mem 0xe0000000-0xe00fffff]
[    0.311212] pci_bus 0000:10: resource 2 [mem 0x84200000-0x843fffff 64bit pref]
[    0.311214] pci_bus 0000:20: resource 0 [io  0x2000-0x3fff]
[    0.311217] pci_bus 0000:20: resource 1 [mem 0xdc000000-0xdfffffff]
[    0.311219] pci_bus 0000:20: resource 2 [mem 0x84400000-0x845fffff 64bit pref]
[    0.311222] pci_bus 0000:02: resource 0 [io  0x8000-0x8fff]
[    0.311224] pci_bus 0000:02: resource 1 [mem 0xe0200000-0xe05fffff]
[    0.311227] pci_bus 0000:02: resource 2 [mem 0x80000000-0x83ffffff pref]
[    0.311229] pci_bus 0000:02: resource 4 [io  0x0000-0xffff]
[    0.311232] pci_bus 0000:02: resource 5 [mem 0x00000000-0xffffffff]
[    0.311234] pci_bus 0000:03: resource 0 [io  0x8000-0x80ff]
[    0.311237] pci_bus 0000:03: resource 1 [io  0x8400-0x84ff]
[    0.311239] pci_bus 0000:03: resource 2 [mem 0x80000000-0x83ffffff pref]
[    0.311242] pci_bus 0000:03: resource 3 [mem 0x88000000-0x8bffffff]
[    0.311269] NET: Registered protocol family 2
[    0.311323] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.311560] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.311948] TCP bind hash table entries: 65536 (order: 7, 524288 bytes)
[    0.312138] TCP: Hash tables configured (established 131072 bind 65536)
[    0.312140] TCP reno registered
[    0.312144] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.312152] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.312218] NET: Registered protocol family 1
[    0.312354] pci 0000:01:00.0: Boot video device
[    0.312383] PCI: CLS 64 bytes, default 64
[    0.312427] Unpacking initramfs...
[    0.597299] Freeing initrd memory: 9644k freed
[    0.603890] audit: initializing netlink socket (disabled)
[    0.603908] type=2000 audit(1276735235.602:1): initialized
[    0.604102] highmem bounce pool size: 64 pages
[    0.604107] HugeTLB registered 4 MB page size, pre-allocated 0 pages
[    0.607128] VFS: Disk quotas dquot_6.5.2
[    0.607223] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.607372] msgmni has been set to 1733
[    0.607612] alg: No test for stdrng (krng)
[    0.607731] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[    0.607734] io scheduler noop registered
[    0.607737] io scheduler deadline registered
[    0.607747] io scheduler cfq registered (default)
[    0.607883] pcieport 0000:00:01.0: setting latency timer to 64
[    0.607915]   alloc irq_desc for 40 on node -1
[    0.607917]   alloc kstat_irqs on node -1
[    0.607928] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X
[    0.608063] pcieport 0000:00:1c.0: setting latency timer to 64
[    0.608111]   alloc irq_desc for 41 on node -1
[    0.608113]   alloc kstat_irqs on node -1
[    0.608122] pcieport 0000:00:1c.0: irq 41 for MSI/MSI-X
[    0.608317] pcieport 0000:00:1c.1: setting latency timer to 64
[    0.608365]   alloc irq_desc for 42 on node -1
[    0.608367]   alloc kstat_irqs on node -1
[    0.608376] pcieport 0000:00:1c.1: irq 42 for MSI/MSI-X
[    0.608573] pcieport 0000:00:1c.3: setting latency timer to 64
[    0.608621]   alloc irq_desc for 43 on node -1
[    0.608623]   alloc kstat_irqs on node -1
[    0.608632] pcieport 0000:00:1c.3: irq 43 for MSI/MSI-X
[    0.609282] ERST: Table is not found!
[    0.609339] EINJ: Table is not found!
[    0.609348] isapnp: Scanning for PnP cards...
[    0.966244] isapnp: No Plug & Play device found
[    0.969952] Linux agpgart interface v0.103
[    0.970007] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.970299] serial8250: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A
[    0.970943] Fixed MDIO Bus: probed
[    0.971079] PNP: PS/2 Controller [PNP0303:C216,PNP0f13:C217] at 0x60,0x64 irq 1,12
[    0.972763] i8042.c: Detected active multiplexing controller, rev 1.1.
[    0.973442] serio: i8042 KBD port at 0x60,0x64 irq 1
[    0.973448] serio: i8042 AUX0 port at 0x60,0x64 irq 12
[    0.973452] serio: i8042 AUX1 port at 0x60,0x64 irq 12
[    0.973455] serio: i8042 AUX2 port at 0x60,0x64 irq 12
[    0.973458] serio: i8042 AUX3 port at 0x60,0x64 irq 12
[    0.973632] mice: PS/2 mouse device common for all mice
[    0.973700] cpuidle: using governor ladder
[    0.973703] cpuidle: using governor menu
[    0.974020] TCP cubic registered
[    0.974075] Using IPI No-Shortcut mode
[    0.974223] registered taskstats version 1
[    0.974672] Freeing unused kernel memory: 368k freed
[    0.974887] Write protecting the kernel text: 2208k
[    0.974911] Write protecting the kernel read-only data: 856k
[    1.001922] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
[    1.125853] tg3.c:v3.110 (April 9, 2010)
[    1.125880] tg3 0000:08:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    1.125891] tg3 0000:08:00.0: setting latency timer to 64
[    1.186578] SCSI subsystem initialized
[    1.199854] usbcore: registered new interface driver usbfs
[    1.200135] usbcore: registered new interface driver hub
[    1.218276] usbcore: registered new device driver usb
[    1.230231] sdhci: Secure Digital Host Controller Interface driver
[    1.230233] sdhci: Copyright(c) Pierre Ossman
[    1.231339] sdhci-pci 0000:02:06.3: SDHCI controller found [104c:803c] (rev 0)
[    1.231363]   alloc irq_desc for 22 on node -1
[    1.231366]   alloc kstat_irqs on node -1
[    1.231374] sdhci-pci 0000:02:06.3: PCI INT C -> GSI 22 (level, low) -> IRQ 22
[    1.231447] Registered led device: mmc0::
[    1.231484] mmc0: SDHCI controller on PCI [0000:02:06.3] using PIO
[    1.232357] tg3 0000:08:00.0: eth0: Tigon3 [partno(BCM95751M) rev 4201] (PCI Express) MAC address 00:16:d4:be:36:66
[    1.232361] tg3 0000:08:00.0: eth0: attached PHY is 5750 (10/100/1000Base-T Ethernet) (WireSpeed[1])
[    1.232365] tg3 0000:08:00.0: eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
[    1.232368] tg3 0000:08:00.0: eth0: dma_rwctrl[76180000] dma_mask[64-bit]
[    1.233590] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.233615]   alloc irq_desc for 20 on node -1
[    1.233618]   alloc kstat_irqs on node -1
[    1.233627] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 20 (level, low) -> IRQ 20
[    1.233641] ehci_hcd 0000:00:1d.7: setting latency timer to 64
[    1.233645] ehci_hcd 0000:00:1d.7: EHCI Host Controller
[    1.233665] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1
[    1.233685] ehci_hcd 0000:00:1d.7: using broken periodic workaround
[    1.233698] ehci_hcd 0000:00:1d.7: debug port 1
[    1.235011] libata version 3.00 loaded.
[    1.237573] ehci_hcd 0000:00:1d.7: cache line size of 64 is not supported
[    1.237590] ehci_hcd 0000:00:1d.7: irq 20, io mem 0xe0704000
[    1.240609] thermal LNXTHERM:01: registered as thermal_zone0
[    1.240619] ACPI: Thermal Zone [TZ0] (80 C)
[    1.247528] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00
[    1.247552] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.247555] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.247558] usb usb1: Product: EHCI Host Controller
[    1.247560] usb usb1: Manufacturer: Linux 2.6.35-rc3-iniza-686-kms ehci_hcd
[    1.247562] usb usb1: SerialNumber: 0000:00:1d.7
[    1.247743] hub 1-0:1.0: USB hub found
[    1.247748] hub 1-0:1.0: 8 ports detected
[    1.247877] ata_piix 0000:00:1f.1: version 2.13
[    1.247889] ata_piix 0000:00:1f.1: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    1.247928] ata_piix 0000:00:1f.1: setting latency timer to 64
[    1.248153] scsi0 : ata_piix
[    1.248310] scsi1 : ata_piix
[    1.251927] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x5080 irq 14
[    1.251930] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x5088 irq 15
[    1.251952] ahci 0000:00:1f.2: version 3.0
[    1.251966]   alloc irq_desc for 21 on node -1
[    1.251969]   alloc kstat_irqs on node -1
[    1.251974] ahci 0000:00:1f.2: PCI INT B -> GSI 21 (level, low) -> IRQ 21
[    1.252013]   alloc irq_desc for 44 on node -1
[    1.252015]   alloc kstat_irqs on node -1
[    1.252025] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X
[    1.252077] ahci: SSS flag set, parallel bus scan disabled
[    1.252105] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 4 ports 1.5 Gbps 0x1 impl SATA mode
[    1.252109] ahci 0000:00:1f.2: flags: 64bit ncq ilck stag pm led clo pmp pio slum part 
[    1.252114] ahci 0000:00:1f.2: setting latency timer to 64
[    1.255010] scsi2 : ahci
[    1.255120] scsi3 : ahci
[    1.255225] scsi4 : ahci
[    1.255339] scsi5 : ahci
[    1.255612] ata2: port disabled. ignoring.
[    1.256744] thermal LNXTHERM:02: registered as thermal_zone1
[    1.256754] ACPI: Thermal Zone [TZ1] (86 C)
[    1.267478] ata3: SATA max UDMA/133 abar m1024@0xe0705000 port 0xe0705100 irq 44
[    1.267481] ata4: DUMMY
[    1.267483] ata5: DUMMY
[    1.267484] ata6: DUMMY
[    1.273242] thermal LNXTHERM:03: registered as thermal_zone2
[    1.273257] ACPI: Thermal Zone [TZ2] (85 C)
[    1.287800] thermal LNXTHERM:04: registered as thermal_zone3
[    1.287810] ACPI: Thermal Zone [TZ3] (65 C)
[    1.299119] uhci_hcd: USB Universal Host Controller Interface driver
[    1.299151] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
[    1.299159] uhci_hcd 0000:00:1d.0: setting latency timer to 64
[    1.299163] uhci_hcd 0000:00:1d.0: UHCI Host Controller
[    1.299174] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2
[    1.299204] uhci_hcd 0000:00:1d.0: irq 20, io base 0x00005000
[    1.299242] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
[    1.299245] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.299247] usb usb2: Product: UHCI Host Controller
[    1.299250] usb usb2: Manufacturer: Linux 2.6.35-rc3-iniza-686-kms uhci_hcd
[    1.299257] usb usb2: SerialNumber: 0000:00:1d.0
[    1.299260] thermal LNXTHERM:05: registered as thermal_zone4
[    1.299270] ACPI: Thermal Zone [TZ4] (35 C)
[    1.299390] hub 2-0:1.0: USB hub found
[    1.299395] hub 2-0:1.0: 2 ports detected
[    1.299490] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 22 (level, low) -> IRQ 22
[    1.299497] uhci_hcd 0000:00:1d.1: setting latency timer to 64
[    1.299501] uhci_hcd 0000:00:1d.1: UHCI Host Controller
[    1.299509] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3
[    1.299538] uhci_hcd 0000:00:1d.1: irq 22, io base 0x00005020
[    1.299572] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001
[    1.299575] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.299577] usb usb3: Product: UHCI Host Controller
[    1.299579] usb usb3: Manufacturer: Linux 2.6.35-rc3-iniza-686-kms uhci_hcd
[    1.299582] usb usb3: SerialNumber: 0000:00:1d.1
[    1.299655] hub 3-0:1.0: USB hub found
[    1.299659] hub 3-0:1.0: 2 ports detected
[    1.299740] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    1.299747] uhci_hcd 0000:00:1d.2: setting latency timer to 64
[    1.299750] uhci_hcd 0000:00:1d.2: UHCI Host Controller
[    1.299758] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4
[    1.299797] uhci_hcd 0000:00:1d.2: irq 18, io base 0x00005040
[    1.299830] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001
[    1.299833] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.299835] usb usb4: Product: UHCI Host Controller
[    1.299838] usb usb4: Manufacturer: Linux 2.6.35-rc3-iniza-686-kms uhci_hcd
[    1.299840] usb usb4: SerialNumber: 0000:00:1d.2
[    1.299913] hub 4-0:1.0: USB hub found
[    1.299917] hub 4-0:1.0: 2 ports detected
[    1.299998] uhci_hcd 0000:00:1d.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19
[    1.300005] uhci_hcd 0000:00:1d.3: setting latency timer to 64
[    1.300009] uhci_hcd 0000:00:1d.3: UHCI Host Controller
[    1.300017] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5
[    1.300056] uhci_hcd 0000:00:1d.3: irq 19, io base 0x00005060
[    1.300092] usb usb5: New USB device found, idVendor=1d6b, idProduct=0001
[    1.300095] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.300097] usb usb5: Product: UHCI Host Controller
[    1.300099] usb usb5: Manufacturer: Linux 2.6.35-rc3-iniza-686-kms uhci_hcd
[    1.300102] usb usb5: SerialNumber: 0000:00:1d.3
[    1.300175] hub 5-0:1.0: USB hub found
[    1.300179] hub 5-0:1.0: 2 ports detected
[    1.302559] thermal LNXTHERM:06: registered as thermal_zone5
[    1.302571] ACPI: Thermal Zone [TZ5] (77 C)
[    1.409523] ata1.00: ATAPI: MATSHITADVD-RAM UJ-842S, 1.01, max MWDMA2
[    1.415427] ata1.00: configured for MWDMA2
[    1.417671] scsi 0:0:0:0: CD-ROM            MATSHITA DVD-RAM UJ-842S  1.01 PQ: 0 ANSI: 5
[    1.804012] usb 1-5: new high speed USB device using ehci_hcd and address 5
[    1.931016] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    1.933478] ata3.00: ACPI cmd f5/00:00:00:00:00:a0 (SECURITY FREEZE LOCK) filtered out
[    1.933483] ata3.00: ACPI cmd b1/c1:00:00:00:00:a0 (DEVICE CONFIGURATION OVERLAY) filtered out
[    1.933636] ata3.00: ACPI cmd c6/00:10:00:00:00:a0 (SET MULTIPLE MODE) succeeded
[    1.933640] ata3.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out
[    1.934358] ata3.00: ATA-7: Hitachi HTS541680J9SA00, SB2OC7BP, max UDMA/100
[    1.934361] ata3.00: 156301488 sectors, multi 16: LBA48 
[    1.934924] usb 1-5: New USB device found, idVendor=152d, idProduct=2329
[    1.934928] usb 1-5: New USB device strings: Mfr=10, Product=11, SerialNumber=3
[    1.934930] usb 1-5: Product: Storagebird 35EV821
[    1.934932] usb 1-5: Manufacturer: 0123456
[    1.934934] usb 1-5: SerialNumber: 000000000340
[    1.937009] ata3.00: ACPI cmd f5/00:00:00:00:00:a0 (SECURITY FREEZE LOCK) filtered out
[    1.937013] ata3.00: ACPI cmd b1/c1:00:00:00:00:a0 (DEVICE CONFIGURATION OVERLAY) filtered out
[    1.937229] ata3.00: ACPI cmd c6/00:10:00:00:00:a0 (SET MULTIPLE MODE) succeeded
[    1.937233] ata3.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out
[    1.937982] ata3.00: configured for UDMA/100
[    1.943184] Initializing USB Mass Storage driver...
[    1.943264] scsi6 : usb-storage 1-5:1.0
[    1.943333] usbcore: registered new interface driver usb-storage
[    1.943335] USB Mass Storage support registered.
[    1.949943] ata3.00: configured for UDMA/100
[    1.949946] ata3: EH complete
[    1.950046] scsi 2:0:0:0: Direct-Access     ATA      Hitachi HTS54168 SB2O PQ: 0 ANSI: 5
[    1.974682] sd 2:0:0:0: [sda] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB)
[    1.974743] sd 2:0:0:0: [sda] Write Protect is off
[    1.974746] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    1.974771] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.974930]  sda:
[    1.974976] ACPI: Fan [C335] (off)
[    1.975357] ACPI: Fan [C336] (off)
[    1.975706] ACPI: Fan [C337] (off)
[    1.976064] ACPI: Fan [C338] (off)
[    1.977332] ACPI: Fan [C339] (off)
[    1.977697] ACPI: Fan [C33A] (off)
[    1.978059] ACPI: Fan [C33B] (off)
[    1.978422] ACPI: Fan [C33C] (off)
[    1.980309] ACPI: Fan [C33D] (off)
[    1.980534] ACPI: Fan [C33E] (off)
[    1.980711] ACPI: Fan [C33F] (off)
[    2.141012] usb 2-2: new full speed USB device using uhci_hcd and address 2
[    2.290117] usb 2-2: New USB device found, idVendor=03f0, idProduct=1e1d
[    2.290120] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.290123] usb 2-2: Product: HP hs2300 HSDPA Broadband Wireless Module
[    2.290125] usb 2-2: Manufacturer: HP
[    2.356430]  sda1 sda2 sda3 sda4 < sda5 sda6 sda7 >
[    2.413609] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.420758] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray
[    2.420761] Uniform CD-ROM driver Revision: 3.20
[    2.420841] sr 0:0:0:0: Attached scsi CD-ROM sr0
[    2.425022] sr 0:0:0:0: Attached scsi generic sg0 type 5
[    2.425906] sd 2:0:0:0: Attached scsi generic sg1 type 0
[    2.502011] usb 3-1: new full speed USB device using uhci_hcd and address 2
[    2.653405] usb 3-1: New USB device found, idVendor=08ff, idProduct=2580
[    2.653409] usb 3-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    2.653412] usb 3-1: Product: Fingerprint Sensor
[    2.862010] usb 3-2: new low speed USB device using uhci_hcd and address 3
[    2.985194] scsi 6:0:0:0: Direct-Access     WDC WD10 EAVS-00D7B0           PQ: 0 ANSI: 2 CCS
[    2.985684] sd 6:0:0:0: Attached scsi generic sg2 type 0
[    2.986181] sd 6:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[    2.986927] sd 6:0:0:0: [sdb] Write Protect is off
[    2.986930] sd 6:0:0:0: [sdb] Mode Sense: 34 00 00 00
[    2.986932] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[    2.989304] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[    2.989363]  sdb: sdb1 sdb2 sdb3 sdb4 < sdb5
[    3.025360] usb 3-2: New USB device found, idVendor=046d, idProduct=c00e
[    3.025364] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    3.025366] usb 3-2: Product: USB-PS/2 Optical Mouse
[    3.025368] usb 3-2: Manufacturer: Logitech
[    3.030551]  sdb6 sdb7 sdb8 >
[    3.071794] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[    3.071854] sd 6:0:0:0: [sdb] Attached SCSI disk
[    3.076229] usbcore: registered new interface driver hiddev
[    3.088558] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.0/input/input1
[    3.088609] generic-usb 0003:046D:C00E.0001: input,hidraw0: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1d.1-2/input0
[    3.088624] usbcore: registered new interface driver usbhid
[    3.088626] usbhid: USB HID core driver
[    4.259401] device-mapper: uevent: version 1.0.3
[    4.259514] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com
[    4.264139] PM: Starting manual resume from disk
[    4.293469] EXT3-fs: barriers not enabled
[    4.307758] kjournald starting.  Commit interval 5 seconds
[    4.307780] EXT3-fs (sda2): mounted filesystem with writeback data mode
[    6.972973] udev: starting version 157
[    7.759424] ACPI: acpi_idle registered with cpuidle
[    7.766009] Monitor-Mwait will be used to enter C-1 state
[    7.766857] Monitor-Mwait will be used to enter C-2 state
[    7.766865] Marking TSC unstable due to TSC halts in idle
[    7.767843] Switching to clocksource hpet
[    7.886561] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
[    7.886568] ACPI: Sleep Button [C242]
[    7.886619] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input3
[    7.886696] ACPI: Lid Switch [C23A]
[    7.886759] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input4
[    7.886763] ACPI: Power Button [PWRF]
[    7.931096] [Firmware Bug]: ACPI: ACPI brightness control misses _BQC function
[    7.931219] [Firmware Bug]: _BCQ is used instead of _BQC
[    7.932380] acpi device:02: registered as cooling_device13
[    7.932883] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/LNXVIDEO:00/input/input5
[    7.932890] ACPI: Video Device [C12F] (multi-head: yes  rom: no  post: no)
[    8.325247] ACPI: WMI: Mapper loaded
[    8.336085] ACPI: AC Adapter [C1B8] (on-line)
[    8.383762] ACPI: Battery Slot [C1BA] (battery present)
[    8.383934] ACPI: Battery Slot [C1B9] (battery absent)
[    8.415720] parport_pc 00:03: reported by Plug and Play ACPI
[    8.415800] parport0: PC-style at 0x378 (0x778), irq 7, dma 1 [PCSPP,TRISTATE,COMPAT,ECP,DMA]
[    8.580646] lis3lv02d: hardware type NC64x0 found.
[    8.584533] lis3lv02d: 12 bits sensor found
[    8.608396] NET: Registered protocol family 23
[    8.758900] input: ST LIS3LV02DL Accelerometer as /devices/platform/lis3lv02d/input/input6
[    8.758972] Registered led device: hp::hddprotect
[    8.759011] lis3lv02d driver loaded.
[    8.782732] tpm_tis 00:04: 1.2 TPM (device-id 0xB, rev-id 16)
[    8.800175] Synaptics Touchpad, model: 1, fw: 6.2, id: 0x2580b1, caps: 0xa04793/0x300000/0x0
[    8.800184] serio: Synaptics pass-through port at isa0060/serio4/input0
[    8.843742] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input7
[    9.181463] input: PC Speaker as /devices/platform/pcspkr/input/input8
[    9.510065] found SMC SuperIO Chip (devid=0x7a rev=01 base=0x004e): LPC47N227
[    9.510090] smsc_superio_flat(): fir: 0x100, sir: 0x3e8, dma: 03, irq: 7, mode: 0x0e
[    9.510094] smsc_ircc_present: can't get sir_base of 0x3e8
[    9.608935] input: HP WMI hotkeys as /devices/virtual/input/input9
[    9.839444] rtc_cmos 00:08: RTC can wake from S4
[    9.839509] rtc_cmos 00:08: rtc core: registered rtc_cmos as rtc0
[    9.839544] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
[    9.906166] [drm] Initialized drm 1.1.0 20060810
[    9.983007] iTCO_vendor_support: vendor-support=0
[    9.984992] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.06
[    9.985430] iTCO_wdt: Found a ICH7-M or ICH7-U TCO device (Version=2, TCOBASE=0x1060)
[    9.985584] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[   10.054873] yenta_cardbus 0000:02:06.0: CardBus bridge found [103c:30ac]
[   10.054897] yenta_cardbus 0000:02:06.0: Enabling burst memory read transactions
[   10.054904] yenta_cardbus 0000:02:06.0: Using INTVAL to route CSC interrupts to PCI
[   10.054906] yenta_cardbus 0000:02:06.0: Routing CardBus interrupts to PCI
[   10.054913] yenta_cardbus 0000:02:06.0: TI: mfunc 0x01aa1b22, devctl 0x64
[   10.238573] intel_rng: FWH not detected
[   10.277703] yenta_cardbus 0000:02:06.0: ISA IRQ mask 0x0c78, PCI irq 18
[   10.277707] yenta_cardbus 0000:02:06.0: Socket status: 30000006
[   10.277712] pci_bus 0000:02: Raising subordinate bus# of parent bus (#02) from #03 to #06
[   10.277720] yenta_cardbus 0000:02:06.0: pcmcia: parent PCI bridge window: [io  0x8000-0x8fff]
[   10.277724] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x8000-0x8fff: excluding 0x8000-0x80ff 0x8400-0x84ff
[   10.285452] yenta_cardbus 0000:02:06.0: pcmcia: parent PCI bridge window: [mem 0xe0200000-0xe05fffff]
[   10.285456] pcmcia_socket pcmcia_socket0: cs: memory probe 0xe0200000-0xe05fffff: excluding 0xe0200000-0xe023ffff
[   10.285473] yenta_cardbus 0000:02:06.0: pcmcia: parent PCI bridge window: [mem 0x80000000-0x83ffffff pref]
[   10.285476] pcmcia_socket pcmcia_socket0: cs: memory probe 0x80000000-0x83ffffff: excluding 0x80000000-0x83ffffff
[   10.285849] tifm_7xx1 0000:02:06.2: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[   10.479416] cfg80211: Calling CRDA to update world regulatory domain
[   10.778369] [drm] VGACON disable radeon kernel modesetting.
[   10.778955] pci 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   10.778961] pci 0000:01:00.0: setting latency timer to 64
[   10.779133] [drm] Initialized radeon 1.33.0 20080528 for 0000:01:00.0 on minor 0
[   10.798168] usbcore: registered new interface driver usbserial
[   10.798188] USB Serial support registered for generic
[   10.798217] usbcore: registered new interface driver usbserial_generic
[   10.798220] usbserial: USB Serial Driver core
[   10.925591] USB Serial support registered for Sierra USB modem
[   10.925613] sierra 2-2:1.0: Sierra USB modem converter detected
[   10.927600] usb 2-2: Sierra USB modem converter now attached to ttyUSB0
[   10.927674] usb 2-2: Sierra USB modem converter now attached to ttyUSB1
[   10.927745] usb 2-2: Sierra USB modem converter now attached to ttyUSB2
[   10.927774] usbcore: registered new interface driver sierra
[   10.927778] sierra: v.1.7.16:USB Driver for Sierra Wireless USB modems
[   11.396343] psmouse serio5: ID: 10 00 64
[   11.708405] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x100-0x3af: excluding 0x100-0x107 0x170-0x177 0x1f0-0x1f7 0x370-0x37f
[   11.710684] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x3e0-0x4ff: excluding 0x3e8-0x3f7 0x4d0-0x4d7
[   11.711615] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x820-0x8ff: clean.
[   11.712435] pcmcia_socket pcmcia_socket0: cs: IO port probe 0xc00-0xcf7: clean.
[   11.713308] pcmcia_socket pcmcia_socket0: cs: memory probe 0x0c0000-0x0fffff: excluding 0xc0000-0xcffff 0xe0000-0xfffff
[   11.713371] pcmcia_socket pcmcia_socket0: cs: memory probe 0xa0000000-0xa0ffffff: clean.
[   11.713433] pcmcia_socket pcmcia_socket0: cs: memory probe 0x60000000-0x60ffffff: excluding 0x60000000-0x60ffffff
[   11.713496] pcmcia_socket pcmcia_socket0: cs: IO port probe 0xa00-0xaff: clean.
[   11.872137] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:ds
[   11.872140] iwl3945: Copyright(c) 2003-2010 Intel Corporation
[   11.872213] iwl3945 0000:10:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[   11.872228] iwl3945 0000:10:00.0: setting latency timer to 64
[   11.926601] iwl3945 0000:10:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels
[   11.926604] iwl3945 0000:10:00.0: Detected Intel Wireless WiFi Link 3945ABG
[   11.926719]   alloc irq_desc for 45 on node -1
[   11.926721]   alloc kstat_irqs on node -1
[   11.926754] iwl3945 0000:10:00.0: irq 45 for MSI/MSI-X
[   12.019609] phy0: Selected rate control algorithm 'iwl-3945-rs'
[   13.151994] cfg80211: World regulatory domain updated:
[   13.151997]     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[   13.152001]     (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[   13.152004]     (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[   13.152007]     (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[   13.152010]     (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[   13.152024]     (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[   13.203453] HDA Intel 0000:00:1b.0: power state changed by ACPI to D0
[   13.203490] HDA Intel 0000:00:1b.0: power state changed by ACPI to D0
[   13.203501] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   13.203565]   alloc irq_desc for 46 on node -1
[   13.203568]   alloc kstat_irqs on node -1
[   13.203581] HDA Intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[   13.203618] HDA Intel 0000:00:1b.0: setting latency timer to 64
[   13.203623] hda-intel: chipset global capabilities = 0x4401
[   13.211048] hda-intel: codec_mask = 0x3
[   13.211206] hda-intel: codec #0 probed OK
[   13.211268] hda-intel: codec #1 probed OK
[   13.244200] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input10
[   13.244240] hda_codec: model 'hp' is selected for config 103c:0 (HP nx)
[   14.098884] input: PS/2 Generic Mouse as /devices/platform/i8042/serio4/serio5/input/input11
[   17.474655] EXT3-fs (sda2): using internal journal
[   20.790551] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[   20.900881] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null)
[   21.122017] fuse init (API version 7.14)
[   24.365045] iwl3945 0000:10:00.0: loaded firmware version 15.32.2.9
[   26.376069] iwl3945 0000:10:00.0: Wait for START_ALIVE timeout after 2000ms.
[   26.414078] iwl3945 0000:10:00.0: Microcode SW error detected. Restarting 0x82000008.
[   26.414290] iwl3945 0000:10:00.0: Loaded firmware version: 15.32.2.9
[   26.414451] iwl3945 0000:10:00.0: Start IWL Error Log Dump:
[   26.414583] iwl3945 0000:10:00.0: Status: 0x000202E4, count: 1
[   26.414714] iwl3945 0000:10:00.0: Desc       Time       asrtPC  blink2 ilink1  nmiPC   Line
[   26.415150] iwl3945 0000:10:00.0: SYSASSERT     (#5) 0000012081 0x008B6 0x00274 0x00320 0x00320 116
[   26.415152] 
[   26.415611] iwl3945 0000:10:00.0: Start IWL Event Log Dump: display last 20 count
[   26.415856] iwl3945 0000:10:00.0: 0000001260	0x00209377	0450
[   26.416006] iwl3945 0000:10:00.0: 0000001262	0x00209377	0450
[   26.416022] iwl3945 0000:10:00.0: 0000001264	0x00209377	0450
[   26.416022] iwl3945 0000:10:00.0: 0000001267	0x00209377	0450
[   26.416022] iwl3945 0000:10:00.0: 0000001268	0x00000fff	0451
[   26.416022] iwl3945 0000:10:00.0: 0000001339	0x04030047	0401
[   26.416022] iwl3945 0000:10:00.0: 0000001443	0x04040047	0401
[   26.416022] iwl3945 0000:10:00.0: 0000001539	0x04050097	0401
[   26.416022] iwl3945 0000:10:00.0: 0000001541	0x00000001	0451
[   26.416022] iwl3945 0000:10:00.0: 0000001561	0x00000000	0451
[   26.416022] iwl3945 0000:10:00.0: 0000001584	0x000000d9	0106
[   26.416022] iwl3945 0000:10:00.0: 0000001586	0x00000000	0301
[   26.416022] iwl3945 0000:10:00.0: 0000001822	0x00000001	0353
[   26.416022] iwl3945 0000:10:00.0: 0000001832	0x00000000	0352
[   26.416022] iwl3945 0000:10:00.0: 0000001840	0x000000d9	0106
[   26.416022] iwl3945 0000:10:00.0: 0000001842	0x00000000	0301
[   26.416022] iwl3945 0000:10:00.0: 0000002076	0x00000002	0353
[   26.416022] iwl3945 0000:10:00.0: 0000002087	0x00000000	0352
[   26.416022] iwl3945 0000:10:00.0: 0000012079	0x00000004	0123
[   26.416022] iwl3945 0000:10:00.0: 0000012082	0x00000100	0125
[   26.418857] ------------[ cut here ]------------
[   26.418871] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.418874] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.418877] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.418879] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.418973] Pid: 0, comm: swapper Not tainted 2.6.35-rc3-iniza-686-kms #1
[   26.418976] Call Trace:
[   26.418983]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.418991]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.418995]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.419001]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.419016]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.419020]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.419026]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.419030]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.419033]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.419037]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.419040]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.419044]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.419048]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.419059]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.419065]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.419068]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.419072]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.419075] ---[ end trace 995b9da0cb4183e1 ]---
[   26.419078] iwl data: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.419289] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.419499] ------------[ cut here ]------------
[   26.419506] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.419509] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.419511] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.419513] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.419592] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.419594] Call Trace:
[   26.419598]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.419606]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.419610]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.419616]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.419622]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.419626]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.419631]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.419635]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.419638]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.419642]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.419645]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.419648]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.419652]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.419660]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.419665]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.419668]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.419671]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.419674] ---[ end trace 995b9da0cb4183e2 ]---
[   26.419676] iwl data: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.419886] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.420103] ------------[ cut here ]------------
[   26.420110] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.420113] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.420116] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.420117] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.420196] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.420198] Call Trace:
[   26.420202]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.420210]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.420214]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.420220]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.420226]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.420230]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.420235]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.420239]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.420242]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.420246]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.420249]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.420252]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.420255]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.420264]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.420268]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.420271]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.420275]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.420277] ---[ end trace 995b9da0cb4183e3 ]---
[   26.420280] iwl data: 00000000: 00 ee 79 f6 00 00 00 00 00 00 00 00 00 00 00 00  ..y.............
[   26.420490] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.420700] ------------[ cut here ]------------
[   26.420707] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.420709] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.420712] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.420714] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.420792] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.420794] Call Trace:
[   26.420798]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.420806]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.420810]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.420816]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.420822]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.420825]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.420831]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.420834]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.420838]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.420841]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.420844]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.420847]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.420851]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.420859]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.420864]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.420867]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.420870]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.420873] ---[ end trace 995b9da0cb4183e4 ]---
[   26.420875] iwl data: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.421093] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.421303] ------------[ cut here ]------------
[   26.421310] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.421313] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.421315] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.421317] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.421396] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.421398] Call Trace:
[   26.421402]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.421410]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.421414]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.421420]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.421426]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.421430]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.421435]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.421439]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.421442]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.421445]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.421449]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.421452]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.421455]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.421463]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.421468]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.421471]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.421474]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.421477] ---[ end trace 995b9da0cb4183e5 ]---
[   26.421479] iwl data: 00000000: 00 ce 79 f6 00 00 00 00 00 00 00 00 00 00 00 00  ..y.............
[   26.421689] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.421903] ------------[ cut here ]------------
[   26.421910] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.421912] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.421915] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.421917] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.421996] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.421998] Call Trace:
[   26.422009]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.422017]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.422021]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.422027]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.422033]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.422037]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.422042]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.422046]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.422050]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.422053]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.422056]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.422059]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.422063]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.422071]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.422076]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.422079]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.422082]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.422085] ---[ end trace 995b9da0cb4183e6 ]---
[   26.422087] iwl data: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.422300] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.422513] ------------[ cut here ]------------
[   26.422520] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.422523] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.422525] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.422527] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.422606] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.422608] Call Trace:
[   26.422611]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.422619]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.422623]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.422630]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.422636]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.422639]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.422644]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.422648]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.422652]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.422655]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.422658]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.422661]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.422665]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.422673]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.422678]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.422681]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.422684]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.422686] ---[ end trace 995b9da0cb4183e7 ]---
[   26.422689] iwl data: 00000000: 00 ae 79 f6 00 00 00 00 00 00 00 00 00 00 00 00  ..y.............
[   26.422903] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.423124] ------------[ cut here ]------------
[   26.423131] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.423133] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.423136] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.423138] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.423217] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.423219] Call Trace:
[   26.423223]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.423231]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.423234]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.423241]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.423247]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.423250]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.423256]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.423259]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.423263]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.423266]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.423269]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.423273]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.423276]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.423285]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.423289]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.423292]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.423295]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.423298] ---[ end trace 995b9da0cb4183e8 ]---
[   26.423300] iwl data: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.423514] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.423728] ------------[ cut here ]------------
[   26.423735] WARNING: at drivers/net/wireless/iwlwifi/iwl-tx.c:611 iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]()
[   26.423737] Hardware name: HP Compaq nc6400 (RH572EA#ABD)
[   26.423740] wrong command queue 0, sequence 0x0 readp=0 writep=2
[   26.423742] Modules linked in: fuse ext4 jbd2 crc16 snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi arc4 ecb iwl3945 snd_rawmidi snd_seq_midi_event iwlcore snd_seq snd_timer snd_seq_device sierra usbserial radeon pcmcia mac80211 cfg80211 ttm rng_core drm_kms_helper snd tifm_7xx1 yenta_socket pcmcia_rsrc pcmcia_core iTCO_wdt iTCO_vendor_support drm soundcore intel_agp i2c_algo_bit hp_wmi i2c_core snd_page_alloc rtc_cmos tifm_core joydev tpm_infineon pcspkr rfkill evdev rtc_core rtc_lib tpm_tis tpm container irda hp_accel psmouse lis3lv02d parport_pc parport battery ac wmi tpm_bios crc_ccitt serio_raw input_polldev video button output processor ext3 jbd mbcache dm_mod usbhid hid sg sr_mod cdrom fan sd_mod pata_acpi ata_generic usb_storage uhci_hcd ahci ata_piix libahci ehci_hcd sdhci_pci sdhci libata mmc_core scsi_mod usbcore tg3 led_class nls_base thermal [last unloaded: scsi_wait_scan]
[   26.423820] Pid: 0, comm: swapper Tainted: G        W   2.6.35-rc3-iniza-686-kms #1
[   26.423823] Call Trace:
[   26.423826]  [<c102e931>] ? warn_slowpath_common+0x6a/0x7b
[   26.423834]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.423838]  [<c102e9a8>] ? warn_slowpath_fmt+0x28/0x2c
[   26.423844]  [<f924b2f1>] ? iwl_tx_cmd_complete+0x51/0x1c5 [iwlcore]
[   26.423850]  [<f92be25b>] ? iwl3945_rx_handle+0x282/0x387 [iwl3945]
[   26.423854]  [<c103cb6f>] ? __queue_work+0x1e/0x2a
[   26.423859]  [<f92be9c3>] ? iwl3945_irq_tasklet+0x3d5/0x5f8 [iwl3945]
[   26.423863]  [<c1032b17>] ? tasklet_action+0x87/0xda
[   26.423866]  [<c10330f4>] ? __do_softirq+0x80/0xfc
[   26.423870]  [<c103319e>] ? do_softirq+0x2e/0x38
[   26.423873]  [<c103326b>] ? irq_exit+0x29/0x64
[   26.423876]  [<c100440a>] ? do_IRQ+0x81/0x92
[   26.423879]  [<c10033a9>] ? common_interrupt+0x29/0x30
[   26.423888]  [<f86dc0bf>] ? acpi_idle_enter_simple+0xff/0x13c [processor]
[   26.423892]  [<c119f6b6>] ? cpuidle_idle_call+0x6b/0xa1
[   26.423896]  [<c100216b>] ? cpu_idle+0x46/0x73
[   26.423899]  [<c133089d>] ? start_kernel+0x31c/0x31f
[   26.423901] ---[ end trace 995b9da0cb4183e9 ]---
[   26.423903] iwl data: 00000000: 00 8e 79 f6 00 00 00 00 00 00 00 00 00 00 00 00  ..y.............
[   26.424121] iwl data: 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
[   26.424360] iwl3945 0000:10:00.0: Command REPLY_RXON failed: FW Error
[   26.424493] iwl3945 0000:10:00.0: Error setting new configuration (-5).
[   26.432470] iwl3945 0000:10:00.0: Can't stop Rx DMA.
[   27.573761] NET: Registered protocol family 10
[   27.574472] lo: Disabled Privacy Extensions
[   27.575252] ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   31.382911] lp0: using parport0 (interrupt-driven).
[   31.382914] lp0: console ready
[   31.411368] ppdev: user-space parallel port driver
[   36.550818] Bluetooth: Core ver 2.15
[   36.550841] NET: Registered protocol family 31
[   36.550843] Bluetooth: HCI device and connection manager initialized
[   36.550846] Bluetooth: HCI socket layer initialized
[   36.588427] Bluetooth: L2CAP ver 2.14
[   36.588429] Bluetooth: L2CAP socket layer initialized
[   36.666979] Bluetooth: RFCOMM TTY layer initialized
[   36.666984] Bluetooth: RFCOMM socket layer initialized
[   36.666986] Bluetooth: RFCOMM ver 1.11
[   36.730094] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   36.730097] Bluetooth: BNEP filters: protocol multicast
[   36.826526] Bridge firewalling registered
[   36.946506] Bluetooth: SCO (Voice Link) ver 0.6
[   36.946509] Bluetooth: SCO socket layer initialized
[   40.428470] CPUFREQ: Per core ondemand sysfs interface is deprecated - up_threshold
[   40.429463] CPUFREQ: Per core ondemand sysfs interface is deprecated - ignore_nice_load
[   66.130247] [drm] Module unloaded
[   68.714386] [drm] Initialized drm 1.1.0 20060810
[   68.749138] [drm] radeon kernel modesetting enabled.
[   68.749183] radeon 0000:01:00.0: setting latency timer to 64
[   68.750442] [drm] initializing kernel modesetting (RV515 0x1002:0x714A).
[   68.753159] [drm] register mmio base: 0xE0600000
[   68.753164] [drm] register mmio size: 65536
[   68.753493] ATOM BIOS: M52T
[   68.753520] [drm] Generation 2 PCI interface, using max accessible memory
[   68.753525] radeon 0000:01:00.0: VRAM: 64M 0x00000000 - 0x03FFFFFF (64M used)
[   68.753529] radeon 0000:01:00.0: GTT: 512M 0x04000000 - 0x23FFFFFF
[   68.753603]   alloc irq_desc for 47 on node -1
[   68.753606]   alloc kstat_irqs on node -1
[   68.753617] radeon 0000:01:00.0: irq 47 for MSI/MSI-X
[   68.753623] [drm] radeon: using MSI.
[   68.753654] [drm] radeon: irq initialized.
[   68.754826] [drm] Detected VRAM RAM=64M, BAR=64M
[   68.754831] [drm] RAM width 64bits DDR
[   68.754939] [TTM] Zone  kernel: Available graphics memory: 443958 kiB.
[   68.754942] [TTM] Zone highmem: Available graphics memory: 1037786 kiB.
[   68.754944] [TTM] Initializing pool allocator.
[   68.754967] [drm] radeon: 64M of VRAM memory ready
[   68.754969] [drm] radeon: 512M of GTT memory ready.
[   68.754995] [drm] GART: num cpu pages 131072, num gpu pages 131072
[   68.756538] [drm] radeon: 1 quad pipes, 1 z pipes initialized.
[   68.757774] [drm] PCIE GART of 512M enabled (table at 0x00040000).
[   68.757826] [drm] Loading R500 Microcode
[   68.799743] [drm] radeon: ring at 0x0000000004000000
[   68.799780] [drm] ring test succeeded in 10 usecs
[   68.799968] [drm] radeon: ib pool ready.
[   68.800071] [drm] ib test succeeded in 0 usecs
[   68.800099] [drm] Default TV standard: NTSC
[   68.800104] [drm] Default TV standard: NTSC
[   68.800211] [drm] Default TV standard: NTSC
[   68.800297] [drm] Radeon Display Connectors
[   68.800299] [drm] Connector 0:
[   68.800301] [drm]   VGA
[   68.800304] [drm]   DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c
[   68.800306] [drm]   Encoders:
[   68.800308] [drm]     CRT1: INTERNAL_KLDSCP_DAC1
[   68.800310] [drm] Connector 1:
[   68.800311] [drm]   LVDS
[   68.800314] [drm]   DDC: 0x7e30 0x7e30 0x7e34 0x7e34 0x7e38 0x7e38 0x7e3c 0x7e3c
[   68.800316] [drm]   Encoders:
[   68.800317] [drm]     LCD1: INTERNAL_LVTM1
[   68.800319] [drm] Connector 2:
[   68.800321] [drm]   S-video
[   68.800322] [drm]   Encoders:
[   68.800324] [drm]     TV1: INTERNAL_KLDSCP_DAC2
[   68.800326] [drm] Connector 3:
[   68.800327] [drm]   DVI-I
[   68.800329] [drm]   HPD1
[   68.800331] [drm]   DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c
[   68.800333] [drm]   Encoders:
[   68.800335] [drm]     DFP1: INTERNAL_KLDSCP_TMDS1
[   68.860565] [drm] radeon: power management initialized
[   69.203842] [drm] fb mappable at 0xD80C0000
[   69.203845] [drm] vram apper at 0xD8000000
[   69.203847] [drm] size 4096000
[   69.203849] [drm] fb depth is 24
[   69.203851] [drm]    pitch is 5120
[   69.203911] fbcon: radeondrmfb (fb0) is primary device
[   69.361280] Console: switching to colour frame buffer device 160x50
[   69.366774] fb0: radeondrmfb frame buffer device
[   69.366776] drm: registered panic notifier
[   69.366780] Slow work thread pool: Starting up
[   69.366873] Slow work thread pool: Ready
[   69.366879] [drm] Initialized radeon 2.5.0 20080528 for 0000:01:00.0 on minor 0
[  210.467312] iwl3945 0000:10:00.0: PCI INT A disabled
[  225.541479] cfg80211: Calling CRDA to update world regulatory domain
[  225.550830] cfg80211: World regulatory domain updated:
[  225.550833]     (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[  225.550837]     (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[  225.550840]     (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[  225.550843]     (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[  225.550846]     (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[  225.550849]     (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[  225.583717] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, in-tree:ds
[  225.583720] iwl3945: Copyright(c) 2003-2010 Intel Corporation
[  225.583798] iwl3945 0000:10:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[  225.583818] iwl3945 0000:10:00.0: setting latency timer to 64
[  225.624390] iwl3945 0000:10:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels
[  225.624393] iwl3945 0000:10:00.0: Detected Intel Wireless WiFi Link 3945ABG
[  225.624539] iwl3945 0000:10:00.0: irq 45 for MSI/MSI-X
[  225.624944] phy0: Selected rate control algorithm 'iwl-3945-rs'
[  237.107632] iwl3945 0000:10:00.0: loaded firmware version 15.32.2.9
[  237.271672] ADDRCONF(NETDEV_UP): wlan0: link is not ready
[  237.388901] NET: Registered protocol family 17
[  247.432406] wlan0: authenticate with 00:04:0e:e4:00:3d (try 1)
[  247.434146] wlan0: authenticated
[  247.434772] wlan0: associate with 00:04:0e:e4:00:3d (try 1)
[  247.438402] wlan0: RX AssocResp from 00:04:0e:e4:00:3d (capab=0x411 status=0 aid=1)
[  247.438409] wlan0: associated
[  247.441688] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[  247.520606] padlock: VIA PadLock not detected.
[  258.210035] wlan0: no IPv6 routers present

^ permalink raw reply

* Re: patch "net: deliver skbs on inactive slaves to exact matches" stalls  nfs mounts
From: John Fastabend @ 2010-06-16 22:36 UTC (permalink / raw)
  To: Fred Isaman; +Cc: netdev@vger.kernel.org, NFS list, David S. Miller
In-Reply-To: <AANLkTil5gBFkXgmImU1Mt8uJXKTTNCen8NtzWpBxaYdq@mail.gmail.com>

Fred Isaman wrote:
> I am using vmware fusion 3.1.0 on a macbook pro host with a fedora 12
> guest running a 2.6.35-rc3 based kernel,  Upgrading from rc2 to rc3
> introduced a long delay when the guest attempts an nfs mount (~120
> secs).  Reverting patch 597a264b1a9c7e36d1728f677c66c5c1f7e3b837
> "net: deliver skbs on inactive slaves to exact matches" changes back
> to normal behavior.
> 
> Fred

This should be fixed here,

 From e897082fe7a5b591dc4dd5599ac39081a7c8e482 Mon Sep 17 00:00:00 2001
From: John Fastabend <john.r.fastabend@intel.com>
Date: Sun, 13 Jun 2010 10:36:30 +0000
Subject: [PATCH] net: fix deliver_no_wcard regression on loopback device

deliver_no_wcard is not being set in skb_copy_header.
In the skb_cloned case it is not being cleared and
may cause the skb to be dropped when the loopback device
pushes it back up the stack.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply

* Re: [PATCH 3/3] cxgb4i_v4.3 : main driver files
From: Mike Christie @ 2010-06-16 22:19 UTC (permalink / raw)
  To: open-iscsi-/JYPxA39Uh5TLH3MbocFFw
  Cc: Rakesh Ranjan, LK-NetDev, LK-SCSIDev, LKML, Karen Xie,
	David Miller, James Bottomley, Anish Bhatt
In-Reply-To: <1275973167-8640-4-git-send-email-rakesh-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>

On 06/07/2010 11:59 PM, Rakesh Ranjan wrote:
> From: Rakesh Ranjan<rakesh-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>
>
>
> Signed-off-by: Rakesh Ranjan<rakesh-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>
> ---
>   drivers/scsi/cxgbi/cxgb4i.h         |  175 +++++
>   drivers/scsi/cxgbi/cxgb4i_ddp.c     |  653 ++++++++++++++++
>   drivers/scsi/cxgbi/cxgb4i_init.c    |  317 ++++++++
>   drivers/scsi/cxgbi/cxgb4i_offload.c | 1409 +++++++++++++++++++++++++++++++++++
>   4 files changed, 2554 insertions(+), 0 deletions(-)
>   create mode 100644 drivers/scsi/cxgbi/cxgb4i.h
>   create mode 100644 drivers/scsi/cxgbi/cxgb4i_ddp.c
>   create mode 100644 drivers/scsi/cxgbi/cxgb4i_init.c
>   create mode 100644 drivers/scsi/cxgbi/cxgb4i_offload.c
>

Do you think you can look through this patch and identify the places 
where you basically just copied a cxgb3i function or copied it but 
renamed some stuff and then move these type of things to the lib patch?

A lot of the scatter list stuff for example looks the same in each driver.

ddp_find_unused_entries - cxgb4i_ddp_find_unused_entries
ddp_unmark_entries - cxgb4i_ddp_unmark_entries
cxgb3i_ddp_find_page_index - cxgb4i_ddp_find_page_index
cxgb3i_ddp_adjust_page_table - cxgb4i_ddp_adjust_page_table
..... (lots of the ddp code looks duplicated).

The *_offload.c code looks the same.

-- 
You received this message because you are subscribed to the Google Groups "open-iscsi" group.
To post to this group, send email to open-iscsi-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to open-iscsi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at http://groups.google.com/group/open-iscsi?hl=en.

^ permalink raw reply

* Re: [PATCH 0/8] Support unix domain sockets across namespaces
From: David Miller @ 2010-06-16 22:15 UTC (permalink / raw)
  To: ebiederm; +Cc: serue, containers, daniel.lezcano, netdev, xemul
In-Reply-To: <m1hbl7hxo3.fsf@fess.ebiederm.org>

From: ebiederm@xmission.com (Eric W. Biederman)
Date: Sun, 13 Jun 2010 06:25:32 -0700

> This patchset takes a addressing all of the issues that crop up with
> unix domain sockets when the senders and receivers are in separate
> namespaces.
> 
> Without this patchset we can report the wrong pid and uid
> values in our unix domain credentials.
> 
> As a finally this patchset removes the now unnecessary restriction
> that we only allow unix domain sockets between processes in the
> same network namespace.

Looks good, all applied to net-next-2.6, thanks Eric.

^ permalink raw reply

* [PATCH net-next 8/9] cxgb4: update FW definitions
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-8-git-send-email-dm@chelsio.com>

Update to latest FW API.  Most changes here pertain to port types and
querying FW for parameter values.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4_main.c |   55 ++++++++++++++++++++++++++++++---------
 drivers/net/cxgb4/cxgb4_uld.h  |    2 +
 drivers/net/cxgb4/t4_hw.c      |    6 ++--
 drivers/net/cxgb4/t4fw_api.h   |   36 +++++++++++++++++++------
 4 files changed, 74 insertions(+), 25 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index eb1492f..352c770 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -216,7 +216,7 @@ void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
 void t4_os_portmod_changed(const struct adapter *adap, int port_id)
 {
 	static const char *mod_str[] = {
-		NULL, "LR", "SR", "ER", "passive DA", "active DA"
+		NULL, "LR", "SR", "ER", "passive DA", "active DA", "LRM"
 	};
 
 	const struct net_device *dev = adap->port[port_id];
@@ -224,7 +224,7 @@ void t4_os_portmod_changed(const struct adapter *adap, int port_id)
 
 	if (pi->mod_type == FW_PORT_MOD_TYPE_NONE)
 		netdev_info(dev, "port module unplugged\n");
-	else
+	else if (pi->mod_type < ARRAY_SIZE(mod_str))
 		netdev_info(dev, "%s module inserted\n", mod_str[pi->mod_type]);
 }
 
@@ -1234,7 +1234,8 @@ static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
 {
 	unsigned int v = 0;
 
-	if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XAUI) {
+	if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XFI ||
+	    type == FW_PORT_TYPE_BT_XAUI) {
 		v |= SUPPORTED_TP;
 		if (caps & FW_PORT_CAP_SPEED_100M)
 			v |= SUPPORTED_100baseT_Full;
@@ -1250,7 +1251,10 @@ static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
 			v |= SUPPORTED_10000baseKX4_Full;
 	} else if (type == FW_PORT_TYPE_KR)
 		v |= SUPPORTED_Backplane | SUPPORTED_10000baseKR_Full;
-	else if (type == FW_PORT_TYPE_FIBER)
+	else if (type == FW_PORT_TYPE_BP_AP)
+		v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC;
+	else if (type == FW_PORT_TYPE_FIBER_XFI ||
+		 type == FW_PORT_TYPE_FIBER_XAUI || type == FW_PORT_TYPE_SFP)
 		v |= SUPPORTED_FIBRE;
 
 	if (caps & FW_PORT_CAP_ANEG)
@@ -1276,13 +1280,19 @@ static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 	const struct port_info *p = netdev_priv(dev);
 
 	if (p->port_type == FW_PORT_TYPE_BT_SGMII ||
+	    p->port_type == FW_PORT_TYPE_BT_XFI ||
 	    p->port_type == FW_PORT_TYPE_BT_XAUI)
 		cmd->port = PORT_TP;
-	else if (p->port_type == FW_PORT_TYPE_FIBER)
+	else if (p->port_type == FW_PORT_TYPE_FIBER_XFI ||
+		 p->port_type == FW_PORT_TYPE_FIBER_XAUI)
 		cmd->port = PORT_FIBRE;
-	else if (p->port_type == FW_PORT_TYPE_TWINAX)
-		cmd->port = PORT_DA;
-	else
+	else if (p->port_type == FW_PORT_TYPE_SFP) {
+		if (p->mod_type == FW_PORT_MOD_TYPE_TWINAX_PASSIVE ||
+		    p->mod_type == FW_PORT_MOD_TYPE_TWINAX_ACTIVE)
+			cmd->port = PORT_DA;
+		else
+			cmd->port = PORT_FIBRE;
+	} else
 		cmd->port = PORT_OTHER;
 
 	if (p->mdio_addr >= 0) {
@@ -2814,14 +2824,20 @@ static int adap_init0(struct adapter *adap)
 	for (v = 1; v < SGE_NCOUNTERS; v++)
 		adap->sge.counter_val[v] = min(intr_cnt[v - 1],
 					       THRESHOLD_3_MASK);
-	ret = adap_init1(adap, &c);
-	if (ret < 0)
-		goto bye;
-
 #define FW_PARAM_DEV(param) \
 	(FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | \
 	 FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_##param))
 
+	params[0] = FW_PARAM_DEV(CCLK);
+	ret = t4_query_params(adap, 0, 0, 0, 1, params, val);
+	if (ret < 0)
+		goto bye;
+	adap->params.vpd.cclk = val[0];
+
+	ret = adap_init1(adap, &c);
+	if (ret < 0)
+		goto bye;
+
 #define FW_PARAM_PFVF(param) \
 	(FW_PARAMS_MNEM(FW_PARAMS_MNEM_PFVF) | \
 	 FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_PFVF_##param))
@@ -2874,6 +2890,18 @@ static int adap_init0(struct adapter *adap)
 		adap->vres.rq.size = val[3] - val[2] + 1;
 		adap->vres.pbl.start = val[4];
 		adap->vres.pbl.size = val[5] - val[4] + 1;
+
+		params[0] = FW_PARAM_PFVF(SQRQ_START);
+		params[1] = FW_PARAM_PFVF(SQRQ_END);
+		params[2] = FW_PARAM_PFVF(CQ_START);
+		params[3] = FW_PARAM_PFVF(CQ_END);
+		ret = t4_query_params(adap, 0, 0, 0, 4, params, val);
+		if (ret < 0)
+			goto bye;
+		adap->vres.qp.start = val[0];
+		adap->vres.qp.size = val[1] - val[0] + 1;
+		adap->vres.cq.start = val[2];
+		adap->vres.cq.size = val[3] - val[2] + 1;
 	}
 	if (c.iscsicaps) {
 		params[0] = FW_PARAM_PFVF(ISCSI_START);
@@ -3194,7 +3222,8 @@ static int __devinit enable_msix(struct adapter *adap)
 static void __devinit print_port_info(struct adapter *adap)
 {
 	static const char *base[] = {
-		"R", "KX4", "T", "KX", "T", "KR", "CX4"
+		"R XFI", "R XAUI", "T SGMII", "T XFI", "T XAUI", "KX4", "CX4",
+		"KX", "KR", "KR SFP+", "KR FEC"
 	};
 
 	int i;
diff --git a/drivers/net/cxgb4/cxgb4_uld.h b/drivers/net/cxgb4/cxgb4_uld.h
index 5b98546..0dc0866 100644
--- a/drivers/net/cxgb4/cxgb4_uld.h
+++ b/drivers/net/cxgb4/cxgb4_uld.h
@@ -185,6 +185,8 @@ struct cxgb4_virt_res {                      /* virtualized HW resources */
 	struct cxgb4_range stag;
 	struct cxgb4_range rq;
 	struct cxgb4_range pbl;
+	struct cxgb4_range qp;
+	struct cxgb4_range cq;
 };
 
 /*
diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c
index 5c058ea..d92129b 100644
--- a/drivers/net/cxgb4/t4_hw.c
+++ b/drivers/net/cxgb4/t4_hw.c
@@ -2580,7 +2580,7 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
 	}
 	if (rss_size)
 		*rss_size = FW_VI_CMD_RSSSIZE_GET(ntohs(c.rsssize_pkd));
-	return ntohs(c.viid_pkd);
+	return FW_VI_CMD_VIID_GET(ntohs(c.type_viid));
 }
 
 /**
@@ -2603,7 +2603,7 @@ int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf,
 			    FW_CMD_EXEC | FW_VI_CMD_PFN(pf) |
 			    FW_VI_CMD_VFN(vf));
 	c.alloc_to_len16 = htonl(FW_VI_CMD_FREE | FW_LEN16(c));
-	c.viid_pkd = htons(FW_VI_CMD_VIID(viid));
+	c.type_viid = htons(FW_VI_CMD_VIID(viid));
 	return t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
 }
 
@@ -3169,7 +3169,7 @@ int __devinit t4_port_init(struct adapter *adap, int mbox, int pf, int vf)
 		p->mdio_addr = (ret & FW_PORT_CMD_MDIOCAP) ?
 			FW_PORT_CMD_MDIOADDR_GET(ret) : -1;
 		p->port_type = FW_PORT_CMD_PTYPE_GET(ret);
-		p->mod_type = FW_PORT_CMD_MODTYPE_GET(ret);
+		p->mod_type = FW_PORT_MOD_TYPE_NA;
 
 		init_link_config(&p->link_cfg, ntohs(c.u.info.pcap));
 		j++;
diff --git a/drivers/net/cxgb4/t4fw_api.h b/drivers/net/cxgb4/t4fw_api.h
index 63991d6..a6643c6 100644
--- a/drivers/net/cxgb4/t4fw_api.h
+++ b/drivers/net/cxgb4/t4fw_api.h
@@ -51,7 +51,6 @@ enum fw_wr_opcodes {
 	FW_CMD_WR                      = 0x10,
 	FW_ETH_TX_PKT_VM_WR            = 0x11,
 	FW_RI_RES_WR                   = 0x0c,
-	FW_RI_INIT_WR                  = 0x0d,
 	FW_RI_RDMA_WRITE_WR            = 0x14,
 	FW_RI_SEND_WR                  = 0x15,
 	FW_RI_RDMA_READ_WR             = 0x16,
@@ -59,6 +58,7 @@ enum fw_wr_opcodes {
 	FW_RI_BIND_MW_WR               = 0x18,
 	FW_RI_FR_NSMR_WR               = 0x19,
 	FW_RI_INV_LSTAG_WR             = 0x1a,
+	FW_RI_WR                       = 0x0d,
 	FW_LASTC2E_WR                  = 0x40
 };
 
@@ -475,7 +475,13 @@ enum fw_params_param_pfvf {
 	FW_PARAMS_PARAM_PFVF_PBL_END	= 0x12,
 	FW_PARAMS_PARAM_PFVF_L2T_START = 0x13,
 	FW_PARAMS_PARAM_PFVF_L2T_END = 0x14,
+	FW_PARAMS_PARAM_PFVF_SQRQ_START = 0x15,
+	FW_PARAMS_PARAM_PFVF_SQRQ_END	= 0x16,
+	FW_PARAMS_PARAM_PFVF_CQ_START	= 0x17,
+	FW_PARAMS_PARAM_PFVF_CQ_END	= 0x18,
 	FW_PARAMS_PARAM_PFVF_SCHEDCLASS_ETH = 0x20,
+	FW_PARAMS_PARAM_PFVF_VIID       = 0x24,
+	FW_PARAMS_PARAM_PFVF_CPMASK     = 0x25,
 };
 
 /*
@@ -804,16 +810,16 @@ struct fw_eq_ofld_cmd {
 struct fw_vi_cmd {
 	__be32 op_to_vfn;
 	__be32 alloc_to_len16;
-	__be16 viid_pkd;
+	__be16 type_viid;
 	u8 mac[6];
 	u8 portid_pkd;
 	u8 nmac;
 	u8 nmac0[6];
 	__be16 rsssize_pkd;
 	u8 nmac1[6];
-	__be16 r7;
+	__be16 idsiiq_pkd;
 	u8 nmac2[6];
-	__be16 r8;
+	__be16 idseiq_pkd;
 	u8 nmac3[6];
 	__be64 r9;
 	__be64 r10;
@@ -824,6 +830,7 @@ struct fw_vi_cmd {
 #define FW_VI_CMD_ALLOC (1U << 31)
 #define FW_VI_CMD_FREE (1U << 30)
 #define FW_VI_CMD_VIID(x) ((x) << 0)
+#define FW_VI_CMD_VIID_GET(x) ((x) & 0xfff)
 #define FW_VI_CMD_PORTID(x) ((x) << 4)
 #define FW_VI_CMD_RSSSIZE_GET(x) (((x) >> 0) & 0x7ff)
 
@@ -1136,6 +1143,11 @@ struct fw_port_cmd {
 			__be32 lstatus_to_modtype;
 			__be16 pcap;
 			__be16 acap;
+			__be16 mtu;
+			__u8   cbllen;
+			__u8   r9;
+			__be32 r10;
+			__be64 r11;
 		} info;
 		struct fw_port_ppp {
 			__be32 pppen_to_ncsich;
@@ -1196,14 +1208,17 @@ struct fw_port_cmd {
 #define FW_PORT_CMD_NCSICH(x) ((x) << 4)
 
 enum fw_port_type {
-	FW_PORT_TYPE_FIBER,
-	FW_PORT_TYPE_KX4,
+	FW_PORT_TYPE_FIBER_XFI,
+	FW_PORT_TYPE_FIBER_XAUI,
 	FW_PORT_TYPE_BT_SGMII,
-	FW_PORT_TYPE_KX,
+	FW_PORT_TYPE_BT_XFI,
 	FW_PORT_TYPE_BT_XAUI,
-	FW_PORT_TYPE_KR,
+	FW_PORT_TYPE_KX4,
 	FW_PORT_TYPE_CX4,
-	FW_PORT_TYPE_TWINAX,
+	FW_PORT_TYPE_KX,
+	FW_PORT_TYPE_KR,
+	FW_PORT_TYPE_SFP,
+	FW_PORT_TYPE_BP_AP,
 
 	FW_PORT_TYPE_NONE = FW_PORT_CMD_PTYPE_MASK
 };
@@ -1213,6 +1228,9 @@ enum fw_port_module_type {
 	FW_PORT_MOD_TYPE_LR,
 	FW_PORT_MOD_TYPE_SR,
 	FW_PORT_MOD_TYPE_ER,
+	FW_PORT_MOD_TYPE_TWINAX_PASSIVE,
+	FW_PORT_MOD_TYPE_TWINAX_ACTIVE,
+	FW_PORT_MOD_TYPE_LRM,
 
 	FW_PORT_MOD_TYPE_NONE = FW_PORT_CMD_MODTYPE_MASK
 };
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 7/9] cxgb4: add a missing error interrupt
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-7-git-send-email-dm@chelsio.com>

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/t4_hw.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c
index 4c956fb..5c058ea 100644
--- a/drivers/net/cxgb4/t4_hw.c
+++ b/drivers/net/cxgb4/t4_hw.c
@@ -1135,6 +1135,7 @@ static void cim_intr_handler(struct adapter *adapter)
 static void ulprx_intr_handler(struct adapter *adapter)
 {
 	static struct intr_info ulprx_intr_info[] = {
+		{ 0x1800000, "ULPRX context error", -1, 1 },
 		{ 0x7fffff, "ULPRX parity error", -1, 1 },
 		{ 0 }
 	};
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 5/9] cxgb4: switch to 64 bit inteface statistics
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-5-git-send-email-dm@chelsio.com>

Implement ndo_get_stats64, remove ndo_get_stats.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4_main.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index baf4f0a..6bfe7d6 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -2527,12 +2527,12 @@ static int cxgb_close(struct net_device *dev)
 	return t4_enable_vi(adapter, 0, pi->viid, false, false);
 }
 
-static struct net_device_stats *cxgb_get_stats(struct net_device *dev)
+static struct rtnl_link_stats64 *cxgb_get_stats(struct net_device *dev)
 {
 	struct port_stats stats;
 	struct port_info *p = netdev_priv(dev);
 	struct adapter *adapter = p->adapter;
-	struct net_device_stats *ns = &dev->stats;
+	struct rtnl_link_stats64 *ns = &dev->stats64;
 
 	spin_lock(&adapter->stats_lock);
 	t4_get_port_stats(adapter, p->tx_chan, &stats);
@@ -2675,7 +2675,7 @@ static const struct net_device_ops cxgb4_netdev_ops = {
 	.ndo_open             = cxgb_open,
 	.ndo_stop             = cxgb_close,
 	.ndo_start_xmit       = t4_eth_xmit,
-	.ndo_get_stats        = cxgb_get_stats,
+	.ndo_get_stats64      = cxgb_get_stats,
 	.ndo_set_rx_mode      = cxgb_set_rxmode,
 	.ndo_set_mac_address  = cxgb_set_mac_addr,
 	.ndo_validate_addr    = eth_validate_addr,
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 6/9] cxgb4: propagate link initialization errors to .ndo_open's callers
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-6-git-send-email-dm@chelsio.com>

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4_main.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index 6bfe7d6..eb1492f 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -2512,9 +2512,10 @@ static int cxgb_open(struct net_device *dev)
 	}
 
 	dev->real_num_tx_queues = pi->nqsets;
-	link_start(dev);
-	netif_tx_start_all_queues(dev);
-	return 0;
+	err = link_start(dev);
+	if (!err)
+		netif_tx_start_all_queues(dev);
+	return err;
 }
 
 static int cxgb_close(struct net_device *dev)
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 9/9] cxgb4: minor cleanup
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-9-git-send-email-dm@chelsio.com>

Remove an unused flag and replace couple constants with enums.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4.h      |    1 -
 drivers/net/cxgb4/cxgb4_main.c |    4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4.h b/drivers/net/cxgb4/cxgb4.h
index 5e37c1e..62804bb 100644
--- a/drivers/net/cxgb4/cxgb4.h
+++ b/drivers/net/cxgb4/cxgb4.h
@@ -309,7 +309,6 @@ enum {                                 /* adapter flags */
 	FULL_INIT_DONE     = (1 << 0),
 	USING_MSI          = (1 << 1),
 	USING_MSIX         = (1 << 2),
-	QUEUES_BOUND       = (1 << 3),
 	FW_OK              = (1 << 4),
 };
 
diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index 352c770..27f65b5 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -2758,8 +2758,8 @@ static int adap_init1(struct adapter *adap, struct fw_caps_config_cmd *c)
 	if (ret < 0)
 		return ret;
 
-	ret = t4_cfg_pfvf(adap, 0, 0, 0, 64, 64, 64, 0, 0, 4, 0xf, 0xf, 16,
-			  FW_CMD_CAP_PF, FW_CMD_CAP_PF);
+	ret = t4_cfg_pfvf(adap, 0, 0, 0, MAX_EGRQ, 64, MAX_INGQ, 0, 0, 4,
+			  0xf, 0xf, 16, FW_CMD_CAP_PF, FW_CMD_CAP_PF);
 	if (ret < 0)
 		return ret;
 
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 4/9] cxgb4: set dev_id to the port number
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-4-git-send-email-dm@chelsio.com>

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/t4_hw.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c
index 0c8a84a..4c956fb 100644
--- a/drivers/net/cxgb4/t4_hw.c
+++ b/drivers/net/cxgb4/t4_hw.c
@@ -3162,6 +3162,7 @@ int __devinit t4_port_init(struct adapter *adap, int mbox, int pf, int vf)
 		p->rss_size = rss_size;
 		memcpy(adap->port[i]->dev_addr, addr, ETH_ALEN);
 		memcpy(adap->port[i]->perm_addr, addr, ETH_ALEN);
+		adap->port[i]->dev_id = j;
 
 		ret = ntohl(c.u.info.lstatus_to_modtype);
 		p->mdio_addr = (ret & FW_PORT_CMD_MDIOCAP) ?
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 3/9] cxgb4: implement EEH
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-3-git-send-email-dm@chelsio.com>

Implement the pci_error_handlers methods for EEH.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4.h      |    1 +
 drivers/net/cxgb4/cxgb4_main.c |  108 +++++++++++++++++++++++++++++++++++++++-
 drivers/net/cxgb4/l2t.c        |    7 +++
 drivers/net/cxgb4/t4_hw.c      |   11 +++-
 4 files changed, 124 insertions(+), 3 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4.h b/drivers/net/cxgb4/cxgb4.h
index bfa1366..5e37c1e 100644
--- a/drivers/net/cxgb4/cxgb4.h
+++ b/drivers/net/cxgb4/cxgb4.h
@@ -650,6 +650,7 @@ void t4_intr_disable(struct adapter *adapter);
 void t4_intr_clear(struct adapter *adapter);
 int t4_slow_intr_handler(struct adapter *adapter);
 
+int t4_wait_dev_ready(struct adapter *adap);
 int t4_link_start(struct adapter *adap, unsigned int mbox, unsigned int port,
 		  struct link_config *lc);
 int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port);
diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index 60f6ea0..baf4f0a 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -2483,6 +2483,7 @@ static void cxgb_down(struct adapter *adapter)
 	t4_intr_disable(adapter);
 	cancel_work_sync(&adapter->tid_release_task);
 	adapter->tid_release_task_busy = false;
+	adapter->tid_release_head = NULL;
 
 	if (adapter->flags & USING_MSIX) {
 		free_msix_queue_irqs(adapter);
@@ -2907,6 +2908,108 @@ bye:	if (ret != -ETIMEDOUT && ret != -EIO)
 	return ret;
 }
 
+/* EEH callbacks */
+
+static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
+					 pci_channel_state_t state)
+{
+	int i;
+	struct adapter *adap = pci_get_drvdata(pdev);
+
+	if (!adap)
+		goto out;
+
+	rtnl_lock();
+	adap->flags &= ~FW_OK;
+	notify_ulds(adap, CXGB4_STATE_START_RECOVERY);
+	for_each_port(adap, i) {
+		struct net_device *dev = adap->port[i];
+
+		netif_device_detach(dev);
+		netif_carrier_off(dev);
+	}
+	if (adap->flags & FULL_INIT_DONE)
+		cxgb_down(adap);
+	rtnl_unlock();
+	pci_disable_device(pdev);
+out:	return state == pci_channel_io_perm_failure ?
+		PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET;
+}
+
+static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
+{
+	int i, ret;
+	struct fw_caps_config_cmd c;
+	struct adapter *adap = pci_get_drvdata(pdev);
+
+	if (!adap) {
+		pci_restore_state(pdev);
+		pci_save_state(pdev);
+		return PCI_ERS_RESULT_RECOVERED;
+	}
+
+	if (pci_enable_device(pdev)) {
+		dev_err(&pdev->dev, "cannot reenable PCI device after reset\n");
+		return PCI_ERS_RESULT_DISCONNECT;
+	}
+
+	pci_set_master(pdev);
+	pci_restore_state(pdev);
+	pci_save_state(pdev);
+	pci_cleanup_aer_uncorrect_error_status(pdev);
+
+	if (t4_wait_dev_ready(adap) < 0)
+		return PCI_ERS_RESULT_DISCONNECT;
+	if (t4_fw_hello(adap, 0, 0, MASTER_MUST, NULL))
+		return PCI_ERS_RESULT_DISCONNECT;
+	adap->flags |= FW_OK;
+	if (adap_init1(adap, &c))
+		return PCI_ERS_RESULT_DISCONNECT;
+
+	for_each_port(adap, i) {
+		struct port_info *p = adap2pinfo(adap, i);
+
+		ret = t4_alloc_vi(adap, 0, p->tx_chan, 0, 0, 1, NULL, NULL);
+		if (ret < 0)
+			return PCI_ERS_RESULT_DISCONNECT;
+		p->viid = ret;
+		p->xact_addr_filt = -1;
+	}
+
+	t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
+		     adap->params.b_wnd);
+	if (cxgb_up(adap))
+		return PCI_ERS_RESULT_DISCONNECT;
+	return PCI_ERS_RESULT_RECOVERED;
+}
+
+static void eeh_resume(struct pci_dev *pdev)
+{
+	int i;
+	struct adapter *adap = pci_get_drvdata(pdev);
+
+	if (!adap)
+		return;
+
+	rtnl_lock();
+	for_each_port(adap, i) {
+		struct net_device *dev = adap->port[i];
+
+		if (netif_running(dev)) {
+			link_start(dev);
+			cxgb_set_rxmode(dev);
+		}
+		netif_device_attach(dev);
+	}
+	rtnl_unlock();
+}
+
+static struct pci_error_handlers cxgb4_eeh = {
+	.error_detected = eeh_err_detected,
+	.slot_reset     = eeh_slot_reset,
+	.resume         = eeh_resume,
+};
+
 static inline bool is_10g_port(const struct link_config *lc)
 {
 	return (lc->supported & FW_PORT_CAP_SPEED_10G) != 0;
@@ -3154,8 +3257,10 @@ static int __devinit init_one(struct pci_dev *pdev,
 
 	/* We control everything through PF 0 */
 	func = PCI_FUNC(pdev->devfn);
-	if (func > 0)
+	if (func > 0) {
+		pci_save_state(pdev);        /* to restore SR-IOV later */
 		goto sriov;
+	}
 
 	err = pci_enable_device(pdev);
 	if (err) {
@@ -3396,6 +3501,7 @@ static struct pci_driver cxgb4_driver = {
 	.id_table = cxgb4_pci_tbl,
 	.probe    = init_one,
 	.remove   = __devexit_p(remove_one),
+	.err_handler = &cxgb4_eeh,
 };
 
 static int __init cxgb4_init_module(void)
diff --git a/drivers/net/cxgb4/l2t.c b/drivers/net/cxgb4/l2t.c
index 9f96724..5b990d2 100644
--- a/drivers/net/cxgb4/l2t.c
+++ b/drivers/net/cxgb4/l2t.c
@@ -310,6 +310,13 @@ static void t4_l2e_free(struct l2t_entry *e)
 			neigh_release(e->neigh);
 			e->neigh = NULL;
 		}
+		while (e->arpq_head) {
+			struct sk_buff *skb = e->arpq_head;
+
+			e->arpq_head = skb->next;
+			kfree(skb);
+		}
+		e->arpq_tail = NULL;
 	}
 	spin_unlock_bh(&e->lock);
 
diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c
index 5c81c55..0c8a84a 100644
--- a/drivers/net/cxgb4/t4_hw.c
+++ b/drivers/net/cxgb4/t4_hw.c
@@ -221,6 +221,13 @@ int t4_wr_mbox_meat(struct adapter *adap, int mbox, const void *cmd, int size,
 	if ((size & 15) || size > MBOX_LEN)
 		return -EINVAL;
 
+	/*
+	 * If the device is off-line, as in EEH, commands will time out.
+	 * Fail them early so we don't waste time waiting.
+	 */
+	if (adap->pdev->error_state != pci_channel_io_normal)
+		return -EIO;
+
 	v = MBOWNER_GET(t4_read_reg(adap, ctl_reg));
 	for (i = 0; v == MBOX_OWNER_NONE && i < 3; i++)
 		v = MBOWNER_GET(t4_read_reg(adap, ctl_reg));
@@ -3045,7 +3052,7 @@ static void __devinit init_link_config(struct link_config *lc,
 	}
 }
 
-static int __devinit wait_dev_ready(struct adapter *adap)
+int t4_wait_dev_ready(struct adapter *adap)
 {
 	if (t4_read_reg(adap, PL_WHOAMI) != 0xffffffff)
 		return 0;
@@ -3093,7 +3100,7 @@ int __devinit t4_prep_adapter(struct adapter *adapter)
 {
 	int ret;
 
-	ret = wait_dev_ready(adapter);
+	ret = t4_wait_dev_ready(adapter);
 	if (ret < 0)
 		return ret;
 
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 2/9] cxgb4: rearrange initialization code in preparation for EEH
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-2-git-send-email-dm@chelsio.com>

Split some existing initialization code into a separate function for use
by EEH next.  No functional changes.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4_main.c |  109 ++++++++++++++++++++++------------------
 1 files changed, 60 insertions(+), 49 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c
index 58045b0..60f6ea0 100644
--- a/drivers/net/cxgb4/cxgb4_main.c
+++ b/drivers/net/cxgb4/cxgb4_main.c
@@ -2709,6 +2709,65 @@ static void setup_memwin(struct adapter *adap)
 		     WINDOW(ilog2(MEMWIN2_APERTURE) - 10));
 }
 
+static int adap_init1(struct adapter *adap, struct fw_caps_config_cmd *c)
+{
+	u32 v;
+	int ret;
+
+	/* get device capabilities */
+	memset(c, 0, sizeof(*c));
+	c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
+			       FW_CMD_REQUEST | FW_CMD_READ);
+	c->retval_len16 = htonl(FW_LEN16(*c));
+	ret = t4_wr_mbox(adap, 0, c, sizeof(*c), c);
+	if (ret < 0)
+		return ret;
+
+	/* select capabilities we'll be using */
+	if (c->niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
+		if (!vf_acls)
+			c->niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
+		else
+			c->niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
+	} else if (vf_acls) {
+		dev_err(adap->pdev_dev, "virtualization ACLs not supported");
+		return ret;
+	}
+	c->op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
+			       FW_CMD_REQUEST | FW_CMD_WRITE);
+	ret = t4_wr_mbox(adap, 0, c, sizeof(*c), NULL);
+	if (ret < 0)
+		return ret;
+
+	ret = t4_config_glbl_rss(adap, 0,
+				 FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
+				 FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
+				 FW_RSS_GLB_CONFIG_CMD_TNLALLLKP);
+	if (ret < 0)
+		return ret;
+
+	ret = t4_cfg_pfvf(adap, 0, 0, 0, 64, 64, 64, 0, 0, 4, 0xf, 0xf, 16,
+			  FW_CMD_CAP_PF, FW_CMD_CAP_PF);
+	if (ret < 0)
+		return ret;
+
+	t4_sge_init(adap);
+
+	/* get basic stuff going */
+	ret = t4_early_init(adap, 0);
+	if (ret < 0)
+		return ret;
+
+	/* tweak some settings */
+	t4_write_reg(adap, TP_SHIFT_CNT, 0x64f8849);
+	t4_write_reg(adap, ULP_RX_TDDP_PSZ, HPZ0(PAGE_SHIFT - 12));
+	t4_write_reg(adap, TP_PIO_ADDR, TP_INGRESS_CONFIG);
+	v = t4_read_reg(adap, TP_PIO_DATA);
+	t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR);
+	setup_memwin(adap);
+	return 0;
+}
+
 /*
  * Max # of ATIDs.  The absolute HW max is 16K but we keep it lower.
  */
@@ -2746,43 +2805,6 @@ static int adap_init0(struct adapter *adap)
 	if (ret < 0)
 		goto bye;
 
-	/* get device capabilities */
-	memset(&c, 0, sizeof(c));
-	c.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
-			      FW_CMD_REQUEST | FW_CMD_READ);
-	c.retval_len16 = htonl(FW_LEN16(c));
-	ret = t4_wr_mbox(adap, 0, &c, sizeof(c), &c);
-	if (ret < 0)
-		goto bye;
-
-	/* select capabilities we'll be using */
-	if (c.niccaps & htons(FW_CAPS_CONFIG_NIC_VM)) {
-		if (!vf_acls)
-			c.niccaps ^= htons(FW_CAPS_CONFIG_NIC_VM);
-		else
-			c.niccaps = htons(FW_CAPS_CONFIG_NIC_VM);
-	} else if (vf_acls) {
-		dev_err(adap->pdev_dev, "virtualization ACLs not supported");
-		goto bye;
-	}
-	c.op_to_write = htonl(FW_CMD_OP(FW_CAPS_CONFIG_CMD) |
-			      FW_CMD_REQUEST | FW_CMD_WRITE);
-	ret = t4_wr_mbox(adap, 0, &c, sizeof(c), NULL);
-	if (ret < 0)
-		goto bye;
-
-	ret = t4_config_glbl_rss(adap, 0,
-				 FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL,
-				 FW_RSS_GLB_CONFIG_CMD_TNLMAPEN |
-				 FW_RSS_GLB_CONFIG_CMD_TNLALLLKP);
-	if (ret < 0)
-		goto bye;
-
-	ret = t4_cfg_pfvf(adap, 0, 0, 0, 64, 64, 64, 0, 0, 4, 0xf, 0xf, 16,
-			  FW_CMD_CAP_PF, FW_CMD_CAP_PF);
-	if (ret < 0)
-		goto bye;
-
 	for (v = 0; v < SGE_NTIMERS - 1; v++)
 		adap->sge.timer_val[v] = min(intr_holdoff[v], MAX_SGE_TIMERVAL);
 	adap->sge.timer_val[SGE_NTIMERS - 1] = MAX_SGE_TIMERVAL;
@@ -2790,10 +2812,7 @@ static int adap_init0(struct adapter *adap)
 	for (v = 1; v < SGE_NCOUNTERS; v++)
 		adap->sge.counter_val[v] = min(intr_cnt[v - 1],
 					       THRESHOLD_3_MASK);
-	t4_sge_init(adap);
-
-	/* get basic stuff going */
-	ret = t4_early_init(adap, 0);
+	ret = adap_init1(adap, &c);
 	if (ret < 0)
 		goto bye;
 
@@ -2876,14 +2895,6 @@ static int adap_init0(struct adapter *adap)
 	t4_read_mtu_tbl(adap, adap->params.mtus, NULL);
 	t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
 		     adap->params.b_wnd);
-
-	/* tweak some settings */
-	t4_write_reg(adap, TP_SHIFT_CNT, 0x64f8849);
-	t4_write_reg(adap, ULP_RX_TDDP_PSZ, HPZ0(PAGE_SHIFT - 12));
-	t4_write_reg(adap, TP_PIO_ADDR, TP_INGRESS_CONFIG);
-	v = t4_read_reg(adap, TP_PIO_DATA);
-	t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR);
-	setup_memwin(adap);
 	return 0;
 
 	/*
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 1/9] cxgb4: dynamically determine flash size and FW image location
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev; +Cc: Dimitris Michailidis
In-Reply-To: <1276725676-31514-1-git-send-email-dm@chelsio.com>

Handle the larger flash memories on newer boards:

- get the size and number of sectors by probing the flash
- writes and erases can take longer, adjust the timeouts for these operations
- the FW image can be at different locations depending on flash size,
  find its location dynamically as well.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
---
 drivers/net/cxgb4/cxgb4.h   |    4 ++
 drivers/net/cxgb4/t4_hw.c   |   75 +++++++++++++++++++++++++++++++------------
 drivers/net/cxgb4/t4_hw.h   |    2 -
 drivers/net/cxgb4/t4_regs.h |    3 ++
 4 files changed, 61 insertions(+), 23 deletions(-)

diff --git a/drivers/net/cxgb4/cxgb4.h b/drivers/net/cxgb4/cxgb4.h
index dd1770e..bfa1366 100644
--- a/drivers/net/cxgb4/cxgb4.h
+++ b/drivers/net/cxgb4/cxgb4.h
@@ -219,6 +219,10 @@ struct adapter_params {
 	struct vpd_params vpd;
 	struct pci_params pci;
 
+	unsigned int sf_size;             /* serial flash size in bytes */
+	unsigned int sf_nsec;             /* # of flash sectors */
+	unsigned int sf_fw_start;         /* start of FW image in flash */
+
 	unsigned int fw_vers;
 	unsigned int tp_vers;
 	u8 api_vers[7];
diff --git a/drivers/net/cxgb4/t4_hw.c b/drivers/net/cxgb4/t4_hw.c
index da272a9..5c81c55 100644
--- a/drivers/net/cxgb4/t4_hw.c
+++ b/drivers/net/cxgb4/t4_hw.c
@@ -449,12 +449,10 @@ enum {
 	SF_RD_STATUS    = 5,          /* read status register */
 	SF_WR_ENABLE    = 6,          /* enable writes */
 	SF_RD_DATA_FAST = 0xb,        /* read flash */
+	SF_RD_ID        = 0x9f,       /* read ID */
 	SF_ERASE_SECTOR = 0xd8,       /* erase sector */
 
-	FW_START_SEC = 8,             /* first flash sector for FW */
-	FW_END_SEC = 15,              /* last flash sector for FW */
-	FW_IMG_START = FW_START_SEC * SF_SEC_SIZE,
-	FW_MAX_SIZE = (FW_END_SEC - FW_START_SEC + 1) * SF_SEC_SIZE,
+	FW_MAX_SIZE = 512 * 1024,
 };
 
 /**
@@ -558,7 +556,7 @@ static int t4_read_flash(struct adapter *adapter, unsigned int addr,
 {
 	int ret;
 
-	if (addr + nwords * sizeof(u32) > SF_SIZE || (addr & 3))
+	if (addr + nwords * sizeof(u32) > adapter->params.sf_size || (addr & 3))
 		return -EINVAL;
 
 	addr = swab32(addr) | SF_RD_DATA_FAST;
@@ -596,7 +594,7 @@ static int t4_write_flash(struct adapter *adapter, unsigned int addr,
 	u32 buf[64];
 	unsigned int i, c, left, val, offset = addr & 0xff;
 
-	if (addr >= SF_SIZE || offset + n > SF_PAGE_SIZE)
+	if (addr >= adapter->params.sf_size || offset + n > SF_PAGE_SIZE)
 		return -EINVAL;
 
 	val = swab32(addr) | SF_PROG_PAGE;
@@ -614,7 +612,7 @@ static int t4_write_flash(struct adapter *adapter, unsigned int addr,
 		if (ret)
 			goto unlock;
 	}
-	ret = flash_wait_op(adapter, 5, 1);
+	ret = flash_wait_op(adapter, 8, 1);
 	if (ret)
 		goto unlock;
 
@@ -647,9 +645,8 @@ unlock:
  */
 static int get_fw_version(struct adapter *adapter, u32 *vers)
 {
-	return t4_read_flash(adapter,
-			     FW_IMG_START + offsetof(struct fw_hdr, fw_ver), 1,
-			     vers, 0);
+	return t4_read_flash(adapter, adapter->params.sf_fw_start +
+			     offsetof(struct fw_hdr, fw_ver), 1, vers, 0);
 }
 
 /**
@@ -661,8 +658,8 @@ static int get_fw_version(struct adapter *adapter, u32 *vers)
  */
 static int get_tp_version(struct adapter *adapter, u32 *vers)
 {
-	return t4_read_flash(adapter, FW_IMG_START + offsetof(struct fw_hdr,
-							      tp_microcode_ver),
+	return t4_read_flash(adapter, adapter->params.sf_fw_start +
+			     offsetof(struct fw_hdr, tp_microcode_ver),
 			     1, vers, 0);
 }
 
@@ -684,9 +681,9 @@ int t4_check_fw_version(struct adapter *adapter)
 	if (!ret)
 		ret = get_tp_version(adapter, &adapter->params.tp_vers);
 	if (!ret)
-		ret = t4_read_flash(adapter,
-			FW_IMG_START + offsetof(struct fw_hdr, intfver_nic),
-			2, api_vers, 1);
+		ret = t4_read_flash(adapter, adapter->params.sf_fw_start +
+				    offsetof(struct fw_hdr, intfver_nic),
+				    2, api_vers, 1);
 	if (ret)
 		return ret;
 
@@ -726,7 +723,7 @@ static int t4_flash_erase_sectors(struct adapter *adapter, int start, int end)
 		if ((ret = sf1_write(adapter, 1, 0, 1, SF_WR_ENABLE)) != 0 ||
 		    (ret = sf1_write(adapter, 4, 0, 1,
 				     SF_ERASE_SECTOR | (start << 8))) != 0 ||
-		    (ret = flash_wait_op(adapter, 5, 500)) != 0) {
+		    (ret = flash_wait_op(adapter, 14, 500)) != 0) {
 			dev_err(adapter->pdev_dev,
 				"erase of flash sector %d failed, error %d\n",
 				start, ret);
@@ -754,6 +751,9 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
 	u8 first_page[SF_PAGE_SIZE];
 	const u32 *p = (const u32 *)fw_data;
 	const struct fw_hdr *hdr = (const struct fw_hdr *)fw_data;
+	unsigned int sf_sec_size = adap->params.sf_size / adap->params.sf_nsec;
+	unsigned int fw_img_start = adap->params.sf_fw_start;
+	unsigned int fw_start_sec = fw_img_start / sf_sec_size;
 
 	if (!size) {
 		dev_err(adap->pdev_dev, "FW image has no data\n");
@@ -784,8 +784,8 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
 		return -EINVAL;
 	}
 
-	i = DIV_ROUND_UP(size, SF_SEC_SIZE);        /* # of sectors spanned */
-	ret = t4_flash_erase_sectors(adap, FW_START_SEC, FW_START_SEC + i - 1);
+	i = DIV_ROUND_UP(size, sf_sec_size);        /* # of sectors spanned */
+	ret = t4_flash_erase_sectors(adap, fw_start_sec, fw_start_sec + i - 1);
 	if (ret)
 		goto out;
 
@@ -796,11 +796,11 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
 	 */
 	memcpy(first_page, fw_data, SF_PAGE_SIZE);
 	((struct fw_hdr *)first_page)->fw_ver = htonl(0xffffffff);
-	ret = t4_write_flash(adap, FW_IMG_START, SF_PAGE_SIZE, first_page);
+	ret = t4_write_flash(adap, fw_img_start, SF_PAGE_SIZE, first_page);
 	if (ret)
 		goto out;
 
-	addr = FW_IMG_START;
+	addr = fw_img_start;
 	for (size -= SF_PAGE_SIZE; size; size -= SF_PAGE_SIZE) {
 		addr += SF_PAGE_SIZE;
 		fw_data += SF_PAGE_SIZE;
@@ -810,7 +810,7 @@ int t4_load_fw(struct adapter *adap, const u8 *fw_data, unsigned int size)
 	}
 
 	ret = t4_write_flash(adap,
-			     FW_IMG_START + offsetof(struct fw_hdr, fw_ver),
+			     fw_img_start + offsetof(struct fw_hdr, fw_ver),
 			     sizeof(hdr->fw_ver), (const u8 *)&hdr->fw_ver);
 out:
 	if (ret)
@@ -3053,6 +3053,33 @@ static int __devinit wait_dev_ready(struct adapter *adap)
 	return t4_read_reg(adap, PL_WHOAMI) != 0xffffffff ? 0 : -EIO;
 }
 
+static int __devinit get_flash_params(struct adapter *adap)
+{
+	int ret;
+	u32 info;
+
+	ret = sf1_write(adap, 1, 1, 0, SF_RD_ID);
+	if (!ret)
+		ret = sf1_read(adap, 3, 0, 1, &info);
+	t4_write_reg(adap, SF_OP, 0);                    /* unlock SF */
+	if (ret)
+		return ret;
+
+	if ((info & 0xff) != 0x20)             /* not a Numonix flash */
+		return -EINVAL;
+	info >>= 16;                           /* log2 of size */
+	if (info >= 0x14 && info < 0x18)
+		adap->params.sf_nsec = 1 << (info - 16);
+	else if (info == 0x18)
+		adap->params.sf_nsec = 64;
+	else
+		return -EINVAL;
+	adap->params.sf_size = 1 << info;
+	adap->params.sf_fw_start =
+		t4_read_reg(adap, CIM_BOOT_CFG) & BOOTADDR_MASK;
+	return 0;
+}
+
 /**
  *	t4_prep_adapter - prepare SW and HW for operation
  *	@adapter: the adapter
@@ -3073,6 +3100,12 @@ int __devinit t4_prep_adapter(struct adapter *adapter)
 	get_pci_mode(adapter, &adapter->params.pci);
 	adapter->params.rev = t4_read_reg(adapter, PL_REV);
 
+	ret = get_flash_params(adapter);
+	if (ret < 0) {
+		dev_err(adapter->pdev_dev, "error %d identifying flash\n", ret);
+		return ret;
+	}
+
 	ret = get_vpd_params(adapter, &adapter->params.vpd);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/net/cxgb4/t4_hw.h b/drivers/net/cxgb4/t4_hw.h
index 0256232..f886677 100644
--- a/drivers/net/cxgb4/t4_hw.h
+++ b/drivers/net/cxgb4/t4_hw.h
@@ -57,8 +57,6 @@ enum {
 
 enum {
 	SF_PAGE_SIZE = 256,           /* serial flash page size */
-	SF_SEC_SIZE = 64 * 1024,      /* serial flash sector size */
-	SF_SIZE = SF_SEC_SIZE * 16,   /* serial flash size */
 };
 
 enum { RSP_TYPE_FLBUF, RSP_TYPE_CPL, RSP_TYPE_INTR }; /* response entry types */
diff --git a/drivers/net/cxgb4/t4_regs.h b/drivers/net/cxgb4/t4_regs.h
index 5ed5648..8fed46d 100644
--- a/drivers/net/cxgb4/t4_regs.h
+++ b/drivers/net/cxgb4/t4_regs.h
@@ -326,6 +326,9 @@
 
 #define EDC_1_BASE_ADDR 0x7980
 
+#define CIM_BOOT_CFG 0x7b00
+#define  BOOTADDR_MASK 0xffffff00U
+
 #define CIM_PF_MAILBOX_DATA 0x240
 #define CIM_PF_MAILBOX_CTRL 0x280
 #define  MBMSGVALID     0x00000008U
-- 
1.5.4


^ permalink raw reply related

* [PATCH net-next 0/9] cxgb4 update
From: Dimitris Michailidis @ 2010-06-16 22:01 UTC (permalink / raw)
  To: netdev


Here's a series of 9 patches for the cxgb4 driver.  The changes include
support for larger flash memories, addition of EEH, an update to latest
fw api, and assorted few liners.  All patches are for net-next.

 drivers/net/cxgb4/cxgb4.h      |    6 +-
 drivers/net/cxgb4/cxgb4_main.c |  281 ++++++++++++++++++++++++++++++----------
 drivers/net/cxgb4/cxgb4_uld.h  |    2 +
 drivers/net/cxgb4/l2t.c        |    7 +
 drivers/net/cxgb4/t4_hw.c      |   94 ++++++++++----
 drivers/net/cxgb4/t4_hw.h      |    2 -
 drivers/net/cxgb4/t4_regs.h    |    3 +
 drivers/net/cxgb4/t4fw_api.h   |   36 ++++--
 8 files changed, 326 insertions(+), 105 deletions(-)

^ permalink raw reply

* Re: [PATCH] Clear IFF_XMIT_DST_RELEASE for teql interfaces
From: David Miller @ 2010-06-16 21:47 UTC (permalink / raw)
  To: eric.dumazet; +Cc: hadi, tom, netdev, akpm, shemminger, kaber, tj, linux-kernel
In-Reply-To: <1276697660.2632.79.camel@edumazet-laptop>

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 16 Jun 2010 16:14:20 +0200

> Please David, could you add bugzilla entry in commit ?
> 
> https://bugzilla.kernel.org/show_bug.cgi?id=16183
> 
> Acked-by: Eric Dumazet <eric.dumazet@gmail.com>

Done and applied, thanks everyone.

^ permalink raw reply

* Re: [PATCH net-next-2.6 0/2] qlcnic: Bug fixes
From: David Miller @ 2010-06-16 21:46 UTC (permalink / raw)
  To: anirban.chakraborty; +Cc: netdev, Dept_NX_Linux_NIC_Driver
In-Reply-To: <alpine.OSX.2.00.1006161155350.15485@macintosh-2.qlogic.org>

From: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Date: Wed, 16 Jun 2010 12:07:17 -0700

> Please apply the two patches to net-next.

Both applied, thank you.

^ permalink raw reply

* Re: pull request: wireless-2.6 2010-06-16 v2
From: David Miller @ 2010-06-16 21:43 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20100616201300.GD3138@tuxdriver.com>

From: "John W. Linville" <linville@tuxdriver.com>
Date: Wed, 16 Jun 2010 16:13:00 -0400

> On Wed, Jun 16, 2010 at 11:50:08AM -0700, David Miller wrote:
>> From: "John W. Linville" <linville@tuxdriver.com>
>> Date: Wed, 16 Jun 2010 14:28:48 -0400
>> 
>> > Here is another passel of of fixes intended for 2.6.35.  Included are
>> > some build warning fixes, a PCI identifier, a fix for premature
>> > IRQs during hostap initialization, a fix for a warning caused by
>> > failing to cancel a scan watchdog in iwlwifi, a fix for a null
>> > pointer dereference in iwlwifi, and a fix for a race condition in
>> > the same driver.  Also included is the MAINTAINERS change for the
>> > orphaning of the older Intel wireless drivers.  All but the last few
>> > warning fixes have spent some time in linux-next already.
>> > 
>> > Please let me know if there are problems!
>> 
>> The patches removing unused function variables just to kill compile
>> warnings are not appropriate, _at_ _all_.  They don't fix any real
>> bug, and they definitely don't fix entries in the regression list do
>> they?
>> 
>> Kill all of those and resend this pull request.
> 
> Fair enough...I dropped the warning fixes for the unused variables.
> But I kept the ones related to uninitialized variables, since
> those seem potentially more dangerous to ignore.  Hopefully that
> is acceptable.
> 
> Please let me know if there are problems!

Pulled, thanks!

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox