summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle McMartin <kyle@redhat.com>2011-02-03 09:31:44 -0500
committerKyle McMartin <kyle@redhat.com>2011-02-03 09:32:19 -0500
commit928e7a877db21a1ecc903d6394d5ffd3fd053d5e (patch)
treee46359fc6b00e38b122849398af41551b15202e1
parentcacb6d3ebab080976220899f4ffaf2c1027fe534 (diff)
downloadkernel-928e7a877db21a1ecc903d6394d5ffd3fd053d5e.tar.gz
kernel-928e7a877db21a1ecc903d6394d5ffd3fd053d5e.tar.xz
kernel-928e7a877db21a1ecc903d6394d5ffd3fd053d5e.zip
snapshot 2.6.38-rc3-git2
and an ath5k fix from sgruszka@/nick.
-rw-r--r--ath5k-fix-fast-channel-change.patch213
-rw-r--r--kernel.spec11
-rw-r--r--sources2
3 files changed, 224 insertions, 2 deletions
diff --git a/ath5k-fix-fast-channel-change.patch b/ath5k-fix-fast-channel-change.patch
new file mode 100644
index 000000000..cb1cbf392
--- /dev/null
+++ b/ath5k-fix-fast-channel-change.patch
@@ -0,0 +1,213 @@
+From sgruszka@redhat.com Thu Feb 3 07:58:52 2011
+Date: Thu, 3 Feb 2011 13:58:51 +0100
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+To: kernel@lists.fedoraproject.org
+Cc: Kyle McMartin <kmcmartin@redhat.com>
+Subject: [PATCH F-15] ath5k: fix fast channel change
+Message-ID: <20110203125134.GA4515@redhat.com>
+
+From: Nick Kossifidis <mickflemm@gmail.com>
+
+ Fast channel change fixes:
+
+ a) Always set OFDM timings
+ b) Don't re-activate PHY
+ c) Enable only NF calibration, not AGC
+
+Resolves:
+https://bugzilla.redhat.com/show_bug.cgi?id=672778
+
+---
+ drivers/net/wireless/ath/ath5k/phy.c | 142 +++++++++++++++++++++-------------
+ 1 files changed, 87 insertions(+), 55 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
+index 78c26fd..d673ab2 100644
+--- a/drivers/net/wireless/ath/ath5k/phy.c
++++ b/drivers/net/wireless/ath/ath5k/phy.c
+@@ -282,6 +282,34 @@ int ath5k_hw_phy_disable(struct ath5k_hw *ah)
+ return 0;
+ }
+
++/*
++ * Wait for synth to settle
++ */
++static void ath5k_hw_wait_for_synth(struct ath5k_hw *ah,
++ struct ieee80211_channel *channel)
++{
++ /*
++ * On 5211+ read activation -> rx delay
++ * and use it (100ns steps).
++ */
++ if (ah->ah_version != AR5K_AR5210) {
++ u32 delay;
++ delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) &
++ AR5K_PHY_RX_DELAY_M;
++ delay = (channel->hw_value & CHANNEL_CCK) ?
++ ((delay << 2) / 22) : (delay / 10);
++ if (ah->ah_bwmode == AR5K_BWMODE_10MHZ)
++ delay = delay << 1;
++ if (ah->ah_bwmode == AR5K_BWMODE_5MHZ)
++ delay = delay << 2;
++ /* XXX: /2 on turbo ? Let's be safe
++ * for now */
++ udelay(100 + delay);
++ } else {
++ mdelay(1);
++ }
++}
++
+
+ /**********************\
+ * RF Gain optimization *
+@@ -3237,6 +3265,13 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ /* Failed */
+ if (i >= 100)
+ return -EIO;
++
++ /* Set channel and wait for synth */
++ ret = ath5k_hw_channel(ah, channel);
++ if (ret)
++ return ret;
++
++ ath5k_hw_wait_for_synth(ah, channel);
+ }
+
+ /*
+@@ -3251,13 +3286,53 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ if (ret)
+ return ret;
+
++ /* Write OFDM timings on 5212*/
++ if (ah->ah_version == AR5K_AR5212 &&
++ channel->hw_value & CHANNEL_OFDM) {
++
++ ret = ath5k_hw_write_ofdm_timings(ah, channel);
++ if (ret)
++ return ret;
++
++ /* Spur info is available only from EEPROM versions
++ * greater than 5.3, but the EEPROM routines will use
++ * static values for older versions */
++ if (ah->ah_mac_srev >= AR5K_SREV_AR5424)
++ ath5k_hw_set_spur_mitigation_filter(ah,
++ channel);
++ }
++
++ /* If we used fast channel switching
++ * we are done, release RF bus and
++ * fire up NF calibration.
++ *
++ * Note: Only NF calibration due to
++ * channel change, not AGC calibration
++ * since AGC is still running !
++ */
++ if (fast) {
++ /*
++ * Release RF Bus grant
++ */
++ AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ,
++ AR5K_PHY_RFBUS_REQ_REQUEST);
++
++ /*
++ * Start NF calibration
++ */
++ AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
++ AR5K_PHY_AGCCTL_NF);
++
++ return ret;
++ }
++
+ /*
+ * For 5210 we do all initialization using
+ * initvals, so we don't have to modify
+ * any settings (5210 also only supports
+ * a/aturbo modes)
+ */
+- if ((ah->ah_version != AR5K_AR5210) && !fast) {
++ if (ah->ah_version != AR5K_AR5210) {
+
+ /*
+ * Write initial RF gain settings
+@@ -3276,22 +3351,6 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ if (ret)
+ return ret;
+
+- /* Write OFDM timings on 5212*/
+- if (ah->ah_version == AR5K_AR5212 &&
+- channel->hw_value & CHANNEL_OFDM) {
+-
+- ret = ath5k_hw_write_ofdm_timings(ah, channel);
+- if (ret)
+- return ret;
+-
+- /* Spur info is available only from EEPROM versions
+- * greater than 5.3, but the EEPROM routines will use
+- * static values for older versions */
+- if (ah->ah_mac_srev >= AR5K_SREV_AR5424)
+- ath5k_hw_set_spur_mitigation_filter(ah,
+- channel);
+- }
+-
+ /*Enable/disable 802.11b mode on 5111
+ (enable 2111 frequency converter + CCK)*/
+ if (ah->ah_radio == AR5K_RF5111) {
+@@ -3322,47 +3381,20 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ */
+ ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT);
+
++ ath5k_hw_wait_for_synth(ah, channel);
++
+ /*
+- * On 5211+ read activation -> rx delay
+- * and use it.
++ * Perform ADC test to see if baseband is ready
++ * Set tx hold and check adc test register
+ */
+- if (ah->ah_version != AR5K_AR5210) {
+- u32 delay;
+- delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) &
+- AR5K_PHY_RX_DELAY_M;
+- delay = (channel->hw_value & CHANNEL_CCK) ?
+- ((delay << 2) / 22) : (delay / 10);
+- if (ah->ah_bwmode == AR5K_BWMODE_10MHZ)
+- delay = delay << 1;
+- if (ah->ah_bwmode == AR5K_BWMODE_5MHZ)
+- delay = delay << 2;
+- /* XXX: /2 on turbo ? Let's be safe
+- * for now */
+- udelay(100 + delay);
+- } else {
+- mdelay(1);
+- }
+-
+- if (fast)
+- /*
+- * Release RF Bus grant
+- */
+- AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ,
+- AR5K_PHY_RFBUS_REQ_REQUEST);
+- else {
+- /*
+- * Perform ADC test to see if baseband is ready
+- * Set tx hold and check adc test register
+- */
+- phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1);
+- ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1);
+- for (i = 0; i <= 20; i++) {
+- if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10))
+- break;
+- udelay(200);
+- }
+- ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1);
++ phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1);
++ ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1);
++ for (i = 0; i <= 20; i++) {
++ if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10))
++ break;
++ udelay(200);
+ }
++ ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1);
+
+ /*
+ * Start automatic gain control calibration
diff --git a/kernel.spec b/kernel.spec
index 0f2de1455..a3f702802 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -84,7 +84,7 @@ Summary: The Linux kernel
# The rc snapshot level
%define rcrev 3
# The git snapshot level
-%define gitrev 1
+%define gitrev 2
# Set rpm version accordingly
%define rpmversion 2.6.%{upstream_sublevel}
%endif
@@ -741,6 +741,8 @@ Patch12436: hfsplus-05-fix-failed-mount.patch
# rhbz#607499
Patch12437: atl1c-add-missing-pci-id.patch
+Patch12438: ath5k-fix-fast-channel-change.patch
+
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1365,6 +1367,9 @@ ApplyPatch hfsplus-05-fix-failed-mount.patch
# rhbz#607499
ApplyPatch atl1c-add-missing-pci-id.patch
+# rhbz#672778
+ApplyPatch ath5k-fix-fast-channel-change.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -1977,6 +1982,10 @@ fi
# ||----w |
# || ||
%changelog
+* Thu Feb 03 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc3.git2.1
+- Linux 2.6.38-rc3-git2 snapshot
+- [sgruszka] ath5k: fix fast channel change (#672778)
+
* Wed Feb 02 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc3.git1.1
- Linux 2.6.38-rc3-git1 snapshot.
diff --git a/sources b/sources
index be417587b..88c295b3a 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
c8ee37b4fdccdb651e0603d35350b434 linux-2.6.37.tar.bz2
5d036903b2be555ee94078e5ef594c1d patch-2.6.38-rc3.bz2
-8e8f474b26d54ab3ce15f460e28cc8e8 patch-2.6.38-rc3-git1.bz2
+505f325319e386793740971d0fe27d2c patch-2.6.38-rc3-git2.bz2