Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: sys/qwz: shutdown firmware after autoconf
To:
Marcus Glocker <marcus@nazgul.ch>
Cc:
"Kirill A. Korinsky" <kirill@korins.ky>, tech@openbsd.org
Date:
Tue, 2 Jun 2026 08:53:49 +0200

Download raw body.

Thread
On Tue, Jun 02, 2026 at 05:53:35AM +0200, Marcus Glocker wrote:
> I am also chasing why upon boot my 5GHz AP always works, while my 2.4GHz
> AP only intermittently works.  In the most cases I can associate to it,
> but I won't get an IP assigned.  In a few cases I will, and then also
> traffic is flowing.  I am also playing around with reverting the RX QoS
> path which we have recently introduced.  It seems to increase the
> chances that my 2.4GHz AP will work, but it still not reliable.
> 
> The entire situation is a bit puzzling to me currently ...

If the interface gets into RUN state, but the WPA2 4-way handshake is not
starting then try unmasking data interrupts in software earlier.

(I've already sent the changes below as part of my qwx roaming fix.)
 
M  sys/dev/ic/qwx.c  |  1+  10-

1 file changed, 1 insertion(+), 10 deletions(-)

commit - ca362689551c3ca46673929394339d3a1d8b4983
commit + c40dfed62a8443b2b6040ddb698e55d7d5474256
blob - e10ad8ce38428ef4a0dd316e271561c1b91c5f7d
blob + fb167f3d16df524472c0cf9dabeafce6fc8ec0eb
--- sys/dev/ic/qwx.c
+++ sys/dev/ic/qwx.c
@@ -323,6 +323,7 @@ qwx_init(struct ifnet *ifp)
 			return error;
 
 		ifp->if_flags |= IFF_RUNNING;
+		sc->ops.irq_enable(sc);
 		ieee80211_begin_scan(ifp);
 	}
 
@@ -20926,7 +20927,6 @@ qwx_core_qmi_firmware_ready(struct qwx_softc *sc)
 		goto err_core_stop;
 	}
 
-	sc->ops.irq_enable(sc);
 #if 0
 	mutex_unlock(&ab->core_lock);
 #endif
@@ -27013,13 +27013,6 @@ qwx_assoc(struct qwx_softc *sc)
 	IEEE80211_ADDR_COPY(arvif->bssid, ni->ni_bssid);
 	sc->bss_peer_id = nq->peer_id;
 
-	/*
-	 * Enable reception of data frames now, if not already enabled.
-	 * We may need to receive EAPOL data frames very soon after the
-	 * AP sends a response to our assoc request.
-	 */
-	sc->ops.irq_enable(sc);
-
 	return 0;
 }
 
@@ -27112,8 +27105,6 @@ qwx_run_stop(struct qwx_softc *sc)
 	struct qwx_node *nq = (void *)ni;
 	int ret;
 
-	sc->ops.irq_disable(sc);
-
 	ret = qwx_wmi_set_peer_param(sc, ni->ni_macaddr, arvif->vdev_id,
 	    pdev_id, WMI_PEER_AUTHORIZE, 0);
 	if (ret) {