[PATCH] wcn36xx: Fix software-driven scan
Bryan O'Donoghue
bryan.odonoghue at linaro.org
Mon Aug 24 05:57:16 EDT 2020
On 24/08/2020 08:51, Loic Poulain wrote:
> Hi Bryan,
>
> On Mon, 24 Aug 2020 at 03:45, Bryan O'Donoghue
> <bryan.odonoghue at linaro.org> wrote:
>>
>> On 17/08/2020 17:01, Loic Poulain wrote:
>>> For software-driven scan, rely on mac80211 software scan instead
>>> of internal driver implementation. The internal implementation
>>> cause connection trouble since it keep the antenna busy during
>>> the entire scan duration, moreover it's only a passive scanning
>>> (no probe request). Therefore, let mac80211 manages sw scan.
>>>
>>> Note: we fallback to software scan if firmware does not report
>>> scan offload support or if we need to scan the 5Ghz band (currently
>>> not supported by the offload scan...).
>>>
>>> Signed-off-by: Loic Poulain <loic.poulain at linaro.org>
>>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue at linaro.org>
>>
>> OK.
>>
>> TL;DR included diff fixes the performance issue.
>>
>> I've poked about with the old scan, and this new scan and I've managed
>> to find to find where the new scan is killing performance.
>>
>> Please see below.
>>
>> @@ -792,6 +792,7 @@ int wcn36xx_smd_finish_scan(struct wcn36xx *wcn,
>> {
>> struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
>> struct wcn36xx_hal_finish_scan_req_msg msg_body;
>> + u8 oper_channel;
>> int ret;
>>
>> mutex_lock(&wcn->hal_mutex);
>> @@ -802,7 +803,9 @@ int wcn36xx_smd_finish_scan(struct wcn36xx *wcn,
>> /* Notify BSSID with null data packet */
>> msg_body.notify = 1;
>> msg_body.frame_type = 2;
>> - msg_body.oper_channel = channel;
>> + oper_channel = WCN36XX_HW_CHANNEL(wcn);
>> + if (oper_channel != channel)
>> + msg_body.oper_channel = channel;
>
> Is this condition ever satisfied? I mean, finish_scan is normally always
> called with operating-channel as channel parameter.
I had a debug statement and never saw it run, so I think no is probably
the answer to that.
Basically though the msg_body.oper_channel needs to be left at zero.
Whatever the firmware does with non-zero is not correct @ 80Mhz/5ghz
>> 2. Performance is as expected
>> I see throughput oscillate between 30 mbit and 100 mbit
>> - Android runs a scan every 15 seconds
>
> With scanning app in the foreground, right?
> While connected to an AP, Android 'should' only background scan if
> RSSI becomes too low (for roaming).
Foreground scanning yes, I'm forcing a constant interleaving.
More information about the wcn36xx
mailing list