Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-16 Thread Kalle Valo
Peter Oh  writes:

>> Sure, every software change can cause regressions. But the thing is that
>> this isn't an optional, ath10k has to have this to be able to continue
>> using DFS channels.
>
> Kalle, you said you don't know which exact FCC requirement this is for
> in another email thread. Then how come you're sure this is not an
> optional 

To me this is a mandatory ath10k feature because if the host driver does
not have this DFS channels won't work anymore.

> and this approach is right one?

That's something you need to ask the firmware team who designed and
implemented this.

This discussion is going circles, it would be a lot easier if you could
clearly say your point. But if your point is just "I don't like this"
then there's not much, if any, I can do about that.

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-15 Thread Peter Oh



Sure, every software change can cause regressions. But the thing is that
this isn't an optional, ath10k has to have this to be able to continue
using DFS channels.

Kalle, you said you don't know which exact FCC requirement this is for 
in another email thread.
Then how come you're sure this is not an optional and this approach is 
right one?


Peter


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-14 Thread Kalle Valo
Adrian Chadd  writes:

> On Mon, 14 May 2018 at 11:25, Kalle Valo  wrote:
>
>> Adrian Chadd  writes:
>
>> > May we have a little more information about how this is supposed to
> work?
>> >
>> > It looks like we're supposed to send the information about the matched
>> > radar pattern back to the firmware for confirmation? What's the intended
>> > behaviour from the firmware? Will the firmware have a hard-coded set of
>> > patterns we have to answer in/by?
>
>> That's really an implementation detail inside the firmware and from
>> ath10k point of view we don't care what checks the firmware has, we just
>> provide all the necessary information. The checks in firmware might even
>> change in later releases.
>
>> > I ask (like Peter, we work together) because we've had to tweak this
>> > behaviour a little to actually pass FCC / ETSI DFS certification. My
>> > general concern is that this'll cause a lot of false detects on boards
> that
>> > haven't had things tweaked for the given board. As far as I'm aware the
> DFS
>> > parameters are still hard-coded into the firmware image so if you have
> to
>> > change those you're SOL without the relevant NDAs - this makes running
> the
>> > open source DFS stuff a little tricksy on vendor boards.
>
>> This shouldn't cause more false detections, the pattern detection from
>> ath.ko is still used as before. The firmware will just disable DFS
>> altogether if it thinks ath10k is not compliant.
>
>
> Heh, well the fun one for production for us is "ok, so what's
> non-compliant" ?
>
> Eg - if it's 1 out of 100 that we don't hit the explicit timing
> requirements because of the rest of the linux kernel (eg someone holds a
> spinlock more than they should) then I'd prefer that we got a notification
> that something happened so we can fix it. Otherwise in the field it'll just
> be "hey, our stuff stopped working" because whatever the firmware
> expectations are aren't being met.
>
> Again, we're OK because we can at least inspect what's going on, but not
> everyone doing ath10k development/deployment will be so lucky :(

Sure, every software change can cause regressions. But the thing is that
this isn't an optional, ath10k has to have this to be able to continue
using DFS channels.

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-14 Thread Adrian Chadd
On Mon, 14 May 2018 at 11:25, Kalle Valo  wrote:

> Adrian Chadd  writes:

> > May we have a little more information about how this is supposed to
work?
> >
> > It looks like we're supposed to send the information about the matched
> > radar pattern back to the firmware for confirmation? What's the intended
> > behaviour from the firmware? Will the firmware have a hard-coded set of
> > patterns we have to answer in/by?

> That's really an implementation detail inside the firmware and from
> ath10k point of view we don't care what checks the firmware has, we just
> provide all the necessary information. The checks in firmware might even
> change in later releases.

> > I ask (like Peter, we work together) because we've had to tweak this
> > behaviour a little to actually pass FCC / ETSI DFS certification. My
> > general concern is that this'll cause a lot of false detects on boards
that
> > haven't had things tweaked for the given board. As far as I'm aware the
DFS
> > parameters are still hard-coded into the firmware image so if you have
to
> > change those you're SOL without the relevant NDAs - this makes running
the
> > open source DFS stuff a little tricksy on vendor boards.

> This shouldn't cause more false detections, the pattern detection from
> ath.ko is still used as before. The firmware will just disable DFS
> altogether if it thinks ath10k is not compliant.


Heh, well the fun one for production for us is "ok, so what's
non-compliant" ?

Eg - if it's 1 out of 100 that we don't hit the explicit timing
requirements because of the rest of the linux kernel (eg someone holds a
spinlock more than they should) then I'd prefer that we got a notification
that something happened so we can fix it. Otherwise in the field it'll just
be "hey, our stuff stopped working" because whatever the firmware
expectations are aren't being met.

Again, we're OK because we can at least inspect what's going on, but not
everyone doing ath10k development/deployment will be so lucky :(




-adrian


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-14 Thread Peter Oh



Which regulatory enforcement are you talking to? Are you talking about
such "prevent users from changing regulatory domain" or "don't provide
a manner to change regulatory domain or channel list" ? If not, can
you share the section of document?

Sorry, I don't have any references about that.

This question is for "what the patch is trying to solve" and "to comply 
FCC regulatory rule" is not the right answer. It should be answered by 
"FCC regulatory rule section xx.xx.xx".
So we all can double check if this patch addresses "the root cause of 
the requirement" and "if it's the best approach or not"


Thanks,
Peter


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-14 Thread Kalle Valo
Adrian Chadd  writes:

> May we have a little more information about how this is supposed to work?
>
> It looks like we're supposed to send the information about the matched
> radar pattern back to the firmware for confirmation? What's the intended
> behaviour from the firmware? Will the firmware have a hard-coded set of
> patterns we have to answer in/by?

That's really an implementation detail inside the firmware and from
ath10k point of view we don't care what checks the firmware has, we just
provide all the necessary information. The checks in firmware might even
change in later releases.

> I ask (like Peter, we work together) because we've had to tweak this
> behaviour a little to actually pass FCC / ETSI DFS certification. My
> general concern is that this'll cause a lot of false detects on boards that
> haven't had things tweaked for the given board. As far as I'm aware the DFS
> parameters are still hard-coded into the firmware image so if you have to
> change those you're SOL without the relevant NDAs - this makes running the
> open source DFS stuff a little tricksy on vendor boards.

This shouldn't cause more false detections, the pattern detection from
ath.ko is still used as before. The firmware will just disable DFS
altogether if it thinks ath10k is not compliant.

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-14 Thread Kalle Valo
Peter Oh  writes:

> On 05/02/2018 04:27 AM, Kalle Valo wrote:
>> Peter Oh  writes:
>>
>>> On 04/30/2018 10:45 AM, Sriram R wrote:
 In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
 feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.

 This new features enables the ath10k host to send information to the
 firmware on the specifications of detected radar type. This allows the
 firmware to validate if the host's radar pattern detector unit is
 operational and check if the radar information shared by host matches
 the radar pulses sent as phy error events from firmware. If the check
 fails the firmware won't allow use of DFS channels on AP mode when using
 FCC regulatory region.
>>> What's the main reason you introduce this feature?
>>> What are you trying to solve with this change?
>> Otherwise one cannot use DFS channels on FCC regions with a firmware
>> from 10.4-3.6 branch.
>
> It's a big change and none of us knows until I asked and you answered.

I was hoping that would be clear from the commit log but I guess Sriram
could include my sentence above to enhance it?

 @@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct ath10k 
 *ar,
ATH10K_DFS_STAT_INC(ar, pulses_detected);
-   if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL))
 {
 +  if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
   "dfs no pulse pattern detected, yet\n");
