2010/11/19 Nick Kossifidis <mickfl...@gmail.com>:
> 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 ?
>

Here you go...
http://www.kernel.org/pub/linux/kernel/people/mickflemm/patches/

I'll send them tomorrow on the lists for review ;-)



-- 
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