Linux wireless drivers development
 help / color / mirror / Atom feed
* Re: [PATCH v2 00/12] NFC: nxp-nci: clean up and support new ID
From: Sedat Dilek @ 2019-05-13 12:18 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Clément Perrochaud, Charles Gorand, linux-nfc, Samuel Ortiz,
	linux-wireless, Oleg Zhurakivskyy
In-Reply-To: <20190513104358.59716-1-andriy.shevchenko@linux.intel.com>

On Mon, May 13, 2019 at 12:44 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> It has been reported that some laptops, equipped with NXP NFC300, have
> different ID then mentioned in the driver.
>
> While at it, I found that the driver has a lot of duplication and redundant
> platform data. The rest of the series (11 out of 12 patches) is dedicated to
> clean the driver up.
>
> Sedat, would be nice if you can compile kernel with this patch series applied
> and test on your laptop.
>
> In v2:
> - added new ID patch
> - added new clean up patch
> - Cc'ed to linux-wireless@ as well, since linux-nfc@ bounces my mails
> - Cc'ed to the reported of the problem with T470 laptop
>
> Andy Shevchenko (12):
>   NFC: nxp-nci: Add NXP1001 to the ACPI ID table
>   NFC: nxp-nci: Get rid of platform data
>   NFC: nxp-nci: Convert to use GPIO descriptor
>   NFC: nxp-nci: Add GPIO ACPI mapping table
>   NFC: nxp-nci: Get rid of code duplication in ->probe()
>   NFC: nxp-nci: Get rid of useless label
>   NFC: nxp-nci: Constify acpi_device_id
>   NFC: nxp-nci: Drop of_match_ptr() use
>   NFC: nxp-nci: Drop comma in terminator lines
>   NFC: nxp-nci: Remove unused macro pr_fmt()
>   NFC: nxp-nci: Remove 'default n' for tests
>   NFC: nxp-nci: Convert to SPDX license tags
>
>  MAINTAINERS                           |   1 -
>  drivers/nfc/nxp-nci/Kconfig           |   1 -
>  drivers/nfc/nxp-nci/core.c            |  15 +--
>  drivers/nfc/nxp-nci/firmware.c        |  13 +--
>  drivers/nfc/nxp-nci/i2c.c             | 147 ++++++--------------------
>  drivers/nfc/nxp-nci/nxp-nci.h         |   1 -
>  include/linux/platform_data/nxp-nci.h |  27 -----
>  7 files changed, 37 insertions(+), 168 deletions(-)
>  delete mode 100644 include/linux/platform_data/nxp-nci.h
>
> --
> 2.20.1
>

Can we have NPC300 listed in the Kconfg help text?

Thanks.

- Sedat -

$ git diff
diff --git a/drivers/nfc/nxp-nci/Kconfig b/drivers/nfc/nxp-nci/Kconfig
index a28c4265354d..f2173c1de745 100644
--- a/drivers/nfc/nxp-nci/Kconfig
+++ b/drivers/nfc/nxp-nci/Kconfig
@@ -2,8 +2,8 @@ config NFC_NXP_NCI
        tristate "NXP-NCI NFC driver"
        depends on NFC_NCI
        ---help---
-         Generic core driver for NXP NCI chips such as the NPC100
-         or PN7150 families.
+         Generic core driver for NXP NCI chips such as the NPC100,
+         NPC300 or PN7150 families.
          This is a driver based on the NCI NFC kernel layers and
          will thus not work with NXP libnfc library.

^ permalink raw reply related

* Re: [PATCH] mt76: mt7603: add debugfs knob to enable/disable edcca
From: Kalle Valo @ 2019-05-13 12:37 UTC (permalink / raw)
  To: Lorenzo Bianconi; +Cc: nbd, lorenzo.bianconi, linux-wireless
In-Reply-To: <20190513084127.GA3127@localhost.localdomain>

Lorenzo Bianconi <lorenzo@kernel.org> writes:

>> Lorenzo Bianconi <lorenzo@kernel.org> writes:
>> 
>> > Introduce a knob in mt7603 debugfs in order to enable/disable
>> > edcca processing
>> >
>> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
>> 
>> It's good to explain what edcca does and how the file is used supposed
>> to be used. In other words, have a small introduction for the user.
>
> Hi Kalle,
>
> edcca is used for adjusting energy detect based on CCA thresholds.
> The code was already there so I just reported the acronym.

A lot of people read commit logs but not everyone (myself included) are
familiar with mt76 internals so please try to explain the acronyms and
the background of the patch. Also you should explain in the commit log
_why_ you are adding the debugfs file, how it helps the user and how to
use it.

-- 
Kalle Valo

^ permalink raw reply

* Re: [PATCH v2 00/12] NFC: nxp-nci: clean up and support new ID
From: Andy Shevchenko @ 2019-05-13 12:37 UTC (permalink / raw)
  To: Sedat Dilek
  Cc: Clément Perrochaud, Charles Gorand, linux-nfc, Samuel Ortiz,
	linux-wireless, Oleg Zhurakivskyy
In-Reply-To: <CA+icZUV_g5mJnmHQKZgtcPj3YfZSYp1DQJT9tmi+892AzRCm3A@mail.gmail.com>

On Mon, May 13, 2019 at 02:18:03PM +0200, Sedat Dilek wrote:
> On Mon, May 13, 2019 at 12:44 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> >
> > It has been reported that some laptops, equipped with NXP NFC300, have
> > different ID then mentioned in the driver.
> >
> > While at it, I found that the driver has a lot of duplication and redundant
> > platform data. The rest of the series (11 out of 12 patches) is dedicated to
> > clean the driver up.
> >
> > Sedat, would be nice if you can compile kernel with this patch series applied
> > and test on your laptop.
> >
> > In v2:
> > - added new ID patch
> > - added new clean up patch
> > - Cc'ed to linux-wireless@ as well, since linux-nfc@ bounces my mails
> > - Cc'ed to the reported of the problem with T470 laptop
> >
> > Andy Shevchenko (12):
> >   NFC: nxp-nci: Add NXP1001 to the ACPI ID table
> >   NFC: nxp-nci: Get rid of platform data
> >   NFC: nxp-nci: Convert to use GPIO descriptor
> >   NFC: nxp-nci: Add GPIO ACPI mapping table
> >   NFC: nxp-nci: Get rid of code duplication in ->probe()
> >   NFC: nxp-nci: Get rid of useless label
> >   NFC: nxp-nci: Constify acpi_device_id
> >   NFC: nxp-nci: Drop of_match_ptr() use
> >   NFC: nxp-nci: Drop comma in terminator lines
> >   NFC: nxp-nci: Remove unused macro pr_fmt()
> >   NFC: nxp-nci: Remove 'default n' for tests
> >   NFC: nxp-nci: Convert to SPDX license tags
> >
> >  MAINTAINERS                           |   1 -
> >  drivers/nfc/nxp-nci/Kconfig           |   1 -
> >  drivers/nfc/nxp-nci/core.c            |  15 +--
> >  drivers/nfc/nxp-nci/firmware.c        |  13 +--
> >  drivers/nfc/nxp-nci/i2c.c             | 147 ++++++--------------------
> >  drivers/nfc/nxp-nci/nxp-nci.h         |   1 -
> >  include/linux/platform_data/nxp-nci.h |  27 -----
> >  7 files changed, 37 insertions(+), 168 deletions(-)
> >  delete mode 100644 include/linux/platform_data/nxp-nci.h
> 
> Can we have NPC300 listed in the Kconfg help text?

Sure, it's good thing to do!

Either as a separate patch or I may incorporate in the next iteration.
Samuel, what do you prefer?

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply

* Re: [linux-nfc] ThinkPad T470 and NXP PN5xx (PN547 or PN548)
From: Andy Shevchenko @ 2019-05-13 12:40 UTC (permalink / raw)
  To: Sedat Dilek; +Cc: Oleg Zhurakivskyy, Samuel Ortiz, linux-wireless, linux-nfc
In-Reply-To: <CA+icZUVDTx_ZUuOgHVDmg5_a4tgrRkPp880+0KPaRJ1d=zF5VQ@mail.gmail.com>

On Mon, May 13, 2019 at 01:20:43PM +0200, Sedat Dilek wrote:
> On Mon, May 13, 2019 at 12:57 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> >
> > On Mon, May 13, 2019 at 12:38:27PM +0200, Sedat Dilek wrote:
> > > On Mon, May 13, 2019 at 11:51 AM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > > >
> > > > On Mon, May 13, 2019 at 11:27:07AM +0200, Sedat Dilek wrote:
> > > >
> > > > > Sorry to say, I still have not get all correlations...
> > > >
> > > > Can you provide the output of the following on running Linux system with latest
> > > > possible kernel you can install (I am expecting v5.1) and command line with
> > > > 'ignore_loglevel'?
> > > >
> > > > 1. `dmesg`
> > > > 2. `grep -H 15 /sys/bus/acpi/devices/*/status`
> > > > 3. `acpidump -o t470-tables.dat` # the file t470-tables.dat
> > > > 4. `lspci -vv -nk`
> > > >
> > > > P.S. You may use GitHub gist for this set (please, don't share archives) or any
> > > > other resource like pastebin.
> > > >
> > >
> > > Looks like I am unable to use Debian's gist-paste package today or
> > > need more coffee.
> > >
> > > So, I add this here.
> > >
> > > I added my kernel-config.
> >
> >
> > Thanks. I just sent a series to (hopefully) support it in the vanilla kernel.
> > Can you test it?
> >
> > P.S. I see in dmesg the pn544 tries to bind to the NXP1001. Do you have some
> > custom patches for that in your kernel? If so, please drop them.

> this looks promising!
> 
> I have attached v2 of the disired outputs.

Nothing is point of interest anymore except dmesg.
But thanks for sharing.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply

* Re: [PATCH v2 00/12] NFC: nxp-nci: clean up and support new ID
From: Oleg Zhurakivskyy @ 2019-05-13 12:49 UTC (permalink / raw)
  To: sedat.dilek, Andy Shevchenko
  Cc: Clément Perrochaud, Charles Gorand, linux-nfc, Samuel Ortiz,
	linux-wireless
In-Reply-To: <CA+icZUWgQQ-h+e=fvb+yheZRm5NuL=YGMmVSjEnAizKPtMqhvg@mail.gmail.com>

On 5/13/19 2:46 PM, Sedat Dilek wrote:

> That "tag1" was my YubiKey after putting it on the NFC sticker on my ThinkPad T470.

:)

Sedat, Andy, thanks a lot and great job!

Regards,
Oleg

^ permalink raw reply

* Re: [PATCH v2 00/12] NFC: nxp-nci: clean up and support new ID
From: Andy Shevchenko @ 2019-05-13 12:56 UTC (permalink / raw)
  To: Sedat Dilek
  Cc: Clément Perrochaud, Charles Gorand, linux-nfc, Samuel Ortiz,
	linux-wireless, Oleg Zhurakivskyy
In-Reply-To: <CA+icZUUu6NmQoKS-2x32Fz388Q_ahXyYzLLf5JNm=mZR+r-0kQ@mail.gmail.com>

On Mon, May 13, 2019 at 01:43:12PM +0200, Sedat Dilek wrote:
> On Mon, May 13, 2019 at 12:44 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:

> > Sedat, would be nice if you can compile kernel with this patch series applied
> > and test on your laptop.

> I have tested Andy's v2 series on my ThinkPad T470 successfully with
> Linux v5.1.1.
> 
> Additionally, I had the NFC patch "NFC: fix attrs checks in netlink
> interface" from Andrey Konovalov (see [1]).
> 
> sdi@iniza:~/src/linux-kernel/linux$ git log --oneline v5.1.1..
> 729d291510c2 (HEAD -> 5.1.1-1-amd64-gcc8-ldbfd) Merge branch
> 'for-5.1/nfc-nxp-nci' into 5.1.1-1-amd64-gcc8-ldbfd
> f083f056830c (for-5.1/nfc-nxp-nci-v2) NFC: nxp-nci: Convert to SPDX license tags
> 132b5681e074 NFC: nxp-nci: Remove 'default n' for tests
> 840b1df28cab NFC: nxp-nci: Remove unused macro pr_fmt()
> 5b55e26db0c2 NFC: nxp-nci: Drop comma in terminator lines
> 0a1edd5ce3bb NFC: nxp-nci: Drop of_match_ptr() use
> acae10451393 NFC: nxp-nci: Constify acpi_device_id
> 07648528dae3 NFC: nxp-nci: Get rid of useless label
> 38b8c38f2187 NFC: nxp-nci: Get rid of code duplication in ->probe()
> 446f5aef4522 NFC: nxp-nci: Add GPIO ACPI mapping table
> 813d4243c563 NFC: nxp-nci: Convert to use GPIO descriptor
> 1e5187ddb944 NFC: nxp-nci: Get rid of platform data
> 775a4fa8fb68 NFC: nxp-nci: Add NXP1001 to the ACPI ID table
> db79db400c5b Merge branch 'for-5.1/nfc' into 5.1.1-1-amd64-cbl-asmgoto
> e1c37435140f (for-5.1/nfc) NFC: fix attrs checks in netlink interface
> 
> With neard (daemon) and neard-tools packages from Debian/buster AMD64
> I am able to access, list and poll from my NFC (nfc0) device.
> 
> root@iniza:~# systemctl status neard.service
> ● neard.service - LSB: NFC daemon
>    Loaded: loaded (/etc/init.d/neard; generated)
>    Active: active (running) since Mon 2019-05-13 13:14:12 CEST; 16min ago
>      Docs: man:systemd-sysv-generator(8)
>   Process: 810 ExecStart=/etc/init.d/neard start (code=exited, status=0/SUCCESS)
>     Tasks: 1 (limit: 4915)
>    Memory: 1.6M
>    CGroup: /system.slice/neard.service
>            └─885 /usr/lib/neard/neard
> 
> Mai 13 13:14:12 iniza systemd[1]: Starting LSB: NFC daemon...
> Mai 13 13:14:12 iniza neard[877]: NEAR daemon version 0.16
> Mai 13 13:14:12 iniza neard[810]: Starting NFC daemon: neard.
> Mai 13 13:14:12 iniza systemd[1]: Started LSB: NFC daemon.
> 
> root@iniza:~# nfctool --list
> nfc0:
>           Tags: [ tag0 ]
>           Devices: [ ]
>           Protocols: [ Felica MIFARE Jewel ISO-DEP NFC-DEP ]
>           Powered: Yes
>           RF Mode: Initiator
>           lto: 150
>           rw: 15
>           miux: 2047
> 
> root@iniza:~# nfctool --poll -d nfc0
> Start polling on nfc0 as initiator
> 
> Targets found for nfc0
>   Tags: [ tag1 ]
>   Devices: [ ]
> 
> Thanks to all involved people.
> 
> Please, feel free to add any credits you think are appropriate.
> 
> A big Thank you from North-West Germany.

Thank you for testing. I hope Samuel will take this soon to his tree.

> [1] https://patchwork.kernel.org/patch/10339089/

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply

* Re: [linux-nfc] ThinkPad T470 and NXP PN5xx (PN547 or PN548)
From: Sedat Dilek @ 2019-05-13 13:32 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Oleg Zhurakivskyy, Samuel Ortiz, linux-wireless, linux-nfc
In-Reply-To: <20190513124049.GT9224@smile.fi.intel.com>

BTW, which Linux Kconfig setting are minimum?

scripts/config -m NFC_NCI -m NFC_NXP_NCI -m NFC_NXP_NCI_I2C

What about?

scripts/config -m NFC_NCI_SPI -m NFC_NCI_UART -m I2C_GPIO -m SPI_GPIO

Required?
Not needed?

- Sedat -

^ permalink raw reply

* [PATCH] iwlwifi: trans: fix killer series loadded incorrect firmware
From: Cyrus Lien @ 2019-05-13 13:33 UTC (permalink / raw)
  To: Johannes Berg, Emmanuel Grumbach, Luca Coelho,
	Intel Linux Wireless, Kalle Valo, David S. Miller,
	Shahar S Matityahu, Sara Sharon, Golan Ben Ami, Lior Cohen,
	Shaul Triebitz, linux-wireless, netdev, linux-kernel
  Cc: Cyrus Lien

Killer series loadded IWL_22000_HR_B_FW_PRE prefixed firmware instead
IWL_CC_A_FW_PRE prefixed firmware.

Add killer series to the check logic as iwl_ax200_cfg_cc.