return;
}
-radar_detected:
 -  ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
 -  ATH10K_DFS_STAT_INC(ar, radar_detected);
 +  if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) &&
 +  ar->dfs_detector->region == NL80211_DFS_FCC) {
>>>
>>> I feel risky that host drivers have no way to control this new feature
>>> and totally rely on FW feature mask. We should have a host drivers'
>>> feature mask such as module param and set it false (don't use) by
>>> default until it proves safe to use.
>>
>> This is for regulatory enforcement so it's not possible to disable the
>> feature from host.
>
> Which regulatory enforcement are you talking to? Are you talking about
> such "prevent users from changing regulatory domain" or "don't provide
> a manner to change regulatory domain or channel list" ? If not, can
> you share the section of document?

Sorry, I don't have any references about that.

> In addition to that, How do you make sure if FW side DFS radar
> detection algorithm has no defects and it always categorizes phy
> errors to correct radar type? I'm asking it, because it's known that
> DFS detector in ath module does sometimes detect radar patterns as
> wrong radar type in both of ath10k and ath9k. I couldn't think FW side
> detector has no such defects at all. It's like blind patch to open
> source community, since no one can review the implementation in FW
> even though no one can guarantee its level of integrity.

It's not about replacing the DFS detector in ath.ko, it's about adding
extra checks in firmware for regulatory compliance. So at least in
theory DFS detection should still work same as before, just with an
extra roundtrip via firmware.

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-12 Thread Kalle Valo
Sriram R  writes:

> In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
> feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.
>
> This new features enables the ath10k host to send information to the
> firmware on the specifications of detected radar type. This allows the
> firmware to validate if the host's radar pattern detector unit is
> operational and check if the radar information shared by host matches
> the radar pulses sent as phy error events from firmware. If the check
> fails the firmware won't allow use of DFS channels on AP mode when using
> FCC regulatory region.
>
> Supported Chipsets : QCA9984/QCA9888/QCA4019
> Firmware Version : 10.4-3.6-00104
>
> Signed-off-by: Sriram R 

This introduces a new checkpatch warning:

drivers/net/wireless/ath/ath10k/wmi.c:3753: Please use a blank line after 
function/struct/union/enum declarations

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-09 Thread Sriram R

On 2018-05-01 01:20, Peter Oh wrote:

On 04/30/2018 10:45 AM, Sriram R wrote:

In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT 
flag.


This new features enables the ath10k host to send information to the
firmware on the specifications of detected radar type. This allows the
firmware to validate if the host's radar pattern detector unit is
operational and check if the radar information shared by host matches
the radar pulses sent as phy error events from firmware. If the check
fails the firmware won't allow use of DFS channels on AP mode when 
using

FCC regulatory region.

What's the main reason you introduce this feature?
What are you trying to solve with this change?

+#define ATH10K_WMI_DFS_CONF_TIMEOUT_HZ (HZ / 2)
  +static void ath10k_radar_confirmation_work(struct work_struct 
*work)

+{
+   struct ath10k *ar = container_of(work, struct ath10k,
+radar_confirmation_work);
+   struct ath10k_radar_found_info radar_info;
+   int ret, time_left;
+
+   reinit_completion(&ar->wmi.radar_confirm);
+
+   spin_lock_bh(&ar->data_lock);
+   memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info));
+   spin_unlock_bh(&ar->data_lock);
+
+   ret = ath10k_wmi_report_radar_found(ar, &radar_info);
+   if (ret) {
+   ath10k_warn(ar, "failed to send radar found %d\n", ret);
+   goto wait_complete;
+   }
+
+   time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm,
+   ATH10K_WMI_DFS_CONF_TIMEOUT_HZ);

