From nobody Wed Jan 29 21:57:20 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 4YjwxG3j2cz5m94P; Wed, 29 Jan 2025 21:57:22 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YjwxF1L2mz3ZGh; Wed, 29 Jan 2025 21:57:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738187841; 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=G8o1EZ/n0AcPECl54NFWNDIWDD8Qg94zNIGYYF7lFII=; b=CDq52Jgd2sgmA5k1fv0dr9KHZzI33rCDEDvEan/KZQXcIBCvakBHYdX311LykhOYPANhlJ 8gqjTtluLS5rBT2TWd+o1ZJWQwCzzJUxOxtn4VbOk3GxgRMR2pNG4Xf/mlIyTO8Pxf7SXb tXR//OHAi5OdT+vaUeQZHrrDd/QzVlWE24zFX737Qzn4llaDr+EgdQ9XfQbredluq/VFKM UegLKhD1WhEc9v2CFK8ll//p6AiEyGZfhVDXNtO6rX2LucPYJEpbprltQ6kmt6zusseYXd TBMcNWl17QBKe9PSoHIJDfezn0S58LLzyuP193AUK2V/gxsSwLYGkq7AWrAmHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738187841; 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=G8o1EZ/n0AcPECl54NFWNDIWDD8Qg94zNIGYYF7lFII=; b=pl3PDFEjkRJb/CK+Zhb7OHeAwd9ufaqfJf/comcY9Gemo7J40Xk5DbZ7Jl5v/K8s2BJP2t S88N577DIfei3pP+NiKBqNuOVCzjJrw59nMuQxezNiPyBwwn6Iuv6H3nNHRtGtX54RWynQ /KIC2LR5reL4JBYkmY7bWWbDll+ZRz/mR03uUMe0qZrIp52bqXauV4jqNPj4AXf84EuEbb d8Icn0UbUT9hT6DpaS1qSkDOl9j2aYlaO1ocWPmHwhlSm52tXCGt9mY2U3nnZVoFaosx1d bGduqqDQdfrtAFFvOONKLXtB/gKZRsZPU8TDUcuuWWWJDoCBTgR6+JNfj9GoKQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738187841; a=rsa-sha256; cv=none; b=jmArSmPaM0K4yBG+Ux4iOqibMPpLYs47M1sF+gG+/3jsGO4ap47DlaM4XdcA4eSGDZ/HTp GI1woL7OiqNcjpyZYfRQUtVXRngGk5IiR7KDCb+pytN+CeM0M+1MOkUpxrKqAP77XEmgCy TqFhQqJAJnMju8BYwbbhZ4z+yHrjwgpaslv6ogile3288nZrEBp2CRUvYKaCcrMTOJm2WL JS8NODzelzg90MINh4oWvsUuV7kAdXZhGKC21E4FUQpxUpvfG9hUC2bkI/js3za2Jwu5lv EoZKudBNIG+PN4ZbY6aG4POVipBqbj2hcaS5SpqlpyvP09riEb6peNUSNpfH6Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4YjwxD3b6Pz4Tj; Wed, 29 Jan 2025 21:57:20 +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 50TLvKhp001487; Wed, 29 Jan 2025 21:57:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 50TLvKUR001484; Wed, 29 Jan 2025 21:57:20 GMT (envelope-from git) Date: Wed, 29 Jan 2025 21:57:20 GMT Message-Id: <202501292157.50TLvKUR001484@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vladimir Kondratyev Subject: git: ff4116313eb4 - main - 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/main X-Git-Reftype: branch X-Git-Commit: ff4116313eb4a5e6c24a688edf5df1e19eb82042 Auto-Submitted: auto-generated The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=ff4116313eb4a5e6c24a688edf5df1e19eb82042 commit ff4116313eb4a5e6c24a688edf5df1e19eb82042 Author: Eygene Ryabinkin AuthorDate: 2025-01-29 21:56:41 +0000 Commit: Vladimir Kondratyev CommitDate: 2025-01-29 21:56:41 +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 --- 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; }