Signed-off-by: Cyrus Lien <cyrus.lien@canonical.com>
---
 drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index 79c1dc05f948..576c2186b6bf 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -3565,7 +3565,9 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 		}
 	} else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
 		   CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) &&
-		   (trans->cfg != &iwl_ax200_cfg_cc ||
+		   ((trans->cfg != &iwl_ax200_cfg_cc &&
+		     trans->cfg != &killer1650x_2ax_cfg &&
+		     trans->cfg != &killer1650w_2ax_cfg) ||
 		    trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0)) {
 		u32 hw_status;
 
-- 
2.17.1


^ permalink raw reply related

* Re: KASAN: use-after-free Read in p54u_load_firmware_cb
From: Oliver Neukum @ 2019-05-13 13:28 UTC (permalink / raw)
  To: syzbot, kvalo, davem, andreyknvl, syzkaller-bugs, chunkeey,
	linux-kernel, linux-usb, linux-wireless, netdev
  Cc: Michael Wu
In-Reply-To: <00000000000073512b0588c24d09@google.com>

On Mo, 2019-05-13 at 03:23 -0700, syzbot wrote:
> syzbot has found a reproducer for the following crash on:
> 
> HEAD commit:    43151d6c usb-fuzzer: main usb gadget fuzzer driver
> git tree:       https://github.com/google/kasan.git usb-fuzzer
> console output: https://syzkaller.appspot.com/x/log.txt?x=16b64110a00000
> kernel config:  https://syzkaller.appspot.com/x/.config?x=4183eeef650d1234
> dashboard link: https://syzkaller.appspot.com/bug?extid=200d4bb11b23d929335f
> compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
> syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=1634c900a00000
> 
> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+200d4bb11b23d929335f@syzkaller.appspotmail.com
> 
> usb 1-1: config 0 descriptor??
> usb 1-1: reset high-speed USB device number 2 using dummy_hcd
> usb 1-1: device descriptor read/64, error -71
> usb 1-1: Using ep0 maxpacket: 8
> usb 1-1: Loading firmware file isl3887usb
> usb 1-1: Direct firmware load for isl3887usb failed with error -2
> usb 1-1: Firmware not found.
> ==================================================================
> BUG: KASAN: use-after-free in p54u_load_firmware_cb.cold+0x97/0x13a  
> drivers/net/wireless/intersil/p54/p54usb.c:936
> Read of size 8 at addr ffff88809803f588 by task kworker/1:0/17

Hi,

it looks to me as if refcounting is broken.
You should have a usb_put_dev() in p54u_load_firmware_cb() or in
p54u_disconnect(), but not both.

	Regards
		Oliver


^ permalink raw reply

* Re: [linux-nfc] ThinkPad T470 and NXP PN5xx (PN547 or PN548)
From: Andy Shevchenko @ 2019-05-13 14:11 UTC (permalink / raw)
  To: Sedat Dilek; +Cc: Oleg Zhurakivskyy, Samuel Ortiz, linux-wireless, linux-nfc
In-Reply-To: <CA+icZUWU2OQszOYi1Jzp7yW+gB-TmhkBfmqaLAvy3WEOn9Rh8g@mail.gmail.com>

On Mon, May 13, 2019 at 03:32:52PM +0200, Sedat Dilek wrote:
> BTW, which Linux Kconfig setting are minimum?
> 
> scripts/config -m NFC_NCI -m NFC_NXP_NCI -m NFC_NXP_NCI_I2C
> 
> What about?
> 
> scripts/config -m NFC_NCI_SPI -m NFC_NCI_UART -m I2C_GPIO -m SPI_GPIO
> 
> Required?
> Not needed?

I2C_GPIO and SPI_GPIO has nothing to do with all this. What indeed is needed is
the pin control of the actual Intel SoC (unfortunately I don't know what
exactly you have, so, you better to check yourself), something like
CONFIG_PINCTRL_SKYLAKE=y.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply

* Re: [linux-nfc] ThinkPad T470 and NXP PN5xx (PN547 or PN548)
From: Sedat Dilek @ 2019-05-13 14:23 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Oleg Zhurakivskyy, Samuel Ortiz, linux-wireless, linux-nfc
In-Reply-To: <20190513141128.GY9224@smile.fi.intel.com>

On Mon, May 13, 2019 at 4:11 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Mon, May 13, 2019 at 03:32:52PM +0200, Sedat Dilek wrote:
> > BTW, which Linux Kconfig setting are minimum?
> >
> > scripts/config -m NFC_NCI -m NFC_NXP_NCI -m NFC_NXP_NCI_I2C
> >
> > What about?
> >
> > scripts/config -m NFC_NCI_SPI -m NFC_NCI_UART -m I2C_GPIO -m SPI_GPIO
> >
> > Required?
> > Not needed?
>
> I2C_GPIO and SPI_GPIO has nothing to do with all this. What indeed is needed is
> the pin control of the actual Intel SoC (unfortunately I don't know what
> exactly you have, so, you better to check yourself), something like
> CONFIG_PINCTRL_SKYLAKE=y.
>

OK.

What is with NFC_NCI_SPI and NFC_NCI_UART Kconfigs?

I had never changed PINCTRL Kconfigs, so what I have is/was...

$ grep PINCTRL .config | grep ^CONFIG | sort
CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=y
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_INTEL=y
CONFIG_PINCTRL_SUNRISEPOINT=y
CONFIG_PINCTRL=y

Which one is this?

And if PINCTRL_XXX is mandatory, shall it be added as Kconfig
dependency in drivers/nfc/nxp-nci/Kconfig?

- Sedat -

P.S.: List of unset PINCTRL Kconfigs

$ grep PINCTRL .config | grep ^'# CONFIG' | sort
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
# CONFIG_PINCTRL_CEDARFORK is not set
# CONFIG_PINCTRL_DENVERTON is not set
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_ICELAKE is not set
# CONFIG_PINCTRL_LEWISBURG is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_SX150X is not set

^ permalink raw reply

* Re: [PATCH 2/3] nl80211: Add support for EDMG channels
From: Alexei Avshalom Lazar @ 2019-05-13 14:38 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, wil6210
In-Reply-To: <1535448830.5895.30.camel@sipsolutions.net>



On 8/28/2018 12:33 PM, Johannes Berg wrote:
> On Mon, 2018-08-13 at 15:33 +0300, Alexei Avshalom Lazar wrote:
>>

Hi Johannes

The implementation has been updated according to the latest spec draft, 
Draft P802.11ay_D3.0
Most of the code that you commented has been updated in the new patch 
and your comments were taken into consideration where applicable.
I will upload an updated version of the patches shortly.

>>   /**
>> + * struct ieee80211_sta_edmg_cap - EDMG capabilities
>> + *
>> + * This structure describes most essential parameters needed
>> + * to describe 802.11ay EDMG capabilities
>> + *
>> + * @supported: is EDMG supported, Device may support EDMG
>> + *	without supporting channel bonding. In this case
>> + *	supported would be TRUE with n_channels = 0
> 
> TRUE -> %true

Not relevant with new patch.

> 
>> + * @channels: supported ieee EDMG channel numbers
> 
> IEEE

Not relevant with new patch.

> 
>> + * @n_channels: Number of channels in @channels
>> + */
>> +struct ieee80211_sta_edmg_cap {
>> +	bool supported;
>> +	u8 *channels;
> 
> const?
> 
> But really this is pointless - there are *two* channels here (6 and 7),
> and so at most you point to a 2-byte array? Just make it
> 
> 	u8 channels[2];
> 
> or something and save the whole pointering?
> 
> Ok, no, there are 9-25 or something, so I guess more than that...
> 
> Uh. Why do we bother though? Do we need the channel number anywhere? Why
> not just let userspace specify the bitmap to start with?
> 
> Would there really be devices that base their support for channels on
> anything other than support for the underlying DMG channels?

Devices will base their support on the combination of EDMG CB1 channels 
with the allowed bandwidth, for example if channels 1-3 are supported it 
doesn’t necessarily mean that CB3 (channel bonding of 3 channels) is 
supported. It is possible that device supports only CB2 (bonding of 2 
channels).
Please notice that the representation of the capabilities has been 
updated in the new patch.

> 
> 
>>    * @center_freq1: center frequency of first segment
>>    * @center_freq2: center frequency of second segment
>>    *	(only with 80+80 MHz)
>> + * @edmg_mode: if defined, edmg supported and primary channel is EDMG
>> + * @edmg_channel: the EDMG channel
>>    */
>>   struct cfg80211_chan_def {
>>   	struct ieee80211_channel *chan;
>>   	enum nl80211_chan_width width;
>>   	u32 center_freq1;
>>   	u32 center_freq2;
>> +	bool edmg_mode;
>> +	u8 edmg_channel;
> 
> This seems odd. What do you put into chan_width if it's EDMG then? What
> do you put into the chan pointer?

chan_width is not used today for the 11ad and cannot be used for channel 
bonding because the 11ay bandwidth configuration can have more than one 
option, for example - bandwidth configuration #13 means device can 
choose to associate on 2.16 or 4.32 or 2.16+2.16 channel width.
For the 11ay purposes the chan pointer has the information for the 
primary channel, band,  c_freq, hw_value (same as DMG case).

> 
>> + * @NL80211_ATTR_WIPHY_EDMG_CHANNEL: EDMG channel to be used for AP
>> + *      configuration and connect command.
> 
> u8 is intended, I assume?
> 
> But why do you need this anyhow? The EDMG channel has a frequency just
> like all other channels, no? Can't we continue to use the existing
> attributes?

This has been updated to bitmap of the legacy channel and the bandwidth 
configuration.
frequency attribute will be meaningless because they won't represent the 
relevant possibilities that defined by the spec, for example if the AP 
support CB2 and CB3 we won't be able to represent it with the frequencies.

> 
>> +static const struct edmg_chan_table {
>> +	/* the edmg channel - 9,10,11... */
>> +	u8 edmg_chan;
>> +	/* the sub channels represented as a bitfield where the bit-index
>> +	 * corresponds to the legacy channel (bit 0 not used).
>> +	 */
>> +	u8 sub_chans;
> 
> Uh, ok, so I guess it's more complicated?
> 
> I'm not familiar with 802.11ay ... I guess a short primer should be in
> the patch set here somewhere :)
> 
>> +} cfg80211_edmg_table[] = {
>> +	{9, 0x06},	/* channels 1,2 */
> 
> BIT(1) | BIT(2) ? then you don't really need the comments ...

Agree but not relevant with new patch.

> 
>> +	{10, 0x0c},	/* channels 2,3 */
>> +	{11, 0x18},	/* channels 3,4 */
>> +	{12, 0x30},	/* channels 4,5 */
>> +	{13, 0x60},	/* channels 5,6 */
>> +	{17, 0x0e},	/* channels 1,2,3 */
>> +	{18, 0x1c},	/* channels 2,3,4 */
>> +	{19, 0x38},	/* channels 3,4,5 */
>> +	{20, 0x70},	/* channels 4,5,6 */
> 
> What happened to 21-24?

The spec doesn’t define contiguous channel numbers so 21-24 are not 
defined, same for 14-16.

> 
>> +	{25, 0x1e},	/* channels 1,2,3,4 */
> 
>> +static u8 cfg80211_get_edmg_sub_chans(u8 edmg_channel)
>> +{
>> +	int i;
>> +
>> +	for (i = 0; i < ARRAY_SIZE(cfg80211_edmg_table); i++)
>> +		if (cfg80211_edmg_table[i].edmg_chan == edmg_channel)
>> +			return cfg80211_edmg_table[i].sub_chans;
> 
> Maybe just index the array at "edmg_channel - 9", add dummies for 21-24
> and save the whole loop? I guess it doesn't matter so much though.

Not relevant with new patch.

> 
> johannes
> 

-- 
Alexei Lazar
Qualcomm Israel, on behalf of Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum a 
Linux Foundation Collaborative Project

^ permalink raw reply

* [PATCH v2 0/2] Add support for new channels on 60GHz band
From: Alexei Avshalom Lazar @ 2019-05-13 14:42 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Alexei Avshalom Lazar, linux-wireless, wil6210

The following set of patches add support for new channels on
60GHz band and EDMG channels:
-Nl80211 support for EDMG channels
-Wil6210 support for EDMG channels

Alexei Avshalom Lazar (2):
  nl80211: Add support for EDMG channels
  wil6210: Add EDMG channel support

 drivers/net/wireless/ath/wil6210/cfg80211.c  | 205 +++++++++++++++++++++++++--
 drivers/net/wireless/ath/wil6210/txrx_edma.c |   2 +
 drivers/net/wireless/ath/wil6210/txrx_edma.h |   6 +
 drivers/net/wireless/ath/wil6210/wil6210.h   |   8 +-
 drivers/net/wireless/ath/wil6210/wmi.c       |   5 +-
 drivers/net/wireless/ath/wil6210/wmi.h       |  30 +++-
 include/net/cfg80211.h                       |  39 ++++-
 include/uapi/linux/nl80211.h                 |  19 +++
 net/wireless/chan.c                          | 152 +++++++++++++++++++-
 net/wireless/nl80211.c                       |  33 +++++
 net/wireless/util.c                          |  42 +++++-
 11 files changed, 521 insertions(+), 20 deletions(-)

-- 
1.9.1


^ permalink raw reply

* [PATCH v2 1/2] nl80211: Add support for EDMG channels
From: Alexei Avshalom Lazar @ 2019-05-13 14:42 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Alexei Avshalom Lazar, linux-wireless, wil6210
In-Reply-To: <1557758554-18907-1-git-send-email-ailizaro@codeaurora.org>

802.11ay specification defines Enhanced Directional Multi-Gigabit
(EDMG) STA and AP which allow channel bonding of 2 channels and more.
Introduce NL80211_ATTR_WIPHY_EDMG_CHANNELS,
NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, NL80211_BAND_ATTR_EDMG_CHANNELS,
NL80211_BAND_ATTR_EDMG_BW_CONFIG and RATE_INFO_FLAGS_EDMG
that needed for enabling and configuring EDMG support.
Driver is expected to report its EDMG capabilities: whether EDMG
is supported and the supported EDMG channels.
Bitrate calculation is enhanced to take into account EDMG support
according to the 802.11ay specification.
The kernel uses NL80211_BAND_ATTR_EDMG_CHANNELS and
NL80211_BAND_ATTR_EDMG_BW_CONFIG attributes in order to publish
the EDMG capabilities to the userspace.
NL80211_BAND_ATTR_EDMG_CHANNELS is a bitmap field that indicates
the 2.16 GHz channel(s) that are allowed to be used for transmissions
in the BSS.
If NL80211_BAND_ATTR_EDMG_CHANNELS is not set then EDMG not
supported. NL80211_BAND_ATTR_EDMG_BW_CONFIG represent the allowed
channel bandwidth configurations.
NL80211_ATTR_WIPHY_EDMG_CHANNELS and NL80211_ATTR_WIPHY_EDMG_BW_CONFIG
will be used by the userspace for AP configuration and connect command.

Change-Id: I534f4a750354a4b0baad28c47dc29afb9cbc36ac
---
 drivers/net/wireless/ath/wil6210/cfg80211.c |   2 +-
 include/net/cfg80211.h                      |  39 ++++++-
 include/uapi/linux/nl80211.h                |  19 ++++
 net/wireless/chan.c                         | 152 +++++++++++++++++++++++++++-
 net/wireless/nl80211.c                      |  33 ++++++
 net/wireless/util.c                         |  42 +++++++-
 6 files changed, 280 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index a1e226652..ce68fbc 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -346,7 +346,7 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 			BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC) |
 			BIT_ULL(NL80211_STA_INFO_TX_FAILED);
 
-	sinfo->txrate.flags = RATE_INFO_FLAGS_60G;
+	sinfo->txrate.flags = RATE_INFO_FLAGS_DMG;
 	sinfo->txrate.mcs = le16_to_cpu(reply.evt.bf_mcs);
 	sinfo->rxrate.mcs = stats->last_mcs_rx;
 	sinfo->rx_bytes = stats->rx_bytes;
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 117691f..f2d2239 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -321,6 +321,23 @@ struct ieee80211_sband_iftype_data {
 };
 
 /**
+ * struct ieee80211_sta_edmg_cap - EDMG capabilities
+ *
+ * This structure describes most essential parameters needed
+ * to describe 802.11ay EDMG capabilities
+ *
+ * @channels: bitmap that indicates the 2.16 GHz channel(s)
+ *	that are allowed to be used for transmissions in the BSS.
+ *	Set to 0 indicate EDMG not supported.
+ * @bw_config: Channel BW Configuration subfield encodes
+ *	the allowed channel bandwidth configurations
+ */
+struct ieee80211_sta_edmg_cap {
+	u8 channels;
+	u8 bw_config;
+};
+
+/**
  * struct ieee80211_supported_band - frequency band definition
  *
  * This structure describes a frequency band a wiphy
@@ -336,6 +353,7 @@ struct ieee80211_sband_iftype_data {
  * @n_bitrates: Number of bitrates in @bitrates
  * @ht_cap: HT capabilities in this band
  * @vht_cap: VHT capabilities in this band
+ * @edmg_cap: EDMG capabilities in this band
  * @n_iftype_data: number of iftype data entries
  * @iftype_data: interface type data entries.  Note that the bits in
  *	@types_mask inside this structure cannot overlap (i.e. only
@@ -350,6 +368,7 @@ struct ieee80211_supported_band {
 	int n_bitrates;
 	struct ieee80211_sta_ht_cap ht_cap;
 	struct ieee80211_sta_vht_cap vht_cap;
+	struct ieee80211_sta_edmg_cap edmg_cap;
 	u16 n_iftype_data;
 	const struct ieee80211_sband_iftype_data *iftype_data;
 };
@@ -503,12 +522,18 @@ struct key_params {
  * @center_freq1: center frequency of first segment
  * @center_freq2: center frequency of second segment
  *	(only with 80+80 MHz)
+ * @edmg_channels: bitmap that indicates the 2.16 GHz channel(s)
+ *	that are allowed to be used for transmissions in the BSS.
+ * @edmg_bw_config: Channel BW Configuration subfield encodes
+ *	the allowed channel bandwidth configurations
  */
 struct cfg80211_chan_def {
 	struct ieee80211_channel *chan;
 	enum nl80211_chan_width width;
 	u32 center_freq1;
 	u32 center_freq2;
+	u8 edmg_channels;
+	u8 edmg_bw_config;
 };
 
 /**
@@ -1144,15 +1169,17 @@ int cfg80211_check_station_change(struct wiphy *wiphy,
  * @RATE_INFO_FLAGS_MCS: mcs field filled with HT MCS
  * @RATE_INFO_FLAGS_VHT_MCS: mcs field filled with VHT MCS
  * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
- * @RATE_INFO_FLAGS_60G: 60GHz MCS
+ * @RATE_INFO_FLAGS_DMG: 60GHz MCS
  * @RATE_INFO_FLAGS_HE_MCS: HE MCS information
+ * @RATE_INFO_FLAGS_EDMG: 60GHz MCS in EDMG mode
  */
 enum rate_info_flags {
 	RATE_INFO_FLAGS_MCS			= BIT(0),
 	RATE_INFO_FLAGS_VHT_MCS			= BIT(1),
 	RATE_INFO_FLAGS_SHORT_GI		= BIT(2),
-	RATE_INFO_FLAGS_60G			= BIT(3),
+	RATE_INFO_FLAGS_DMG			= BIT(3),
 	RATE_INFO_FLAGS_HE_MCS			= BIT(4),
+	RATE_INFO_FLAGS_EDMG			= BIT(5),
 };
 
 /**
@@ -1192,6 +1219,7 @@ enum rate_info_bw {
  * @he_dcm: HE DCM value
  * @he_ru_alloc: HE RU allocation (from &enum nl80211_he_ru_alloc,
  *	only valid if bw is %RATE_INFO_BW_HE_RU)
+ * @n_bonded_ch: In case of EDMG the number of bonded channels (1-4)
  */
 struct rate_info {
 	u8 flags;
@@ -1202,6 +1230,7 @@ struct rate_info {
 	u8 he_gi;
 	u8 he_dcm;
 	u8 he_ru_alloc;
+	u8 n_bonded_ch;
 };
 
 /**
@@ -2403,6 +2432,10 @@ struct cfg80211_bss_selection {
  * @fils_erp_rrk_len: Length of @fils_erp_rrk in octets.
  * @want_1x: indicates user-space supports and wants to use 802.1X driver
  *	offload of 4-way handshake.
+ * @edmg_channels: bitmap that indicates the 2.16 GHz channel(s)
+ *	that are allowed to be used for transmissions in the BSS.
+ * @edmg_bw_config: Channel BW Configuration subfield encodes
+ *	the allowed channel bandwidth configurations
  */
 struct cfg80211_connect_params {
 	struct ieee80211_channel *channel;
@@ -2436,6 +2469,8 @@ struct cfg80211_connect_params {
 	const u8 *fils_erp_rrk;
 	size_t fils_erp_rrk_len;
 	bool want_1x;
+	u8 edmg_channels;
+	u8 edmg_bw_config;
 };
 
 /**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 25f70dd..f74cce1 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2324,6 +2324,13 @@ enum nl80211_commands {
  *	should be picking up the lowest tx power, either tx power per-interface
  *	or per-station.
  *
+ * @NL80211_ATTR_WIPHY_EDMG_CHANNELS: bitmap that indicates the 2.16 GHz
+ *	channel(s) that are allowed to be used for EDMG transmissions in the
+ *	BSS as defined by IEEE 802.11 section 9.4.2.251.
+ * @NL80211_ATTR_WIPHY_EDMG_BW_CONFIG: Channel BW Configuration subfield encodes
+ *	the allowed channel bandwidth configurations as defined by IEEE 802.11
+ *	section 9.4.2.251, Table 13.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2777,6 +2784,9 @@ enum nl80211_attrs {
 	NL80211_ATTR_STA_TX_POWER_SETTING,
 	NL80211_ATTR_STA_TX_POWER,
 
+	NL80211_ATTR_WIPHY_EDMG_CHANNELS,
+	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -3385,6 +3395,12 @@ enum nl80211_band_iftype_attr {
  * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE
  * @NL80211_BAND_ATTR_IFTYPE_DATA: nested array attribute, with each entry using
  *	attributes from &enum nl80211_band_iftype_attr
+ * @NL80211_BAND_ATTR_EDMG_CHANNELS: bitmap that indicates the 2.16 GHz
+ *	channel(s) that are allowed to be used for EDMG transmissions in the
+ *	BSS as defined by IEEE 802.11 section 9.4.2.251.
+ * @NL80211_BAND_ATTR_EDMG_BW_CONFIG: Channel BW Configuration subfield
+ *	encodes the allowed channel bandwidth configurations as defined by
+ *	IEEE 802.11 section 9.4.2.251, Table 13.
  * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined
  * @__NL80211_BAND_ATTR_AFTER_LAST: internal use
  */
@@ -3402,6 +3418,9 @@ enum nl80211_band_attr {
 	NL80211_BAND_ATTR_VHT_CAPA,
 	NL80211_BAND_ATTR_IFTYPE_DATA,
 
+	NL80211_BAND_ATTR_EDMG_CHANNELS,
+	NL80211_BAND_ATTR_EDMG_BW_CONFIG,
+
 	/* keep last */
 	__NL80211_BAND_ATTR_AFTER_LAST,
 	NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index 7dc1bbd..d23135c 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -23,6 +23,8 @@ void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
 
 	chandef->chan = chan;
 	chandef->center_freq2 = 0;
+	chandef->edmg_bw_config = 0;
+	chandef->edmg_channels = 0;
 
 	switch (chan_type) {
 	case NL80211_CHAN_NO_HT:
@@ -47,6 +49,92 @@ void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
 }
 EXPORT_SYMBOL(cfg80211_chandef_create);
 
+static bool cfg80211_edmg_chandef_valid(const struct cfg80211_chan_def *chandef)
+{
+	int max_continuous = 0;
+	int num_of_enabled = 0;
+	int continuous = 0;
+	int i;
+
+	if (!chandef->edmg_channels && !chandef->edmg_bw_config)
+		return true;
+
+	if ((!chandef->edmg_channels && chandef->edmg_bw_config) ||
+	    (chandef->edmg_channels && !chandef->edmg_bw_config))
+		return false;
+
+	for (i = 0; i < 6; i++) {
+		if (chandef->edmg_channels & BIT(i)) {
+			continuous++;
+			num_of_enabled++;
+		} else {
+			continuous = 0;
+		}
+
+		max_continuous = max(continuous, max_continuous);
+	}
+	/* basic verification of edmg configuration according to
+	 * IEEE802.11 section 9.4.2.251
+	 */
+	/* check bw_config against continuous edmg channels */
+	switch (chandef->edmg_bw_config) {
+	case 4:
+	case 8:
+	case 12:
+		if (max_continuous < 1)
+			return false;
+		break;
+	case 5:
+	case 9:
+	case 13:
+		if (max_continuous < 2)
+			return false;
+		break;
+	case 6:
+	case 10:
+	case 14:
+		if (max_continuous < 3)
+			return false;
+		break;
+	case 7:
+	case 11:
+	case 15:
+		if (max_continuous < 4)
+			return false;
+		break;
+
+	default:
+		return false;
+	}
+
+	/* check bw_config against aggregated (non continuous) edmg channels */
+	switch (chandef->edmg_bw_config) {
+	case 4:
+	case 5:
+	case 6:
+	case 7:
+		break;
+	case 8:
+	case 9:
+	case 10:
+	case 11:
+		if (num_of_enabled < 2)
+			return false;
+		break;
+	case 12:
+	case 13:
+	case 14:
+	case 15:
+		if (num_of_enabled < 4 || max_continuous < 2)
+			return false;
+		break;
+	default:
+		return false;
+	}
+
+	return true;
+}
+
 bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
 {
 	u32 control_freq;
@@ -112,7 +200,7 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
 		return false;
 	}
 
-	return true;
+	return cfg80211_edmg_chandef_valid(chandef);
 }
 EXPORT_SYMBOL(cfg80211_chandef_valid);
 
@@ -721,12 +809,65 @@ static bool cfg80211_secondary_chans_ok(struct wiphy *wiphy,
 	return true;
 }
 
+/* check if the operating channels are valid and supported */
+static bool cfg80211_edmg_usable(struct wiphy *wiphy, u8 edmg_channels,
+				 u8 edmg_bw_config, int primary_channel,
+				 struct ieee80211_sta_edmg_cap *edmg_cap)
+{
+	struct ieee80211_channel *chan;
+	int i, freq;
+	int channels_counter = 0;
+
+	if (!edmg_channels && !edmg_bw_config)
+		return true;
+
+	if ((!edmg_channels && edmg_bw_config) ||
+	    (edmg_channels && !edmg_bw_config))
+		return false;
+
+	if (!(edmg_channels & BIT(primary_channel - 1)))
+		return false;
+
+	/* 60GHz channels 1..6 */
+	for (i = 0; i < 6; i++) {
+		if (!(edmg_channels & BIT(i)))
+			continue;
+
+		if (!(edmg_cap->channels & BIT(i)))
+			return false;
+
+		channels_counter++;
+
+		freq = ieee80211_channel_to_frequency(i + 1,
+						      NL80211_BAND_60GHZ);
+		chan = ieee80211_get_channel(wiphy, freq);
+		if (!chan || chan->flags & IEEE80211_CHAN_DISABLED)
+			return false;
+	}
+
+	/* IEEE802.11 allows max 4 channels */
+	if (channels_counter > 4)
+		return false;
+
+	/* check bw_config is a subset of what driver supports
+	 * (see IEEE 802.11 section 9.4.2.251, Table 13)
+	 */
+	if ((edmg_bw_config % 4) > (edmg_cap->bw_config % 4))
+		return false;
+
+	if (edmg_bw_config > edmg_cap->bw_config)
+		return false;
+
+	return true;
+}
+
 bool cfg80211_chandef_usable(struct wiphy *wiphy,
 			     const struct cfg80211_chan_def *chandef,
 			     u32 prohibited_flags)
 {
 	struct ieee80211_sta_ht_cap *ht_cap;
 	struct ieee80211_sta_vht_cap *vht_cap;
+	struct ieee80211_sta_edmg_cap *edmg_cap;
 	u32 width, control_freq, cap;
 
 	if (WARN_ON(!cfg80211_chandef_valid(chandef)))
@@ -734,6 +875,15 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 
 	ht_cap = &wiphy->bands[chandef->chan->band]->ht_cap;
 	vht_cap = &wiphy->bands[chandef->chan->band]->vht_cap;
+	edmg_cap = &wiphy->bands[chandef->chan->band]->edmg_cap;
+
+	if (edmg_cap->channels &&
+	    !cfg80211_edmg_usable(wiphy,
+				  chandef->edmg_channels,
+				  chandef->edmg_bw_config,
+				  chandef->chan->hw_value,
+				  edmg_cap))
+		return false;
 
 	control_freq = chandef->chan->center_freq;
 
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index da3843a..c6d4b44 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -288,6 +288,9 @@ static int validate_ie_attr(const struct nlattr *attr,
 
 	[NL80211_ATTR_WIPHY_FREQ] = { .type = NLA_U32 },
 	[NL80211_ATTR_WIPHY_CHANNEL_TYPE] = { .type = NLA_U32 },
+	[NL80211_ATTR_WIPHY_EDMG_CHANNELS] = { .type = NLA_U8 },
+	[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG] = { .type = NLA_U8 },
+
 	[NL80211_ATTR_CHANNEL_WIDTH] = { .type = NLA_U32 },
 	[NL80211_ATTR_CENTER_FREQ1] = { .type = NLA_U32 },
 	[NL80211_ATTR_CENTER_FREQ2] = { .type = NLA_U32 },
@@ -1501,6 +1504,15 @@ static int nl80211_send_band_rateinfo(struct sk_buff *msg,
 		nla_nest_end(msg, nl_iftype_data);
 	}
 
+	/* add EDMG info */
+	if (sband->edmg_cap.channels &&
+	    (nla_put_u8(msg, NL80211_BAND_ATTR_EDMG_CHANNELS,
+		       sband->edmg_cap.channels) ||
+	    nla_put_u8(msg, NL80211_BAND_ATTR_EDMG_BW_CONFIG,
+		       sband->edmg_cap.bw_config)))
+
+		return -ENOBUFS;
+
 	/* add bitrates */
 	nl_rates = nla_nest_start(msg, NL80211_BAND_ATTR_RATES);
 	if (!nl_rates)
@@ -2560,6 +2572,18 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
 				nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ2]);
 	}
 
+	if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
+		chandef->edmg_channels =
+		      nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]);
+
+		if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
+			chandef->edmg_bw_config =
+		     nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]);
+	} else {
+		chandef->edmg_bw_config = 0;
+		chandef->edmg_channels = 0;
+	}
+
 	if (!cfg80211_chandef_valid(chandef)) {
 		NL_SET_ERR_MSG(extack, "invalid channel definition");
 		return -EINVAL;
@@ -9699,6 +9723,15 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 			return -EINVAL;
 	}
 
