Search Linux Wireless

[PATCH 3/3] compat-drivers: Add new cherry-pick and next-pending patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Bala Shanmugam <bkamatch@xxxxxxxxxxxxxxxx>
---
 ...81-ath9k-Fix-BTCOEX-weight-initialization.patch | 176 +++++++++++++++++++++
 ...01-ath9k_hw-Enable-OSLA-hw-fix-for-AR9565.patch |  34 ++++
 ...2-ath9k_hw-Fix-selfgen-chainmask-for-9565.patch |  28 ++++
 ...ppropriate-bit-for-AR9565-in-btc-control-.patch |  33 ++++
 ...off-RXIQ-calibration-while-re-calibrating.patch |  46 ++++++
 ...sable-MCI-stat-counter-by-default-for-AR9.patch |  34 ++++
 ...0006-ath9k_hw-Fix-frequent-BT-rx-recovery.patch |  66 ++++++++
 ...-ath9k_hw-Fix-max-rx-rate-drop-for-AR9565.patch |  28 ++++
 ...nfigure-new-switch-table-for-AR9565-BTCOE.patch |  47 ++++++
 ...th9k_hw-Set-default-MCI-config-for-AR9565.patch |  21 +++
 ...ust-duty-cycle-for-FTP-profile-for-AR9565.patch |  21 +++
 ...-ath9k-Add-new-BT-profile-info-A2DP_Voice.patch |  44 ++++++
 ...012-cfg80211-Disallow-HT-WEP-in-IBSS-mode.patch |  63 ++++++++
 13 files changed, 641 insertions(+)
 create mode 100644 linux-next-cherry-picks/0081-ath9k-Fix-BTCOEX-weight-initialization.patch
 create mode 100644 linux-next-pending/0001-ath9k_hw-Enable-OSLA-hw-fix-for-AR9565.patch
 create mode 100644 linux-next-pending/0002-ath9k_hw-Fix-selfgen-chainmask-for-9565.patch
 create mode 100644 linux-next-pending/0003-ath9k-Set-appropriate-bit-for-AR9565-in-btc-control-.patch
 create mode 100644 linux-next-pending/0004-ath9k-turn-off-RXIQ-calibration-while-re-calibrating.patch
 create mode 100644 linux-next-pending/0005-ath9k_hw-Disable-MCI-stat-counter-by-default-for-AR9.patch
 create mode 100644 linux-next-pending/0006-ath9k_hw-Fix-frequent-BT-rx-recovery.patch
 create mode 100644 linux-next-pending/0007-ath9k_hw-Fix-max-rx-rate-drop-for-AR9565.patch
 create mode 100644 linux-next-pending/0008-ath9k_hw-Configure-new-switch-table-for-AR9565-BTCOE.patch
 create mode 100644 linux-next-pending/0009-ath9k_hw-Set-default-MCI-config-for-AR9565.patch
 create mode 100644 linux-next-pending/0010-ath9k-adjust-duty-cycle-for-FTP-profile-for-AR9565.patch
 create mode 100644 linux-next-pending/0011-ath9k-Add-new-BT-profile-info-A2DP_Voice.patch
 create mode 100644 linux-next-pending/0012-cfg80211-Disallow-HT-WEP-in-IBSS-mode.patch

