linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode
@ 2010-11-23 19:04 Nick Kossifidis
  2010-11-23 19:21 ` [ath5k-devel] " Luis R. Rodriguez
  0 siblings, 1 reply; 4+ messages in thread
From: Nick Kossifidis @ 2010-11-23 19:04 UTC (permalink / raw)
  To: ath5k-devel, linux-wireless; +Cc: linville, me, mcgrof, jirislaby, nbd, br1

 * On turbo mode increase PHY settling times, note that
 we only increase switch settling time on AR5212 as indicated
 by initvals.

 * A few cleanups: Move frame control settings for AR5210 from
 reset_tx_queue to tweak_initvals and remove phy_scal settings
 from tweak_initvals (we tweak them alread on set_sleep_clock).

 Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
---
 drivers/net/wireless/ath/ath5k/ath5k.h |   14 +++++++--
 drivers/net/wireless/ath/ath5k/qcu.c   |   13 --------
 drivers/net/wireless/ath/ath5k/reg.h   |    2 +
 drivers/net/wireless/ath/ath5k/reset.c |   52 ++++++++++++++++++++++++--------
 4 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
index c953544..005cad0 100644
--- a/drivers/net/wireless/ath/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath/ath5k/ath5k.h
@@ -259,15 +259,23 @@
 #define	AR5K_INIT_TX_LAT_BG			384
 /* Tx latency for 40MHz (turbo) operation (min ?) */
 #define	AR5K_INIT_TX_LAT_MIN			32
+/* Default Tx/Rx latencies (same for 5211)*/
+#define AR5K_INIT_TX_LATENCY_5210		54
+#define	AR5K_INIT_RX_LATENCY_5210		29
 
 /* Tx frame to Tx data start delay */
 #define AR5K_INIT_TXF2TXD_START_DEFAULT		14
 #define AR5K_INIT_TXF2TXD_START_DELAY_10MHZ	12
 #define AR5K_INIT_TXF2TXD_START_DELAY_5MHZ	13
 
-/* Default Tx/Rx latencies (same for 5211)*/
-#define AR5K_INIT_TX_LATENCY_5210		54
-#define	AR5K_INIT_RX_LATENCY_5210		29
+/* We need to increase PHY switch and agc settling time
+ * on turbo mode */
+#define	AR5K_SWITCH_SETTLING			5760
+#define	AR5K_SWITCH_SETTLING_TURBO		7168
+
+#define	AR5K_AGC_SETTLING			28
+/* 38 on 5210 but shouldn't matter */
+#define	AR5K_AGC_SETTLING_TURBO			37
 
 
 /* GENERIC CHIPSET DEFINITIONS */
diff --git a/drivers/net/wireless/ath/ath5k/qcu.c b/drivers/net/wireless/ath/ath5k/qcu.c
index f89bc94..00c4908 100644
--- a/drivers/net/wireless/ath/ath5k/qcu.c
+++ b/drivers/net/wireless/ath/ath5k/qcu.c
@@ -271,19 +271,6 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
 		ath5k_hw_reg_write(ah, (ah->ah_bwmode == AR5K_BWMODE_40MHZ) ?
 			AR5K_INIT_PROTO_TIME_CNTRL_TURBO :
 			AR5K_INIT_PROTO_TIME_CNTRL, AR5K_IFS1);
-		/* Set AR5K_PHY_SETTLING */
-		ath5k_hw_reg_write(ah, (ah->ah_bwmode == AR5K_BWMODE_40MHZ) ?
-			(ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F)
-			| 0x38 :
-			(ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F)
-			| 0x1C,
-			AR5K_PHY_SETTLING);
-		/* Set Frame Control Register */
-		ath5k_hw_reg_write(ah, (ah->ah_bwmode == AR5K_BWMODE_40MHZ) ?
-			(AR5K_PHY_FRAME_CTL_INI | AR5K_PHY_TURBO_MODE |
-			AR5K_PHY_TURBO_SHORT | 0x2020) :
-			(AR5K_PHY_FRAME_CTL_INI | 0x1020),
-			AR5K_PHY_FRAME_CTL_5210);
 	}
 
 	/*
diff --git a/drivers/net/wireless/ath/ath5k/reg.h b/drivers/net/wireless/ath/ath5k/reg.h
index 4d61061..dc213bb 100644
--- a/drivers/net/wireless/ath/ath5k/reg.h
+++ b/drivers/net/wireless/ath/ath5k/reg.h
@@ -2245,6 +2245,8 @@
 #define	AR5K_PHY_FRAME_CTL		(ah->ah_version == AR5K_AR5210 ? \
 					AR5K_PHY_FRAME_CTL_5210 : AR5K_PHY_FRAME_CTL_5211)
 /*---[5111+]---*/
+#define	AR5K_PHY_FRAME_CTL_WIN_LEN	0x00000003	/* Force window length (?) */
+#define	AR5K_PHY_FRAME_CTL_WIN_LEN_S	0
 #define	AR5K_PHY_FRAME_CTL_TX_CLIP	0x00000038	/* Mask for tx clip (?) */
 #define	AR5K_PHY_FRAME_CTL_TX_CLIP_S	3
 #define	AR5K_PHY_FRAME_CTL_PREP_CHINFO	0x00010000	/* Prepend chan info */
diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
index f9457f4..ee605cd 100644
--- a/drivers/net/wireless/ath/ath5k/reset.c
+++ b/drivers/net/wireless/ath/ath5k/reset.c
@@ -688,19 +688,6 @@ static void ath5k_hw_tweak_initval_settings(struct ath5k_hw *ah,
 		AR5K_REG_DISABLE_BITS(ah, AR5K_TXCFG,
 				AR5K_TXCFG_DCU_DBL_BUF_DIS);
 
-	/* Set DAC/ADC delays */
-	if (ah->ah_version == AR5K_AR5212) {
-		u32 scal;
-		struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom;
-		if (ah->ah_mac_version == (AR5K_SREV_AR2417 >> 4))
-			scal = AR5K_PHY_SCAL_32MHZ_2417;
-		else if (ee->ee_is_hb63)
-			scal = AR5K_PHY_SCAL_32MHZ_HB63;
-		else
-			scal = AR5K_PHY_SCAL_32MHZ;
-		ath5k_hw_reg_write(ah, scal, AR5K_PHY_SCAL);
-	}
-
 	/* Set fast ADC */
 	if ((ah->ah_radio == AR5K_RF5413) ||
 	(ah->ah_mac_version == (AR5K_SREV_AR2417 >> 4))) {
@@ -740,6 +727,45 @@ static void ath5k_hw_tweak_initval_settings(struct ath5k_hw *ah,
 		AR5K_REG_ENABLE_BITS(ah, AR5K_DIAG_SW_5211,
 					AR5K_DIAG_SW_ECO_ENABLE);
 	}
+
+	if (ah->ah_bwmode) {
+		/* Increase PHY switch and AGC settling time
+		 * on turbo mode (ath5k_hw_commit_eeprom_settings
+		 * will override settling time if available) */
+		if (ah->ah_bwmode == AR5K_BWMODE_40MHZ) {
+
+			AR5K_REG_WRITE_BITS(ah, AR5K_PHY_SETTLING,
+						AR5K_PHY_SETTLING_AGC,
+						AR5K_AGC_SETTLING_TURBO);
+
+			/* XXX: Initvals indicate we only increase
+			 * switch time on AR5212, 5211 and 5210
+			 * only change agc time (bug?) */
+			if (ah->ah_version == AR5K_AR5212)
+				AR5K_REG_WRITE_BITS(ah, AR5K_PHY_SETTLING,
+						AR5K_PHY_SETTLING_SWITCH,
+						AR5K_SWITCH_SETTLING_TURBO);
+
+			if (ah->ah_version == AR5K_AR5210) {
+				/* Set Frame Control Register */
+				ath5k_hw_reg_write(ah,
+					(AR5K_PHY_FRAME_CTL_INI |
+					AR5K_PHY_TURBO_MODE |
+					AR5K_PHY_TURBO_SHORT | 0x2020),
+					AR5K_PHY_FRAME_CTL_5210);
+			}
+		/* On 5413 PHY force window length for half/quarter rate*/
+		} else if ((ah->ah_mac_srev >= AR5K_SREV_AR5424) &&
+		(ah->ah_mac_srev <= AR5K_SREV_AR5414)) {
+			AR5K_REG_WRITE_BITS(ah, AR5K_PHY_FRAME_CTL_5211,
+						AR5K_PHY_FRAME_CTL_WIN_LEN,
+						3);
+		}
+	} else if (ah->ah_version == AR5K_AR5210) {
+		/* Set Frame Control Register for normal operation */
+		ath5k_hw_reg_write(ah, (AR5K_PHY_FRAME_CTL_INI | 0x1020),
+						AR5K_PHY_FRAME_CTL_5210);
+	}
 }
 
 static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah,

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [ath5k-devel] [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode
  2010-11-23 19:04 [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode Nick Kossifidis
@ 2010-11-23 19:21 ` Luis R. Rodriguez
  2010-11-23 20:11   ` Nick Kossifidis
  0 siblings, 1 reply; 4+ messages in thread
From: Luis R. Rodriguez @ 2010-11-23 19:21 UTC (permalink / raw)
  To: ath5k-devel, linux-wireless, linville, me, mcgrof, jirislaby, nbd,
	br1

On Tue, Nov 23, 2010 at 11:04:43AM -0800, Nick Kossifidis wrote:

Are you willing to deal with *all* bug reports for this?

  Luis

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [ath5k-devel] [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode
  2010-11-23 19:21 ` [ath5k-devel] " Luis R. Rodriguez