+	if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
+		connect.edmg_channels =
+		      nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]);
+
+		if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
+			connect.edmg_bw_config =
+		     nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]);
+	}
+
 	if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) {
 		connkeys = nl80211_parse_connkeys(rdev, info, NULL);
 		if (IS_ERR(connkeys))
diff --git a/net/wireless/util.c b/net/wireless/util.c
index cf63b63..7d06dd6 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -1034,7 +1034,7 @@ static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate)
 	return (bitrate + 50000) / 100000;
 }
 
-static u32 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
+static u32 cfg80211_calculate_bitrate_dmg(struct rate_info *rate)
 {
 	static const u32 __mcs2bitrate[] = {
 		/* control PHY */
@@ -1081,6 +1081,40 @@ static u32 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
 	return __mcs2bitrate[rate->mcs];
 }
 
+static u32 cfg80211_calculate_bitrate_edmg(struct rate_info *rate)
+{
+	static const u32 __mcs2bitrate[] = {
+		/* control PHY */
+		[0] =   275,
+		/* SC PHY */
+		[1] =  3850,
+		[2] =  7700,
+		[3] =  9625,
+		[4] = 11550,
+		[5] = 12512, /* 1251.25 mbps */
+		[6] = 13475,
+		[7] = 15400,
+		[8] = 19250,
+		[9] = 23100,
+		[10] = 25025,
+		[11] = 26950,
+		[12] = 30800,
+		[13] = 38500,
+		[14] = 46200,
+		[15] = 50050,
+		[16] = 53900,
+		[17] = 57750,
+		[18] = 69300,
+		[19] = 75075,
+		[20] = 80850,
+	};
+
+	if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
+		return 0;
+
+	return __mcs2bitrate[rate->mcs] * rate->n_bonded_ch;
+}
+
 static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
 {
 	static const u32 base[4][10] = {
@@ -1253,8 +1287,10 @@ u32 cfg80211_calculate_bitrate(struct rate_info *rate)
 {
 	if (rate->flags & RATE_INFO_FLAGS_MCS)
 		return cfg80211_calculate_bitrate_ht(rate);
-	if (rate->flags & RATE_INFO_FLAGS_60G)
-		return cfg80211_calculate_bitrate_60g(rate);
+	if (rate->flags & RATE_INFO_FLAGS_DMG)
+		return cfg80211_calculate_bitrate_dmg(rate);
+	if (rate->flags & RATE_INFO_FLAGS_EDMG)
+		return cfg80211_calculate_bitrate_edmg(rate);
 	if (rate->flags & RATE_INFO_FLAGS_VHT_MCS)
 		return cfg80211_calculate_bitrate_vht(rate);
 	if (rate->flags & RATE_INFO_FLAGS_HE_MCS)
-- 
1.9.1


^ permalink raw reply related

* [PATCH v2 2/2] wil6210: Add EDMG channel support
From: Alexei Avshalom Lazar @ 2019-05-13 14:42 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Alexei Avshalom Lazar, linux-wireless, wil6210
In-Reply-To: <1557758554-18907-1-git-send-email-ailizaro@codeaurora.org>

Add support for Enhanced Directional Multi-Gigabit (EDMG) channels 9-11.
wil6210 reports it's EDMG capabilities (that are also based on FW
capability) to cfg80211 by filling
wiphy->bands[NL80211_BAND_60GHZ]->edmg_cap.
wil6210 handles edmg_channels and edmg_bw_config requested in connect
and start_ap operations.

Change-Id: I96a2776fe27ed2d8e922e23063e879361cfcb552
---
 drivers/net/wireless/ath/wil6210/cfg80211.c  | 205 +++++++++++++++++++++++++--
 drivers/net/wireless/ath/wil6210/txrx_edma.c |   2 +
 drivers/net/wireless/ath/wil6210/txrx_edma.h |   6 +
 drivers/net/wireless/ath/wil6210/wil6210.h   |   8 +-
 drivers/net/wireless/ath/wil6210/wmi.c       |   5 +-
 drivers/net/wireless/ath/wil6210/wmi.h       |  30 +++-
 6 files changed, 242 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index ce68fbc..161d271 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -25,6 +25,22 @@
 
 #define WIL_MAX_ROC_DURATION_MS 5000
 
+#define WIL_EDMG_CHANNEL_9_SUBCHANNELS	(BIT(0) | BIT(1))
+#define WIL_EDMG_CHANNEL_10_SUBCHANNELS	(BIT(1) | BIT(2))
+#define WIL_EDMG_CHANNEL_11_SUBCHANNELS	(BIT(2) | BIT(3))
+
+/* WIL_EDMG_BW_CONFIGURATION define the allowed channel bandwidth
+ * configurations as defined by IEEE 802.11 section 9.4.2.251, Table 13.
+ * The value 5 allowing CB1 and CB2 of adjacent channels.
+ */
+#define WIL_EDMG_BW_CONFIGURATION 5
+
+/* WIL_EDMG_CHANNELS is a bitmap that indicates the 2.16 GHz channel(s) that
+ * are allowed to be used for EDMG transmissions in the BSS as defined by
+ * IEEE 802.11 section 9.4.2.251.
+ */
+#define WIL_EDMG_CHANNELS (BIT(0) | BIT(1) | BIT(2) | BIT(3))
+
 bool disable_ap_sme;
 module_param(disable_ap_sme, bool, 0444);
 MODULE_PARM_DESC(disable_ap_sme, " let user space handle AP mode SME");
@@ -51,6 +67,39 @@
 	CHAN60G(4, 0),
 };
 
+/* Rx channel bonding mode */
+enum wil_rx_cb_mode {
+	WIL_RX_CB_MODE_DMG,
+	WIL_RX_CB_MODE_EDMG,
+	WIL_RX_CB_MODE_WIDE,
+};
+
+static int wil_rx_cb_mode_to_n_bonded(u8 cb_mode)
+{
+	switch (cb_mode) {
+	case WIL_RX_CB_MODE_DMG:
+	case WIL_RX_CB_MODE_EDMG:
+		return 1;
+	case WIL_RX_CB_MODE_WIDE:
+		return 2;
+	default:
+		return 1;
+	}
+}
+
+static int wil_tx_cb_mode_to_n_bonded(u8 cb_mode)
+{
+	switch (cb_mode) {
+	case WMI_TX_MODE_DMG:
+	case WMI_TX_MODE_EDMG_CB1:
+		return 1;
+	case WMI_TX_MODE_EDMG_CB2:
+		return 2;
+	default:
+		return 1;
+	}
+}
+
 static void
 wil_memdup_ie(u8 **pdst, size_t *pdst_len, const u8 *src, size_t src_len)
 {
@@ -82,6 +131,12 @@ void update_supported_bands(struct wil6210_priv *wil)
 
 	wiphy->bands[NL80211_BAND_60GHZ]->n_channels =
 						wil_num_supported_channels(wil);
+
+	if (test_bit(WMI_FW_CAPABILITY_CHANNEL_BONDING, wil->fw_capabilities))
+		wiphy->bands[NL80211_BAND_60GHZ]->edmg_cap.channels =
+							WIL_EDMG_CHANNELS;
+		wiphy->bands[NL80211_BAND_60GHZ]->edmg_cap.bw_config =
+						      WIL_EDMG_BW_CONFIGURATION;
 }
 
 /* Vendor id to be used in vendor specific command and events
@@ -296,6 +351,86 @@ int wil_iftype_nl2wmi(enum nl80211_iftype type)
 	return -EOPNOTSUPP;
 }
 
+int wil_spec2wmi_ch(u8 spec_ch, u8 *wmi_ch)
+{
+	switch (spec_ch) {
+	case 1:
+		*wmi_ch = WMI_CHANNEL_1;
+		break;
+	case 2:
+		*wmi_ch = WMI_CHANNEL_2;
+		break;
+	case 3:
+		*wmi_ch = WMI_CHANNEL_3;
+		break;
+	case 4:
+		*wmi_ch = WMI_CHANNEL_4;
+		break;
+	case 5:
+		*wmi_ch = WMI_CHANNEL_5;
+		break;
+	case 6:
+		*wmi_ch = WMI_CHANNEL_6;
+		break;
+	case 9:
+		*wmi_ch = WMI_CHANNEL_9;
+		break;
+	case 10:
+		*wmi_ch = WMI_CHANNEL_10;
+		break;
+	case 11:
+		*wmi_ch = WMI_CHANNEL_11;
+		break;
+	case 12:
+		*wmi_ch = WMI_CHANNEL_12;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+int wil_wmi2spec_ch(u8 wmi_ch, u8 *spec_ch)
+{
+	switch (wmi_ch) {
+	case WMI_CHANNEL_1:
+		*spec_ch = 1;
+		break;
+	case WMI_CHANNEL_2:
+		*spec_ch = 2;
+		break;
+	case WMI_CHANNEL_3:
+		*spec_ch = 3;
+		break;
+	case WMI_CHANNEL_4:
+		*spec_ch = 4;
+		break;
+	case WMI_CHANNEL_5:
+		*spec_ch = 5;
+		break;
+	case WMI_CHANNEL_6:
+		*spec_ch = 6;
+		break;
+	case WMI_CHANNEL_9:
+		*spec_ch = 9;
+		break;
+	case WMI_CHANNEL_10:
+		*spec_ch = 10;
+		break;
+	case WMI_CHANNEL_11:
+		*spec_ch = 11;
+		break;
+	case WMI_CHANNEL_12:
+		*spec_ch = 12;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 		       struct station_info *sinfo)
 {
@@ -310,6 +445,7 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 	} __packed reply;
 	struct wil_net_stats *stats = &wil->sta[cid].stats;
 	int rc;
+	u8 txflag = RATE_INFO_FLAGS_DMG;
 
 	memset(&reply, 0, sizeof(reply));
 
@@ -322,7 +458,8 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 		    "  MCS %d TSF 0x%016llx\n"
 		    "  BF status 0x%08x RSSI %d SQI %d%%\n"
 		    "  Tx Tpt %d goodput %d Rx goodput %d\n"
-		    "  Sectors(rx:tx) my %d:%d peer %d:%d\n""}\n",
+		    "  Sectors(rx:tx) my %d:%d peer %d:%d\n"
+		    "  Tx mode %d}\n",
 		    cid, vif->mid, le16_to_cpu(reply.evt.bf_mcs),
 		    le64_to_cpu(reply.evt.tsf), reply.evt.status,
 		    reply.evt.rssi,
@@ -333,7 +470,8 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 		    le16_to_cpu(reply.evt.my_rx_sector),
 		    le16_to_cpu(reply.evt.my_tx_sector),
 		    le16_to_cpu(reply.evt.other_rx_sector),
-		    le16_to_cpu(reply.evt.other_tx_sector));
+		    le16_to_cpu(reply.evt.other_tx_sector),
+		    reply.evt.tx_mode);
 
 	sinfo->generation = wil->sinfo_gen;
 
@@ -346,9 +484,16 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 			BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC) |
 			BIT_ULL(NL80211_STA_INFO_TX_FAILED);
 
-	sinfo->txrate.flags = RATE_INFO_FLAGS_DMG;
+	if (wil->use_enhanced_dma_hw && reply.evt.tx_mode != WMI_TX_MODE_DMG)
+		txflag = RATE_INFO_FLAGS_EDMG;
+
+	sinfo->txrate.flags = txflag;
 	sinfo->txrate.mcs = le16_to_cpu(reply.evt.bf_mcs);
 	sinfo->rxrate.mcs = stats->last_mcs_rx;
+	sinfo->txrate.n_bonded_ch =
+				  wil_tx_cb_mode_to_n_bonded(reply.evt.tx_mode);
+	sinfo->rxrate.n_bonded_ch =
+			     wil_rx_cb_mode_to_n_bonded(stats->last_cb_mode_rx);
 	sinfo->rx_bytes = stats->rx_bytes;
 	sinfo->rx_packets = stats->rx_packets;
 	sinfo->rx_dropped_misc = stats->rx_dropped;
@@ -1006,6 +1151,33 @@ static int wil_ft_connect(struct wiphy *wiphy,
 	return rc;
 }
 
+static int wil_get_wmi_edmg_channel(struct wil6210_priv *wil, u8 edmg_bw_config,
+				    u8 edmg_channels, u8 *wmi_ch)
+{
+	if (!edmg_bw_config) {
+		*wmi_ch = 0;
+		return 0;
+	} else if (edmg_bw_config == WIL_EDMG_BW_CONFIGURATION) {
+		/* convert from edmg channel bitmap into edmg channel number */
+		switch (edmg_channels) {
+		case WIL_EDMG_CHANNEL_9_SUBCHANNELS:
+			return wil_spec2wmi_ch(9, wmi_ch);
+		case WIL_EDMG_CHANNEL_10_SUBCHANNELS:
+			return wil_spec2wmi_ch(10, wmi_ch);
+		case WIL_EDMG_CHANNEL_11_SUBCHANNELS:
+			return wil_spec2wmi_ch(11, wmi_ch);
+		default:
+			wil_err(wil, "Unsupported edmg channel bitmap 0x%x\n",
+				edmg_channels);
+			return -EINVAL;
+		}
+	} else {
+		wil_err(wil, "Unsupported EDMG BW configuration %d\n",
+			edmg_bw_config);
+		return -EINVAL;
+	}
+}
+
 static int wil_cfg80211_connect(struct wiphy *wiphy,
 				struct net_device *ndev,
 				struct cfg80211_connect_params *sme)
