From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 7BC6D29AB02 for ; Tue, 28 Jul 2026 01:55:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785203747; cv=none; b=kpy/kNPE2ZX6Jj08K65t8ckI5MJFYLcDX3XkSfNBnm9GVfFMi8/mSY4cjaIa8Q9wPIu07kMlnNw6jXotvIUOBih0+9qvZj5Y3PUHoDstRvBPJcZuKzQEZT8cqL7kBSJ1pjYyzbdJpurqbiGv4DQEhsZ91xJ2vEbC66oAS6qgnk8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785203747; c=relaxed/simple; bh=h2q12AUp9O/kTBbsKAFQ2FqqupG7nckpin9iw1wX3a0=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=ndRMeK/NqWh/IS2AlnHHilZ6OwMAo5dIrwQzZ6nda7O4ce9DrC1rjoHUnL4AuuNyITYFPm0X9rRN3na5dEr0X2m0VwncfqCs0KlnQTI/esFy02HmHGFraddta7C+K/HHbrMlZP9TzgwqjfQUOqsdA8cASDuXxqXwaqK3lF0vWjs= 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=Qxzbf/Uj; arc=none smtp.client-ip=209.85.216.54 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="Qxzbf/Uj" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-381216921aaso3252027a91.1 for ; Mon, 27 Jul 2026 18:55:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785203745; x=1785808545; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=f0SM9LlpHTwCaw/SjDIWrZU/9QgTvcwL2gvLlLgdQ7g=; b=Qxzbf/UjLLbd4zZR+1Ri4Padmej4bP0GJYTHFNJ/FHwmOBNrB81o8IeL6JlWqUJNG8 CtL2wI3yTe/b+a/kP/iYL4qitwNhWqv+/G4lAOOIwusg0dFAMhUWkRZjlOQbvoo/mNKN A9o20Y5+yEQEObhRYzUmnJnk8aDemmqs1/4fZzyoEeWN8dHpDYHBBp0NSrFiPJG/XhYT Yka1QbQGfpqS9oxWkWemmBOw413sqv791v2lFchvhwcUp9WdLG4TERN5o6Q3nybuTZpN FD3h8NupruxYoaroY346Yit7m726ZjWGks0tl+akZJ7D3kU+11dlUHnD9XtF2mnpXZTa xSLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785203745; x=1785808545; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=f0SM9LlpHTwCaw/SjDIWrZU/9QgTvcwL2gvLlLgdQ7g=; b=NPrbeVOiwnvJB4/B5Kwqn3Av/xWyX49evCy0u14ZIy6KzIYbv63qo2dCRtiQsEP8Jy NYubYRMTcsqFpb6J7H78x+Egkx10VLYNY8rL/7PVZCMs9m9jJZIx5DWf48ZS9D2UHLPd tJYQvTu8ZkIfWjV3q90w9vg8yoZFvcrykD8F61zBjD8uKj+UQEREncbVOP2/XwWqzwzH nP9iWIg8fJuQkmUt6udgk5uJvC6xavtZ1f50SLmBOWxiiGxGckcxEVLYnGorHZLcp6zY sQRuZIjXRAPdX3jpnn77nUOzXzV1qZGwDrgRvfdTrsGKeTddN1TUVYtpkPe3iSdSy5A+ kJpA== X-Forwarded-Encrypted: i=1; AHgh+RrWOGNnog2iK9xGJJR2sLcYrx3lKnM54G6pntW4biMcKVsjRSN+6g2dWubOvI/+MwahnqWp1PPIZADi/Yk=@vger.kernel.org X-Gm-Message-State: AOJu0YywLc9pI+S+bwCRbckmAqUU1AvSyxf1+Jk2tUdTkTprFPj5mBtH fwk45iOdaSA2YZBGy9sGDIhAKUCk0PpBGueoAUkl1//RcUuVyXBy/RqEHo2RNCPf X-Gm-Gg: AR+sD10Cp2aE9kkLXWcf38uJz8oQjfwyPei/+nctwaOuK9y7VCaCxTqUKHudRtZs5ub 5UKQnRh9mZ4mf5o+toOvq6dK8p8Ks7VIkDrGUR9bIQjJAsu3nLysobveP0AdGszyZu6BFed9jbq Y1OR/jT0mdcldaFFr7lrUd9fvegiVIFAeIvcOoUHOhzvVOGeGVahxJtz7umBAkG13cJ0ZSqZsT4 bJiW/IyZ3zUyvUc9ExUu0GXo9B7/GVWecn1NBWqBZ+mAn3ALLQqxm1WM0Up5m1/fCpBsE+pf3Cq F8xiVfW+dVQJgconuM/5corJUU27B8YfKs88SHz0+4SjtspG4+CYq+QStNDO3FPUjkGSA/rLEE8 6JwG2I0j9D+1ptZo1d09sdJl0nNYH+0VEogrgAsOtRjQmcABKfPOwfbc6yWYw12itKNZP52KM12 sYgKMYSBACpDBYWJlbn1cu X-Received: by 2002:a17:90b:4cc2:b0:38f:474f:e77 with SMTP id 98e67ed59e1d1-38f6a45e1cemr358573a91.37.1785203744656; Mon, 27 Jul 2026 18:55:44 -0700 (PDT) Received: from cyh-System-Product-Name.. ([129.227.183.200]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38f64150874sm529230a91.16.2026.07.27.18.55.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 18:55:44 -0700 (PDT) From: yhchen312@gmail.com To: pkshih@realtek.com Cc: damon.chen@realtek.com, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, "Yuhang.chen" Subject: [PATCH] wifi: rtw89: 8852be: add .shutdown callback to quiesce device on reboot Date: Tue, 28 Jul 2026 09:54:35 +0800 Message-Id: <20260728015435.1585953-1-yhchen312@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Yuhang.chen" Since hardware rfkill polling was introduced, warm reboot on arm64 platforms can panic with an asynchronous SError when the rfkill poll workqueue reads a register while the PCIe link is being torn down: SError Interrupt on CPU8, code 0x00000000be000011 -- SError Workqueue: events_power_efficient rfkill_poll [rfkill] Call trace: rtw89_pci_ops_read8+0x94/0x160 [rtw89_pci] rtw89_core_rfkill_poll+0x50/0x1e0 [rtw89_core] rtw89_ops_rfkill_poll+0x40/0x68 [rtw89_core] ieee80211_rfkill_poll+0x3c/0x70 [mac80211] cfg80211_rfkill_poll+0x40/0x2a0 [cfg80211] rfkill_poll+0x30/0x88 [rfkill] Kernel panic - not syncing: Asynchronous SError Interrupt During device_shutdown() the 8852BE PCI driver has no .shutdown callback, so the device is never quiesced and the rfkill polling keeps running. Once the platform brings the PCIe link down, the next MMIO read targets a non-responding device and is reported as an asynchronous SError, which is fatal on arm64. Add a .shutdown callback that runs the existing remove path to stop the rfkill polling, free interrupts and power down the chip before the link goes away. A NULL drvdata check guards the case where probe did not fully complete. Fixes: 0b38e6277aed ("wifi: rtw89: add support for hardware rfkill") Cc: stable@vger.kernel.org Signed-off-by: Yuhang.chen --- drivers/net/wireless/realtek/rtw89/rtw8852be.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852be.c b/drivers/net/wireless/realtek/rtw89/rtw8852be.c index 5bc0a6a99d1d..9aebecbac067 100644 --- a/drivers/net/wireless/realtek/rtw89/rtw8852be.c +++ b/drivers/net/wireless/realtek/rtw89/rtw8852be.c @@ -92,11 +92,20 @@ static const struct pci_device_id rtw89_8852be_id_table[] = { }; MODULE_DEVICE_TABLE(pci, rtw89_8852be_id_table); +static void rtw89_8852be_shutdown(struct pci_dev *pdev) +{ + if (!pci_get_drvdata(pdev)) + return; + + rtw89_pci_remove(pdev); +} + static struct pci_driver rtw89_8852be_driver = { .name = "rtw89_8852be", .id_table = rtw89_8852be_id_table, .probe = rtw89_pci_probe, .remove = rtw89_pci_remove, + .shutdown = rtw89_8852be_shutdown, .driver.pm = &rtw89_pm_ops, .err_handler = &rtw89_pci_err_handler, }; -- 2.34.1