From nobody Mon Apr 6 23:17:37 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 07B892D9796 for ; Tue, 17 Mar 2026 11:22:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773746523; cv=none; b=uzZgXgGIxk5tx/W1NnNDsGVORx+4UC0NbU7RyYZMx9nh0l4toaI8NJyYSh52MPa5iZSLV1YMmcnBoSLJu6EBcUaTYOWXQ4y+oKJ8+MuBrltIbYHv4He89sP1p4TBti6W2t+ezsgMeD+TOPs6R/TrX/tjCHKZSntgrNfyk9Z7AXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773746523; c=relaxed/simple; bh=BhnuXj199oDo5IdbUsWGRos6wrmftHAlFM5AHiFR/3c=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=D6Sjwy+biFPH8iFAA3SdxDtPz4pyPPnpUWcGjgIi4Z6iXEe30WLyajLqgvP/eIHU28BmL6kxQbEaCRf2S1b//mxSZp1dXKXb4O7nHlA6JDzlzpL5YLsU6GeCiuR5GkZhQuS0r0IlZxDMIsCMVZPR/6Lgigh0OBS04jg5CmCKQt8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ypy0CkCz; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ypy0CkCz" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-439cd6b0aedso4424452f8f.1 for ; Tue, 17 Mar 2026 04:22:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773746519; x=1774351319; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=SPbwUjqmqWzC3gU+8epOWIHsoei+/pfAMpyfVJduFjU=; b=Ypy0CkCz1MdzVXehek6K0cNXp0TvvL4e8SK3uydCGexuMVizk6Zrcwt3PhQT6cSuSn DuuXrE6eJfWXI5vIvweQT6TrKI5oALFxgOyaTvTSNnwq5u5gj9sPlXLgG9jULSFNF44Q FBE2X0bX2kBx7BWfCVTHKolvBiyYLTXB06BQszhY9Pp2H2Tj2nFC8vm8gIzQkBDKzmfH t92ZbGWUpqW9PGOs0nz4eC4bGtfRfl5bGhxec5INVWkj08rn1DFt7cUKrGz92fiNi90M 5m+KauzafUAjKYHixz5uUdfU6zkiljd7wJMdO5Gk2+sIGosmHuhmAHW4ZRLNtCN6Hkvz eFXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773746519; x=1774351319; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SPbwUjqmqWzC3gU+8epOWIHsoei+/pfAMpyfVJduFjU=; b=cXYUnTcFUTR+eTbx76RaDQuEtoCaFtcYbvXvZcF6njongd3yyROlv8Jo88InaNA12A KxeetOTAA3HL5E3nx7eXg0W7hLZxLQdBN7HsJyOwzw7ca7aBfOujNlxJ75RO0NbgAz6q 5QyThPM8peWN+koj/HlaFIA+RauJCe4psdrFnmmYgip+dUqez9QIV3sdeowy5sdg6yKZ TrrfUm7sV5vNhU1FyESzxUBvejtDauX2yLFGdCVeZR6mSWQzVSGHvTOHWWdL9dkaAtsd SVcGAZ6y5EL4C3pZgdWxGbbXK/dkkcq91EgyhZr3HpIBHln9PFI822nVEcXsMKHBW7M5 zgoQ== X-Forwarded-Encrypted: i=1; AJvYcCUav6PnBkUi/Z4dQYSiyJTeaY+pcIhZckZ9EGo+t28mxTcL6Wg4qyLkUU0kY38PMOWgnS4v9Bx7eSU7PX0=@vger.kernel.org X-Gm-Message-State: AOJu0YxyETnVXG6oBGI2i6p2WlzquR9n+963NHDJtwsTGZrUANQbmX5x PbQnEc7vpKLDcwxnM/lRfCi2WPB88E2fG6ZkunD4IxglBOC+seTzNQoQ X-Gm-Gg: ATEYQzyorB5z6BWo+9OnzAgZyMQpfT/LF0Ndj8ny50oMmKZ4bDP80FOE0Gth5I0ldhm zGT8Dc17AJ7wUr4XE/OLsth7XLpXWv0iFsK/fX+vceiqECCjSSIY5Xr9eHrq7D5yLxcLlbHpsai 5ovI/snTnKhCdGhNu527uCAoeBqCkcoxJV8CJjQXBbZB3IUMcrA7g79e6y+MzimAj7MtLFnuqr8 Pug46ufADQMshPsDHsav7AKLzHvgeYgUHCFcsc7DC6/kwYBErim6fD4VGpL9W1HAQrmznc6a4to TdhuOGK5qCUbFDF8NJ/7mtg8qyePZyL9+2RD38mGBP+uB3DRsrmi6wv7wJPWl26sFNWJTuSA7JH HVGB8Z3lG8dfNAI/YGTrUszClaNYet3ePQPCGoBhR49HZzIBAmOcYN7V721v1xemZtrjOPfNMJd QPpjx/7Ak2TErwcrgOz7wsHg9uppgpF8r8TgquAQ== X-Received: by 2002:a05:6000:184a:b0:43b:3f2d:7d58 with SMTP id ffacd0b85a97d-43b3f2d7fc1mr15378870f8f.52.1773746519061; Tue, 17 Mar 2026 04:21:59 -0700 (PDT) Received: from toolbox.. ([87.200.95.144]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b46b41e93sm12858216f8f.2.2026.03.17.04.21.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Mar 2026 04:21:58 -0700 (PDT) From: Christian Hewitt To: Ping-Ke Shih , Bitterblue Smith , linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] wifi: rtw89: retry efuse physical map dump on transient failure Date: Tue, 17 Mar 2026 11:21:55 +0000 Message-ID: <20260317112155.1939569-1-christianshewitt@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On Radxa Rock 5B with a RTL8852BE combo WiFi/BT card, the efuse physical map dump intermittently fails with -EBUSY during probe. The failure occurs in rtw89_dump_physical_efuse_map_ddv() where read_poll_timeout_atomic() times out waiting for the B_AX_EF_RDY bit after 1 second. The root cause is a timing race during boot: the WiFi driver's chip initialization (firmware download via PCIe) overlaps with Bluetooth firmware download to the same combo chip via USB. This can leave the efuse controller temporarily unavailable when the WiFi driver attempts to read the efuse map. The firmware download path retries up to 5 times, but the efuse read that follows has no similar logic. Address this by adding retry loop logic (also up to 5 attempts) around physical efuse map dump. Signed-off-by: Christian Hewitt --- Changes since v1 [0]: - Adapt patch using suggestions from Pink-Ke Shih - Simplify the patch description [0] https://patchwork.kernel.org/project/linux-wireless/patch/2026030104242= 2.195491-1-christianshewitt@gmail.com/ drivers/net/wireless/realtek/rtw89/efuse.c | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/efuse.c b/drivers/net/wirel= ess/realtek/rtw89/efuse.c index a2757a88d55d..6ed4b569c2d7 100644 --- a/drivers/net/wireless/realtek/rtw89/efuse.c +++ b/drivers/net/wireless/realtek/rtw89/efuse.c @@ -185,8 +185,8 @@ static int rtw89_dump_physical_efuse_map_dav(struct rtw= 89_dev *rtwdev, u8 *map, return 0; } =20 -static int rtw89_dump_physical_efuse_map(struct rtw89_dev *rtwdev, u8 *map, - u32 dump_addr, u32 dump_size, bool dav) +static int __rtw89_dump_physical_efuse_map(struct rtw89_dev *rtwdev, u8 *m= ap, + u32 dump_addr, u32 dump_size, bool dav) { int ret; =20 @@ -208,6 +208,25 @@ static int rtw89_dump_physical_efuse_map(struct rtw89_= dev *rtwdev, u8 *map, return 0; } =20 +static int rtw89_dump_physical_efuse_map(struct rtw89_dev *rtwdev, u8 *map, + u32 dump_addr, u32 dump_size, bool dav) +{ + int retry; + int ret; + + for (retry =3D 0; retry < 5; retry++) { + ret =3D __rtw89_dump_physical_efuse_map(rtwdev, map, dump_addr, + dump_size, dav); + if (!ret) + return 0; + + rtw89_warn(rtwdev, "efuse dump (dav=3D%d) failed, retrying (%d)\n", + dav, retry); + } + + return ret; +} + #define invalid_efuse_header(hdr1, hdr2) \ ((hdr1) =3D=3D 0xff || (hdr2) =3D=3D 0xff) #define invalid_efuse_content(word_en, i) \ --=20 2.43.0