Wireless
Participate in insightful discussions regarding issues related to Intel® Wireless Adapters and technologies
7365 Discussions

How to enable AX210 6GHz channels

SOLGIL
Novice
9,943 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
9,918 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 II
9,911 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. 

0 Kudos
n_scott_pearson
Super User
9,897 Views
Firmware is released as part of driver update packages. I presume that it is more complicated in Linux, but should be similar.
...S
0 Kudos
Almighty1
New Contributor II
9,849 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?

0 Kudos
Spacefish
New Contributor I
9,885 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
0 Kudos
Vegan
New Contributor I
9,812 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.

 

 

 

 

0 Kudos
NetEngineer
Beginner
9,123 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...

0 Kudos
Spacefish
New Contributor I
9,104 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=23e0197e9e6fe9ca0d2ead3a3df3c41df97ad16b

 

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
9,090 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!

0 Kudos
Vegan
New Contributor I
9,119 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.

0 Kudos
NetEngineer
Beginner
9,081 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

0 Kudos
Spacefish
New Contributor I
9,031 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.

0 Kudos
Reply