It looks wrong to me in terms of timeout value.
Typical channel closing time in FCC domain is 200ms (excluding control
signals), but you're waiting for 500ms for response from FW.
Right Peter, We haven't hit this limit during our testing. On an average 
we
received completion event within few milliseconds ,say less than 
10-15ms. I'll correct

this timeout in my next patch revision.
@@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct 
ath10k *ar,

ATH10K_DFS_STAT_INC(ar, pulses_detected);
  - if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL)) {
+   if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
   "dfs no pulse pattern detected, yet\n");
return;
}
  -radar_detected:
-   ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
-   ATH10K_DFS_STAT_INC(ar, radar_detected);
+	if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) 
&&

+   ar->dfs_detector->region == NL80211_DFS_FCC) {

I feel risky that host drivers have no way to control this new feature
and totally rely on FW feature mask. We should have a host drivers'
feature mask such as module param and set it false (don't use) by
default until it proves safe to use.

+static void
+ath10k_wmi_event_dfs_status_check(struct ath10k *ar, struct sk_buff 
*skb)

+{
+   struct wmi_dfs_status_ev_arg status_arg = {};
+   int ret;
+
+   ret = ath10k_wmi_pull_dfs_status(ar, skb, &status_arg);
+
+   if (ret) {
+   ath10k_warn(ar, "failed to parse dfs status event: %d\n", ret);
+   return;
+   }
+
+   ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
+  "dfs status event received from fw: %d\n",
+  status_arg.status);
+
+   /* Even in case of radar detection failure we follow the same
+* behaviour as if radar is detected i.e to switch to a different
+* channel.
+*/
+   if (status_arg.status == WMI_HW_RADAR_DETECTED ||
+   status_arg.status == WMI_RADAR_DETECTION_FAIL)
+   ath10k_radar_detected(ar);
+   complete(&ar->wmi.radar_confirm);
+}

What is typical average duration from
wait_for_completion_timeout(&ar->wmi.radar_confirm) to this completion
called ?

We didn't see this taking more than 20ms to reach this completion.
As mentioned above I'll change the timeout value in the next patch.

Thanks,
Sriram.R


Thanks,
Peter


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-05 Thread Sebastian Gottschall

Am 02.05.2018 um 13:27 schrieb Kalle Valo:

Peter Oh  writes:


On 04/30/2018 10:45 AM, Sriram R wrote:

In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.

This new features enables the ath10k host to send information to the
firmware on the specifications of detected radar type. This allows the
firmware to validate if the host's radar pattern detector unit is
operational and check if the radar information shared by host matches
the radar pulses sent as phy error events from firmware. If the check
fails the firmware won't allow use of DFS channels on AP mode when using
FCC regulatory region.

What's the main reason you introduce this feature?
What are you trying to solve with this change?

Otherwise one cannot use DFS channels on FCC regions with a firmware
from 10.4-3.6 branch.


@@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct ath10k *ar,
ATH10K_DFS_STAT_INC(ar, pulses_detected);
   -if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL))
{
+   if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
   "dfs no pulse pattern detected, yet\n");
