Skip to content

Properly fixing the Surface Go wifi board.bin issue #542

Description

@jwrdegoede

This is not so much a bug report as a place intended to track the progress of getting a proper fix for the Surface Go wifi board.bin issue upstreamed.

I've spend a chunk of time on analysing this issue today. The issue is that like some other wifi cards the QCA6174 card seems to save money by not including an (external) eeprom to store various board settings (like GPIO pin usage, etc.). Instead there is only a tiny bit of internal flash which stores a PCI-subsystem vendor-id:product-id pair (168c:3370 in this case) and that is then used to lookup an eeprom-.bin file by the Windows drivers.

The Linux driver tries to make things work with a single default/generic /lib/firmware/ath10k/QCA6174/hw3.0/board.bin file. But that does not work on all systems, so there is a board-2.bin file which contains custom board.bin files matched on their PCI device subsystem vendor-id:product-id pair (168c:3370).

ATM this board-2.bin file does not contain a board.bin override for the 168c:3370 subsys-ids, so the ath10k driver falls back to the generic board.bin which does not work for the Surface Go. Adding new boards to boards-2.bin is documented here: https://wireless.wiki.kernel.org/en/users/drivers/ath10k/boardfiles

Note that the board.bin linked from the Surface Go wiki page is actually not the right one for the Surface Go:
https://web.archive.org/web/20201111213909/http://www.killernetworking.com/support/K1535_Debian/board.bin

This is for the killer networking 1535 card which has pci-subsys-ids of 1a56:1535 . I've dug up the right board.bin file (and tested it) from the Windows partition and submitted it upstream for inclusion into board-2.bin:
https://lore.kernel.org/ath10k/[email protected]/T/#u

Activity

  1. jwrdegoede commented on Aug 24, 2021

    @jwrdegoede
    Author

    Note that while waiting for the proper fix to get accepted upstream and then find its way to various downstreams, the wiki page instructions should probably be updated.

    The ath10k driver will automatically fall back to board.bin for pci-subsys-ids not listed in boards-2.bin, so removing boards-2.bin is not necessary. Also the wifi on the Surface Go is a hw3.2 version, so only the board.bin in the hw3.0 directory needs to be replaced.

    And we should probably also replace the K1535_Debian/board.bin file with the eeprom_ar6320_3p0_TX8_clpc.bin file from the Windows driver for the 168c:3370 subsys-id.

  2. qzed commented on Aug 24, 2021

    @qzed
    Member

    Thanks! I've updated the wiki (for the Surface Laptop 3 as well which seems to use the same chip? At leas the same Killer Networking board worked...). There's also our (somewhat crude) hack for packaging this which will also need an update. I'll replace the board file there next and update that as well.

  3. jwrdegoede commented on Aug 24, 2021

    @jwrdegoede
    Author

    Chances are that the Surface Laptop 3 is supposed to use a different board.bin. Since the killer one has been working without issues so far I would wait a bit with updating the packages until we have a better idea of which models needs which board.bin. If different models are supposed to use different boards.bin then the current packaging won't work. Instead we may need to do our own board-2.bin with all the necessary boards.bin-s included.

  4. jwrdegoede commented on Aug 24, 2021

    @jwrdegoede
    Author

    So I found a hwprobe of the Surface Laptop 3: https://linux-hardware.org/?probe=7910582d7c And it has subsys ids of: 045e:0001 which is not listed in the netath10k.inf on the Surface Go Windows partition...

  5. qzed commented on Aug 24, 2021

    @qzed
    Member

    If different models are supposed to use different boards.bin then the current packaging won't work.

    Right, fair point. I've added the board file you've posted to the workaround repo and updated the links in the wiki, but kept the Killer Networking one as well for now (for the workaround package and SL3).

  6. jwrdegoede commented on Sep 6, 2021

    @jwrdegoede
    Author

    I have the feeling that the upstream ath10k maintainer does not really has the time to actually deal with board2.bin updates, so once I've also confirmed that I have the right eeprom.bin file for the Surface Laptop 3, see #41, then I will prepare an updated board2.bin myself and after I get positive test feedback on that, submit that upstream to linux-firmware myself.

  7. jwrdegoede commented on Nov 23, 2021

    @jwrdegoede
    Author

    Good news, the updated board-2.bin file has landed in the official linux-firmware repo:
    https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=4d74f4dec175363fa24c95702dd86f477cef232c

    So this issue can be closed now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions