Qualcomm Atheros QCA6174

From Gentoo Wiki
Jump to: navigation, search
Resources
This article has some todo items:
  • Review/update limitations in the #Firmware section

The Qualcomm Atheros QCA6174 is a 802.11ac Wireless Network Adapter which is used in some laptops.

To make it work it needs the kernel driver and firmware.

Kernel

Precondition

Activate at least cfg80211 and mac80211. Some wireless drivers also require a rate control algorithm.

KERNEL linux-4.1
[*] Networking support  --->
    [*] Wireless  --->
        <*>   cfg80211 - wireless configuration API
        [ ]     nl80211 testmode command
        [ ]     enable developer warnings
        [ ]     cfg80211 regulatory debugging
        [ ]     cfg80211 certification onus
        [*]     enable powersave by default
        [ ]     cfg80211 DebugFS entries
        [ ]     use statically compiled regulatory rules database
        [ ]     cfg80211 wireless extensions compatibility
        <*>   Generic IEEE 802.11 Networking Stack (mac80211)
        [*]   Minstrel
        [*]     Minstrel 802.11n support
        [ ]       Minstrel 802.11ac support
              Default rate control algorithm (Minstrel)  --->
        [ ]   Enable mac80211 mesh networking (pre-802.11s) support
        -*-   Enable LED triggers
        [ ]   Export mac80211 internals in DebugFS
        [ ]   Trace all mac80211 debug messages
        [ ]   Select mac80211 debugging features  ----

Minstrel and its 802.11n support is a rate control algorithm.

Kernel driver

Enable Atheros 802.11ac wireless cards support (CONFIG_ATH10K) and Atheros ath10k PCI support (CONFIG_ATH10K_PCI) as modules <M>:

KERNEL Wireless configuration, linux-4.8
Device Drivers  --->
    [*] Network device support  --->
        [*]   Wireless LAN  --->
            [*]   Atheros/Qualcomm devices
            <M>     Atheros 802.11ac wireless cards support
            <M>       Atheros ath10k PCI support

Set it as a module <M> as shown here. After changes on kernel configuration do not forget to rebuild the kernel.

After rebuilding the kernel and reboot the selected options could be verified (needs Kernel/IKCONFIG_Support) like

user $zgrep 'ATH10K' /proc/config.gz

lspci should then display the adapter like:

root #lspci -nnkv
02:00.0 Network controller [0280]: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter [168c:003e] (rev 32)
        Subsystem: Bigfoot Networks, Inc. QCA6174 802.11ac Wireless Network Adapter [1a56:1535]
        Flags: bus master, fast devsel, latency 0, IRQ 141
        Memory at ed200000 (64-bit, non-prefetchable) [size=2M]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable+ Count=8/8 Maskable+ 64bit-
        Capabilities: [70] Express Endpoint, MSI 00
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [148] Virtual Channel
        Capabilities: [168] Device Serial Number 00-00-00-00-00-00-00-00
        Capabilities: [178] Latency Tolerance Reporting
        Capabilities: [180] L1 PM Substates
        Kernel driver in use: ath10k_pci
        Kernel modules: ath10k_pci 
Important
In case the driver is built into the kernel (<*>) instead of as a module (<M>), then the firmware needs to be built into the kernel as well.
Do not forget to rebuild the kernel after changing its configuration.

Firmware

The Qualcomm Atheros Killer N1525 Wireless-AC requires Linux firmware files.

root #emerge sys-kernel/linux-firmware

At the time of writing, =sys-kernel/linux-firmware-20161205 doesn't seem to work with the Atheros wireless card. One manual step is still required to update to a working firmware. First backup the previous one.

root #mv /lib/firmware/ath10k/QCA6174/hw3.0/board.bin /lib/firmware/ath10k/QCA6174/hw3.0/board.bin.bak

Then download the working one.

root #wget https://github.com/FireWalkerX/ath10k-firmware/raw/master/QCA6174/hw3.0/board-2.bin -O /lib/firmware/ath10k/QCA6174/hw3.0/board.bin

This is what you should end up having.

user $sha256sum /lib/firmware/ath10k/QCA6174/hw3.0/board.bin*
94f69f28b8901bc7e655347decc26d4bb9cd8cd1ec5e60c44a9bdd9a4023017e  /lib/firmware/ath10k/QCA6174/hw3.0/board.bin
1a8d225818b46986fc4f615594fbe448fa820618590d6902c8f844bb37cda667  /lib/firmware/ath10k/QCA6174/hw3.0/board.bin.bak

Find out more on GitHub kvalo/ath10k-firmware.

Network interface name (optional)

Network device names eth0, wlan0, etc. as provided by the kernel could be changed on boot (see dmesg) by the /lib/udev/rules.d/80-net-name-slot.rules udev rule.

To keep the classic naming this rule can be overwritten with an equally named empty file in the /etc/udev/rules.d directory:

root #touch /etc/udev/rules.d/80-net-name-slot.rules


Testing

After a reboot with the new kernel or after loading the modules, the device can be checked for availability by using following methods:

/sys file system

Get the device name by listing the /sys/class/net directory contents using ls -al or the tree command (provided by the app-text/tree package):

user $tree /sys/class/net
/sys/class/net/
├── enp2s14 -> ../../devices/pci0000:00/0000:00:1e.0/0000:02:0e.0/net/enp2s14
├── lo -> ../../devices/virtual/net/lo
├── sit0 -> ../../devices/virtual/net/sit0
└── wlp8s0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:08:00.0/net/wlp8s0

ip command

To obtain the device name and verify that the wireless card is detected, execute the following ip command:

user $ip addr
3: wlan0:   ...

ifconfig command

The ifconfig command is provided through the sys-apps/net-tools package. Use ifconfig -a to list all detected network cards, even those that are not enabled/active yet:

user $ifconfig -a
wlan0     ...

A network card can be activated as follows:

root #ifconfig -v wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill
WARNING: at least one error occurred. (-1)

In this example, enabling the wireless card failed as a radio frequency kill state is set (usually to keep power consumption at bay and not connect by accident to a wireless network).

iw command

If the wireless network card driver supports the nl80211 stack, then the iw command as offered by the net-wireless/iw package can show the detected wireless cards:

root #iw dev
   phy#0
	Interface wlan0
		ifindex 4
		type managed

See also

External resources