return;
}
   -radar_detected:
-   ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
-   ATH10K_DFS_STAT_INC(ar, radar_detected);
+   if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) &&
+   ar->dfs_detector->region == NL80211_DFS_FCC) {

I feel risky that host drivers have no way to control this new feature
and totally rely on FW feature mask. We should have a host drivers'
feature mask such as module param and set it false (don't use) by
default until it proves safe to use.

This is for regulatory enforcement so it's not possible to disable the
feature from host.
mmh from what i see it is possible to disable it from host since the 
firmware seem to be sensitive on the regdomain set by the host
so if host sets anything else than a FCC regdomain, it will still work 
in the old way. so its more a pseudo enforcement. dont know if this is
usefull and it also will it make impossible to fix radar detection 
issues for certification as mentioned by peter and adrian.


Sebastian




--
Mit freundlichen Grüssen / Regards

Sebastian Gottschall / CTO

NewMedia-NET GmbH - DD-WRT
Firmensitz:  Stubenwaldallee 21a, 64625 Bensheim
Registergericht: Amtsgericht Darmstadt, HRB 25473
Geschäftsführer: Peter Steinhäuser, Christian Scheele
http://www.dd-wrt.com
email: s.gottsch...@dd-wrt.com
Tel.: +496251-582650 / Fax: +496251-5826565



Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-03 Thread Adrian Chadd
Hi,

May we have a little more information about how this is supposed to work?

It looks like we're supposed to send the information about the matched
radar pattern back to the firmware for confirmation? What's the intended
behaviour from the firmware? Will the firmware have a hard-coded set of
patterns we have to answer in/by?

I ask (like Peter, we work together) because we've had to tweak this
behaviour a little to actually pass FCC / ETSI DFS certification. My
general concern is that this'll cause a lot of false detects on boards that
haven't had things tweaked for the given board. As far as I'm aware the DFS
parameters are still hard-coded into the firmware image so if you have to
change those you're SOL without the relevant NDAs - this makes running the
open source DFS stuff a little tricksy on vendor boards.



-adrian


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-02 Thread Peter Oh



On 05/02/2018 04:27 AM, Kalle Valo wrote:

Peter Oh  writes:


On 04/30/2018 10:45 AM, Sriram R wrote:

In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.

This new features enables the ath10k host to send information to the
firmware on the specifications of detected radar type. This allows the
firmware to validate if the host's radar pattern detector unit is
operational and check if the radar information shared by host matches
the radar pulses sent as phy error events from firmware. If the check
fails the firmware won't allow use of DFS channels on AP mode when using
FCC regulatory region.

What's the main reason you introduce this feature?
What are you trying to solve with this change?

Otherwise one cannot use DFS channels on FCC regions with a firmware
from 10.4-3.6 branch.


It's a big change and none of us knows until I asked and you answered.

@@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct ath10k *ar,
ATH10K_DFS_STAT_INC(ar, pulses_detected);
   -if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL))
{
+   if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
   "dfs no pulse pattern detected, yet\n");
return;
}
   -radar_detected:
-   ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
-   ATH10K_DFS_STAT_INC(ar, radar_detected);
+   if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) &&
+   ar->dfs_detector->region == NL80211_DFS_FCC) {

I feel risky that host drivers have no way to control this new feature
and totally rely on FW feature mask. We should have a host drivers'
feature mask such as module param and set it false (don't use) by
default until it proves safe to use.

This is for regulatory enforcement so it's not possible to disable the
feature from host.

Which regulatory enforcement are you talking to?
Are you talking about such "prevent users from changing regulatory 
domain" or "don't provide a manner to change regulatory domain or 
channel list" ?

If not, can you share the section of document?

In addition to that, How do you make sure if FW side DFS radar detection 
algorithm has no defects and it always categorizes phy errors to correct 
radar type?
I'm asking it, because it's known that DFS detector in ath module does 
sometimes detect radar patterns as wrong radar type in both of ath10k 
and ath9k.

I couldn't think FW side detector has no such defects at all.
It's like blind patch to open source community, since no one can review 
the implementation in FW even though no one can guarantee its level of 
integrity.


Peter


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-05-02 Thread Kalle Valo
Peter Oh  writes:

> On 04/30/2018 10:45 AM, Sriram R wrote:
>> In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
>> feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.
>>
>> This new features enables the ath10k host to send information to the
>> firmware on the specifications of detected radar type. This allows the
>> firmware to validate if the host's radar pattern detector unit is
>> operational and check if the radar information shared by host matches
>> the radar pulses sent as phy error events from firmware. If the check
>> fails the firmware won't allow use of DFS channels on AP mode when using
>> FCC regulatory region.
>
> What's the main reason you introduce this feature?
> What are you trying to solve with this change?

Otherwise one cannot use DFS channels on FCC regions with a firmware
from 10.4-3.6 branch.

>> @@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct ath10k 
>> *ar,
>>  ATH10K_DFS_STAT_INC(ar, pulses_detected);
>>   -  if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL))
>> {
>> +if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
>>  ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
>> "dfs no pulse pattern detected, yet\n");
>>  return;
>>  }
>>   -radar_detected:
>> -ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
>> -ATH10K_DFS_STAT_INC(ar, radar_detected);
>> +if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) &&
>> +ar->dfs_detector->region == NL80211_DFS_FCC) {
>
> I feel risky that host drivers have no way to control this new feature
> and totally rely on FW feature mask. We should have a host drivers'
> feature mask such as module param and set it false (don't use) by
> default until it proves safe to use.

This is for regulatory enforcement so it's not possible to disable the
feature from host.

-- 
Kalle Valo


Re: [PATCH 2/2] ath10k: DFS Host Confirmation

2018-04-30 Thread Peter Oh



On 04/30/2018 10:45 AM, Sriram R wrote:

In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.

This new features enables the ath10k host to send information to the
firmware on the specifications of detected radar type. This allows the
firmware to validate if the host's radar pattern detector unit is
operational and check if the radar information shared by host matches
the radar pulses sent as phy error events from firmware. If the check
fails the firmware won't allow use of DFS channels on AP mode when using
FCC regulatory region.

What's the main reason you introduce this feature?
What are you trying to solve with this change?

+#define ATH10K_WMI_DFS_CONF_TIMEOUT_HZ (HZ / 2)
  
+static void ath10k_radar_confirmation_work(struct work_struct *work)

+{
+   struct ath10k *ar = container_of(work, struct ath10k,
+radar_confirmation_work);
+   struct ath10k_radar_found_info radar_info;
+   int ret, time_left;
+
+   reinit_completion(&ar->wmi.radar_confirm);
+
+   spin_lock_bh(&ar->data_lock);
+   memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info));
+   spin_unlock_bh(&ar->data_lock);
+
+   ret = ath10k_wmi_report_radar_found(ar, &radar_info);
+   if (ret) {
+   ath10k_warn(ar, "failed to send radar found %d\n", ret);
+   goto wait_complete;
+   }
+
+   time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm,
+   ATH10K_WMI_DFS_CONF_TIMEOUT_HZ);

