From nobody Mon Feb 9 15:10:02 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 DFD2531E0F7 for ; Fri, 16 Jan 2026 01:05:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525551; cv=none; b=WD5Z8N2C/hY6OPVLHcqhwvISsDEVsc61l398XxZgOPmHCKwBspT0aCZrTSRWG0oWIxjyMQqafVOOspnqoQSERCBoCoKMDuOLLSyEjcwDYz/XKD9NQsCt2WEw5Xf2ESPIuH/Nq5S9NUOizP/pyRFeX/+j5sNkPlfm1VR3quBtPEk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525551; c=relaxed/simple; bh=yGyc3K+9APMkKCyvio1xpxkU1KL5Q828KBPgc4VkbUk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kV+tqsbBrLg3Lz7o3HI6JE+pLeXBCFxi4hGnskOBcgoKXCPulIIwZBMMIcEBpCf4Na/0H6czH41O8oXI2i04m4Cvzi0xpSHaXcwiZzPZOu96jt9pUpYMODstd2yhR3cq4IbHWeFLi/prs7RNV1a3Vp40kJ5XP0KIYY15tWBh6QU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NZkU1bdU; arc=none smtp.client-ip=74.125.82.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.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="NZkU1bdU" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2ac3d5ab81bso1765195eec.1 for ; Thu, 15 Jan 2026 17:05:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768525546; x=1769130346; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=bLWOoyw2E8LXJk20xk6S4eG/DnEYq6CXxfM8xw/u51Q=; b=NZkU1bdU/30bQgw/qKpC9YOH527eIe+aShAKEnKmV4bjJL5meuNxlfJgkVYUpdaVpl xFC1Mx633QoVPCMPlar8YT/F1o+rjZDhOuiMoWSOVE3Iu3sUEIkBT3Ep95XMlZDNEqbP CmZ8VKmIxczYxhR470jcO9+RlJ3KjPe9ELHyeEJyY8a/JeFJObiCvfy5CuvcHfdsc8Ms piceKnnZXybsM7aRGs7PhM68nxxvXRN1XRamgQDi/1JtrVJljq9mSQvXgNp9WsKeX2WU Vd6HCy3He9cN1/rSY9jdQUKQJBbwWXJQvHWxc3kDcSf5L+4EfIVJCRZKa4ulpsRAr7Ab Ny+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768525546; x=1769130346; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bLWOoyw2E8LXJk20xk6S4eG/DnEYq6CXxfM8xw/u51Q=; b=Yk6b9UybxN0eE9lsbJw2xskX2ru+l+hdq2lRn4HV+P20ej+fZsQxLP81p+eApL5yWH dXu1/7VfqwBvRUC3WZZGiwMBvPpjE9JAXTqxABX9u9hBFGqhhsX9j4Fs76KiclEjrR7a KzEu1Xu5DPZzORlfI+mqv0JBiZDTQYr3y2TkCUY/pRrjt9LuURZk1lQyzhgLmqTQ2OGI MNwAD7ZnW1tlYVp/5XOj5sePrice5t/kxe7wvGCFiw31xdreDks8Vz5mmD1FnVQsyMI8 jryPvuH0bvDzXNQRF5RcTd1yorqVftf4vJvMx759l7HVRWgZlPEFyKICDHn1j+8X4pZN vK/A== X-Forwarded-Encrypted: i=1; AJvYcCVqNsje1K4aI5KYvyxA5rC/Pwl+yuYq3wgf5lfVTdnGkK31CFVPPizfFeeH2IkegA26Ese1Hb65LCi89fA=@vger.kernel.org X-Gm-Message-State: AOJu0YzduQt0Pu3AC/ji9jLzq5olM14j53r4E7GrKlKdc9vkdbJR6w2t MttzO49Rn50tvUp40dxMpMhXqgzOER8rlFfWAReRX8nB7I0Ic+zRromj X-Gm-Gg: AY/fxX7VXut5I7GirdmpgBADtSU7zrpLS/ZoEWjX6Rg7zay3YwHp56D13gfaw5MNvxX i2v4tG0QIjq2LzH93/n657/lSNlU4CETXnVRNcga81gIt04bmRMtdFiMOd9wVWN6VoVxCkOhJxl nWu0pnVC8nGYEjEP0TXEb15NX0vuY1+uKdZn0STumiqAy1RVptcUp2jgVOsfnMUPOxlRwMqat/+ +vyxJy2+m4LnoL3G232+YrupEk2oTzAdUedj43nHlY8heOuuzn/Swb8vjYsIiwr8DlzdNBjV3cb vF/wkMAByMjiJZfAwK6N2+bOnJTxaPPqc8FRKnjxdgZd97pXDFhq/9qksQO7+oyi1zwJChmKBbE kyvPHrUiYtHw5dwTGJBAFzq4j1YvkExgBigJo/2Dfv6v/VRyOBXc6NbPUg6i6WfvMX941ejZMqH cNMT4CdyCYBTj3jaP0xP3qCbictSViOuGw9FYijEGp6wzfmCsTxM7cV4th95HCHQ== X-Received: by 2002:a05:7301:3804:b0:2ae:5d3b:e1c6 with SMTP id 5a478bee46e88-2b6b4e64b90mr1425584eec.21.1768525545632; Thu, 15 Jan 2026 17:05:45 -0800 (PST) Received: from zcache.home.zacbowling.com ([2001:5a8:60d:bc9:f1d2:502c:a6ff:5556]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b6b367cbc9sm1019884eec.32.2026.01.15.17.05.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 17:05:45 -0800 (PST) Sender: Zac Bowling From: Zac To: sean.wang@kernel.org Cc: deren.wu@mediatek.com, kvalo@kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, lorenzo@kernel.org, nbd@nbd.name, linux@frame.work, ryder.lee@mediatek.com, sean.wang@mediatek.com, Zac Bowling , Zac Bowling Subject: [PATCH v4 15/21] wifi: mt76: mt792x: fix firmware reload failure after previous load crash Date: Thu, 15 Jan 2026 17:05:13 -0800 Message-ID: <20260116010519.37001-16-zac@zacbowling.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260116010519.37001-1-zac@zacbowling.com> References: <20260116010519.37001-1-zac@zacbowling.com> 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" From: Zac Bowling If the firmware loading process crashes or is interrupted after acquiring the patch semaphore but before releasing it, subsequent firmware load attempts will fail with 'Failed to get patch semaphore' because the semaphore is still held. This issue manifests as devices becoming unusable after suspend/resume failures or firmware crashes, requiring a full hardware reboot to recover. This has been widely reported on MT7921 and MT7925 devices. Example error log: mt7921e 0000:c2:00.0: Failed to get patch semaphore mt7921e 0000:c2:00.0: probe with driver mt7921e failed with error -5 Apply the same fix that was applied to MT7915 in commit 79dd14f: 1. Release the patch semaphore before starting firmware load (in case it was held by a previous failed attempt) 2. Restart MCU firmware to ensure clean state 3. Wait briefly for MCU to be ready This fix applies to both MT7921 and MT7925 drivers which share the mt792x_load_firmware() function. Fixes: 583204ae70f9 ("wifi: mt76: mt792x: move mt7921_load_firmware in mt79= 2x-lib module") Link: https://github.com/openwrt/mt76/commit/79dd14f2e8161b656341b665326177= 9199aedbe4 Signed-off-by: Zac Bowling --- drivers/net/wireless/mediatek/mt76/mt792x_core.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net= /wireless/mediatek/mt76/mt792x_core.c index 9dc768aa8b..05598202b4 100644 --- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c +++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c @@ -936,6 +936,20 @@ int mt792x_load_firmware(struct mt792x_dev *dev) { int ret; =20 + /* Release semaphore if taken by previous failed load attempt. + * This prevents "Failed to get patch semaphore" errors when + * recovering from firmware crashes or suspend/resume failures. + */ + ret =3D mt76_connac_mcu_patch_sem_ctrl(&dev->mt76, false); + if (ret < 0) + dev_dbg(dev->mt76.dev, "Semaphore release returned %d (may be expected)\= n", ret); + + /* Always restart MCU to ensure clean state before loading firmware */ + mt76_connac_mcu_restart(&dev->mt76); + + /* Wait for MCU to be ready after restart */ + msleep(100); + ret =3D mt76_connac2_load_patch(&dev->mt76, mt792x_patch_name(dev)); if (ret) return ret; --=20 2.52.0