From nobody Sat Mar 1 09:39:40 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Z4g5n26P3z5p7sD; Sat, 01 Mar 2025 09:39:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z4g5m5M3Jz3HKV; Sat, 01 Mar 2025 09:39:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740821980; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=fJrs1/8ff5aukNSrWAyn172ArOrYYWsmAOhFWmEpi4o=; b=iKOkIFjPHaFPf+pyz6e/tJoloQl2FE53Czk4AP9hE5onwO3vyMdBFKfqOs5At0lCaru0ng JI0mttvZ+bCbgBOblkPYxnA8+/L9e/6mB/MYBuBjU5HzaOauzEcQAKrnxjXy84SBfO2yjO anNZcVay1xxygH3xGnKPrbFLcN1NIks4edzeiOiYuhdc65n8m87bkmA2WwXTcH6D2l1O/N cbqr25nhRJZwLz7CYor7DymagGsGJcLrByGr9+qxkiP1OgGya8c7PiyFjxFSyBYV7zMChr r4zwMNakmtahySmmeDP3kspxVhTkYO7XGXzvmlU/KfiRAzaPFKCpPBitxVZ8XA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740821980; a=rsa-sha256; cv=none; b=hn+rX7h/0Mbe6fNEW29Nhy+NuAFPWkR7jTe5auOIAtbxOtn1Z15Y4Q9DDs749o1oxqUkh6 U3HMcLX7g+eMsOthSLsi+Sc7ljosNtdfvxjLDseXs6o2TO31voATJBPYpvPBP1o5skJJOZ pww3cSGouApDeSGl/et0cSuNT4yUCSuJPnip673bVyoRRGAXWDZ7Sl1ZmfTscuXdev92Dd rfW5QIyxP/gais75ot/d0bIJsL271DkICdETpZCM+EJjDNWlTk3C7B2UbhxTXBAc1GYL7j Lf+tgbD8N1qnCnLsaszp/ho3h7l3pF3LEOX+NBBPCfM1pTnCCNZsA2mX+55QrQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740821980; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=fJrs1/8ff5aukNSrWAyn172ArOrYYWsmAOhFWmEpi4o=; b=pMHv9cX+DCfoQ8b2wl2htv47eodCR3fU+2iWQJLQm7QbOEg0kzXJBjSf6Psyr49mvtS30n BrbgfADQzJMYKd0ufwwRX8JxZL0FjHGELYXhqqt1TtWI5JVdzUBX2KwzVXSS8ZIQtSlj+A Te6yxV7j5DcgBqopIjbIzrhI0Tsr1kjvWhg3ISA5L6OTN/4vzdqATEhsFFdnZclLHXICEo 8LabC1+PI1Q5Xn/RQ+75QRT1iUYfnD/fWaGESQxinY6Brv9WX0OGXK4xYhsNE+NPEEmVAq J5/F78Wc1QZgw1itU8S/EfTaXtY5BiscjbsM20mwLuMPfi47zsC6V/AXqD5w0Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z4g5m2jWxz181q; Sat, 01 Mar 2025 09:39:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 5219de58084620; Sat, 1 Mar 2025 09:39:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5219denA084617; Sat, 1 Mar 2025 09:39:40 GMT (envelope-from git) Date: Sat, 1 Mar 2025 09:39:40 GMT Message-Id: <202503010939.5219denA084617@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Vladimir Kondratyev Subject: git: f2591781f354 - stable/14 - iwmbtfw(8): don't program hardware without existing firmware image List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: wulf X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: f2591781f354b6602927e53084af61721f0a2dd7 Auto-Submitted: auto-generated The branch stable/14 has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=f2591781f354b6602927e53084af61721f0a2dd7 commit f2591781f354b6602927e53084af61721f0a2dd7 Author: Eygene Ryabinkin AuthorDate: 2025-01-29 21:56:41 +0000 Commit: Vladimir Kondratyev CommitDate: 2025-03-01 09:36:26 +0000 iwmbtfw(8): don't program hardware without existing firmware image One should not start firmware update sequence just to understand that there is no firmware image to program: update sequence for 7260 requires leaving manufacturing mode and in the case of missing firmware file it will trigger complete re-initialization of BT adapter. Which, in turn, will make the USB device to go away and reappear. Since devd(8) has hooks for USB device attachment, in the case of missing firmware it used to - trigger the (failing) firmware download, - which triggers device reset, - which creates USB notification and devd(8) kicks back in. Nice infinite cycle with many notifications via syslog: {{{ Jan 3 09:00:01 kernel: ugen0.2: at usbus0 Jan 3 09:00:01 kernel: ugen0.2: at usbus0 (disconnected) Jan 3 09:00:02 kernel: ugen0.2: at usbus0 Jan 3 09:00:02 kernel: ugen0.2: at usbus0 (disconnected) }}} Signed-off-by: Eygene Ryabinkin Reviewed by: wulf MFC after: 1 month (cherry picked from commit ff4116313eb4a5e6c24a688edf5df1e19eb82042) --- usr.sbin/bluetooth/iwmbtfw/main.c | 41 +++++++++++++-------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/usr.sbin/bluetooth/iwmbtfw/main.c b/usr.sbin/bluetooth/iwmbtfw/main.c index 497edcb254cf..7af07bb68322 100644 --- a/usr.sbin/bluetooth/iwmbtfw/main.c +++ b/usr.sbin/bluetooth/iwmbtfw/main.c @@ -226,30 +226,6 @@ iwmbt_dump_version_tlv(struct iwmbt_version_tlv *ver) ver->build_num); } -static int -iwmbt_patch_firmware(libusb_device_handle *hdl, const char *firmware_path) -{ - struct iwmbt_firmware fw; - int ret; - - iwmbt_debug("loading %s", firmware_path); - - /* Read in the firmware */ - if (iwmbt_fw_read(&fw, firmware_path) <= 0) { - iwmbt_debug("iwmbt_fw_read() failed"); - return (-1); - } - - /* Load in the firmware */ - ret = iwmbt_patch_fwfile(hdl, &fw); - if (ret < 0) - iwmbt_debug("Loading firmware file failed"); - - /* free it */ - iwmbt_fw_free(&fw); - - return (ret); -} static int iwmbt_init_firmware(libusb_device_handle *hdl, const char *firmware_path, @@ -402,6 +378,7 @@ usage(void) } + /* * Returns 0 on success. */ @@ -409,8 +386,9 @@ static int handle_7260(libusb_device_handle *hdl, char *firmware_dir) { int r; + char *firmware_path; struct iwmbt_version ver; - char *firmware_path = NULL; + struct iwmbt_firmware fw; r = iwmbt_get_version(hdl, &ver); if (r < 0) { @@ -431,16 +409,25 @@ handle_7260(libusb_device_handle *hdl, char *firmware_dir) return 1; iwmbt_debug("firmware_path = %s", firmware_path); + r = iwmbt_fw_read(&fw, firmware_path); + free(firmware_path); + if (r <= 0) { + iwmbt_debug("iwmbt_fw_read() failed"); + return 1; + } + r = iwmbt_enter_manufacturer(hdl); if (r < 0) { iwmbt_debug("iwmbt_enter_manufacturer() failed code %d", r); + iwmbt_fw_free(&fw); return 1; } /* Download firmware */ - r = iwmbt_patch_firmware(hdl, firmware_path); - free(firmware_path); + r = iwmbt_patch_fwfile(hdl, &fw); + iwmbt_fw_free(&fw); if (r < 0) { + iwmbt_debug("Loading firmware file failed"); (void)iwmbt_exit_manufacturer(hdl, IWMBT_MM_EXIT_COLD_RESET); return 1; }