diff --git a/linux-next-cherry-picks/0081-ath9k-Fix-BTCOEX-weight-initialization.patch b/linux-next-cherry-picks/0081-ath9k-Fix-BTCOEX-weight-initialization.patch
new file mode 100644
index 0000000..037da36
--- /dev/null
+++ b/linux-next-cherry-picks/0081-ath9k-Fix-BTCOEX-weight-initialization.patch
@@ -0,0 +1,176 @@
+From 5160b46f3e53c41c4c6b9e7cdbe0401d3afbfb63 Mon Sep 17 00:00:00 2001
+From: Sujith Manoharan <c_manoha@xxxxxxxxxxxx>
+Date: Fri, 28 Sep 2012 11:13:51 +0530
+Subject: [PATCH] ath9k: Fix BTCOEX weight initialization
+
+The WLAN/BT weights have to set correctly before BTCOEX
+is initialized. Currently, this is not done for all chips
+in the AR9003 family. This patch fixes this issue by setting
+the weights in the init path. While at it, rename ar9462_wlan_weights
+to mci_wlan_weights since it is common to both AR9462 and AR9565.
+
+Signed-off-by: Sujith Manoharan <c_manoha@xxxxxxxxxxxxxxxx>
+Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/btcoex.c       | 61 ++++++++++++++-------------
+ drivers/net/wireless/ath/ath9k/btcoex.h       |  3 +-
+ drivers/net/wireless/ath/ath9k/gpio.c         |  5 ++-
+ drivers/net/wireless/ath/ath9k/htc_drv_gpio.c |  2 +-
+ 4 files changed, 39 insertions(+), 32 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/btcoex.c b/drivers/net/wireless/ath/ath9k/btcoex.c
+index 4ef610e..419e9a3 100644
+--- a/drivers/net/wireless/ath/ath9k/btcoex.c
++++ b/drivers/net/wireless/ath/ath9k/btcoex.c
+@@ -43,8 +43,8 @@ static const u32 ar9003_wlan_weights[ATH_BTCOEX_STOMP_MAX]
+ 	{ 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, /* STOMP_NONE */
+ };
+ 
+-static const u32 ar9462_wlan_weights[ATH_BTCOEX_STOMP_MAX]
+-				    [AR9300_NUM_WLAN_WEIGHTS] = {
++static const u32 mci_wlan_weights[ATH_BTCOEX_STOMP_MAX]
++				 [AR9300_NUM_WLAN_WEIGHTS] = {
+ 	{ 0x01017d01, 0x41414101, 0x41414101, 0x41414141 }, /* STOMP_ALL */
+ 	{ 0x01017d01, 0x3b3b3b01, 0x3b3b3b01, 0x3b3b3b3b }, /* STOMP_LOW */
+ 	{ 0x01017d01, 0x01010101, 0x01010101, 0x01010101 }, /* STOMP_NONE */
+@@ -208,14 +208,37 @@ static void ath9k_hw_btcoex_enable_2wire(struct ath_hw *ah)
+ 			    AR_GPIO_OUTPUT_MUX_AS_TX_FRAME);
+ }
+ 
++/*
++ * For AR9002, bt_weight/wlan_weight are used.
++ * For AR9003 and above, stomp_type is used.
++ */
+ void ath9k_hw_btcoex_set_weight(struct ath_hw *ah,
+ 				u32 bt_weight,
+-				u32 wlan_weight)
++				u32 wlan_weight,
++				enum ath_stomp_type stomp_type)
+ {
+ 	struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw;
+ 
+-	btcoex_hw->bt_coex_weights = SM(bt_weight, AR_BTCOEX_BT_WGHT) |
+-				     SM(wlan_weight, AR_BTCOEX_WL_WGHT);
++	if (AR_SREV_9300_20_OR_LATER(ah)) {
++		const u32 *weight = ar9003_wlan_weights[stomp_type];
++		int i;
++
++		if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
++			if ((stomp_type == ATH_BTCOEX_STOMP_LOW) &&
++			    btcoex_hw->mci.stomp_ftp)
++				stomp_type = ATH_BTCOEX_STOMP_LOW_FTP;
++			weight = mci_wlan_weights[stomp_type];
++		}
++
++		for (i = 0; i < AR9300_NUM_WLAN_WEIGHTS; i++) {
++			btcoex_hw->bt_weight[i] = AR9300_BT_WGHT;
++			btcoex_hw->wlan_weight[i] = weight[i];
++		}
++	} else {
++		btcoex_hw->bt_coex_weights =
++			SM(bt_weight, AR_BTCOEX_BT_WGHT) |
++			SM(wlan_weight, AR_BTCOEX_WL_WGHT);
++	}
+ }
+ EXPORT_SYMBOL(ath9k_hw_btcoex_set_weight);
+ 
+@@ -332,26 +355,6 @@ void ath9k_hw_btcoex_disable(struct ath_hw *ah)
+ }
+ EXPORT_SYMBOL(ath9k_hw_btcoex_disable);
+ 
+-static void ar9003_btcoex_bt_stomp(struct ath_hw *ah,
+-			 enum ath_stomp_type stomp_type)
+-{
+-	struct ath_btcoex_hw *btcoex = &ah->btcoex_hw;
+-	const u32 *weight = ar9003_wlan_weights[stomp_type];
+-	int i;
+-
+-	if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
+-		if ((stomp_type == ATH_BTCOEX_STOMP_LOW) &&
+-		    btcoex->mci.stomp_ftp)
+-			stomp_type = ATH_BTCOEX_STOMP_LOW_FTP;
+-		weight = ar9462_wlan_weights[stomp_type];
+-	}
+-
+-	for (i = 0; i < AR9300_NUM_WLAN_WEIGHTS; i++) {
+-		btcoex->bt_weight[i] = AR9300_BT_WGHT;
+-		btcoex->wlan_weight[i] = weight[i];
+-	}
+-}
+-
+ /*
+  * Configures appropriate weight based on stomp type.
+  */
+@@ -359,22 +362,22 @@ void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah,
+ 			      enum ath_stomp_type stomp_type)
+ {
+ 	if (AR_SREV_9300_20_OR_LATER(ah)) {
+-		ar9003_btcoex_bt_stomp(ah, stomp_type);
++		ath9k_hw_btcoex_set_weight(ah, 0, 0, stomp_type);
+ 		return;
+ 	}
+ 
+ 	switch (stomp_type) {
+ 	case ATH_BTCOEX_STOMP_ALL:
+ 		ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
+-				AR_STOMP_ALL_WLAN_WGHT);
++					   AR_STOMP_ALL_WLAN_WGHT, 0);
+ 		break;
+ 	case ATH_BTCOEX_STOMP_LOW:
+ 		ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
+-				AR_STOMP_LOW_WLAN_WGHT);
++					   AR_STOMP_LOW_WLAN_WGHT, 0);
+ 		break;
+ 	case ATH_BTCOEX_STOMP_NONE:
+ 		ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
+-				AR_STOMP_NONE_WLAN_WGHT);
++					   AR_STOMP_NONE_WLAN_WGHT, 0);
+ 		break;
+ 	default:
+ 		ath_dbg(ath9k_hw_common(ah), BTCOEX, "Invalid Stomptype\n");
+diff --git a/drivers/net/wireless/ath/ath9k/btcoex.h b/drivers/net/wireless/ath/ath9k/btcoex.h
+index 20092f9..385197a 100644
+--- a/drivers/net/wireless/ath/ath9k/btcoex.h
++++ b/drivers/net/wireless/ath/ath9k/btcoex.h
+@@ -107,7 +107,8 @@ void ath9k_hw_btcoex_init_mci(struct ath_hw *ah);
+ void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum);
+ void ath9k_hw_btcoex_set_weight(struct ath_hw *ah,
+ 				u32 bt_weight,
+-				u32 wlan_weight);
++				u32 wlan_weight,
++				enum ath_stomp_type stomp_type);
+ void ath9k_hw_btcoex_disable(struct ath_hw *ah);
+ void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah,
+ 			      enum ath_stomp_type stomp_type);
+diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c
+index 5faa4f7..d9ed141 100644
+--- a/drivers/net/wireless/ath/ath9k/gpio.c
++++ b/drivers/net/wireless/ath/ath9k/gpio.c
+@@ -395,7 +395,10 @@ void ath9k_start_btcoex(struct ath_softc *sc)
+ 	    !ah->btcoex_hw.enabled) {
+ 		if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_MCI))
+ 			ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
+-						   AR_STOMP_LOW_WLAN_WGHT);
++						   AR_STOMP_LOW_WLAN_WGHT, 0);
++		else
++			ath9k_hw_btcoex_set_weight(ah, 0, 0,
++						   ATH_BTCOEX_STOMP_NONE);
+ 		ath9k_hw_btcoex_enable(ah);
+ 
+ 		if (ath9k_hw_get_btcoex_scheme(ah) == ATH_BTCOEX_CFG_3WIRE)
+diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
+index 8fd64a6..0eacfc1 100644
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
+@@ -161,7 +161,7 @@ void ath9k_htc_start_btcoex(struct ath9k_htc_priv *priv)
+ 
+ 	if (ath9k_hw_get_btcoex_scheme(ah) == ATH_BTCOEX_CFG_3WIRE) {
+ 		ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
+-					   AR_STOMP_LOW_WLAN_WGHT);
++					   AR_STOMP_LOW_WLAN_WGHT, 0);
+ 		ath9k_hw_btcoex_enable(ah);
+ 		ath_htc_resume_btcoex_work(priv);
+ 	}
+-- 
+1.7.11.4
+
diff --git a/linux-next-pending/0001-ath9k_hw-Enable-OSLA-hw-fix-for-AR9565.patch b/linux-next-pending/0001-ath9k_hw-Enable-OSLA-hw-fix-for-AR9565.patch
new file mode 100644
index 0000000..8f3e87c
--- /dev/null
+++ b/linux-next-pending/0001-ath9k_hw-Enable-OSLA-hw-fix-for-AR9565.patch
@@ -0,0 +1,34 @@
+From 09504f1ccb52e865e1be861db9c7c1adbf206614 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:45 +0530
+Subject: [PATCH 01/11] ath9k_hw: Enable OSLA hw fix for AR9565
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |    3 +++
+ drivers/net/wireless/ath/ath9k/reg.h        |    4 ++++
+ 2 files changed, 7 insertions(+), 0 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -799,6 +799,9 @@ static void ar9003_mci_osla_setup(struct
+ 	REG_RMW_FIELD(ah, AR_MCI_SCHD_TABLE_2,
+ 		      AR_MCI_SCHD_TABLE_2_MEM_BASED, 1);
+ 
++	if (AR_SREV_9565(ah))
++		REG_RMW_FIELD(ah, AR_MCI_MISC, AR_MCI_MISC_HW_FIX_EN, 1);
++
+ 	if (!(mci->config & ATH_MCI_CONFIG_DISABLE_AGGR_THRESH)) {
+ 		thresh = MS(mci->config, ATH_MCI_CONFIG_AGGR_THRESH);
+ 		REG_RMW_FIELD(ah, AR_BTCOEX_CTRL,
+--- a/drivers/net/wireless/ath/ath9k/reg.h
++++ b/drivers/net/wireless/ath/ath9k/reg.h
+@@ -2360,4 +2360,8 @@ enum {
+ #define AR_GLB_SWREG_DISCONT_MODE         0x2002c
+ #define AR_GLB_SWREG_DISCONT_EN_BT_WLAN   0x3
+ 
++#define AR_MCI_MISC                    0x1a74
++#define AR_MCI_MISC_HW_FIX_EN          0x00000001
++#define AR_MCI_MISC_HW_FIX_EN_S        0
++
+ #endif
diff --git a/linux-next-pending/0002-ath9k_hw-Fix-selfgen-chainmask-for-9565.patch b/linux-next-pending/0002-ath9k_hw-Fix-selfgen-chainmask-for-9565.patch
new file mode 100644
index 0000000..84f3447
--- /dev/null
+++ b/linux-next-pending/0002-ath9k_hw-Fix-selfgen-chainmask-for-9565.patch
@@ -0,0 +1,28 @@
+From 9f477777f199e21ecdeea4df1244f55495827ffe Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:46 +0530
+Subject: [PATCH 02/11] ath9k_hw: Fix selfgen chainmask for 9565
+
+Self generated MCI messages is configured to use chain 1. As
+ar9565 is 1x1 solution, It can not use Chain 1. Hence fix
+Chain 1 for ar9462 alone. Not doing so, could affect WLAN
+connectivity in ar9565 as LNA sharing is not informed by BT.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -1031,7 +1031,9 @@ void ar9003_mci_2g5g_switch(struct ath_h
+ 
+ 		if (!(mci->config & ATH_MCI_CONFIG_DISABLE_OSLA))
+ 			ar9003_mci_osla_setup(ah, true);
+-		REG_WRITE(ah, AR_SELFGEN_MASK, 0x02);
++
++		if (AR_SREV_9462(ah))
++			REG_WRITE(ah, AR_SELFGEN_MASK, 0x02);
+ 	} else {
+ 		ar9003_mci_send_lna_take(ah, true);
+ 		udelay(5);
diff --git a/linux-next-pending/0003-ath9k-Set-appropriate-bit-for-AR9565-in-btc-control-.patch b/linux-next-pending/0003-ath9k-Set-appropriate-bit-for-AR9565-in-btc-control-.patch
new file mode 100644
index 0000000..329a901
--- /dev/null
+++ b/linux-next-pending/0003-ath9k-Set-appropriate-bit-for-AR9565-in-btc-control-.patch
@@ -0,0 +1,33 @@
+From cd8098a5ee084ea3b41f2891e0a5340271988f0d Mon Sep 17 00:00:00 2001
+From: Bala Shanmugam <bkamatch@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:47 +0530
+Subject: [PATCH 03/11] ath9k: Set appropriate bit for AR9565 in btc control register
+
+Signed-off-by: Bala Shanmugam <bkamatch@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |   11 +++++++++--
+ 1 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -850,11 +850,18 @@ int ar9003_mci_reset(struct ath_hw *ah,
+ 		 SM(1, AR_BTCOEX_CTRL_WBTIMER_EN) |
+ 		 SM(1, AR_BTCOEX_CTRL_PA_SHARED) |
+ 		 SM(1, AR_BTCOEX_CTRL_LNA_SHARED) |
+-		 SM(2, AR_BTCOEX_CTRL_NUM_ANTENNAS) |
+-		 SM(3, AR_BTCOEX_CTRL_RX_CHAIN_MASK) |
+ 		 SM(0, AR_BTCOEX_CTRL_1_CHAIN_ACK) |
+ 		 SM(0, AR_BTCOEX_CTRL_1_CHAIN_BCN) |
+ 		 SM(0, AR_BTCOEX_CTRL_ONE_STEP_LOOK_AHEAD_EN);
++	if (AR_SREV_9565(ah)) {
++		regval |= SM(1, AR_BTCOEX_CTRL_NUM_ANTENNAS) |
++			  SM(1, AR_BTCOEX_CTRL_RX_CHAIN_MASK);
++		REG_RMW_FIELD(ah, AR_BTCOEX_CTRL2,
++			      AR_BTCOEX_CTRL2_TX_CHAIN_MASK, 0x1);
++	} else {
++		regval |= SM(2, AR_BTCOEX_CTRL_NUM_ANTENNAS) |
++			  SM(3, AR_BTCOEX_CTRL_RX_CHAIN_MASK);
++	}
+ 
+ 	REG_WRITE(ah, AR_BTCOEX_CTRL, regval);
+ 
diff --git a/linux-next-pending/0004-ath9k-turn-off-RXIQ-calibration-while-re-calibrating.patch b/linux-next-pending/0004-ath9k-turn-off-RXIQ-calibration-while-re-calibrating.patch
new file mode 100644
index 0000000..9e9819a
--- /dev/null
+++ b/linux-next-pending/0004-ath9k-turn-off-RXIQ-calibration-while-re-calibrating.patch
@@ -0,0 +1,46 @@
+From f090327eec6875ce4302173f1638a37b9a5d47b8 Mon Sep 17 00:00:00 2001
+From: Bala Shanmugam <bkamatch@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:48 +0530
+Subject: [PATCH 04/11] ath9k: turn off RXIQ calibration while re-calibrating radio
+
+TXIQ and RXIQ share the same data path to upload the measurement
+result, we should turn off RXIQ calibration while re-calibrating radio
+
+Signed-off-by: Bala Shanmugam <bkamatch@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |    6 ++++++
+ drivers/net/wireless/ath/ath9k/ar9003_phy.h |    1 +
+ 2 files changed, 7 insertions(+), 0 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -750,6 +750,9 @@ int ar9003_mci_end_reset(struct ath_hw *
+ 
+ 	mci_hw->bt_state = MCI_BT_AWAKE;
+ 
++	REG_CLR_BIT(ah, AR_PHY_TIMING4,
++		    1 << AR_PHY_TIMING_CONTROL4_DO_GAIN_DC_IQ_CAL_SHIFT);
++
+ 	if (caldata) {
+ 		caldata->done_txiqcal_once = false;
+ 		caldata->done_txclcal_once = false;
+@@ -759,6 +762,9 @@ int ar9003_mci_end_reset(struct ath_hw *
+ 	if (!ath9k_hw_init_cal(ah, chan))
+ 		return -EIO;
+ 
++	REG_SET_BIT(ah, AR_PHY_TIMING4,
++		    1 << AR_PHY_TIMING_CONTROL4_DO_GAIN_DC_IQ_CAL_SHIFT);
++
+ exit:
+ 	ar9003_mci_enable_interrupt(ah);
+ 	return 0;
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+@@ -32,6 +32,7 @@
+ #define AR_PHY_SPUR_REG     (AR_CHAN_BASE + 0x1c)
+ #define AR_PHY_RX_IQCAL_CORR_B0    (AR_CHAN_BASE + 0xdc)
+ #define AR_PHY_TX_IQCAL_CONTROL_3  (AR_CHAN_BASE + 0xb0)
++#define AR_PHY_TIMING_CONTROL4_DO_GAIN_DC_IQ_CAL_SHIFT 16
+ 
+ #define AR_PHY_TIMING11_SPUR_FREQ_SD    0x3FF00000
+ #define AR_PHY_TIMING11_SPUR_FREQ_SD_S  20
diff --git a/linux-next-pending/0005-ath9k_hw-Disable-MCI-stat-counter-by-default-for-AR9.patch b/linux-next-pending/0005-ath9k_hw-Disable-MCI-stat-counter-by-default-for-AR9.patch
new file mode 100644
index 0000000..1d59f1f
--- /dev/null
+++ b/linux-next-pending/0005-ath9k_hw-Disable-MCI-stat-counter-by-default-for-AR9.patch
@@ -0,0 +1,34 @@
+From 7b608d7a012d967f08e8500c3e38b94d28daa4c6 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:49 +0530
+Subject: [PATCH 05/11] ath9k_hw: Disable MCI stat counter by default for AR9565
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |    3 +++
+ drivers/net/wireless/ath/ath9k/reg.h        |    3 +++
+ 2 files changed, 6 insertions(+), 0 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -926,6 +926,9 @@ int ar9003_mci_reset(struct ath_hw *ah,
+ 	mci->ready = true;
+ 	ar9003_mci_prep_interface(ah);
+ 
++	if (AR_SREV_9565(ah))
++		REG_RMW_FIELD(ah, AR_MCI_DBG_CNT_CTRL,
++			      AR_MCI_DBG_CNT_CTRL_ENABLE, 0);
+ 	if (en_int)
+ 		ar9003_mci_enable_interrupt(ah);
+ 
+--- a/drivers/net/wireless/ath/ath9k/reg.h
++++ b/drivers/net/wireless/ath/ath9k/reg.h
+@@ -2363,5 +2363,8 @@ enum {
+ #define AR_MCI_MISC                    0x1a74
+ #define AR_MCI_MISC_HW_FIX_EN          0x00000001
+ #define AR_MCI_MISC_HW_FIX_EN_S        0
++#define AR_MCI_DBG_CNT_CTRL            0x1a78
++#define AR_MCI_DBG_CNT_CTRL_ENABLE     0x00000001
++#define AR_MCI_DBG_CNT_CTRL_ENABLE_S   0
+ 
+ #endif
diff --git a/linux-next-pending/0006-ath9k_hw-Fix-frequent-BT-rx-recovery.patch b/linux-next-pending/0006-ath9k_hw-Fix-frequent-BT-rx-recovery.patch
new file mode 100644
index 0000000..0067334
--- /dev/null
+++ b/linux-next-pending/0006-ath9k_hw-Fix-frequent-BT-rx-recovery.patch
@@ -0,0 +1,66 @@
+From 56e95424248ae3a3f5dd92bdd7ae0446ea3776ba Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 17:31:41 +0530
+Subject: [PATCH 06/11] ath9k_hw: Fix frequent BT rx recovery
+
+While resuming from S3, BT host issues HCI reset command and it
+causes BT firmware to busy with security key calculation. At this
+movement, WLAN detects MCI hardware error of MCI_CONT_INFO_TIMEOUT
+and then it starts the recovery sequence repeatedly. Too many
+recovery sequences would exhaust the BT kernel message pool. This
+patch imposes a duration between consecutive BT recovery procedure.
+Thus it solves BT firmware panic issue reported in AR9565.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.c |   10 +++++++++-
+ drivers/net/wireless/ath/ath9k/ar9003_mci.h |    1 +
+ drivers/net/wireless/ath/ath9k/btcoex.h     |    1 +
+ 3 files changed, 11 insertions(+), 1 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.c
+@@ -1191,7 +1191,7 @@ EXPORT_SYMBOL(ar9003_mci_cleanup);
+ u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type)
+ {
+ 	struct ath9k_hw_mci *mci = &ah->btcoex_hw.mci;
+-	u32 value = 0;
++	u32 value = 0, tsf;
+ 	u8 query_type;
+ 
+ 	switch (state_type) {
+@@ -1249,6 +1249,14 @@ u32 ar9003_mci_state(struct ath_hw *ah,
+ 		ar9003_mci_send_coex_bt_status_query(ah, true, query_type);
+ 		break;
+ 	case MCI_STATE_RECOVER_RX:
++		tsf = ath9k_hw_gettsf32(ah);
++		if ((tsf - mci->last_recovery) <= MCI_RECOVERY_DUR_TSF) {
++			ath_dbg(ath9k_hw_common(ah), MCI,
++				"(MCI) ignore Rx recovery\n");
++			break;
++		}
++		ath_dbg(ath9k_hw_common(ah), MCI, "(MCI) RECOVER RX\n");
++		mci->last_recovery = tsf;
+ 		ar9003_mci_prep_interface(ah);
+ 		mci->query_bt = true;
+ 		mci->need_flush_btinfo = true;
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.h
+@@ -18,6 +18,7 @@
+ #define AR9003_MCI_H
+ 
+ #define MCI_FLAG_DISABLE_TIMESTAMP      0x00000001      /* Disable time stamp */
++#define MCI_RECOVERY_DUR_TSF		(100 * 1000)    /* 100 ms */
+ 
+ /* Default remote BT device MCI COEX version */
+ #define MCI_GPM_COEX_MAJOR_VERSION_DEFAULT  3
+--- a/drivers/net/wireless/ath/ath9k/btcoex.h
++++ b/drivers/net/wireless/ath/ath9k/btcoex.h
+@@ -84,6 +84,7 @@ struct ath9k_hw_mci {
+ 	u8 bt_ver_minor;
+ 	u8 bt_state;
+ 	u8 stomp_ftp;
++	u32 last_recovery;
+ };
+ 
+ struct ath_btcoex_hw {
diff --git a/linux-next-pending/0007-ath9k_hw-Fix-max-rx-rate-drop-for-AR9565.patch b/linux-next-pending/0007-ath9k_hw-Fix-max-rx-rate-drop-for-AR9565.patch
new file mode 100644
index 0000000..1ac6f84
--- /dev/null
+++ b/linux-next-pending/0007-ath9k_hw-Fix-max-rx-rate-drop-for-AR9565.patch
@@ -0,0 +1,28 @@
+From f02b45dc2aa6022765a18cea7ce6acff31f59897 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:51 +0530
+Subject: [PATCH 07/11] ath9k_hw: Fix max rx rate drop for AR9565
+
+Whenever i_coff of IQ calibration is too high, AR9565 drops max
+rx rate to MCS4. Skipping IQ update at this time can avoid this
+problem for AR9565.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_calib.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+@@ -276,6 +276,11 @@ static void ar9003_hw_iqcalibrate(struct
+ 				offset_array[i],
+ 				REG_READ(ah, offset_array[i]));
+ 
++			if (AR_SREV_9565(ah) &&
++			    (iCoff == 63 || qCoff == 63 ||
++			     iCoff == -63 || qCoff == -63))
++				return;
++
+ 			REG_RMW_FIELD(ah, offset_array[i],
+ 				      AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
+ 				      iCoff);
diff --git a/linux-next-pending/0008-ath9k_hw-Configure-new-switch-table-for-AR9565-BTCOE.patch b/linux-next-pending/0008-ath9k_hw-Configure-new-switch-table-for-AR9565-BTCOE.patch
new file mode 100644
index 0000000..2ae2a1d
--- /dev/null
+++ b/linux-next-pending/0008-ath9k_hw-Configure-new-switch-table-for-AR9565-BTCOE.patch
@@ -0,0 +1,47 @@
+From 2413be8ff29842ba6404dc69e353f481aa7e6f87 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:52 +0530
+Subject: [PATCH 08/11] ath9k_hw: Configure new switch table for AR9565 BTCOEX
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |    2 +-
+ drivers/net/wireless/ath/ath9k/reg.h           |    4 ----
+ drivers/net/wireless/ath/ath9k/wow.c           |    2 +-
+ 3 files changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3601,7 +3601,7 @@ static void ar9003_hw_ant_ctrl_apply(str
+ 	 *   7:4 R/W  SWITCH_TABLE_COM_SPDT_WLAN_IDLE
+ 	 * SWITCH_TABLE_COM_SPDT_WLAN_IDLE
+ 	 */
+-	if (AR_SREV_9462_20_OR_LATER(ah)) {
++	if (AR_SREV_9462_20(ah) || AR_SREV_9565(ah)) {
+ 		value = ar9003_switch_com_spdt_get(ah, is2ghz);
+ 		REG_RMW_FIELD(ah, AR_PHY_GLB_CONTROL,
+ 				AR_SWITCH_TABLE_COM_SPDT_ALL, value);
+--- a/drivers/net/wireless/ath/ath9k/reg.h
++++ b/drivers/net/wireless/ath/ath9k/reg.h
+@@ -907,10 +907,6 @@
+ 	(((_ah)->hw_version.macVersion == AR_SREV_VERSION_9462) && \
+ 	((_ah)->hw_version.macRev == AR_SREV_REVISION_9462_20))
+ 
+-#define AR_SREV_9462_20_OR_LATER(_ah) \
+-	(((_ah)->hw_version.macVersion == AR_SREV_VERSION_9462) && \
+-	((_ah)->hw_version.macRev >= AR_SREV_REVISION_9462_20))
+-
+ #define AR_SREV_9565(_ah) \
+ 	(((_ah)->hw_version.macVersion == AR_SREV_VERSION_9565))
+ 
+--- a/drivers/net/wireless/ath/ath9k/wow.c
++++ b/drivers/net/wireless/ath/ath9k/wow.c
+@@ -118,7 +118,7 @@ static void ath9k_wow_create_keep_alive_
+ 		       (ap_mac_addr[1] << 8) | (ap_mac_addr[0]);
+ 	data_word[5] = (ap_mac_addr[5] << 8) | (ap_mac_addr[4]);
+ 
+-	if (AR_SREV_9462_20_OR_LATER(ah)) {
++	if (AR_SREV_9462_20(ah)) {
+ 		/* AR9462 2.0 has an extra descriptor word (time based
+ 		 * discard) compared to other chips */
+ 		REG_WRITE(ah, (AR_WOW_KA_DESC_WORD2 + (12 * 4)), 0);
diff --git a/linux-next-pending/0009-ath9k_hw-Set-default-MCI-config-for-AR9565.patch b/linux-next-pending/0009-ath9k_hw-Set-default-MCI-config-for-AR9565.patch
new file mode 100644
index 0000000..687c8db
--- /dev/null
+++ b/linux-next-pending/0009-ath9k_hw-Set-default-MCI-config-for-AR9565.patch
@@ -0,0 +1,21 @@
+From 1e902624bc2de514eb4931950fb0533010246ae8 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:53 +0530
+Subject: [PATCH 09/11] ath9k_hw: Set default MCI config for AR9565
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/btcoex.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/btcoex.c
++++ b/drivers/net/wireless/ath/ath9k/btcoex.c
+@@ -195,7 +195,7 @@ void ath9k_hw_btcoex_init_mci(struct ath
+ 	ah->btcoex_hw.mci.need_flush_btinfo = false;
+ 	ah->btcoex_hw.mci.wlan_cal_seq = 0;
+ 	ah->btcoex_hw.mci.wlan_cal_done = 0;
+-	ah->btcoex_hw.mci.config = 0x2201;
++	ah->btcoex_hw.mci.config = (AR_SREV_9462(ah)) ? 0x2201 : 0xa4c1;
+ }
+ EXPORT_SYMBOL(ath9k_hw_btcoex_init_mci);
+ 
diff --git a/linux-next-pending/0010-ath9k-adjust-duty-cycle-for-FTP-profile-for-AR9565.patch b/linux-next-pending/0010-ath9k-adjust-duty-cycle-for-FTP-profile-for-AR9565.patch
new file mode 100644
index 0000000..24bfd02
--- /dev/null
+++ b/linux-next-pending/0010-ath9k-adjust-duty-cycle-for-FTP-profile-for-AR9565.patch
@@ -0,0 +1,21 @@
+From 31a829f68f4d5f36ea5513b3d4924c5ba372dfc8 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:54 +0530
+Subject: [PATCH 10/11] ath9k: adjust duty cycle for FTP profile for AR9565
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/mci.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/mci.c
++++ b/drivers/net/wireless/ath/ath9k/mci.c
+@@ -150,7 +150,7 @@ static void ath_mci_update_scheme(struct
+ 			 * For single PAN/FTP profile, allocate 35% for BT
+ 			 * to improve WLAN throughput.
+ 			 */
+-			btcoex->duty_cycle = 35;
++			btcoex->duty_cycle = AR_SREV_9565(sc->sc_ah) ? 40 : 35;
+ 			btcoex->btcoex_period = 53;
+ 			ath_dbg(common, MCI,
+ 				"Single PAN/FTP bt period %d ms dutycycle %d\n",
diff --git a/linux-next-pending/0011-ath9k-Add-new-BT-profile-info-A2DP_Voice.patch b/linux-next-pending/0011-ath9k-Add-new-BT-profile-info-A2DP_Voice.patch
new file mode 100644
index 0000000..2d4d4f1
--- /dev/null
+++ b/linux-next-pending/0011-ath9k-Add-new-BT-profile-info-A2DP_Voice.patch
@@ -0,0 +1,44 @@
+From 2b175a64f5daa777c6509542e38a48dd15f8e1b4 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 15:29:55 +0530
+Subject: [PATCH 11/11] ath9k: Add new BT profile info A2DP_Voice
+
+When the BT connection is initiated by headset, it's possible that headset
+requests to make one A2DP and one Voice connection over the same link.
+BT firmware will send a new profile A2DP_Voice in this case. So WLAN
+has to take care of this new profile for tuning BTCOEX parameters.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
+---
+ drivers/net/wireless/ath/ath9k/ar9003_mci.h |    1 +
+ drivers/net/wireless/ath/ath9k/mci.h        |    2 ++
+ 2 files changed, 3 insertions(+), 0 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mci.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mci.h
+@@ -126,6 +126,7 @@ enum ath_mci_gpm_coex_profile_type {
+ 	MCI_GPM_COEX_PROFILE_HID,
+ 	MCI_GPM_COEX_PROFILE_BNEP,
+ 	MCI_GPM_COEX_PROFILE_VOICE,
++	MCI_GPM_COEX_PROFILE_A2DPVO,
+ 	MCI_GPM_COEX_PROFILE_MAX
+ };
+ 
+--- a/drivers/net/wireless/ath/ath9k/mci.h
++++ b/drivers/net/wireless/ath/ath9k/mci.h
+@@ -49,6 +49,7 @@
+ 			_mci->num_pan++;	 \
+ 			break;			 \
+ 		case MCI_GPM_COEX_PROFILE_VOICE: \
++		case MCI_GPM_COEX_PROFILE_A2DPVO:\
+ 			_mci->num_sco++;	 \
+ 			break;			 \
+ 		default:			 \
+@@ -73,6 +74,7 @@
+ 			_mci->num_pan--;	 \
+ 			break;			 \
+ 		case MCI_GPM_COEX_PROFILE_VOICE: \
++		case MCI_GPM_COEX_PROFILE_A2DPVO:\
+ 			_mci->num_sco--;	 \
+ 			break;			 \
+ 		default:			 \
diff --git a/linux-next-pending/0012-cfg80211-Disallow-HT-WEP-in-IBSS-mode.patch b/linux-next-pending/0012-cfg80211-Disallow-HT-WEP-in-IBSS-mode.patch
new file mode 100644
index 0000000..e4a39e9
--- /dev/null
+++ b/linux-next-pending/0012-cfg80211-Disallow-HT-WEP-in-IBSS-mode.patch
@@ -0,0 +1,63 @@
+From 19888b7ee52ffee74a874ad622f44ed5f9706e51 Mon Sep 17 00:00:00 2001
+From: Sujith Manoharan <c_manoha@xxxxxxxxxxxxxxxx>
+Date: Mon, 15 Oct 2012 16:43:41 +0530
+Subject: [PATCH] cfg80211: Disallow HT/WEP in IBSS mode
+
+Signed-off-by: Sujith Manoharan <c_manoha@xxxxxxxxxxxxxxxx>
+---
+ net/wireless/nl80211.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -690,7 +690,7 @@ static int nl80211_parse_key(struct genl
+ 
+ static struct cfg80211_cached_keys *
+ nl80211_parse_connkeys(struct cfg80211_registered_device *rdev,
+-		       struct nlattr *keys)
++		       struct nlattr *keys, bool *no_ht)
+ {
+ 	struct key_parse parse;
+ 	struct nlattr *key;
+@@ -733,6 +733,12 @@ nl80211_parse_connkeys(struct cfg80211_r
+ 		result->params[parse.idx].key_len = parse.p.key_len;
+ 		result->params[parse.idx].key = result->data[parse.idx];
+ 		memcpy(result->data[parse.idx], parse.p.key, parse.p.key_len);
++
++		if (result->params[parse.idx].cipher == WLAN_CIPHER_SUITE_WEP40 ||
++		    result->params[parse.idx].cipher == WLAN_CIPHER_SUITE_WEP104) {
++			if (no_ht)
++				*no_ht = true;
++		}
+ 	}
+ 
+ 	return result;
+@@ -5318,10 +5324,18 @@ static int nl80211_join_ibss(struct sk_b
+ 		return -EINVAL;
+ 
+ 	if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) {
++		bool no_ht = false;
++
+ 		connkeys = nl80211_parse_connkeys(rdev,
+-					info->attrs[NL80211_ATTR_KEYS]);
++					  info->attrs[NL80211_ATTR_KEYS],
++					  &no_ht);
+ 		if (IS_ERR(connkeys))
+ 			return PTR_ERR(connkeys);
++
++		if ((ibss.channel_type != NL80211_CHAN_NO_HT) && no_ht) {
++			kfree(connkeys);
++			return -EINVAL;
++		}
+ 	}
+ 
+ 	ibss.control_port =
+@@ -5621,7 +5635,7 @@ static int nl80211_connect(struct sk_buf
+ 
+ 	if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) {
+ 		connkeys = nl80211_parse_connkeys(rdev,
+-					info->attrs[NL80211_ATTR_KEYS]);
++					  info->attrs[NL80211_ATTR_KEYS], NULL);
+ 		if (IS_ERR(connkeys))
+ 			return PTR_ERR(connkeys);
+ 	}
-- 
1.7.11.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux