Wireless
Issues related to Intel® Wireless Adapters and technologies
6185 Discussions

How to enable AX210 6GHz channels

SOLGIL
Beginner
2,986 Views

Hi

 

Could you let me know how to enable AX210 6GHz channels ?

 

Recently, I installed AX210 in my Ubuntu 20.04(Kernel 5.11.0-27 generric).

It works properly with 2GHz and 5GHz, but 6GHz channels are disabled. 

 

Checking “iw list”, all 6GHz channels are disabled. 

I tried to change regulatory domain to US with “iw reg set US”, but phy#0 still shows country code KR with all 6GHz frequencies disabled. 

 

 

Thank you in advance.

 

Regards,

Sol

12 Replies
Spacefish
New Contributor I
2,961 Views

You can´t

The regulatory database is embeeded in the AX210s Firmware. So called "Device Managed".. Your country is automatically selected by the firmware, it will use the country indicated in beacon packets of received wifis to determine the current country most of the time.

Intel has to release a fimware update with a new regulatory database in order to enable 6Ghz in the countries where this is allowed now.

Regulatory bodies enforce this behaviour, as they specify that the user should be unable to change TX Power and bands by themselfs.. Intel implements this by doing all of this in Firmware.

Almighty1
New Contributor I
2,954 Views

Has there ever been firmware updates for WiFi cards or networking cards in general?  I had never seen Intel or any other of their competitors ever post firmware updates ever since I had used networking products since the 1980s. 

n_scott_pearson
Super User Retired Employee
2,940 Views
Firmware is released as part of driver update packages. I presume that it is more complicated in Linux, but should be similar.
...S
Almighty1
New Contributor I
2,892 Views

Interesting, so basically in Windows, it would mean it's done in ProSet drivers?  I had never successfully used wireless on FreeBSD or Linux so not sure how that works as my internet uses static IPs since my machine is the server so only wired would work as the WiFi would be using NAT.  Is the firmware actually flashed to the card or does it load each time like mentioned below for Linux?

Spacefish
New Contributor I
2,928 Views
Firmware is loaded by the kernel driver from /lib/firmware you can see which file is loaded it dmesg. There is no persistent firmware storage on the card, it's loaded each time.
/lib/firmware is updated by the package linux-firmware in Ubuntu.
Currently as far as I know 6Ghz is only enabled in US
Vegan
New Contributor I
2,855 Views

Linux is not that up to date for WiFi like Windows is. I have an AX210 and a suitable access point and it works fine. I am using Windows 11.

 

 

 

 

NetEngineer
Beginner
2,166 Views

Any update on this topic? I still wait for a iwlwifi firmware file we can use in Germany for 6Ghz channels. Is there any page to get release notes for iwlwifi firmware? I haven't seen any indication for this country code issue in the GIT commit messages so far...

As soon as there is a iwlwifi firmware file (and a kernel who is able to play with this file) it would be interessting to know...

Spacefish
New Contributor I
2,147 Views

In the meantime they enable 6GHz (lower bands) in Europe or at least in germany.. It´s enabled by this commit: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=23e0197e9e6fe...

 

This as 7 days ago!

It only works as a client, but not in AP-Mode, as "NO-IR" is set for all channels in the 6GHz Band.

But at least it works! You still need a 6GHz AP all of them are currently very expensive.

NetEngineer
Beginner
2,133 Views

This is great news! I wasn't able to find the specific information about the region table update on the -68 version mentioned in the commit message. This seems to be quite an important update though. However, I have the -68 ucode in my installation, but my 5.16 kernel (mainline) don't want to use it. But this is something I can surely handle. Thank you very much for sharing this information!

Vegan
New Contributor I
2,162 Views

More and more 6 GHz access points are now available. Prices are still comparatively high.

Cable co boxes can be bridged so that a customer WiFi box can be used with more capabilities.

NetEngineer
Beginner
2,124 Views

Hi again,

today I tried an Ubuntu Jammy (LTS pre-release) with a 5.16.1 Kernel (main) and copied the -68.ucode manually to /lib/firmware. However, the system is still using -67 version. The dmesg output shows the max. version supported is -67 still. Any ideas what's missing here? Is the check of the ucode version part of the iwlwifi module itself (not related to the kernel)? Is there a workaround / force routine I could use? Any recommendation is appreciated. 

EDIT: I think I see the answer. The iwlwifi module needs to updated. Found the source on kernel/git/iwlwifi/iwlwifi-next.git - iwlwifi next tree - for next kernel version

Spacefish
New Contributor I
2,074 Views

Try copying the .pnvm file as well..
For me dmesg looks like this:


[   29.031215] iwlwifi 0000:04:00.0: enabling device (0000 -> 0002)
[   29.036978] iwlwifi 0000:04:00.0: api flags index 2 larger than supported by driver
[   29.036999] iwlwifi 0000:04:00.0: TLV_FW_FSEQ_VERSION: FSEQ Version: 0.63.2.1
[   29.037582] iwlwifi 0000:04:00.0: loaded firmware version 66.55c64978.0 ty-a0-gf-a0-66.ucode op_mode iwlmvm
[   29.129368] iwlwifi 0000:04:00.0: Detected Intel(R) Wi-Fi 6 AX210 160MHz, REV=0x420
[   29.297547] iwlwifi 0000:04:00.0: loaded PNVM version 0xdda57f4f
[   29.313000] iwlwifi 0000:04:00.0: Detected RF GF, rfid=0x10d000
[   29.380657] iwlwifi 0000:04:00.0: base HW address: 4c:77:cb:ed:ab:11
[   29.396323] iwlwifi 0000:04:00.0 wlp4s0: renamed from wlan0
[   39.188087] iwlwifi 0000:04:00.0: Unhandled alg: 0x3f0707
​

And 6 GHz is enabled ("iw reg get")

phy#0 (self-managed)
country DE: DFS-UNSET
	(2402 - 2437 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
	(2422 - 2462 @ 40), (6, 22), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ
	(2447 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
	(5170 - 5190 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(5190 - 5210 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(5210 - 5230 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(5230 - 5250 @ 160), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(5250 - 5270 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5270 - 5290 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5290 - 5310 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5310 - 5330 @ 160), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5490 - 5510 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5510 - 5530 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5530 - 5550 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5550 - 5570 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5570 - 5590 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5590 - 5610 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5610 - 5630 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, PASSIVE-SCAN
	(5630 - 5650 @ 220), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, PASSIVE-SCAN
	(5650 - 5670 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, PASSIVE-SCAN
	(5670 - 5690 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
	(5690 - 5710 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40MINUS, NO-160MHZ, PASSIVE-SCAN
	(5735 - 5755 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-160MHZ
	(5755 - 5775 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-160MHZ
	(5775 - 5795 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-160MHZ
	(5795 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-160MHZ
	(5815 - 5835 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40MINUS, NO-80MHZ, NO-160MHZ
	(5945 - 5965 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(5965 - 5985 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(5985 - 6005 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6005 - 6025 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6025 - 6045 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6045 - 6065 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6065 - 6085 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6085 - 6105 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6105 - 6125 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6125 - 6145 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6145 - 6165 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6165 - 6185 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6185 - 6205 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6205 - 6225 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6225 - 6245 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6245 - 6265 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6265 - 6285 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6285 - 6305 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6305 - 6325 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6325 - 6345 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6345 - 6365 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6365 - 6385 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN
	(6385 - 6405 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, PASSIVE-SCAN
	(6405 - 6425 @ 480), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, PASSIVE-SCAN

 

I believe the "nvm" is the configuration area.. I read the driver source code and there are multiple sources for the "nvm"/"pnvm". As far as i understand it.
- One is preloaded on the chip?!
- It could be set by the BIOS / UEFI by the "platform manufacturer", guess this is used, if someone certifies a whole laptop as a manufacturer or a device with WiFi (you see certification marking for wifi on some business laptops)
- If could be set by the driver from the PNVM file

In the certification documentation (FCC) intel lists the frequencies of the card as "set in factory in NVM, unchachable by user", but this does not seem to be the case IMHO..

Not sure if the regdb is embeeded in the PNVM or if it is in the ucode, but i suspect the PNVM.. There is some code in the driver to split the .pnvm file into different "sections" but the payload of this section is binary and there is no code in the driver to parse it.. There is code which reads and parses the reg info from the card firmware once it´s running, the format is pretty tightly packed, with single bits defining modes and enabled channels and so on..

Comparing different versions of the PNVM file with a hex editor at least shows some bit changes in a larger region which is suspect to be the firmware embeeded regdb, but we will probably never know.. The payload is parsed by the firmware running on the wifi chip, which we don´t have the sourceode for nor is it easy to disassemble.. As they probably use some esotheric intel only in-house microarchitecture for the firmware..

I wrote a parser for the PNVM file which is able to extract the different binary sections from it, but from there on i am clueless.. If i would be able to understand the format we could have a parse which translates it into human readable regdb, so we can see what intel is doing.
I suspect changing it won´t be possible as it is probably signed.. Furthermore there might be some block-based cipher applied to it.. Probably uses big-endian or something like that as well... Did not want to spent the effort to investigate further in the end.

Reply