It looks wrong to me in terms of timeout value.
Typical channel closing time in FCC domain is 200ms (excluding control 
signals), but you're waiting for 500ms for response from FW.

@@ -3765,25 +3834,46 @@ static void ath10k_dfs_radar_report(struct ath10k *ar,
  
  	ATH10K_DFS_STAT_INC(ar, pulses_detected);
  
-	if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL)) {

+   if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) {
ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
   "dfs no pulse pattern detected, yet\n");
return;
}
  
-radar_detected:

-   ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n");
-   ATH10K_DFS_STAT_INC(ar, radar_detected);
+   if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) &&
+   ar->dfs_detector->region == NL80211_DFS_FCC) {
I feel risky that host drivers have no way to control this new feature 
and totally rely on FW feature mask. We should have a host drivers' 
feature mask such as module param and set it false (don't use) by 
default until it proves safe to use.

+static void
+ath10k_wmi_event_dfs_status_check(struct ath10k *ar, struct sk_buff *skb)
+{
+   struct wmi_dfs_status_ev_arg status_arg = {};
+   int ret;
+
+   ret = ath10k_wmi_pull_dfs_status(ar, skb, &status_arg);
+
+   if (ret) {
+   ath10k_warn(ar, "failed to parse dfs status event: %d\n", ret);
+   return;
+   }
+
+   ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
+  "dfs status event received from fw: %d\n",
+  status_arg.status);
+
+   /* Even in case of radar detection failure we follow the same
+* behaviour as if radar is detected i.e to switch to a different
+* channel.
+*/
+   if (status_arg.status == WMI_HW_RADAR_DETECTED ||
+   status_arg.status == WMI_RADAR_DETECTION_FAIL)
+   ath10k_radar_detected(ar);
+   complete(&ar->wmi.radar_confirm);
+}
What is typical average duration from 
wait_for_completion_timeout(&ar->wmi.radar_confirm) to this completion 
called ?


Thanks,
Peter


[PATCH 2/2] ath10k: DFS Host Confirmation

2018-04-30 Thread Sriram R
In the 10.4-3.6 firmware branch there's a new DFS Host confirmation
feature which is advertised using WMI_SERVICE_HOST_DFS_CHECK_SUPPORT flag.

This new features enables the ath10k host to send information to the
firmware on the specifications of detected radar type. This allows the
firmware to validate if the host's radar pattern detector unit is
operational and check if the radar information shared by host matches
the radar pulses sent as phy error events from firmware. If the check
fails the firmware won't allow use of DFS channels on AP mode when using
FCC regulatory region.

Supported Chipsets : QCA9984/QCA9888/QCA4019
Firmware Version : 10.4-3.6-00104

Signed-off-by: Sriram R 
---
 drivers/net/wireless/ath/ath10k/core.h|  21 
 drivers/net/wireless/ath/ath10k/mac.c |  12 ++
 drivers/net/wireless/ath/ath10k/wmi-ops.h |  32 ++
 drivers/net/wireless/ath/ath10k/wmi.c | 185 --
 drivers/net/wireless/ath/ath10k/wmi.h |  32 ++
 5 files changed, 272 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.h 
b/drivers/net/wireless/ath/ath10k/core.h
index e4ac8f2..c95774e 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -175,6 +175,7 @@ struct ath10k_wmi {
struct completion service_ready;
struct completion unified_ready;
struct completion barrier;
+   struct completion radar_confirm;
wait_queue_head_t tx_credits_wq;
DECLARE_BITMAP(svc_map, WMI_SERVICE_MAX);
struct wmi_cmd_map *cmd;
@@ -377,6 +378,21 @@ struct ath10k_dfs_stats {
u32 radar_detected;
 };
 
+enum ath10k_radar_confirmation_state {
+   ATH10K_RADAR_CONFIRMATION_IDLE = 0,
+   ATH10K_RADAR_CONFIRMATION_INPROGRESS,
+   ATH10K_RADAR_CONFIRMATION_STOPPED,
+};
+
+struct ath10k_radar_found_info {
+   u32 pri_min;
+   u32 pri_max;
+   u32 width_min;
+   u32 width_max;
+   u32 sidx_min;
+   u32 sidx_max;
+};
+
 #define ATH10K_MAX_NUM_PEER_IDS (1 << 11) /* htt rx_desc limit */
 
 struct ath10k_peer {
@@ -1109,6 +1125,11 @@ struct ath10k {
 
u32 sta_tid_stats_mask;
 
+   /* protected by data_lock */
+   enum ath10k_radar_confirmation_state radar_conf_state;
+   struct ath10k_radar_found_info last_radar_info;
+   struct work_struct radar_confirmation_work;
+
/* must be last */
u8 drv_priv[0] __aligned(sizeof(void *));
 };
diff --git a/drivers/net/wireless/ath/ath10k/mac.c 
b/drivers/net/wireless/ath/ath10k/mac.c
index 3d7119a..7463432 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -3217,6 +3217,15 @@ static void ath10k_reg_notifier(struct wiphy *wiphy,
   
ar->hw->wiphy->bands[NL80211_BAND_5GHZ]);
 }
 
+static void ath10k_stop_radar_confirmation(struct ath10k *ar)
+{
+   spin_lock_bh(&ar->data_lock);
+   ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_STOPPED;
+   spin_unlock_bh(&ar->data_lock);
+
+   cancel_work_sync(&ar->radar_confirmation_work);
+}
+
 /***/
 /* TX handlers */
 /***/
@@ -4333,6 +4342,7 @@ void ath10k_halt(struct ath10k *ar)
 
ath10k_scan_finish(ar);
ath10k_peer_cleanup_all(ar);
+   ath10k_stop_radar_confirmation(ar);
ath10k_core_stop(ar);
ath10k_hif_power_down(ar);
 
@@ -4758,6 +4768,8 @@ static int ath10k_start(struct ieee80211_hw *hw)
ath10k_spectral_start(ar);
ath10k_thermal_set_throttling(ar);
 
+   ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE;
+
mutex_unlock(&ar->conf_mutex);
return 0;
 
diff --git a/drivers/net/wireless/ath/ath10k/wmi-ops.h 
b/drivers/net/wireless/ath/ath10k/wmi-ops.h
index e37d16b..5ecce04 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-ops.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h
@@ -55,6 +55,8 @@ struct wmi_ops {
  struct wmi_wow_ev_arg *arg);
int (*pull_echo_ev)(struct ath10k *ar, struct sk_buff *skb,
struct wmi_echo_ev_arg *arg);
+   int (*pull_dfs_status_ev)(struct ath10k *ar, struct sk_buff *skb,
+ struct wmi_dfs_status_ev_arg *arg);
int (*pull_svc_avail)(struct ath10k *ar, struct sk_buff *skb,
  struct wmi_svc_avail_ev_arg *arg);
 
@@ -188,6 +190,9 @@ struct wmi_ops {
const struct 
wmi_tdls_peer_update_cmd_arg *arg,
const struct 
wmi_tdls_peer_capab_arg *cap,
const struct wmi_channel_arg 
*chan);
+   struct sk_buff *(*gen_radar_found)
+   (struct ath10k *ar,
+const struct ath10k_radar_found_info *arg);
struct sk_buff *(*gen_adaptive_qcs)(struct ath10k *ar, bool enable);
struct sk_buff *(*ge