From nobody Wed Dec 17 10:04:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD7F5C77B7E for ; Thu, 20 Apr 2023 20:44:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232404AbjDTUoS (ORCPT ); Thu, 20 Apr 2023 16:44:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229599AbjDTUoP (ORCPT ); Thu, 20 Apr 2023 16:44:15 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 140E5E4A; Thu, 20 Apr 2023 13:44:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=s31663417; t=1682023402; i=ps.report@gmx.net; bh=C+061R1HoJpAZeX1ZsK7Ci+mbPs2jE+mZarLFcSv9vY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=gZKqXaVTvl0Td9b0f+3UCFnKWzqpk2DVdskmg05j0buJBN0P7j01hBQkvF1ZzNQue r8zg9ul9f9e6/CcdhWbi/ITEQ/WdPcSGaL++0eJhO6G3SVkcr5ApB8uSd+6T1SBogm oIw9Cbzbf5hlVTkcMf52bZ+MX1FneCghrJATOmOxJNXbhtwDPf6+jpY+VawvYn8Z+F qfGBEgsc/DSwoTyUO2aVkSgdadLYPnNnAefYapEpNEfaCXwr7wkkAXnkbNq73uS1p3 4LQSM1U9+b16tr+OTRGWy+S57trob68x4oWPhu+enHDBDlOOgOnwaRlOYxOqVOmQY2 MFC0lc6Cysehg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.fritz.box ([62.216.208.48]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MfpOT-1qV0U72w7F-00gDlZ; Thu, 20 Apr 2023 22:43:22 +0200 From: Peter Seiderer To: linux-wireless@vger.kernel.org Cc: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , Kalle Valo , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sujith Manoharan , "John W . Linville" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Gregg Wonderly , Peter Seiderer Subject: [PATCH v1] wifi: ath9k: fix AR9003 mac hardware hang check register offset calculation Date: Thu, 20 Apr 2023 22:43:16 +0200 Message-Id: <20230420204316.30475-1-ps.report@gmx.net> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:qbxDUYy2HT2lVywzRqeDIDHBOcKPyc7C1KzpcnC5mDO5osG7Cfm 45MAJYVxLFm+ROYvJ3Fm+evefwfu/LnQIxuagr+ebkiHNdMpMn3//8TFui08iu/KBVQcROV zk/PqBqaA2xIp60vUAdn4pwATEWP7qan11ImVeUXbdOAP5WRLtYTTpr39rmUOeFw8AO/Lv/ EpKEX5FPLtlcBRZGVuICQ== UI-OutboundReport: notjunk:1;M01:P0:NC3rj3VezgU=;R55SEyp/FcrkGkkBS2y7+2zCeK+ JWmM1UNHmwYU9YyLdBRxiwx8rDWnPQoWWSVtRlp7FAcYT3mBC1lEqmg3MBzZk3OExuswDOars 9BgXIwF2gJZuAUHmiZtNjV+fZi4jHr1r5kgTRGmz7YZ1Sl7BmcjcRJ0m7wq03YW6XiVQN76mu ms+FwNLJvmKEdv+O5Eum2W4f6tNQnkiMG+vQ/PH1NYSoMQ2wKTiWVNhL7p3SKuxqLVlX5hQZS +GINxPynfm+q/nAMD1/aLFKiyp60KqkAltXT8vJJHDPqzsymYGGhTv1uNrpzZW1uM/uC/7kqV xM4IiL5ewh9wmMgman9Y58h/QFKZWvQYM3AFFqIWjiQv/gevh48ZGgzPASp6YNTdyXO9qtkoa RWpQLooiPVUr47yPJxB5nLTFvJKo1YGV2tKlCu6bYpmQYzoQk1AbWevHy0sXG73aA1cxXrVDS SULgHO1DV0u4uaQoAnxwnlMUw1rKM/J4Mel0/cw4J1SkvlwX0B3NxoeHw8pf50EuIqdW2sH0w a0nCbpRkR1OfLjPARQPlKzvUWaLDTTj3BlPW10mvWbOIKuVYrIV/6ovOGzstpa0116oJUGHEF /neoz4H1rp5n8KqvDLkvfkIvNtdr2K93sNgN8ZU3PVvNsXeGiqT/tQMaNwZVTmCYYnxXseibv 5LHDHHoGwWYZed+4niO7QhYq5h9CBk1MDwSxWDlqI+JKwRfOtVt4l8IEu7gtLTA5X6VMpmgNa PRhc+pZldlaINvkOMxOVyvl1Yx08xAwz4XFbv7hjrgU9xulwcx/R9Mf+Dl3Db/9++ASoO068i VeCp7WeqHk7vQSkPnyOzr4ku4Q60GaX3NI/q9scHFEXFLQVXIu/W+pQ016cWQQKz47aOzl3/+ MFhwwUkdQtqbrYJrq33UMOXfbh51v6lOwF2yx1BcfzViql3DKQGY8bnirTh3Te7W4jd4wFyvE WqCJZG+48nX8HI0syfsL5pVhy5k= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix ath9k_hw_verify_hang()/ar9003_hw_detect_mac_hang() register offset calculation (do not overflow the shift for the second register/queues above five, use the register layout described in the comments above ath9k_hw_verify_hang() instead). Fixes: 222e04830ff0 ("ath9k: Fix MAC HW hang check for AR9003") Reported-by: Gregg Wonderly Link: https://lore.kernel.org/linux-wireless/E3A9C354-0CB7-420C-ADEF-F0177F= B722F4@seqtechllc.com/ Signed-off-by: Peter Seiderer Acked-by: Toke H=C3=B8iland-J=C3=B8rgensen --- Notes: - tested with MikroTik R11e-5HnD/Atheros AR9300 Rev:4 (lspci: 168c:0033 Qualcomm Atheros AR958x 802.11abgn Wireless Network Adapter (rev 01)) card --- drivers/net/wireless/ath/ath9k/ar9003_hw.c | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wirel= ess/ath/ath9k/ar9003_hw.c index 4f27a9fb1482..0ccf13a35fb4 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c @@ -1099,17 +1099,22 @@ static bool ath9k_hw_verify_hang(struct ath_hw *ah,= unsigned int queue) { u32 dma_dbg_chain, dma_dbg_complete; u8 dcu_chain_state, dcu_complete_state; + unsigned int dbg_reg, reg_offset; int i; =20 - for (i =3D 0; i < NUM_STATUS_READS; i++) { - if (queue < 6) - dma_dbg_chain =3D REG_READ(ah, AR_DMADBG_4); - else - dma_dbg_chain =3D REG_READ(ah, AR_DMADBG_5); + if (queue < 6) { + dbg_reg =3D AR_DMADBG_4; + reg_offset =3D i * 5; + } else { + dbg_reg =3D AR_DMADBG_5; + reg_offset =3D (i - 6) * 5; + } =20 + for (i =3D 0; i < NUM_STATUS_READS; i++) { + dma_dbg_chain =3D REG_READ(ah, dbg_reg); dma_dbg_complete =3D REG_READ(ah, AR_DMADBG_6); =20 - dcu_chain_state =3D (dma_dbg_chain >> (5 * queue)) & 0x1f; + dcu_chain_state =3D (dma_dbg_chain >> reg_offset) & 0x1f; dcu_complete_state =3D dma_dbg_complete & 0x3; =20 if ((dcu_chain_state !=3D 0x6) || (dcu_complete_state !=3D 0x1)) @@ -1128,6 +1133,7 @@ static bool ar9003_hw_detect_mac_hang(struct ath_hw *= ah) u8 dcu_chain_state, dcu_complete_state; bool dcu_wait_frdone =3D false; unsigned long chk_dcu =3D 0; + unsigned int reg_offset; unsigned int i =3D 0; =20 dma_dbg_4 =3D REG_READ(ah, AR_DMADBG_4); @@ -1139,12 +1145,15 @@ static bool ar9003_hw_detect_mac_hang(struct ath_hw= *ah) goto exit; =20 for (i =3D 0; i < ATH9K_NUM_TX_QUEUES; i++) { - if (i < 6) + if (i < 6) { chk_dbg =3D dma_dbg_4; - else + reg_offset =3D i * 5; + } else { chk_dbg =3D dma_dbg_5; + reg_offset =3D (i - 6) * 5; + } =20 - dcu_chain_state =3D (chk_dbg >> (5 * i)) & 0x1f; + dcu_chain_state =3D (chk_dbg >> reg_offset) & 0x1f; if (dcu_chain_state =3D=3D 0x6) { dcu_wait_frdone =3D true; chk_dcu |=3D BIT(i); --=20 2.40.0