@ 2010-11-23 20:11   ` Nick Kossifidis
  2010-11-24  1:34     ` Bruno Randolf
  0 siblings, 1 reply; 4+ messages in thread
From: Nick Kossifidis @ 2010-11-23 20:11 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: ath5k-devel, linux-wireless, linville, me, mcgrof, jirislaby, nbd,
	br1

2010/11/23 Luis R. Rodriguez <lrodriguez@atheros.com>:
> On Tue, Nov 23, 2010 at 11:04:43AM -0800, Nick Kossifidis wrote:
>
> Are you willing to deal with *all* bug reports for this?
>
>  Luis
>

I don't enable 5/10/40MHz operation anywhere for now, it's just there
for testing/debug. I tested it and it seems to work fine (also with a
spectrum analyzer) but until we come up with the proper way to set
this from user-space I'll wait. Also have in mind I just do what
Atheros does on initvals, nothing new, I just diffed initvals/rfbuffer
settings between turbo/non-turbo modes, found what's changing and how
(i had 5/10MHz code from HAL for that -as i wrote on another mail
5/10/40MHz work mostly the same way-) and implemented it on code. Now
it's much cleaner + it actually works so i don't see a problem with
that. Before we had code for turbo that didn't work and duplicated
arrays of initvals/rfbuffer settings for no reason.

