Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Jan 2026 14:04:58 +0100
From:      Tassilo Philipp <tphilipp@potion-studios.com>
To:        freebsd-wireless@freebsd.org
Subject:   iwlwifi(4) on riscv64 (intel ax200)
Message-ID:  <20260117535483.43589553@potion-studios.com>
Resent-Message-ID: <aVu41TGjTy5wgZhE@localhost>

index | next in thread | raw e-mail

[-- Attachment #1 --]
I thought I simply share this here, maybe it's useful to someone. I got 
an intel wifi-6 ax200 m.2 slot card working on a HiFive Unmatched board 
w/ fbsd 15.0. It seems to work fine for me, so far, but it's in no way 
thoroughly tested...

In order to build the if_iwlwifi kernel module I needed to 
disable ACPI in the module's Makefile, and patch a source file to add 
some missing ACPI related #ifdefs.

Also, some firmware files need to be built and installed via ports' 
net/wifi-firmware-iwlwifi-kmod. Those firmware files can be built on 
any platform - when building them on riscv64 themselves, a small patch 
needs to be applied to net/wifi-firmware-kmod so riscv64 isn't excluded, 
though.

Anywho, to have a seemingly working iwlwifi(4) on my riscv64 setup, the 
following steps were needed:

1) make sure src is installed
2) apply attached patch (which does the tweaks described above)
3) build/install kernel module from source:
     cd /usr/src/sys/modules/iwlwifi
     make
     make install clean
4) install firmware port:
     cd /usr/ports/net/wifi-firmware-iwlwifi-kmod
     make install clean
5) kldload wlan_ccmp wlan_amrr if_iwlwifi

As said, thought that I share this here, happy that it's working, but no 
idea or guarantee about stability and correctness.

Cheers


[-- Attachment #2 --]
--- /usr/src/sys/contrib/dev/iwlwifi/pcie/gen1_2/trans.c
+++ /usr/src/sys/contrib/dev/iwlwifi/pcie/gen1_2/trans.c
@@ -2060,6 +2060,7 @@
 
 void iwl_trans_pcie_check_product_reset_mode(struct pci_dev *pdev)
 {
+#ifdef CONFIG_ACPI
 	union acpi_object *res;
 
 	res = iwl_trans_pcie_call_prod_reset_dsm(pdev,
@@ -2077,11 +2078,13 @@
 				    res->integer.value);
 
 	ACPI_FREE(res);
+#endif
 }
 
 static void iwl_trans_pcie_set_product_reset(struct pci_dev *pdev, bool enable,
 					     bool integrated)
 {
+#ifdef CONFIG_ACPI
 	union acpi_object *res;
 	u16 mode = enable ? DSM_INTERNAL_PLDR_MODE_EN_PROD_RESET : 0;
 
@@ -2104,10 +2107,12 @@
 	IWL_DEBUG_DEV_POWER(&pdev->dev, "%sabled product reset via DSM\n",
 			    enable ? "En" : "Dis");
 	iwl_trans_pcie_check_product_reset_mode(pdev);
+#endif
 }
 
 void iwl_trans_pcie_check_product_reset_status(struct pci_dev *pdev)
 {
+#ifdef CONFIG_ACPI
 	union acpi_object *res;
 
 	res = iwl_trans_pcie_call_prod_reset_dsm(pdev,
@@ -2125,6 +2130,7 @@
 				    res->integer.value);
 
 	ACPI_FREE(res);
+#endif
 }
 
 static void iwl_trans_pcie_call_reset(struct pci_dev *pdev)
--- /usr/src/sys/modules/iwlwifi/Makefile
+++ /usr/src/sys/modules/iwlwifi/Makefile
@@ -4,7 +4,7 @@
 
 WITH_CONFIG_PM=	0
 WITH_DEBUGFS=	0
-WITH_CONFIG_ACPI=	1
+WITH_CONFIG_ACPI=	0
 
 KMOD=	if_iwlwifi
 
--- /usr/ports/net/wifi-firmware-kmod/Makefile.inc
+++ /usr/ports/net/wifi-firmware-kmod/Makefile.inc
@@ -77,7 +77,7 @@
 DIST_SUBDIR=	linux-firmware/${FWDRV}fw
 EXTRACT_ONLY=
 
-ONLY_FOR_ARCHS=	aarch64 amd64 i386
+ONLY_FOR_ARCHS=	aarch64 amd64 i386 riscv64
 ONLY_FOR_ARCHS_REASON=	LinuxKPI driver only available for these architectures
 
 USES=		uidfix
home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20260117535483.43589553>