Fix the way ANI is being handled for ar9100 and ar9340
v2 cover Fix the way ANI is being handled for ar9100 and ar9340
Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls to ath9k_hw_ani_setup and ath9k_hw_ani_init). Since ath9k_hw_ani_setup is not called ah->config.ani_poll_interval is never initialized (i.e. it is always zero) and ath_ani_calibrate always executes ANI procedures (over uninitialized ANI parameters).
Moreover, ath_ani_calibrate is being called each 1ms becausecommon->ani.timer is set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
Also, this pacthset enables ANI for ar9100 - ANI was always performed
for this chip, but this patch fixes the fact that it was performed over uninitialized data.
All comments and suggestions are appreciated.
Thanks.
Nikolay Martynov (4):
ath9k: trivial: cosmetic fix in calibration debug log
ath9k: change calibration debug log to output all calibration types
ath9k: use config.enable_ani to check if ani should be performed
ath9k: enable ANI for ar9100 chips
drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 +- drivers/net/wireless/ath/ath9k/ar9003_calib.c | 2 +- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 ++- drivers/net/wireless/ath/ath9k/hw.c | 12 ++++++++---- drivers/net/wireless/ath/ath9k/main.c | 12 +++++++----- 5 files changed, 19 insertions(+), 12 deletions(-)
Signature · 1 line
1.7.4.1
PATCH v2 1/4 ath9k: trivial: cosmetic fix in calibration debug log
Add missed space and change typo in calibration debugging log.
--- drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 +- drivers/net/wireless/ath/ath9k/ar9003_calib.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/ar9002_calib.c +1 -1
@@ -203,7 +203,7 @@ static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %d iq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
drivers/net/wireless/ath/ath9k/ar9003_calib.c +1 -1
@@ -225,7 +225,7 @@ static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %diq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
Signature · 1 line
1.7.4.1
PATCH v2 1/4 ath9k: trivial: cosmetic fix in calibration debug log
Nikolay,
Minor nit:
Quoted 13 lines · Nikolay Martynov
?Add missed space and change typo in calibration debugging log.
Signed-off-by Nikolay Martynov <[email protected]>---
?drivers/net/wireless/ath/ath9k/ar9002_calib.c | ? ?2 +- ?drivers/net/wireless/ath/ath9k/ar9003_calib.c | ? ?2 +- ?2 files changed, 2 insertions(+), 2 deletions(-)drivers/net/wireless/ath/ath9k/ar9003_calib.c +0
-0
drivers/net/wireless/ath/ath9k/ar9003_calib.c static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) · line 228
Quoted 5 lines
drivers/net/wireless/ath/ath9k/ar9003_calib.c +1
-1@@ -225,7 +225,7 @@ static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) ? ? ? ? ? ? ? ? ? ? ? ?i); ? ? ? ? ? ? ? ?ath_dbg(common, ATH_DBG_CALIBRATE, - ? ? ? ? ? ? ? ? ? ? ? "Orignal: Chn %diq_corr_meas = 0x%08x\n", + ? ? ? ? ? ? ? ? ? ? ? "Original: Chn %diq_corr_meas = 0x%08x\n",
You haven't put a space after the %d like you did in the other file.
Thanks,
Signature · 5 lines
Julian Calaby Email: julian.calaby at gmail.com Profile: http://www.google.com/profiles/julian.calaby/ .Plan: http://sites.google.com/site/juliancalaby/
PATCH v2 1/4 ath9k: trivial: cosmetic fix in calibration debug log
Oh, sorry, shame on me... I'll resend this one. Other patches in this set should not depend on this.
2011/11/27 Julian Calaby <[email protected]>:
Quoted 35 lines
Nikolay,
Minor nit:
Quoted 13 lines · Nikolay Martynov
?Add missed space and change typo in calibration debugging log.
Signed-off-by Nikolay Martynov <[email protected]>---
?drivers/net/wireless/ath/ath9k/ar9002_calib.c | ? ?2 +- ?drivers/net/wireless/ath/ath9k/ar9003_calib.c | ? ?2 +- ?2 files changed, 2 insertions(+), 2 deletions(-)drivers/net/wireless/ath/ath9k/ar9003_calib.c +0
-0drivers/net/wireless/ath/ath9k/ar9003_calib.c static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) · line 228
Quoted 5 lines
drivers/net/wireless/ath/ath9k/ar9003_calib.c +1
-1@@ -225,7 +225,7 @@ static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) ? ? ? ? ? ? ? ? ? ? ? ?i); ? ? ? ? ? ? ? ?ath_dbg(common, ATH_DBG_CALIBRATE, - ? ? ? ? ? ? ? ? ? ? ? "Orignal: Chn %diq_corr_meas = 0x%08x\n", + ? ? ? ? ? ? ? ? ? ? ? "Original: Chn %diq_corr_meas = 0x%08x\n",You haven't put a space after the %d like you did in the other file.
Thanks,
--
Julian CalabyEmail: julian.calaby at gmail.com
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/
Signature · 3 lines
Truthfully yours, Martynov Nikolay. Email: mar.kolya at gmail.com
PATCH v3 1/1 ath9k: trivial: cosmetic fix in calibration debug log
In reply to Julian CalabyAdd missed space and change typo in calibration debugging log.
--- drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 +- drivers/net/wireless/ath/ath9k/ar9003_calib.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/ar9002_calib.c +1 -1
@@ -203,7 +203,7 @@ static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %d iq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
drivers/net/wireless/ath/ath9k/ar9003_calib.c +1 -1
@@ -225,7 +225,7 @@ static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %d iq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
Signature · 1 line
1.7.4.1
PATCH v2 2/4 ath9k: change calibration debug log to output all calibration types
In reply to Nikolay Martynov To help debugging write a log entry when long calibration, short
calibration or ANI is performed.
--- drivers/net/wireless/ath/ath9k/main.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
drivers/net/wireless/ath/ath9k/main.c +5 -3
@@ -561,7 +561,6 @@ void ath_ani_calibrate(unsigned long data)/* Long calibration runs independently of short calibration. */ if ((timestamp - common->ani.longcal_timer) >= long_cal_interval) { longcal = true; -ath_dbg (common,ATH_DBG_ANI ,"longcal @%lu\n" , jiffies); common->ani.longcal_timer = timestamp; }
@@ -569,8 +568,6 @@ void ath_ani_calibrate(unsigned long data)if (!common->ani.caldone) {if ((timestamp - common->ani.shortcal_timer) >= short_cal_interval) { shortcal = true; -ath_dbg (common,ATH_DBG_ANI , -"shortcal @%lu\n" , jiffies); common->ani.shortcal_timer = timestamp; common->ani.resetcal_timer = timestamp; }
@@ -605,6 +602,11 @@ void ath_ani_calibrate(unsigned long data) ah->rxchainmask, longcal); } +ath_dbg (common,ATH_DBG_ANI , +"Calibration @%lu finished: %s %s %s, caldone: %s\n" , jiffies, + longcal ?"long" :"" , shortcal ?"short" :"" , + aniflag ?"ani" :"" , common->ani.caldone ?"true" :"false" ); +ath9k_ps_restore (sc); set_timer:
Signature · 1 line
1.7.4.1
PATCH v2 3/4 ath9k: use config.enable_ani to check if ani should be performed
In reply to Nikolay Martynov Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls to ath9k_hw_ani_setup and ath9k_hw_ani_init). Since ath9k_hw_ani_setup is not called ah->config.ani_poll_interval is never initialized (i.e. it is always zero) and ath_ani_calibrate always executes ANI procedures (over uninitialized ANI parameters).
Moreover, ath_ani_calibrate is being called each 1ms becausecommon->ani.timer is set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
config.enable_ani is initialized to true by default. This patch sets
it to false for ar9100 and ar9340.
--- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 ++- drivers/net/wireless/ath/ath9k/hw.c | 12 ++++++++---- drivers/net/wireless/ath/ath9k/main.c | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-)
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2 -1
@@ -808,7 +808,8 @@ void ath9k_htc_ani_work(struct work_struct *work) }/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { +if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { aniflag = true; common->ani.checkani_timer = timestamp; }
drivers/net/wireless/ath/ath9k/hw.c +8 -4
@@ -504,10 +504,10 @@ static int ath9k_hw_post_init(struct ath_hw *ah)return ecode; } -if (!AR_SREV_9100 (ah) && !AR_SREV_9340 (ah)) { -ath9k_hw_ani_setup (ah); -ath9k_hw_ani_init (ah); - } +if (ah->config.enable_ani) { +ath9k_hw_ani_setup (ah); +ath9k_hw_ani_init (ah); + }return 0 ; }
@@ -610,6 +610,10 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (!AR_SREV_9300_20_OR_LATER (ah)) ah->ani_function &= ~ATH9K_ANI_MRC_CCK ; +/* disable ANI for 9100 and 9340 */ +if (AR_SREV_9100 (ah) ||AR_SREV_9340 (ah)) + ah->config.enable_ani = false; +ath9k_hw_init_mode_regs (ah);if (!ah->is_pciexpress)
drivers/net/wireless/ath/ath9k/main.c +2 -2
@@ -581,8 +581,8 @@ void ath_ani_calibrate(unsigned long data) }/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >= - ah->config.ani_poll_interval) { +if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >= ah->config.ani_poll_interval) { aniflag = true; common->ani.checkani_timer = timestamp; }
Signature · 1 line
1.7.4.1
PATCH v2 4/4 ath9k: enable ANI for ar9100 chips
In reply to Nikolay MartynovEnable ANI for ar9100 since it seems to be working fine (and as a matter of fact ANI was always performed for ar9100 since code which was supposed to disable it didn't achieve this goal). This patch sets config.enable_ani to default (true) value for ar9100.
--- drivers/net/wireless/ath/ath9k/hw.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/hw.c +2 -2
@@ -610,8 +610,8 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (!AR_SREV_9300_20_OR_LATER (ah)) ah->ani_function &= ~ATH9K_ANI_MRC_CCK ; -/* disable ANI for 9100 and 9340 */ -if (AR_SREV_9100 (ah) ||AR_SREV_9340 (ah)) +/* disable ANI for 9340 */ +if (AR_SREV_9340 (ah)) ah->config.enable_ani = false;ath9k_hw_init_mode_regs (ah);
Signature · 1 line
1.7.4.1
v2 cover Fix the way ANI is being handled for ar9100 and ar9340
In reply to Nikolay MartynovHi,
The reference HAL disables ANI for AR9130. I'm still waiting for an answer as to why.
Thanks,
Adrian
v2 cover Fix the way ANI is being handled for ar9100 and ar9340
.. thinking about it, can you please log some data with ANI disabled and enabled, so we can see exactly what is going on?
Something missing (from both freebsd and linux) is visibility into exactly what the ANI code is doing. You can turn on logging to see when the parameters are twiddled, but there's no easy way to log and graph what effect the ANI parameters are having.
FreeBSD is slightly ahead here - I can log the tx/rx frames, ofdm/cck phy error rate and then when the parameters are changed; but the driver/HAL doesn't (currently) export what those values are to the athstats program.
I think we'd all be better off if we had some tools to graph/analyse this kind of stuff; we could then figure out if it's having any kind of effect.
Thanks for chasing this up! I'm currently hacking on my openwrt (sort of) inspired build system for FreeBSD, targetting an AR913x device. So this is quite relevant to me at the present moment. :)
Adrian
v2 cover Fix the way ANI is being handled for ar9100 and ar9340
Hi.
I have a router with ar9102 and I did some logging on ANI before. It
does display some changing values overtime (an it is actually possible to turn on this logging via debug sysfs file). Moreover, as I've mentioned in comments to patch - ANI was always enabled for those devices in ath9k driver, but it was not initialized properly during card initialization. So I think my patch should not make things worse then it was before for any hardware. And it might make them better for some. I personally was running my router with this patch for more then week now without any problems, so I do not think I can tell that ANI part is missing from my hardware. Also, openwrt recently incorporated similar thing as a separate patch for 9100 devices.
I'll try to do a bit more extensive logging later.
2011/11/27 Adrian Chadd <[email protected]>:
Quoted 25 lines
.. thinking about it, can you please log some data with ANI disabled and enabled, so we can see exactly what is going on?
Something missing (from both freebsd and linux) is visibility into exactly what the ANI code is doing. You can turn on logging to see when the parameters are twiddled, but there's no easy way to log and graph what effect the ANI parameters are having.
FreeBSD is slightly ahead here - I can log the tx/rx frames, ofdm/cck phy error rate and then when the parameters are changed; but the driver/HAL doesn't (currently) export what those values are to the athstats program.
I think we'd all be better off if we had some tools to graph/analyse this kind of stuff; we could then figure out if it's having any kind of effect.
Thanks for chasing this up! I'm currently hacking on my openwrt (sort of) inspired build system for FreeBSD, targetting an AR913x device. So this is quite relevant to me at the present moment. :)
Adrian
Signature · 3 lines
Truthfully yours, Martynov Nikolay. Email: mar.kolya at gmail.com
v2 cover Fix the way ANI is being handled for ar9100 and ar9340
In reply to Nikolay MartynovQuoted 17 lines · Nikolay Martynov
Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls toath9k_hw_ani_setupandath9k_hw_ani_init). Sinceath9k_hw_ani_setupis not calledah->config.ani_poll_intervalis never initialized (i.e. it is always zero) andath_ani_calibratealways executes ANI procedures (over uninitialized ANI parameters).
Moreover,ath_ani_calibrateis being called each 1ms becausecommon->ani.timeris set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
Also, this pacthset enables ANI for ar9100 - ANI was always performed
for this chip, but this patch fixes the fact that it was performed over uninitialized data.
Quoted 8 lines
All comments and suggestions are appreciated.
Thanks.Nikolay Martynov (4):
ath9k: trivial: cosmetic fix in calibration debug log
ath9k: change calibration debug log to output all calibration types
ath9k: use config.enable_ani to check if ani should be performed
ath9k: enable ANI for ar9100 chips
More than one of the patches in this series either adds indentation with only spaces or even changes existing indentation with tabs to spaces. Please don't do this.
I'm dropping this series for the above reason. Please feel free to fix your editor if necessary and to revise the patches to avoid needless and/or inappropriate whitespace changes or additions.
John
Signature · 2 lines
John W. Linville Someday the world will need a hero, and you linville at tuxdriver.com might be all we have. Be ready.
v3 cover Fix the way ANI is being handled for ar9100 and ar9340
I'm really sorry that I missed all those tabs-vs-spaces. Please accept my apologies. I think I've now fixed all problems and checkpatch.pl doesn't report
any issues. Please let me know if there are still style problems.
Thanks!
Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls to ath9k_hw_ani_setup and ath9k_hw_ani_init). Since ath9k_hw_ani_setup is not called ah->config.ani_poll_interval is never initialized (i.e. it is always zero) and ath_ani_calibrate always executes ANI procedures (over uninitialized ANI parameters).
Moreover, ath_ani_calibrate is being called each 1ms becausecommon->ani.timer is set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
Also, this patchset enables ANI for ar9100 - ANI was always performed
for this chip, but this patch fixes the fact that it was performed over uninitialized data.
All comments and suggestions are appreciated.
Thanks.
Nikolay Martynov (4):
ath9k: trivial: cosmetic fix in calibration debug log
ath9k: change calibration debug log to output all calibration types
ath9k: use config.enable_ani to check if ani should be performed
ath9k: enable ANI for ar9100 chips
drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 +- drivers/net/wireless/ath/ath9k/ar9003_calib.c | 2 +- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 ++- drivers/net/wireless/ath/ath9k/hw.c | 6 +++++- drivers/net/wireless/ath/ath9k/main.c | 13 ++++++++----- 5 files changed, 17 insertions(+), 9 deletions(-)
Signature · 1 line
1.7.4.1
PATCH v3 1/4 ath9k: trivial: cosmetic fix in calibration debug log
Add missed space and change typo in calibration debugging log.
--- drivers/net/wireless/ath/ath9k/ar9002_calib.c | 2 +- drivers/net/wireless/ath/ath9k/ar9003_calib.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/ar9002_calib.c +1 -1
@@ -203,7 +203,7 @@ static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %d iq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
drivers/net/wireless/ath/ath9k/ar9003_calib.c +1 -1
@@ -225,7 +225,7 @@ static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains) i);ath_dbg (common,ATH_DBG_CALIBRATE , -"Orignal: Chn %diq_corr_meas = 0x%08x\n" , +"Original: Chn %d iq_corr_meas = 0x%08x\n" , i, ah->totalIqCorrMeas[i]); iqCorrNeg =0 ;
Signature · 1 line
1.7.4.1
PATCH v3 2/4 ath9k: change calibration debug log to output all calibration types
In reply to Nikolay Martynov To help debugging write a log entry when long calibration, short
calibration or ANI is performed.
--- drivers/net/wireless/ath/ath9k/main.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
drivers/net/wireless/ath/ath9k/main.c +5 -3
@@ -561,7 +561,6 @@ void ath_ani_calibrate(unsigned long data)/* Long calibration runs independently of short calibration. */ if ((timestamp - common->ani.longcal_timer) >= long_cal_interval) { longcal = true; -ath_dbg (common,ATH_DBG_ANI ,"longcal @%lu\n" , jiffies); common->ani.longcal_timer = timestamp; }
@@ -569,8 +568,6 @@ void ath_ani_calibrate(unsigned long data)if (!common->ani.caldone) {if ((timestamp - common->ani.shortcal_timer) >= short_cal_interval) { shortcal = true; -ath_dbg (common,ATH_DBG_ANI , -"shortcal @%lu\n" , jiffies); common->ani.shortcal_timer = timestamp; common->ani.resetcal_timer = timestamp; }
@@ -605,6 +602,11 @@ void ath_ani_calibrate(unsigned long data) ah->rxchainmask, longcal); } +ath_dbg (common,ATH_DBG_ANI , +"Calibration @%lu finished: %s %s %s, caldone: %s\n" , jiffies, + longcal ?"long" :"" , shortcal ?"short" :"" , + aniflag ?"ani" :"" , common->ani.caldone ?"true" :"false" ); +ath9k_ps_restore (sc); set_timer:
Signature · 1 line
1.7.4.1
PATCH v3 3/4 ath9k: use config.enable_ani to check if ani should be performed
In reply to Nikolay Martynov Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls to ath9k_hw_ani_setup and ath9k_hw_ani_init). Since ath9k_hw_ani_setup is not called ah->config.ani_poll_interval is never initialized (i.e. it is always zero) and ath_ani_calibrate always executes ANI procedures (over uninitialized ANI parameters).
Moreover, ath_ani_calibrate is being called each 1ms becausecommon->ani.timer is set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
config.enable_ani is initialized to true by default. This patch sets
it to false for ar9100 and ar9340.
--- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 ++- drivers/net/wireless/ath/ath9k/hw.c | 6 +++++- drivers/net/wireless/ath/ath9k/main.c | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-)
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2 -1
@@ -808,7 +808,8 @@ void ath9k_htc_ani_work(struct work_struct *work) }/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { +if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { aniflag = true; common->ani.checkani_timer = timestamp; }
drivers/net/wireless/ath/ath9k/hw.c +5 -1
@@ -504,7 +504,7 @@ static int ath9k_hw_post_init(struct ath_hw *ah)return ecode; } -if (!AR_SREV_9100 (ah) && !AR_SREV_9340 (ah)) { +if (ah->config.enable_ani) {ath9k_hw_ani_setup (ah);ath9k_hw_ani_init (ah); }
@@ -610,6 +610,10 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (!AR_SREV_9300_20_OR_LATER (ah)) ah->ani_function &= ~ATH9K_ANI_MRC_CCK ; +/* disable ANI for 9100 and 9340 */ +if (AR_SREV_9100 (ah) ||AR_SREV_9340 (ah)) + ah->config.enable_ani = false; +ath9k_hw_init_mode_regs (ah);if (!ah->is_pciexpress)
drivers/net/wireless/ath/ath9k/main.c +3 -2
@@ -581,8 +581,9 @@ void ath_ani_calibrate(unsigned long data) }/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >= - ah->config.ani_poll_interval) { +if (sc->sc_ah->config.enable_ani + && (timestamp - common->ani.checkani_timer) >= + ah->config.ani_poll_interval) { aniflag = true; common->ani.checkani_timer = timestamp; }
Signature · 1 line
1.7.4.1
Re: [PATCH v3 3/4] ath9k: use config.enable_ani to check if ani should be performed
Quoted 28 lines · Nikolay Martynov
Currently in ath9k code there is an attempt which is meant to
disable ANI for ar9100 and ar9340. But it doesn't really achieve this. All it does is disable ANI init and setup (i.e. calls toath9k_hw_ani_setupandath9k_hw_ani_init). Sinceath9k_hw_ani_setupis not calledah->config.ani_poll_intervalis never initialized (i.e. it is always zero) andath_ani_calibratealways executes ANI procedures (over uninitialized ANI parameters).
Moreover,ath_ani_calibrateis being called each 1ms becausecommon->ani.timeris set to zero interval because ah->config.ani_poll_interval==0 (and thus smallest value of all intervals). Normally it should not be called this often.
This patch changes the code so config.enable_ani is used to check if
ANI should be performed.
config.enable_ani is initialized to true by default. This patch sets
it to false for ar9100 and ar9340.Signed-off-by Nikolay Martynov <[email protected]>--- drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 ++- drivers/net/wireless/ath/ath9k/hw.c | 6 +++++- drivers/net/wireless/ath/ath9k/main.c | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-)drivers/net/wireless/ath/ath9k/htc_drv_main.c +0
-0
drivers/net/wireless/ath/ath9k/htc_drv_main.c void ath9k_htc_ani_work(struct work_struct *work) · line 815
Quoted 9 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2
-1@@ -808,7 +808,8 @@ void ath9k_htc_ani_work(struct work_struct *work) }/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { +if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { aniflag = true; common->ani.checkani_timer = timestamp; }
Does not compile, there is no 'sc' variable, use ah->config.enable_ani.
- Felix
Re: [PATCH v3 3/4] ath9k: use config.enable_ani to check if ani should be performed
2011/12/2 Felix Fietkau <[email protected]>:
Quoted 8 lines · Nikolay Martynov
Quoted 7 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c +0
-0@@ -808,7 +808,8 @@ void ath9k_htc_ani_work(struct work_struct *work) }
Quoted 8 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c void ath9k_htc_ani_work(struct work_struct *work) · line 815
Quoted 7 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2
-1/* Verify whether we must check ANI */ - if ((timestamp - common->ani.checkani_timer) >= ATH_ANI_POLLINTERVAL) { + if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >= ATH_ANI_POLLINTERVAL) { aniflag = true; common->ani.checkani_timer = timestamp; }Does not compile, there is no 'sc' variable, use
ah->config.enable_ani.
Hmm... weird that it didn't fail when I applied this to openwrt.
Anyway, thanks for letting me know, I'll send an updated patch!
Signature · 3 lines
Truthfully yours, Martynov Nikolay. Email: [email protected]
Re: [PATCH v3 3/4] ath9k: use config.enable_ani to check if ani should be performed
Quoted 18 lines · Nikolay Martynov
2011/12/2 Felix Fietkau <[email protected]>:
Quoted 8 lines · Nikolay Martynov
Quoted 7 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c +0
-0@@ -808,7 +808,8 @@ void ath9k_htc_ani_work(struct work_struct *work) }Quoted 8 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c void ath9k_htc_ani_work(struct work_struct *work) · line 815
Quoted 7 lines
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2
-1/* Verify whether we must check ANI */ -if ((timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { +if (sc->sc_ah->config.enable_ani && + (timestamp - common->ani.checkani_timer) >=ATH_ANI_POLLINTERVAL ) { aniflag = true; common->ani.checkani_timer = timestamp; }Does not compile, there is no 'sc' variable, use
ah->config.enable_ani.
Quoted 2 lines
Hmm... weird that it didn't fail when I applied this to openwrt.
Anyway, thanks for letting me know, I'll send an updated patch!
Maybe you didn't enable kmod-ath9k-htc - if that one's disabled, it does not build this source file.
- Felix
PATCH v3 4/4 ath9k: enable ANI for ar9100 chips
In reply to Nikolay MartynovEnable ANI for ar9100 since it seems to be working fine (and as a matter of fact ANI was always performed for ar9100 since code which was supposed to disable it didn't achieve this goal). This patch sets config.enable_ani to default (true) value for ar9100.
--- drivers/net/wireless/ath/ath9k/hw.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/ath/ath9k/hw.c +2 -2
@@ -610,8 +610,8 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (!AR_SREV_9300_20_OR_LATER (ah)) ah->ani_function &= ~ATH9K_ANI_MRC_CCK ; -/* disable ANI for 9100 and 9340 */ -if (AR_SREV_9100 (ah) ||AR_SREV_9340 (ah)) +/* disable ANI for 9340 */ +if (AR_SREV_9340 (ah)) ah->config.enable_ani = false;ath9k_hw_init_mode_regs (ah);
Signature · 1 line
1.7.4.1