Have in mind that there are people out there that want 5/10MHz support
badly to implement 802.11p on top of it (or for research) and people
who want to get rid of MadWiFi on OpenWRT and use turbo mode with
ath5k. We had to do this sometime, it's not a dirty hack, i think the
implementation is clean and simple.

As for bug reports we already have bug reports about cards that fail
to wake up that we are unable to debug because we have no idea what's
going on, you can't choose what you 'll do based on possible bug
reports, bugs are part of the process...


-- 
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [ath5k-devel] [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode
  2010-11-23 20:11   ` Nick Kossifidis
@ 2010-11-24  1:34     ` Bruno Randolf
  0 siblings, 0 replies; 4+ messages in thread
From: Bruno Randolf @ 2010-11-24  1:34 UTC (permalink / raw)
  To: Nick Kossifidis
  Cc: Luis R. Rodriguez, ath5k-devel, linux-wireless, linville, me,
	mcgrof, jirislaby, nbd

On Wed November 24 2010 05:11:57 Nick Kossifidis wrote:
> 2010/11/23 Luis R. Rodriguez <lrodriguez@atheros.com>:
> > On Tue, Nov 23, 2010 at 11:04:43AM -0800, Nick Kossifidis wrote:
> > 
> > Are you willing to deal with *all* bug reports for this?
> > 
> >  Luis
> 
> I don't enable 5/10/40MHz operation anywhere for now, it's just there
> for testing/debug. I tested it and it seems to work fine (also with a
> spectrum analyzer) but until we come up with the proper way to set
> this from user-space I'll wait. Also have in mind I just do what
> Atheros does on initvals, nothing new, I just diffed initvals/rfbuffer
> settings between turbo/non-turbo modes, found what's changing and how
> (i had 5/10MHz code from HAL for that -as i wrote on another mail
> 5/10/40MHz work mostly the same way-) and implemented it on code. Now
> it's much cleaner + it actually works so i don't see a problem with
> that. Before we had code for turbo that didn't work and duplicated
> arrays of initvals/rfbuffer settings for no reason.
> 
> Have in mind that there are people out there that want 5/10MHz support
> badly to implement 802.11p on top of it (or for research) and people
> who want to get rid of MadWiFi on OpenWRT and use turbo mode with
> ath5k. We had to do this sometime, it's not a dirty hack, i think the
> implementation is clean and simple.
> 
> As for bug reports we already have bug reports about cards that fail
> to wake up that we are unable to debug because we have no idea what's
> going on, you can't choose what you 'll do based on possible bug
> reports, bugs are part of the process...

Hey Nick!

It's great to see that patch series! Glad you're back...
I'll look at the individual patches later, but it's a lot - as you know ;)

bruno

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-11-24  1:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-23 19:04 [PATCH 12/30] ath5k: Increase PHY settling parameters for turo mode Nick Kossifidis
2010-11-23 19:21 ` [ath5k-devel] " Luis R. Rodriguez
2010-11-23 20:11   ` Nick Kossifidis
2010-11-24  1:34     ` Bruno Randolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).