2010/11/13 Nick Kossifidis <mickfl...@gmail.com>:
> Hello people ;-)
>
> Last 2 weeks I've been working on adding half/quarter rate support and
> (static) turbo mode support on ath5k. Here is what i have so far:
>
> All 3 modes are based on the same mechanism which means changing core
> clock frequency on OFDM-only modes (we won't support dynamic turbo on
> g, only static):
>
> Turbo: 40MHz * 2 = 80MHz
> Normal: 40MHz
> Half: 40MHz / 2 = 20MHz
> Quarter: 40MHz / 4 = 10MHz
>
> Core clock is used by both PHY and MAC so we need to recalculate all timings:
> ----
>
> Usecs/core cycles: clock frequency - 1
>
> TX latency: default value from initvals / clock multiplier
> (1,1/2,1/4), 32 (min ?) for turbo
>
> RX latency: default value from initvals / clock multiplier, 63 (max ?)
> for half/quarter, default(37) / 2 for turbo mode
>
> Slot time: A multiplication by 2 on the core clock frequency results a
> division by ~1.5 on the slot time:
> Turbo: 6
> Normal: 9
> Half: 13
> Quarter: 21
> IFS/EIFS etc change the same way
>
> Spur mitigation parameters change (see comment inside the function for the 
> algo)
>
> OFDM timings change (see comment inside the function for the algo)
>
> PHY activation to RX start delay: base value (100) + delay from
> initvals / clock multiplier
>
> Rate -> duration table needs adjustment (HAL uses computetxtime
> instead of  ieee80211_generic_frame_duration, i guess we can just play
> with rate var)
>
> PLL needs different divider etc settings by using the appropriate flags
>
>
> Comparing initvals between normal and turbo modes provides some extra tweaks:
> ---
>
> On turbo mode we also need to set PHY_TURBO but on 2425, TURBO_SHORT flag is 
> off
>
> On 5111 turbog we have a different AGCOARSE_LO, on the other chips
> there is no difference, I think we can ignore it, ANI will play with
> it anyway.
>
> On turbo mode we have to increase phy switch settling time to 7168 on
> 5212 and agc settling time to 37 on both 5211/5212 (newer eeproms
> provide switch settling time for turbo so we use that instead but we
> got nothing for agc settling). I guess we can use the default values
> for 5/10MHz operation.
>
> Also on turbo mode we get some extra infos from EEPROM that we must
> use for compliance with regulatory domain restrictions +
> enable/disable flags.
>
> Finaly we need to tweak power detector delays on 5111/5112 through rf
> buffer registers, set a tweaked txstart2txdata delay on 5112 and
> change a window length on PHY for 5413 (no idea what this is).
>
> It's not that complicated + since I figured out what's going on (and
> after I verified it by comparing normal and turbo mode initvals), I
> decided to drop turboa/g initvals from initvals.c, clean up the whole
> "turbo mode" mess and handle 5/10/40MHz modes in a common way.
>
> I have a patch ready but it's still messy and under testing, 5/10MHz
> seems to work but a few more tests are needed to verify constellation
> etc so that we are compatible with 802.11p specs (thanks to Ricardo
> Moreira for testing). For 40MHz operation (turbo) a few more steps are
> needed before i start testing.
>
> Give me some time and I'll get back to you with code ;-)
>

So i verified 5/10MHz operation with a spectrum analyzer and i found
something really interesting about 40MHz operation (turbo mode).

Here is the spectrum of a 5GHz channel
@ 5MHz...
http://www.kernel.org/pub/linux/kernel/people/mickflemm/ath5k-bwmodes/5mhz-5413.png
@10MHz...
http://www.kernel.org/pub/linux/kernel/people/mickflemm/ath5k-bwmodes/10mhz-5413.png
@40MHz with short symbols enabled (default except on AR2425)...
http://www.kernel.org/pub/linux/kernel/people/mickflemm/ath5k-bwmodes/40mhz-s-5413.png
@40MHz without short symbols...
http://www.kernel.org/pub/linux/kernel/people/mickflemm/ath5k-bwmodes/40mhz-ns-5413.png

So turbo mode with short symbols takes up 20MHz instead of 40 ! And
it's the default ! I wonder why Atheros never mentioned that, it's
actually a very good feature as it doesn't produce extra interference
on the channel...

Anyway I'll look more into it, for now I have a 4600+ lines patch to
split and send (it contains 5/10/40Mhz operation + lots of cleanups +
various fixes + synth-only channel change).

Also what do you think about changing reset behavior a little bit ?
Right now we reset everything, i think we can eg. skip PCU/DMA reset
when we reset the chip for PHY calibration failures so that we don't
mess with beacon timers/queues etc, or skip PHY reset when we reset
the chip due to DMA hangs. I know it's against default practice but
why not test it ?


-- 
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick
_______________________________________________
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to