@@ -1151,6 +1323,11 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
 	memcpy(conn.ssid, ssid_eid+2, conn.ssid_len);
 	conn.channel = ch - 1;
 
+	rc = wil_get_wmi_edmg_channel(wil, sme->edmg_bw_config,
+				      sme->edmg_channels, &conn.edmg_channel);
+	if (rc < 0)
+		return rc;
+
 	ether_addr_copy(conn.bssid, bss->bssid);
 	ether_addr_copy(conn.dst_mac, bss->bssid);
 
@@ -1707,7 +1884,7 @@ static int _wil_cfg80211_set_ies(struct wil6210_vif *vif,
 static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
 				  struct net_device *ndev,
 				  const u8 *ssid, size_t ssid_len, u32 privacy,
-				  int bi, u8 chan,
+				  int bi, u8 chan, u8 wmi_edmg_channel,
 				  struct cfg80211_beacon_data *bcon,
 				  u8 hidden_ssid, u32 pbss)
 {
@@ -1770,6 +1947,7 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
 
 	vif->privacy = privacy;
 	vif->channel = chan;
+	vif->wmi_edmg_channel = wmi_edmg_channel;
 	vif->hidden_ssid = hidden_ssid;
 	vif->pbss = pbss;
 	vif->bi = bi;
@@ -1780,7 +1958,8 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
 	if (!wil_has_other_active_ifaces(wil, ndev, false, true))
 		wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS);
 
-	rc = wmi_pcp_start(vif, bi, wmi_nettype, chan, hidden_ssid, is_go);
+	rc = wmi_pcp_start(vif, bi, wmi_nettype, chan, wmi_edmg_channel,
+			   hidden_ssid, is_go);
 	if (rc)
 		goto err_pcp_start;
 
@@ -1832,7 +2011,8 @@ void wil_cfg80211_ap_recovery(struct wil6210_priv *wil)
 		rc = _wil_cfg80211_start_ap(wiphy, ndev,
 					    vif->ssid, vif->ssid_len,
 					    vif->privacy, vif->bi,
-					    vif->channel, &bcon,
+					    vif->channel,
+					    vif->wmi_edmg_channel, &bcon,
 					    vif->hidden_ssid, vif->pbss);
 		if (rc) {
 			wil_err(wil, "vif %d recovery failed (%d)\n", i, rc);
@@ -1882,7 +2062,8 @@ static int wil_cfg80211_change_beacon(struct wiphy *wiphy,
 		rc = _wil_cfg80211_start_ap(wiphy, ndev, vif->ssid,
 					    vif->ssid_len, privacy,
 					    wdev->beacon_interval,
-					    vif->channel, bcon,
+					    vif->channel,
+					    vif->wmi_edmg_channel, bcon,
 					    vif->hidden_ssid,
 					    vif->pbss);
 	} else {
@@ -1901,10 +2082,17 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
 	struct ieee80211_channel *channel = info->chandef.chan;
 	struct cfg80211_beacon_data *bcon = &info->beacon;
 	struct cfg80211_crypto_settings *crypto = &info->crypto;
+	u8 wmi_edmg_channel;
 	u8 hidden_ssid;
 
 	wil_dbg_misc(wil, "start_ap\n");
 
+	rc = wil_get_wmi_edmg_channel(wil, info->chandef.edmg_bw_config,
+				      info->chandef.edmg_channels,
+				      &wmi_edmg_channel);
+	if (rc < 0)
+		return rc;
+
 	if (!channel) {
 		wil_err(wil, "AP: No channel???\n");
 		return -EINVAL;
@@ -1944,7 +2132,8 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
 	rc = _wil_cfg80211_start_ap(wiphy, ndev,
 				    info->ssid, info->ssid_len, info->privacy,
 				    info->beacon_interval, channel->hw_value,
-				    bcon, hidden_ssid, info->pbss);
+				    wmi_edmg_channel, bcon, hidden_ssid,
+				    info->pbss);
 
 	return rc;
 }
diff --git a/drivers/net/wireless/ath/wil6210/txrx_edma.c b/drivers/net/wireless/ath/wil6210/txrx_edma.c
index c387738..0c9bb2c 100644
--- a/drivers/net/wireless/ath/wil6210/txrx_edma.c
+++ b/drivers/net/wireless/ath/wil6210/txrx_edma.c
@@ -1006,6 +1006,8 @@ static struct sk_buff *wil_sring_reap_rx_edma(struct wil6210_priv *wil,
 			stats->rx_per_mcs[stats->last_mcs_rx]++;
 	}
 
+	stats->last_cb_mode_rx  = wil_rx_status_get_cb_mode(msg);
+
 	if (!wil->use_rx_hw_reordering && !wil->use_compressed_rx_status &&
 	    wil_check_bar(wil, msg, cid, skb, stats) == -EAGAIN) {
 		kfree_skb(skb);
diff --git a/drivers/net/wireless/ath/wil6210/txrx_edma.h b/drivers/net/wireless/ath/wil6210/txrx_edma.h
index 343516a..2680ffc 100644
--- a/drivers/net/wireless/ath/wil6210/txrx_edma.h
+++ b/drivers/net/wireless/ath/wil6210/txrx_edma.h
@@ -366,6 +366,12 @@ static inline u8 wil_rx_status_get_mcs(void *msg)
 			    16, 21);
 }
 
+static inline u8 wil_rx_status_get_cb_mode(void *msg)
+{
+	return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d1,
+			    22, 23);
+}
+
 static inline u16 wil_rx_status_get_flow_id(void *msg)
 {
 	return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0,
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index e1b1039b..d32c0bf 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -590,6 +590,7 @@ struct wil_net_stats {
 	unsigned long	rx_amsdu_error; /* eDMA specific */
 	unsigned long	rx_csum_err;
 	u16 last_mcs_rx;
+	u8 last_cb_mode_rx;
 	u64 rx_per_mcs[WIL_MCS_MAX + 1];
 	u32 ft_roams; /* relevant in STA mode */
 };
@@ -851,6 +852,7 @@ struct wil6210_vif {
 	DECLARE_BITMAP(status, wil_vif_status_last);
 	u32 privacy; /* secure connection? */
 	u16 channel; /* relevant in AP mode */
+	u8 wmi_edmg_channel; /* relevant in AP mode */
 	u8 hidden_ssid; /* relevant in AP mode */
 	u32 ap_isolate; /* no intra-BSS communication */
 	bool pbss;
@@ -1313,7 +1315,7 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
 
 int wmi_set_mac_address(struct wil6210_priv *wil, void *addr);
 int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype, u8 chan,
-		  u8 hidden_ssid, u8 is_go);
+		  u8 edmg_chan, u8 hidden_ssid, u8 is_go);
 int wmi_pcp_stop(struct wil6210_vif *vif);
 int wmi_led_cfg(struct wil6210_priv *wil, bool enable);
 int wmi_abort_scan(struct wil6210_vif *vif);
@@ -1389,6 +1391,10 @@ int wmi_start_sched_scan(struct wil6210_priv *wil,
 int wmi_mgmt_tx_ext(struct wil6210_vif *vif, const u8 *buf, size_t len,
 		    u8 channel, u16 duration_ms);
 
+int wil_wmi2spec_ch(u8 wmi_ch, u8 *spec_ch);
+int wil_spec2wmi_ch(u8 spec_ch, u8 *wmi_ch);
+void wil_update_supported_bands(struct wil6210_priv *wil);
+
 int reverse_memcmp(const void *cs, const void *ct, size_t count);
 
 /* WMI for enhanced DMA */
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index bda4a97..fe8530d 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -2123,8 +2123,8 @@ int wmi_led_cfg(struct wil6210_priv *wil, bool enable)
 	return rc;
 }
 
-int wmi_pcp_start(struct wil6210_vif *vif,
-		  int bi, u8 wmi_nettype, u8 chan, u8 hidden_ssid, u8 is_go)
+int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype,
+		  u8 chan, u8 wmi_edmg_chan, u8 hidden_ssid, u8 is_go)
 {
 	struct wil6210_priv *wil = vif_to_wil(vif);
 	int rc;
@@ -2134,6 +2134,7 @@ int wmi_pcp_start(struct wil6210_vif *vif,
 		.network_type = wmi_nettype,
 		.disable_sec_offload = 1,
 		.channel = chan - 1,
+		.edmg_channel = wmi_edmg_chan,
 		.pcp_max_assoc_sta = max_assoc_sta,
 		.hidden_ssid = hidden_ssid,
 		.is_go = is_go,
diff --git a/drivers/net/wireless/ath/wil6210/wmi.h b/drivers/net/wireless/ath/wil6210/wmi.h
index b668758..1b39aeb 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.h
+++ b/drivers/net/wireless/ath/wil6210/wmi.h
@@ -95,6 +95,7 @@ enum wmi_fw_capability {
 	WMI_FW_CAPABILITY_SET_SILENT_RSSI_TABLE		= 13,
 	WMI_FW_CAPABILITY_LO_POWER_CALIB_FROM_OTP	= 14,
 	WMI_FW_CAPABILITY_PNO				= 15,
+	WMI_FW_CAPABILITY_CHANNEL_BONDING		= 17,
 	WMI_FW_CAPABILITY_REF_CLOCK_CONTROL		= 18,
 	WMI_FW_CAPABILITY_AP_SME_OFFLOAD_NONE		= 19,
 	WMI_FW_CAPABILITY_MULTI_VIFS			= 20,
@@ -355,6 +356,19 @@ enum wmi_connect_ctrl_flag_bits {
 
 #define WMI_MAX_SSID_LEN	(32)
 
+enum wmi_channel {
+	WMI_CHANNEL_1	= 0x00,
+	WMI_CHANNEL_2	= 0x01,
+	WMI_CHANNEL_3	= 0x02,
+	WMI_CHANNEL_4	= 0x03,
+	WMI_CHANNEL_5	= 0x04,
+	WMI_CHANNEL_6	= 0x05,
+	WMI_CHANNEL_9	= 0x06,
+	WMI_CHANNEL_10	= 0x07,
+	WMI_CHANNEL_11	= 0x08,
+	WMI_CHANNEL_12	= 0x09,
+};
+
 /* WMI_CONNECT_CMDID */
 struct wmi_connect_cmd {
 	u8 network_type;
@@ -366,8 +380,12 @@ struct wmi_connect_cmd {
 	u8 group_crypto_len;
 	u8 ssid_len;
 	u8 ssid[WMI_MAX_SSID_LEN];
+	/* enum wmi_channel WMI_CHANNEL_1..WMI_CHANNEL_6; for EDMG this is
+	 * the primary channel number
+	 */
 	u8 channel;
-	u8 reserved0;
+	/* enum wmi_channel WMI_CHANNEL_9..WMI_CHANNEL_12 */
+	u8 edmg_channel;
 	u8 bssid[WMI_MAC_LEN];
 	__le32 ctrl_flags;
 	u8 dst_mac[WMI_MAC_LEN];
@@ -2267,7 +2285,9 @@ struct wmi_notify_req_done_event {
 	__le32 status;
 	__le64 tsf;
 	s8 rssi;
-	u8 reserved0[3];
+	/* enum wmi_edmg_tx_mode */
+	u8 tx_mode;
+	u8 reserved0[2];
 	__le32 tx_tpt;
 	__le32 tx_goodput;
 	__le32 rx_goodput;
@@ -2283,8 +2303,12 @@ struct wmi_notify_req_done_event {
 
 /* WMI_CONNECT_EVENTID */
 struct wmi_connect_event {
+	/* enum wmi_channel WMI_CHANNEL_1..WMI_CHANNEL_6; for EDMG this is
+	 * the primary channel number
+	 */
 	u8 channel;
-	u8 reserved0;
+	/* enum wmi_channel WMI_CHANNEL_9..WMI_CHANNEL_12 */
+	u8 edmg_channel;
 	u8 bssid[WMI_MAC_LEN];
 	__le16 listen_interval;
 	__le16 beacon_interval;
-- 
1.9.1


^ permalink raw reply related

* [PATCH] ath10k: enabling tx stats support over pktlog
From: Balaji Pothunoori @ 2019-05-13 14:53 UTC (permalink / raw)
  To: ath10k, linux-wireless; +Cc: Balaji Pothunoori

For QCA988X target, pktlog gives details of the tx bitrate
which is used in the driver for station info.

Enabling pktlog by default will cause more interrupts
in target to host CE pipe, which can impact more CPU usage
for targets ex:WCN3990 and also not required for all other
platforms (eg: WCN3990), for getting tx bitrate.

Enable pktlog only for QCA988X based on hardware params.

Tested HW : WCN3990
Tested FW : WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1

Fixes: e8123bb74c4e ("ath10k: add per peer tx stats support for 10.2.4")
Signed-off-by: Balaji Pothunoori <bpothuno@codeaurora.org>
---
 drivers/net/wireless/ath/ath10k/core.c | 15 +++++++++++++++
 drivers/net/wireless/ath/ath10k/hw.h   |  3 +++
 drivers/net/wireless/ath/ath10k/mac.c  |  3 ++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 61ef903..252e9af 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -83,6 +83,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = true,
 	},
 	{
 		.id = QCA988X_HW_2_0_VERSION,
@@ -117,6 +118,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = true,
 	},
 	{
 		.id = QCA9887_HW_1_0_VERSION,
@@ -152,6 +154,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA6174_HW_3_2_VERSION,
@@ -179,6 +182,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.ast_skid_limit = 0x10,
 		.num_wds_entries = 0x20,
 		.uart_pin_workaround = true,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA6174_HW_2_1_VERSION,
@@ -213,6 +217,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA6174_HW_2_1_VERSION,
@@ -247,6 +252,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA6174_HW_3_0_VERSION,
@@ -281,6 +287,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA6174_HW_3_2_VERSION,
@@ -318,6 +325,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = true,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA99X0_HW_2_0_DEV_VERSION,
@@ -358,6 +366,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA9984_HW_1_0_DEV_VERSION,
@@ -405,6 +414,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA9888_HW_2_0_DEV_VERSION,
@@ -449,6 +459,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA9377_HW_1_0_DEV_VERSION,
@@ -483,6 +494,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA9377_HW_1_1_DEV_VERSION,
@@ -519,6 +531,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = true,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = QCA4019_HW_1_0_DEV_VERSION,
@@ -560,6 +573,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = false,
 		.hw_filter_reset_required = true,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 	{
 		.id = WCN3990_HW_1_0_DEV_VERSION,
@@ -587,6 +601,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
 		.rri_on_ddr = true,
 		.hw_filter_reset_required = false,
 		.fw_diag_ce_download = false,
+		.tx_stats_over_pktlog = false,
 	},
 };
 
diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h
index 248cfb4..1e80beb 100644
--- a/drivers/net/wireless/ath/ath10k/hw.h
+++ b/drivers/net/wireless/ath/ath10k/hw.h
@@ -612,6 +612,9 @@ struct ath10k_hw_params {
 	 * firmware bug
 	 */
 	bool uart_pin_workaround;
+
+	/* tx stats support over pktlog */
+	bool tx_stats_over_pktlog;
 };
 
 struct htt_rx_desc;
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index b500fd4..40e7cea 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -7877,7 +7877,8 @@ ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
 				    arvif->vdev_id, ret);
 	}
 
-	if (ath10k_peer_stats_enabled(ar)) {
+	if (ath10k_peer_stats_enabled(ar) &&
+	    ar->hw_params.tx_stats_over_pktlog) {
 		ar->pktlog_filter |= ATH10K_PKTLOG_PEER_STATS;
 		ret = ath10k_wmi_pdev_pktlog_enable(ar,
 						    ar->pktlog_filter);
-- 
2.7.4


^ permalink raw reply related

* Re: [PATCH] mt76: mt7603: add debugfs knob to enable/disable edcca
From: Lorenzo Bianconi @ 2019-05-13 15:41 UTC (permalink / raw)
  To: Kalle Valo; +Cc: nbd, lorenzo.bianconi, linux-wireless
In-Reply-To: <87sgtiil7n.fsf@codeaurora.org>

[-- Attachment #1: Type: text/plain, Size: 1460 bytes --]

> Lorenzo Bianconi <lorenzo@kernel.org> writes:
> 
> >> Lorenzo Bianconi <lorenzo@kernel.org> writes:
> >> 
> >> > Introduce a knob in mt7603 debugfs in order to enable/disable
> >> > edcca processing
> >> >
> >> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> >> 
> >> It's good to explain what edcca does and how the file is used supposed
> >> to be used. In other words, have a small introduction for the user.
> >
> > Hi Kalle,
> >
> > edcca is used for adjusting energy detect based on CCA thresholds.
> > The code was already there so I just reported the acronym.
> 
> A lot of people read commit logs but not everyone (myself included) are
> familiar with mt76 internals so please try to explain the acronyms and
> the background of the patch. Also you should explain in the commit log
> _why_ you are adding the debugfs file, how it helps the user and how to
> use it.

sorry for not been so clear.
ED/CCA is used to control tx power according to the CCA MIB counters (e.g do not
transmit if the channel busy time is higher than 90% for given amount of time
in a row).
As already done in commit 643749d4a82b ("mt76: mt76x02: disable ED/CCA by default"),
this patch adds the possibility to enable/disable the processing according to an
entry in the debugfs. The reason behind this patch is ED/CCA caused
instability in the past so it could be useful to disable it.

Regards,
Lorenzo

> 
> -- 
> Kalle Valo

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply

* ath10k 5Ghz RSSI low
From: Sam Samy @ 2019-05-13 16:56 UTC (permalink / raw)
  To: linux-wireless
In-Reply-To: <CAPGJ1o_KskiCKQ8V-6U0nxWGgXXa4NWHV0EEwo41bMPSj1bbdg@mail.gmail.com>

 Hi,
 I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
(2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
pretty low on any channel I put it in.  In one feet range I see -60dB
RSSI, where as the stock firmware that came with the AP gives an RSSI
of -36dB at one foot distance.The downstream transmit rates are MCS8/9
for most part. The 2Ghz is working fine. Its using the cal data from
the flash that came with the AP.

 Can you please suggest anyway to debug this or improve the RSSI?

 Thanks you!

^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Ben Greear @ 2019-05-13 17:00 UTC (permalink / raw)
  To: Sam Samy, linux-wireless
In-Reply-To: <CAPGJ1o9qDYPQF882cw65uysjCmUYi6kJCmL2EUa0AXbwHj59Mg@mail.gmail.com>

On 5/13/19 9:56 AM, Sam Samy wrote:
>   Hi,
>   I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
> band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
> (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
> fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
> pretty low on any channel I put it in.  In one feet range I see -60dB
> RSSI, where as the stock firmware that came with the AP gives an RSSI
> of -36dB at one foot distance.The downstream transmit rates are MCS8/9
> for most part. The 2Ghz is working fine. Its using the cal data from
> the flash that came with the AP.
> 
>   Can you please suggest anyway to debug this or improve the RSSI?
> 
>   Thanks you!
> 

Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
please try QCA firmware and let me know if that fixes the problem.

Thanks,
Ben

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com


^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Sam Samy @ 2019-05-13 17:26 UTC (permalink / raw)
  To: Ben Greear; +Cc: linux-wireless
In-Reply-To: <a236cf47-556d-c515-0093-82dce6e8ad8e@candelatech.com>

hi Ben,

> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> please try QCA firmware and let me know if that fixes the problem.
>
  I tried both. Both have the same problem. I tried various versions
of the both(-ct and QCA) firmware as well. All have the same problem.

Thanks

On Mon, May 13, 2019 at 10:00 AM Ben Greear <greearb@candelatech.com> wrote:
>
> On 5/13/19 9:56 AM, Sam Samy wrote:
> >   Hi,
> >   I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
> > band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
> > (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
> > fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
> > pretty low on any channel I put it in.  In one feet range I see -60dB
> > RSSI, where as the stock firmware that came with the AP gives an RSSI
> > of -36dB at one foot distance.The downstream transmit rates are MCS8/9
> > for most part. The 2Ghz is working fine. Its using the cal data from
> > the flash that came with the AP.
> >
> >   Can you please suggest anyway to debug this or improve the RSSI?
> >
> >   Thanks you!
> >
>
> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> please try QCA firmware and let me know if that fixes the problem.
>
> Thanks,
> Ben
>
> --
> Ben Greear <greearb@candelatech.com>
> Candela Technologies Inc  http://www.candelatech.com
>

^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Ben Greear @ 2019-05-13 17:27 UTC (permalink / raw)
  To: Sam Samy; +Cc: linux-wireless
In-Reply-To: <CAPGJ1o96QSfoFzFpSPbh_4TwSgAU-1FGhX6P5MVCmfZv_bugHw@mail.gmail.com>

On 5/13/19 10:26 AM, Sam Samy wrote:
> hi Ben,
> 
>> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
>> please try QCA firmware and let me know if that fixes the problem.
>>
>    I tried both. Both have the same problem. I tried various versions
> of the both(-ct and QCA) firmware as well. All have the same problem.

Probably it is a board-file and/or calibration data issue then.

The debugfs 'ath10k/tpc_stats' file may show very low values?

Thanks,
Ben

> 
> Thanks
> 
> On Mon, May 13, 2019 at 10:00 AM Ben Greear <greearb@candelatech.com> wrote:
>>
>> On 5/13/19 9:56 AM, Sam Samy wrote:
>>>    Hi,
>>>    I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
>>> band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
>>> (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
>>> fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
>>> pretty low on any channel I put it in.  In one feet range I see -60dB
>>> RSSI, where as the stock firmware that came with the AP gives an RSSI
>>> of -36dB at one foot distance.The downstream transmit rates are MCS8/9
>>> for most part. The 2Ghz is working fine. Its using the cal data from
>>> the flash that came with the AP.
>>>
>>>    Can you please suggest anyway to debug this or improve the RSSI?
>>>
>>>    Thanks you!
>>>
>>
>> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
>> please try QCA firmware and let me know if that fixes the problem.
>>
>> Thanks,
>> Ben
>>
>> --
>> Ben Greear <greearb@candelatech.com>
>> Candela Technologies Inc  http://www.candelatech.com
>>
> 


-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com


^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Sam Samy @ 2019-05-13 17:36 UTC (permalink / raw)
  To: Ben Greear; +Cc: linux-wireless
In-Reply-To: <79695018-5ac9-d7c8-a386-c6dd3f9ed474@candelatech.com>

> Probably it is a board-file and/or calibration data issue then.
>
> The debugfs 'ath10k/tpc_stats' file may show very low values?

I am not sure if the values are right. Here is one of the 5Ghz radio stats:

root@OpenWrt:/sys# cat ./kernel/debug/ieee80211/phy0/ath10k/tpc_stats

*************************************
TPC config for channel 5320 mode 10
*************************************
CTL        =  0x10 Reg. Domain        = 58
Antenna Gain    =  0 Reg. Max Antenna Gain    =   0
Power Limit    = 46 Reg. Max Power        = 46
Num tx chains    =  2 Num supported rates    = 129
********************************
******************* CDD POWER TABLE ****************
********************************
No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
       0 CCK 0x40        0        0
       1 CCK 0x41        0        0
       2 CCK 0x42        0        0
       3 CCK 0x43        0        0
       4 OFDM 0x 0       36       34
       5 OFDM 0x 1       38       34
       6 OFDM 0x 2       38       34
       7 OFDM 0x 3       38       34
       8 OFDM 0x 4       34       34
       9 OFDM 0x 5       38       34
      10 OFDM 0x 6       38       34
      11 OFDM 0x 7       38       34
      12 HT20 0x80       38       34
      13 HT20 0x81       38       34
      14 HT20 0x82       38       34
      15 HT20 0x83       38       34
      16 HT20 0x84       38       34
      17 HT20 0x85       36       34
      18 HT20 0x86       34       34
      19 HT20 0x87       32       32
      20 HT20 0x90       38       38
      21 HT20 0x91       38       38
      22 HT20 0x92       38       38
      23 HT20 0x93       38       38
      24 HT20 0x94       38       38
      25 HT20 0x95       36       36
      26 HT20 0x96       34       34
      27 HT20 0x97       32       32
      28 HT40 0x80       37       34
      29 HT40 0x81       37       34
      30 HT40 0x82       37       34
      31 HT40 0x83       37       34
      32 HT40 0x84       37       34
      33 HT40 0x85       35       34
      34 HT40 0x86       33       33
      35 HT40 0x87       31       31
      36 HT40 0x90       37       37
      37 HT40 0x91       37       37
      38 HT40 0x92       37       37
      39 HT40 0x93       37       37
      40 HT40 0x94       37       37
      41 HT40 0x95       35       35
      42 HT40 0x96       33       33
      43 HT40 0x97       31       31
      44 VHT20 0xc0       38       34
      45 VHT20 0xc1       38       34
      46 VHT20 0xc2       38       34
      47 VHT20 0xc3       38       34
      48 VHT20 0xc4       38       34
      49 VHT20 0xc5       36       34
      50 VHT20 0xc6       34       34
      51 VHT20 0xc7       32       32
      52 VHT20 0xc8       31       31
      53 VHT20 0xc9       30       30
      54 VHT20 0xd0       38       38
      55 VHT20 0xd1       38       38
      56 VHT20 0xd2       38       38
      57 VHT20 0xd3       38       38
      58 VHT20 0xd4       38       38
      59 VHT20 0xd5       36       36
      60 VHT20 0xd6       34       34
      61 VHT20 0xd7       32       32
      62 VHT20 0xd8       31       31
      63 VHT20 0xd9       30       30
      64 VHT40 0xc0       37       34
      65 VHT40 0xc1       37       34
      66 VHT40 0xc2       37       34
      67 VHT40 0xc3       37       34
      68 VHT40 0xc4       37       34
      69 VHT40 0xc5       35       34
      70 VHT40 0xc6       33       33
      71 VHT40 0xc7       31       31
      72 VHT40 0xc8       30       30
      73 VHT40 0xc9       29       29
      74 VHT40 0xd0       37       37
      75 VHT40 0xd1       37       37
      76 VHT40 0xd2       37       37
      77 VHT40 0xd3       37       37
      78 VHT40 0xd4       37       37
      79 VHT40 0xd5       35       35
      80 VHT40 0xd6       33       33
      81 VHT40 0xd7       31       31
      82 VHT40 0xd8       30       30
      83 VHT40 0xd9       29       29
      84 VHT80 0xc0       36       34
      85 VHT80 0xc1       36       34
      86 VHT80 0xc2       36       34
      87 VHT80 0xc3       36       34
      88 VHT80 0xc4       36       34
      89 VHT80 0xc5       34       34
      90 VHT80 0xc6       32       32
      91 VHT80 0xc7       30       30
      92 VHT80 0xc8       29       29
      93 VHT80 0xc9       28       28
      94 VHT80 0xd0       36       36
      95 VHT80 0xd1       36       36
      96 VHT80 0xd2       36       36
      97 VHT80 0xd3       36       36
      98 VHT80 0xd4       36       36
      99 VHT80 0xd5       34       34
     100 VHT80 0xd6       32       32
     101 VHT80 0xd7       30       30
     102 VHT80 0xd8       29       29
     103 VHT80 0xd9       28       28
     104 HTCUP 0x40       36       36
     105 HTCUP 0x 0       36       34
     106 HTCUP 0x40       36       36
     107 HTCUP 0x 0       36       34
     108 HTCUP 0x 0       36       34
     109 HTCUP 0x7a       34       34
     110 HTCUP 0x8a       32       32
     111 HTCUP 0x a       30       30
     112 HTCUP 0xee       27       27
     113 HTCUP 0xa6       26       26
     114 HTCUP 0x90       36       36
     115 HTCUP 0x1d       36       36
     116 HTCUP 0x80       36       34
     117 HTCUP 0x41       36       36
     118 HTCUP 0xd9       36       36
     119 HTCUP 0x64       34       34
     120 HTCUP 0xf9       32       32
     121 HTCUP 0x 0       30       30
     122 HTCUP 0x 0       27       27
     123 HTCUP 0x 0       26       26
     124 HTCUP 0x64        0        0
     125 HTCUP 0x 0       37       34
     126 HTCUP 0x31        0        0
     127 HTCUP 0x 4       37       34
     128 HTCUP 0x 0       38       34
***********************************
********************************
******************* STBC POWER TABLE ****************
********************************
No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
       0 CCK 0x40        0        0
       1 CCK 0x41        0        0
       2 CCK 0x42        0        0
       3 CCK 0x43        0        0
       4 OFDM 0x 0       36       36
       5 OFDM 0x 1       38       38
       6 OFDM 0x 2       38       38
       7 OFDM 0x 3       38       38
       8 OFDM 0x 4       34       34
       9 OFDM 0x 5       38       38
      10 OFDM 0x 6       38       38
      11 OFDM 0x 7       38       38
      12 HT20 0x80       38       38
      13 HT20 0x81       38       38
      14 HT20 0x82       38       38
      15 HT20 0x83       38       38
      16 HT20 0x84       38       38
      17 HT20 0x85       36       36
      18 HT20 0x86       34       34
      19 HT20 0x87       32       32
      20 HT20 0x90       38       38
      21 HT20 0x91       38       38
      22 HT20 0x92       38       38
      23 HT20 0x93       38       38
      24 HT20 0x94       38       38
      25 HT20 0x95       36       36
      26 HT20 0x96       34       34
      27 HT20 0x97       32       32
      28 HT40 0x80       37       37
      29 HT40 0x81       37       37
      30 HT40 0x82       37       37
      31 HT40 0x83       37       37
      32 HT40 0x84       37       37
      33 HT40 0x85       35       35
      34 HT40 0x86       33       33
      35 HT40 0x87       31       31
      36 HT40 0x90       37       37
      37 HT40 0x91       37       37
      38 HT40 0x92       37       37
      39 HT40 0x93       37       37
      40 HT40 0x94       37       37
      41 HT40 0x95       35       35
      42 HT40 0x96       33       33
      43 HT40 0x97       31       31
      44 VHT20 0xc0       38       38
      45 VHT20 0xc1       38       38
      46 VHT20 0xc2       38       38
      47 VHT20 0xc3       38       38
      48 VHT20 0xc4       38       38
      49 VHT20 0xc5       36       36
      50 VHT20 0xc6       34       34
      51 VHT20 0xc7       32       32
      52 VHT20 0xc8       31       31
      53 VHT20 0xc9       30       30
      54 VHT20 0xd0       38       38
      55 VHT20 0xd1       38       38
      56 VHT20 0xd2       38       38
      57 VHT20 0xd3       38       38
      58 VHT20 0xd4       38       38
      59 VHT20 0xd5       36       36
      60 VHT20 0xd6       34       34
      61 VHT20 0xd7       32       32
      62 VHT20 0xd8       31       31
      63 VHT20 0xd9       30       30
      64 VHT40 0xc0       37       37
      65 VHT40 0xc1       37       37
      66 VHT40 0xc2       37       37
      67 VHT40 0xc3       37       37
      68 VHT40 0xc4       37       37
      69 VHT40 0xc5       35       35
      70 VHT40 0xc6       33       33
      71 VHT40 0xc7       31       31
      72 VHT40 0xc8       30       30
      73 VHT40 0xc9       29       29
      74 VHT40 0xd0       37       37
      75 VHT40 0xd1       37       37
      76 VHT40 0xd2       37       37
      77 VHT40 0xd3       37       37
      78 VHT40 0xd4       37       37
      79 VHT40 0xd5       35       35
      80 VHT40 0xd6       33       33
      81 VHT40 0xd7       31       31
      82 VHT40 0xd8       30       30
      83 VHT40 0xd9       29       29
      84 VHT80 0xc0       36       36
      85 VHT80 0xc1       36       36
      86 VHT80 0xc2       36       36
      87 VHT80 0xc3       36       36
      88 VHT80 0xc4       36       36
      89 VHT80 0xc5       34       34
      90 VHT80 0xc6       32       32
      91 VHT80 0xc7       30       30
      92 VHT80 0xc8       29       29
      93 VHT80 0xc9       28       28
      94 VHT80 0xd0       36       36
      95 VHT80 0xd1       36       36
      96 VHT80 0xd2       36       36
      97 VHT80 0xd3       36       36
      98 VHT80 0xd4       36       36
      99 VHT80 0xd5       34       34
     100 VHT80 0xd6       32       32
     101 VHT80 0xd7       30       30
     102 VHT80 0xd8       29       29
     103 VHT80 0xd9       28       28
     104 HTCUP 0x40       36       36
     105 HTCUP 0x 0       36       36
     106 HTCUP 0x40       36       36
     107 HTCUP 0x 0       36       36
     108 HTCUP 0x 0       36       36
     109 HTCUP 0x7a       34       34
     110 HTCUP 0x8a       32       32
     111 HTCUP 0x a       30       30
     112 HTCUP 0xee       27       27
     113 HTCUP 0xa6       26       26
     114 HTCUP 0x90       36       36
     115 HTCUP 0x1d       36       36
     116 HTCUP 0x80       36       36
     117 HTCUP 0x41       36       36
     118 HTCUP 0xd9       36       36
     119 HTCUP 0x64       34       34
     120 HTCUP 0xf9       32       32
     121 HTCUP 0x 0       30       30
     122 HTCUP 0x 0       27       27
     123 HTCUP 0x 0       26       26
     124 HTCUP 0x64        0        0
     125 HTCUP 0x 0       37       37
     126 HTCUP 0x31        0        0
     127 HTCUP 0x 4       37       37
     128 HTCUP 0x 0       38       38
***********************************
TXBF not supported
***************************
root@OpenWrt:/sys#


Thanks

On Mon, May 13, 2019 at 10:27 AM Ben Greear <greearb@candelatech.com> wrote:
>
> On 5/13/19 10:26 AM, Sam Samy wrote:
> > hi Ben,
> >
> >> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> >> please try QCA firmware and let me know if that fixes the problem.
> >>
> >    I tried both. Both have the same problem. I tried various versions
> > of the both(-ct and QCA) firmware as well. All have the same problem.
>
> Probably it is a board-file and/or calibration data issue then.
>
> The debugfs 'ath10k/tpc_stats' file may show very low values?
>
> Thanks,
> Ben
>
> >
> > Thanks
> >
> > On Mon, May 13, 2019 at 10:00 AM Ben Greear <greearb@candelatech.com> wrote:
> >>
> >> On 5/13/19 9:56 AM, Sam Samy wrote:
> >>>    Hi,
> >>>    I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
> >>> band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
> >>> (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
> >>> fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
> >>> pretty low on any channel I put it in.  In one feet range I see -60dB
> >>> RSSI, where as the stock firmware that came with the AP gives an RSSI
> >>> of -36dB at one foot distance.The downstream transmit rates are MCS8/9
> >>> for most part. The 2Ghz is working fine. Its using the cal data from
> >>> the flash that came with the AP.
> >>>
> >>>    Can you please suggest anyway to debug this or improve the RSSI?
> >>>
> >>>    Thanks you!
> >>>
> >>
> >> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> >> please try QCA firmware and let me know if that fixes the problem.
> >>
> >> Thanks,
> >> Ben
> >>
> >> --
> >> Ben Greear <greearb@candelatech.com>
> >> Candela Technologies Inc  http://www.candelatech.com
> >>
> >
>
>
> --
> Ben Greear <greearb@candelatech.com>
> Candela Technologies Inc  http://www.candelatech.com
>

^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Sam Samy @ 2019-05-13 18:10 UTC (permalink / raw)
  To: Ben Greear; +Cc: linux-wireless
In-Reply-To: <CAPGJ1o8k4WoK1cwBBYMge8m6n-Mm5nC7G=ku29iMRrSsJ1AMQw@mail.gmail.com>

hi Ben,

  I also looked at the TPC on the stock firmware on the AP. There is a
difference.

Here is the snippet from stock firmware:

TPC Config for channel 5765 mode 10
**************************************************
CTL           = 0x10   Reg. Domain           = 20
Antenna Gain  =  0     Reg. Max Antenna Gain = 12
Power Limit   = 63     Reg. Max Power        = 60
Num tx chains =  2    Num  Supported Rates  = 109
**************************************************
**************** CDD  POWER TABLE ****************
**************************************************

Where as in openwrt it is:

*************************************
TPC config for channel 5765 mode 10
*************************************
CTL        =  0x10 Reg. Domain        = 58
Antenna Gain    =  0 Reg. Max Antenna Gain    =   0
Power Limit    = 60 Reg. Max Power        = 30
Num tx chains    =  2 Num supported rates    = 109
********************************


So looks like reg ,domain is different even though both are US.
(Although I didnt set anything on stock firmware. The countrycode from
iwpriv get_countrycode says its 841.)

Also, the antenna gain seems different between stock and openwrt firmware..


How to change the reg. domain like in stock firmware in openwrt
although I set to US in the uci.

root@OpenWrt:/sys# uci show | grep country
uhttpd.defaults.country='ZZ'
wireless.radio0.country='US'
wireless.radio1.country='US'
wireless.radio2.country='US'
root@OpenWrt:/sys#

Thanks


On Mon, May 13, 2019 at 10:36 AM Sam Samy <to.swami1@gmail.com> wrote:
>
> > Probably it is a board-file and/or calibration data issue then.
> >
> > The debugfs 'ath10k/tpc_stats' file may show very low values?
>
> I am not sure if the values are right. Here is one of the 5Ghz radio stats:
>
> root@OpenWrt:/sys# cat ./kernel/debug/ieee80211/phy0/ath10k/tpc_stats
>
> *************************************
> TPC config for channel 5320 mode 10
> *************************************
> CTL        =  0x10 Reg. Domain        = 58
> Antenna Gain    =  0 Reg. Max Antenna Gain    =   0
> Power Limit    = 46 Reg. Max Power        = 46
> Num tx chains    =  2 Num supported rates    = 129
> ********************************
> ******************* CDD POWER TABLE ****************
> ********************************
> No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
>        0 CCK 0x40        0        0
>        1 CCK 0x41        0        0
>        2 CCK 0x42        0        0
>        3 CCK 0x43        0        0
>        4 OFDM 0x 0       36       34
>        5 OFDM 0x 1       38       34
>        6 OFDM 0x 2       38       34
>        7 OFDM 0x 3       38       34
>        8 OFDM 0x 4       34       34
>        9 OFDM 0x 5       38       34
>       10 OFDM 0x 6       38       34
>       11 OFDM 0x 7       38       34
>       12 HT20 0x80       38       34
>       13 HT20 0x81       38       34
>       14 HT20 0x82       38       34
>       15 HT20 0x83       38       34
>       16 HT20 0x84       38       34
>       17 HT20 0x85       36       34
>       18 HT20 0x86       34       34
>       19 HT20 0x87       32       32
>       20 HT20 0x90       38       38
>       21 HT20 0x91       38       38
>       22 HT20 0x92       38       38
>       23 HT20 0x93       38       38
>       24 HT20 0x94       38       38
>       25 HT20 0x95       36       36
>       26 HT20 0x96       34       34
>       27 HT20 0x97       32       32
>       28 HT40 0x80       37       34
>       29 HT40 0x81       37       34
>       30 HT40 0x82       37       34
>       31 HT40 0x83       37       34
>       32 HT40 0x84       37       34
>       33 HT40 0x85       35       34
>       34 HT40 0x86       33       33
>       35 HT40 0x87       31       31
>       36 HT40 0x90       37       37
>       37 HT40 0x91       37       37
>       38 HT40 0x92       37       37
>       39 HT40 0x93       37       37
>       40 HT40 0x94       37       37
>       41 HT40 0x95       35       35
>       42 HT40 0x96       33       33
>       43 HT40 0x97       31       31
>       44 VHT20 0xc0       38       34
>       45 VHT20 0xc1       38       34
>       46 VHT20 0xc2       38       34
>       47 VHT20 0xc3       38       34
>       48 VHT20 0xc4       38       34
>       49 VHT20 0xc5       36       34
>       50 VHT20 0xc6       34       34
>       51 VHT20 0xc7       32       32
>       52 VHT20 0xc8       31       31
>       53 VHT20 0xc9       30       30
>       54 VHT20 0xd0       38       38
>       55 VHT20 0xd1       38       38
>       56 VHT20 0xd2       38       38
>       57 VHT20 0xd3       38       38
>       58 VHT20 0xd4       38       38
>       59 VHT20 0xd5       36       36
>       60 VHT20 0xd6       34       34
>       61 VHT20 0xd7       32       32
>       62 VHT20 0xd8       31       31
>       63 VHT20 0xd9       30       30
>       64 VHT40 0xc0       37       34
>       65 VHT40 0xc1       37       34
>       66 VHT40 0xc2       37       34
>       67 VHT40 0xc3       37       34
>       68 VHT40 0xc4       37       34
>       69 VHT40 0xc5       35       34
>       70 VHT40 0xc6       33       33
>       71 VHT40 0xc7       31       31
>       72 VHT40 0xc8       30       30
>       73 VHT40 0xc9       29       29
>       74 VHT40 0xd0       37       37
>       75 VHT40 0xd1       37       37
>       76 VHT40 0xd2       37       37
>       77 VHT40 0xd3       37       37
>       78 VHT40 0xd4       37       37
>       79 VHT40 0xd5       35       35
>       80 VHT40 0xd6       33       33
>       81 VHT40 0xd7       31       31
>       82 VHT40 0xd8       30       30
>       83 VHT40 0xd9       29       29
>       84 VHT80 0xc0       36       34
>       85 VHT80 0xc1       36       34
>       86 VHT80 0xc2       36       34
>       87 VHT80 0xc3       36       34
>       88 VHT80 0xc4       36       34
>       89 VHT80 0xc5       34       34
>       90 VHT80 0xc6       32       32
>       91 VHT80 0xc7       30       30
>       92 VHT80 0xc8       29       29
>       93 VHT80 0xc9       28       28
>       94 VHT80 0xd0       36       36
>       95 VHT80 0xd1       36       36
>       96 VHT80 0xd2       36       36
>       97 VHT80 0xd3       36       36
>       98 VHT80 0xd4       36       36
>       99 VHT80 0xd5       34       34
>      100 VHT80 0xd6       32       32
>      101 VHT80 0xd7       30       30
>      102 VHT80 0xd8       29       29
>      103 VHT80 0xd9       28       28
>      104 HTCUP 0x40       36       36
>      105 HTCUP 0x 0       36       34
>      106 HTCUP 0x40       36       36
>      107 HTCUP 0x 0       36       34
>      108 HTCUP 0x 0       36       34
>      109 HTCUP 0x7a       34       34
>      110 HTCUP 0x8a       32       32
>      111 HTCUP 0x a       30       30
>      112 HTCUP 0xee       27       27
>      113 HTCUP 0xa6       26       26
>      114 HTCUP 0x90       36       36
>      115 HTCUP 0x1d       36       36
>      116 HTCUP 0x80       36       34
>      117 HTCUP 0x41       36       36
>      118 HTCUP 0xd9       36       36
>      119 HTCUP 0x64       34       34
>      120 HTCUP 0xf9       32       32
>      121 HTCUP 0x 0       30       30
>      122 HTCUP 0x 0       27       27
>      123 HTCUP 0x 0       26       26
>      124 HTCUP 0x64        0        0
>      125 HTCUP 0x 0       37       34
>      126 HTCUP 0x31        0        0
>      127 HTCUP 0x 4       37       34
>      128 HTCUP 0x 0       38       34
> ***********************************
> ********************************
> ******************* STBC POWER TABLE ****************
> ********************************
> No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
>        0 CCK 0x40        0        0
>        1 CCK 0x41        0        0
>        2 CCK 0x42        0        0
>        3 CCK 0x43        0        0
>        4 OFDM 0x 0       36       36
>        5 OFDM 0x 1       38       38
>        6 OFDM 0x 2       38       38
>        7 OFDM 0x 3       38       38
>        8 OFDM 0x 4       34       34
>        9 OFDM 0x 5       38       38
>       10 OFDM 0x 6       38       38
>       11 OFDM 0x 7       38       38
>       12 HT20 0x80       38       38
>       13 HT20 0x81       38       38
>       14 HT20 0x82       38       38
>       15 HT20 0x83       38       38
>       16 HT20 0x84       38       38
>       17 HT20 0x85       36       36
>       18 HT20 0x86       34       34
>       19 HT20 0x87       32       32
>       20 HT20 0x90       38       38
>       21 HT20 0x91       38       38
>       22 HT20 0x92       38       38
>       23 HT20 0x93       38       38
>       24 HT20 0x94       38       38
>       25 HT20 0x95       36       36
>       26 HT20 0x96       34       34
>       27 HT20 0x97       32       32
>       28 HT40 0x80       37       37
>       29 HT40 0x81       37       37
>       30 HT40 0x82       37       37
>       31 HT40 0x83       37       37
>       32 HT40 0x84       37       37
>       33 HT40 0x85       35       35
>       34 HT40 0x86       33       33
>       35 HT40 0x87       31       31
>       36 HT40 0x90       37       37
>       37 HT40 0x91       37       37
>       38 HT40 0x92       37       37
>       39 HT40 0x93       37       37
>       40 HT40 0x94       37       37
>       41 HT40 0x95       35       35
>       42 HT40 0x96       33       33
>       43 HT40 0x97       31       31
>       44 VHT20 0xc0       38       38
>       45 VHT20 0xc1       38       38
>       46 VHT20 0xc2       38       38
>       47 VHT20 0xc3       38       38
>       48 VHT20 0xc4       38       38
>       49 VHT20 0xc5       36       36
>       50 VHT20 0xc6       34       34
>       51 VHT20 0xc7       32       32
>       52 VHT20 0xc8       31       31
>       53 VHT20 0xc9       30       30
>       54 VHT20 0xd0       38       38
>       55 VHT20 0xd1       38       38
>       56 VHT20 0xd2       38       38
>       57 VHT20 0xd3       38       38
>       58 VHT20 0xd4       38       38
>       59 VHT20 0xd5       36       36
>       60 VHT20 0xd6       34       34
>       61 VHT20 0xd7       32       32
>       62 VHT20 0xd8       31       31
>       63 VHT20 0xd9       30       30
>       64 VHT40 0xc0       37       37
>       65 VHT40 0xc1       37       37
>       66 VHT40 0xc2       37       37
>       67 VHT40 0xc3       37       37
>       68 VHT40 0xc4       37       37
>       69 VHT40 0xc5       35       35
>       70 VHT40 0xc6       33       33
>       71 VHT40 0xc7       31       31
>       72 VHT40 0xc8       30       30
>       73 VHT40 0xc9       29       29
>       74 VHT40 0xd0       37       37
>       75 VHT40 0xd1       37       37
>       76 VHT40 0xd2       37       37
>       77 VHT40 0xd3       37       37
>       78 VHT40 0xd4       37       37
>       79 VHT40 0xd5       35       35
>       80 VHT40 0xd6       33       33
>       81 VHT40 0xd7       31       31
>       82 VHT40 0xd8       30       30
>       83 VHT40 0xd9       29       29
>       84 VHT80 0xc0       36       36
>       85 VHT80 0xc1       36       36
>       86 VHT80 0xc2       36       36
>       87 VHT80 0xc3       36       36
>       88 VHT80 0xc4       36       36
>       89 VHT80 0xc5       34       34
>       90 VHT80 0xc6       32       32
>       91 VHT80 0xc7       30       30
>       92 VHT80 0xc8       29       29
>       93 VHT80 0xc9       28       28
>       94 VHT80 0xd0       36       36
>       95 VHT80 0xd1       36       36
>       96 VHT80 0xd2       36       36
>       97 VHT80 0xd3       36       36
>       98 VHT80 0xd4       36       36
>       99 VHT80 0xd5       34       34
>      100 VHT80 0xd6       32       32
>      101 VHT80 0xd7       30       30
>      102 VHT80 0xd8       29       29
>      103 VHT80 0xd9       28       28
>      104 HTCUP 0x40       36       36
>      105 HTCUP 0x 0       36       36
>      106 HTCUP 0x40       36       36
>      107 HTCUP 0x 0       36       36
>      108 HTCUP 0x 0       36       36
>      109 HTCUP 0x7a       34       34
>      110 HTCUP 0x8a       32       32
>      111 HTCUP 0x a       30       30
>      112 HTCUP 0xee       27       27
>      113 HTCUP 0xa6       26       26
>      114 HTCUP 0x90       36       36
>      115 HTCUP 0x1d       36       36
>      116 HTCUP 0x80       36       36
>      117 HTCUP 0x41       36       36
>      118 HTCUP 0xd9       36       36
>      119 HTCUP 0x64       34       34
>      120 HTCUP 0xf9       32       32
>      121 HTCUP 0x 0       30       30
>      122 HTCUP 0x 0       27       27
>      123 HTCUP 0x 0       26       26
>      124 HTCUP 0x64        0        0
>      125 HTCUP 0x 0       37       37
>      126 HTCUP 0x31        0        0
>      127 HTCUP 0x 4       37       37
>      128 HTCUP 0x 0       38       38
> ***********************************
> TXBF not supported
> ***************************
> root@OpenWrt:/sys#
>
>
> Thanks
>
> On Mon, May 13, 2019 at 10:27 AM Ben Greear <greearb@candelatech.com> wrote:
> >
> > On 5/13/19 10:26 AM, Sam Samy wrote:
> > > hi Ben,
> > >
> > >> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> > >> please try QCA firmware and let me know if that fixes the problem.
> > >>
> > >    I tried both. Both have the same problem. I tried various versions
> > > of the both(-ct and QCA) firmware as well. All have the same problem.
> >
> > Probably it is a board-file and/or calibration data issue then.
> >
> > The debugfs 'ath10k/tpc_stats' file may show very low values?
> >
> > Thanks,
> > Ben
> >
> > >
> > > Thanks
> > >
> > > On Mon, May 13, 2019 at 10:00 AM Ben Greear <greearb@candelatech.com> wrote:
> > >>
> > >> On 5/13/19 9:56 AM, Sam Samy wrote:
> > >>>    Hi,
> > >>>    I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
> > >>> band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
> > >>> (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
> > >>> fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
> > >>> pretty low on any channel I put it in.  In one feet range I see -60dB
> > >>> RSSI, where as the stock firmware that came with the AP gives an RSSI
> > >>> of -36dB at one foot distance.The downstream transmit rates are MCS8/9
> > >>> for most part. The 2Ghz is working fine. Its using the cal data from
> > >>> the flash that came with the AP.
> > >>>
> > >>>    Can you please suggest anyway to debug this or improve the RSSI?
> > >>>
> > >>>    Thanks you!
> > >>>
> > >>
> > >> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
> > >> please try QCA firmware and let me know if that fixes the problem.
> > >>
> > >> Thanks,
> > >> Ben
> > >>
> > >> --
> > >> Ben Greear <greearb@candelatech.com>
> > >> Candela Technologies Inc  http://www.candelatech.com
> > >>
> > >
> >
> >
> > --
> > Ben Greear <greearb@candelatech.com>
> > Candela Technologies Inc  http://www.candelatech.com
> >

^ permalink raw reply

* Re: ath10k 5Ghz RSSI low
From: Ben Greear @ 2019-05-13 18:17 UTC (permalink / raw)
  To: Sam Samy; +Cc: linux-wireless
In-Reply-To: <CAPGJ1o-i8Gy8baAf+MHcuWoF6oHuSiRYwyADCZDkYS8fmeOy8A@mail.gmail.com>

On 5/13/19 11:10 AM, Sam Samy wrote:
> hi Ben,
> 
>    I also looked at the TPC on the stock firmware on the AP. There is a
> difference.

I think you should write to the openwrt mailing list and/or its bug tracker
and see if they can help.

Thanks,
Ben

> 
> Here is the snippet from stock firmware:
> 
> TPC Config for channel 5765 mode 10
> **************************************************
> CTL           = 0x10   Reg. Domain           = 20
> Antenna Gain  =  0     Reg. Max Antenna Gain = 12
> Power Limit   = 63     Reg. Max Power        = 60
> Num tx chains =  2    Num  Supported Rates  = 109
> **************************************************
> **************** CDD  POWER TABLE ****************
> **************************************************
> 
> Where as in openwrt it is:
> 
> *************************************
> TPC config for channel 5765 mode 10
> *************************************
> CTL        =  0x10 Reg. Domain        = 58
> Antenna Gain    =  0 Reg. Max Antenna Gain    =   0
> Power Limit    = 60 Reg. Max Power        = 30
> Num tx chains    =  2 Num supported rates    = 109
> ********************************
> 
> 
> So looks like reg ,domain is different even though both are US.
> (Although I didnt set anything on stock firmware. The countrycode from
> iwpriv get_countrycode says its 841.)
> 
> Also, the antenna gain seems different between stock and openwrt firmware..
> 
> 
> How to change the reg. domain like in stock firmware in openwrt
> although I set to US in the uci.
> 
> root@OpenWrt:/sys# uci show | grep country
> uhttpd.defaults.country='ZZ'
> wireless.radio0.country='US'
> wireless.radio1.country='US'
> wireless.radio2.country='US'
> root@OpenWrt:/sys#
> 
> Thanks
> 
> 
> On Mon, May 13, 2019 at 10:36 AM Sam Samy <to.swami1@gmail.com> wrote:
>>
>>> Probably it is a board-file and/or calibration data issue then.
>>>
>>> The debugfs 'ath10k/tpc_stats' file may show very low values?
>>
>> I am not sure if the values are right. Here is one of the 5Ghz radio stats:
>>
>> root@OpenWrt:/sys# cat ./kernel/debug/ieee80211/phy0/ath10k/tpc_stats
>>
>> *************************************
>> TPC config for channel 5320 mode 10
>> *************************************
>> CTL        =  0x10 Reg. Domain        = 58
>> Antenna Gain    =  0 Reg. Max Antenna Gain    =   0
>> Power Limit    = 46 Reg. Max Power        = 46
>> Num tx chains    =  2 Num supported rates    = 129
>> ********************************
>> ******************* CDD POWER TABLE ****************
>> ********************************
>> No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
>>         0 CCK 0x40        0        0
>>         1 CCK 0x41        0        0
>>         2 CCK 0x42        0        0
>>         3 CCK 0x43        0        0
>>         4 OFDM 0x 0       36       34
>>         5 OFDM 0x 1       38       34
>>         6 OFDM 0x 2       38       34
>>         7 OFDM 0x 3       38       34
>>         8 OFDM 0x 4       34       34
>>         9 OFDM 0x 5       38       34
>>        10 OFDM 0x 6       38       34
>>        11 OFDM 0x 7       38       34
>>        12 HT20 0x80       38       34
>>        13 HT20 0x81       38       34
>>        14 HT20 0x82       38       34
>>        15 HT20 0x83       38       34
>>        16 HT20 0x84       38       34
>>        17 HT20 0x85       36       34
>>        18 HT20 0x86       34       34
>>        19 HT20 0x87       32       32
>>        20 HT20 0x90       38       38
>>        21 HT20 0x91       38       38
>>        22 HT20 0x92       38       38
>>        23 HT20 0x93       38       38
>>        24 HT20 0x94       38       38
>>        25 HT20 0x95       36       36
>>        26 HT20 0x96       34       34
>>        27 HT20 0x97       32       32
>>        28 HT40 0x80       37       34
>>        29 HT40 0x81       37       34
>>        30 HT40 0x82       37       34
>>        31 HT40 0x83       37       34
>>        32 HT40 0x84       37       34
>>        33 HT40 0x85       35       34
>>        34 HT40 0x86       33       33
>>        35 HT40 0x87       31       31
>>        36 HT40 0x90       37       37
>>        37 HT40 0x91       37       37
>>        38 HT40 0x92       37       37
>>        39 HT40 0x93       37       37
>>        40 HT40 0x94       37       37
>>        41 HT40 0x95       35       35
>>        42 HT40 0x96       33       33
>>        43 HT40 0x97       31       31
>>        44 VHT20 0xc0       38       34
>>        45 VHT20 0xc1       38       34
>>        46 VHT20 0xc2       38       34
>>        47 VHT20 0xc3       38       34
>>        48 VHT20 0xc4       38       34
>>        49 VHT20 0xc5       36       34
>>        50 VHT20 0xc6       34       34
>>        51 VHT20 0xc7       32       32
>>        52 VHT20 0xc8       31       31
>>        53 VHT20 0xc9       30       30
>>        54 VHT20 0xd0       38       38
>>        55 VHT20 0xd1       38       38
>>        56 VHT20 0xd2       38       38
>>        57 VHT20 0xd3       38       38
>>        58 VHT20 0xd4       38       38
>>        59 VHT20 0xd5       36       36
>>        60 VHT20 0xd6       34       34
>>        61 VHT20 0xd7       32       32
>>        62 VHT20 0xd8       31       31
>>        63 VHT20 0xd9       30       30
>>        64 VHT40 0xc0       37       34
>>        65 VHT40 0xc1       37       34
>>        66 VHT40 0xc2       37       34
>>        67 VHT40 0xc3       37       34
>>        68 VHT40 0xc4       37       34
>>        69 VHT40 0xc5       35       34
>>        70 VHT40 0xc6       33       33
>>        71 VHT40 0xc7       31       31
>>        72 VHT40 0xc8       30       30
>>        73 VHT40 0xc9       29       29
>>        74 VHT40 0xd0       37       37
>>        75 VHT40 0xd1       37       37
>>        76 VHT40 0xd2       37       37
>>        77 VHT40 0xd3       37       37
>>        78 VHT40 0xd4       37       37
>>        79 VHT40 0xd5       35       35
>>        80 VHT40 0xd6       33       33
>>        81 VHT40 0xd7       31       31
>>        82 VHT40 0xd8       30       30
>>        83 VHT40 0xd9       29       29
>>        84 VHT80 0xc0       36       34
>>        85 VHT80 0xc1       36       34
>>        86 VHT80 0xc2       36       34
>>        87 VHT80 0xc3       36       34
>>        88 VHT80 0xc4       36       34
>>        89 VHT80 0xc5       34       34
>>        90 VHT80 0xc6       32       32
>>        91 VHT80 0xc7       30       30
>>        92 VHT80 0xc8       29       29
>>        93 VHT80 0xc9       28       28
>>        94 VHT80 0xd0       36       36
>>        95 VHT80 0xd1       36       36
>>        96 VHT80 0xd2       36       36
>>        97 VHT80 0xd3       36       36
>>        98 VHT80 0xd4       36       36
>>        99 VHT80 0xd5       34       34
>>       100 VHT80 0xd6       32       32
>>       101 VHT80 0xd7       30       30
>>       102 VHT80 0xd8       29       29
>>       103 VHT80 0xd9       28       28
>>       104 HTCUP 0x40       36       36
>>       105 HTCUP 0x 0       36       34
>>       106 HTCUP 0x40       36       36
>>       107 HTCUP 0x 0       36       34
>>       108 HTCUP 0x 0       36       34
>>       109 HTCUP 0x7a       34       34
>>       110 HTCUP 0x8a       32       32
>>       111 HTCUP 0x a       30       30
>>       112 HTCUP 0xee       27       27
>>       113 HTCUP 0xa6       26       26
>>       114 HTCUP 0x90       36       36
>>       115 HTCUP 0x1d       36       36
>>       116 HTCUP 0x80       36       34
>>       117 HTCUP 0x41       36       36
>>       118 HTCUP 0xd9       36       36
>>       119 HTCUP 0x64       34       34
>>       120 HTCUP 0xf9       32       32
>>       121 HTCUP 0x 0       30       30
>>       122 HTCUP 0x 0       27       27
>>       123 HTCUP 0x 0       26       26
>>       124 HTCUP 0x64        0        0
>>       125 HTCUP 0x 0       37       34
>>       126 HTCUP 0x31        0        0
>>       127 HTCUP 0x 4       37       34
>>       128 HTCUP 0x 0       38       34
>> ***********************************
>> ********************************
>> ******************* STBC POWER TABLE ****************
>> ********************************
>> No.  Preamble Rate_code tpc_value0 tpc_value1 tpc_value2 tpc_value3
>>         0 CCK 0x40        0        0
>>         1 CCK 0x41        0        0
>>         2 CCK 0x42        0        0
>>         3 CCK 0x43        0        0
>>         4 OFDM 0x 0       36       36
>>         5 OFDM 0x 1       38       38
>>         6 OFDM 0x 2       38       38
>>         7 OFDM 0x 3       38       38
>>         8 OFDM 0x 4       34       34
>>         9 OFDM 0x 5       38       38
>>        10 OFDM 0x 6       38       38
>>        11 OFDM 0x 7       38       38
>>        12 HT20 0x80       38       38
>>        13 HT20 0x81       38       38
>>        14 HT20 0x82       38       38
>>        15 HT20 0x83       38       38
>>        16 HT20 0x84       38       38
>>        17 HT20 0x85       36       36
>>        18 HT20 0x86       34       34
>>        19 HT20 0x87       32       32
>>        20 HT20 0x90       38       38
>>        21 HT20 0x91       38       38
>>        22 HT20 0x92       38       38
>>        23 HT20 0x93       38       38
>>        24 HT20 0x94       38       38
>>        25 HT20 0x95       36       36
>>        26 HT20 0x96       34       34
>>        27 HT20 0x97       32       32
>>        28 HT40 0x80       37       37
>>        29 HT40 0x81       37       37
>>        30 HT40 0x82       37       37
>>        31 HT40 0x83       37       37
>>        32 HT40 0x84       37       37
>>        33 HT40 0x85       35       35
>>        34 HT40 0x86       33       33
>>        35 HT40 0x87       31       31
>>        36 HT40 0x90       37       37
>>        37 HT40 0x91       37       37
>>        38 HT40 0x92       37       37
>>        39 HT40 0x93       37       37
>>        40 HT40 0x94       37       37
>>        41 HT40 0x95       35       35
>>        42 HT40 0x96       33       33
>>        43 HT40 0x97       31       31
>>        44 VHT20 0xc0       38       38
>>        45 VHT20 0xc1       38       38
>>        46 VHT20 0xc2       38       38
>>        47 VHT20 0xc3       38       38
>>        48 VHT20 0xc4       38       38
>>        49 VHT20 0xc5       36       36
>>        50 VHT20 0xc6       34       34
>>        51 VHT20 0xc7       32       32
>>        52 VHT20 0xc8       31       31
>>        53 VHT20 0xc9       30       30
>>        54 VHT20 0xd0       38       38
>>        55 VHT20 0xd1       38       38
>>        56 VHT20 0xd2       38       38
>>        57 VHT20 0xd3       38       38
>>        58 VHT20 0xd4       38       38
>>        59 VHT20 0xd5       36       36
>>        60 VHT20 0xd6       34       34
>>        61 VHT20 0xd7       32       32
>>        62 VHT20 0xd8       31       31
>>        63 VHT20 0xd9       30       30
>>        64 VHT40 0xc0       37       37
>>        65 VHT40 0xc1       37       37
>>        66 VHT40 0xc2       37       37
>>        67 VHT40 0xc3       37       37
>>        68 VHT40 0xc4       37       37
>>        69 VHT40 0xc5       35       35
>>        70 VHT40 0xc6       33       33
>>        71 VHT40 0xc7       31       31
>>        72 VHT40 0xc8       30       30
>>        73 VHT40 0xc9       29       29
>>        74 VHT40 0xd0       37       37
>>        75 VHT40 0xd1       37       37
>>        76 VHT40 0xd2       37       37
>>        77 VHT40 0xd3       37       37
>>        78 VHT40 0xd4       37       37
>>        79 VHT40 0xd5       35       35
>>        80 VHT40 0xd6       33       33
>>        81 VHT40 0xd7       31       31
>>        82 VHT40 0xd8       30       30
>>        83 VHT40 0xd9       29       29
>>        84 VHT80 0xc0       36       36
>>        85 VHT80 0xc1       36       36
>>        86 VHT80 0xc2       36       36
>>        87 VHT80 0xc3       36       36
>>        88 VHT80 0xc4       36       36
>>        89 VHT80 0xc5       34       34
>>        90 VHT80 0xc6       32       32
>>        91 VHT80 0xc7       30       30
>>        92 VHT80 0xc8       29       29
>>        93 VHT80 0xc9       28       28
>>        94 VHT80 0xd0       36       36
>>        95 VHT80 0xd1       36       36
>>        96 VHT80 0xd2       36       36
>>        97 VHT80 0xd3       36       36
>>        98 VHT80 0xd4       36       36
>>        99 VHT80 0xd5       34       34
>>       100 VHT80 0xd6       32       32
>>       101 VHT80 0xd7       30       30
>>       102 VHT80 0xd8       29       29
>>       103 VHT80 0xd9       28       28
>>       104 HTCUP 0x40       36       36
>>       105 HTCUP 0x 0       36       36
>>       106 HTCUP 0x40       36       36
>>       107 HTCUP 0x 0       36       36
>>       108 HTCUP 0x 0       36       36
>>       109 HTCUP 0x7a       34       34
>>       110 HTCUP 0x8a       32       32
>>       111 HTCUP 0x a       30       30
>>       112 HTCUP 0xee       27       27
>>       113 HTCUP 0xa6       26       26
>>       114 HTCUP 0x90       36       36
>>       115 HTCUP 0x1d       36       36
>>       116 HTCUP 0x80       36       36
>>       117 HTCUP 0x41       36       36
>>       118 HTCUP 0xd9       36       36
>>       119 HTCUP 0x64       34       34
>>       120 HTCUP 0xf9       32       32
>>       121 HTCUP 0x 0       30       30
>>       122 HTCUP 0x 0       27       27
>>       123 HTCUP 0x 0       26       26
>>       124 HTCUP 0x64        0        0
>>       125 HTCUP 0x 0       37       37
>>       126 HTCUP 0x31        0        0
>>       127 HTCUP 0x 4       37       37
>>       128 HTCUP 0x 0       38       38
>> ***********************************
>> TXBF not supported
>> ***************************
>> root@OpenWrt:/sys#
>>
>>
>> Thanks
>>
>> On Mon, May 13, 2019 at 10:27 AM Ben Greear <greearb@candelatech.com> wrote:
>>>
>>> On 5/13/19 10:26 AM, Sam Samy wrote:
>>>> hi Ben,
>>>>
>>>>> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
>>>>> please try QCA firmware and let me know if that fixes the problem.
>>>>>
>>>>     I tried both. Both have the same problem. I tried various versions
>>>> of the both(-ct and QCA) firmware as well. All have the same problem.
>>>
>>> Probably it is a board-file and/or calibration data issue then.
>>>
>>> The debugfs 'ath10k/tpc_stats' file may show very low values?
>>>
>>> Thanks,
>>> Ben
>>>
>>>>
>>>> Thanks
>>>>
>>>> On Mon, May 13, 2019 at 10:00 AM Ben Greear <greearb@candelatech.com> wrote:
>>>>>
>>>>> On 5/13/19 9:56 AM, Sam Samy wrote:
>>>>>>     Hi,
>>>>>>     I installed master branch openwrt onto Asus MAP-AC2200 AP. It has tri
>>>>>> band. Its based on IPQ4019 DK04 QCA reference platform. 2 radios
>>>>>> (2Ghz/5Ghz) on AHB bus and one 5GHZ on PCIe bus. Its generally working
>>>>>> fine except one problem in 5Ghz. On both the 5Ghz radios the RSSI is
>>>>>> pretty low on any channel I put it in.  In one feet range I see -60dB
>>>>>> RSSI, where as the stock firmware that came with the AP gives an RSSI
>>>>>> of -36dB at one foot distance.The downstream transmit rates are MCS8/9
>>>>>> for most part. The 2Ghz is working fine. Its using the cal data from
>>>>>> the flash that came with the AP.
>>>>>>
>>>>>>     Can you please suggest anyway to debug this or improve the RSSI?
>>>>>>
>>>>>>     Thanks you!
>>>>>>
>>>>>
>>>>> Hello, what firmware are you using (ath10k-ct, or QCA?)  If using -ct firmware,
>>>>> please try QCA firmware and let me know if that fixes the problem.
>>>>>
>>>>> Thanks,
>>>>> Ben
>>>>>
>>>>> --
>>>>> Ben Greear <greearb@candelatech.com>
>>>>> Candela Technologies Inc  http://www.candelatech.com
>>>>>
>>>>
>>>
>>>
>>> --
>>> Ben Greear <greearb@candelatech.com>
>>> Candela Technologies Inc  http://www.candelatech.com
>>>
> 


-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com


^ permalink raw reply

* Re: [linux-nfc] ThinkPad T470 and NXP PN5xx (PN547 or PN548)
From: Sedat Dilek @ 2019-05-13 19:46 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Oleg Zhurakivskyy, Samuel Ortiz, linux-wireless, linux-nfc
In-Reply-To: <20190513141128.GY9224@smile.fi.intel.com>

On Mon, May 13, 2019 at 4:11 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Mon, May 13, 2019 at 03:32:52PM +0200, Sedat Dilek wrote:
> > BTW, which Linux Kconfig setting are minimum?
> >
> > scripts/config -m NFC_NCI -m NFC_NXP_NCI -m NFC_NXP_NCI_I2C
> >
> > What about?
> >
> > scripts/config -m NFC_NCI_SPI -m NFC_NCI_UART -m I2C_GPIO -m SPI_GPIO
> >
> > Required?
> > Not needed?
>
> I2C_GPIO and SPI_GPIO has nothing to do with all this. What indeed is needed is
> the pin control of the actual Intel SoC (unfortunately I don't know what
> exactly you have, so, you better to check yourself), something like
> CONFIG_PINCTRL_SKYLAKE=y.
>

I played a bit with the Kconfigs...

scripts/config -m NFC_NCI -m NFC_NXP_NCI -m NFC_NXP_NCI_I2C

...is sufficient.

I don't know which CONFIG_PINCTRL_XXX is needed.

- Sedat -

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox