diff --git a/9001-Bluetooth-hci_bcm4377-do-not-mark-valid-bd_addr-as-invalid.patch b/9001-Bluetooth-hci_bcm4377-do-not-mark-valid-bd_addr-as-invalid.patch new file mode 100644 index 0000000..783b746 --- /dev/null +++ b/9001-Bluetooth-hci_bcm4377-do-not-mark-valid-bd_addr-as-invalid.patch @@ -0,0 +1,101 @@ +From patchwork Wed Dec 27 10:10:03 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Johan Hovold +X-Patchwork-Id: 13505281 +Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org + [10.30.226.201]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) + (No client certificate requested) + by smtp.subspace.kernel.org (Postfix) with ESMTPS id 731F42D602; + Wed, 27 Dec 2023 10:10:50 +0000 (UTC) +Authentication-Results: smtp.subspace.kernel.org; + dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org + header.b="OE5gY3Rg" +Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1F71C433C8; + Wed, 27 Dec 2023 10:10:49 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; + s=k20201202; t=1703671849; + bh=HNX2qe5wIUjgAOE0bih0cYXbYbw77i5qRYAGTFhWf8Q=; + h=From:To:Cc:Subject:Date:From; + b=OE5gY3RgSNMMNpr/DemitpLvv8B5KUxkea+huKa97KhEilNAbl/OG/gZPSswoI3kl + ifwN2LiGgFt8jyQh8hVsCoIrrOOGgiqeJ9ivyZI86fxAmaICglCBVc65vzpPozQdYn + YsryqO/D6A6i3egHRr7G52DifE/DihYN9uZqhAIHTY+ESsr/mJvwodvV8HNt60TaF9 + dFeWSj4rAgt/QaclFNs1wznkamzzJ3UloOq2NJbzC3F6ILEsWfuPRm8iKBlgwdNTZ+ + bn4JmN3Zh0Mr2uaTVg902uWeLcZ93sY9BmqH1AOBDEXTlUvPd7n6xVrSnOLfdlTR5k + O5JKLTyyjvyTQ== +Received: from johan by xi.lan with local (Exim 4.96.2) + (envelope-from ) + id 1rIQs7-0002kc-0u; + Wed, 27 Dec 2023 11:10:44 +0100 +From: Johan Hovold +To: Luiz Augusto von Dentz , + Marcel Holtmann , + Johan Hedberg +Cc: Hector Martin , + Sven Peter , + Alyssa Rosenzweig , + asahi@lists.linux.dev, + linux-arm-kernel@lists.infradead.org, + linux-bluetooth@vger.kernel.org, + linux-kernel@vger.kernel.org, + Johan Hovold , + stable@vger.kernel.org, + Felix Zhang +Subject: [PATCH] Bluetooth: hci_bcm4377: do not mark valid bd_addr as invalid +Date: Wed, 27 Dec 2023 11:10:03 +0100 +Message-ID: <20231227101003.10534-1-johan+linaro@kernel.org> +X-Mailer: git-send-email 2.41.0 +Precedence: bulk +X-Mailing-List: linux-bluetooth@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 + +A recent commit restored the original (and still documented) semantics +for the HCI_QUIRK_USE_BDADDR_PROPERTY quirk so that the device address +is considered invalid unless an address is provided by firmware. + +This specifically means that this flag must only be set for devices with +invalid addresses, but the Broadcom BCM4377 driver has so far been +setting this flag unconditionally. + +Fortunately the driver already checks for invalid addresses during setup +and sets the HCI_QUIRK_INVALID_BDADDR flag, which can simply be replaced +with HCI_QUIRK_USE_BDADDR_PROPERTY to indicate that the default address +is invalid but can be overridden by firmware (long term, this should +probably just always be allowed). + +Fixes: 6945795bc81a ("Bluetooth: fix use-bdaddr-property quirk") +Cc: stable@vger.kernel.org # 6.5 +Reported-by: Felix Zhang +Link: https://lore.kernel.org/r/77419ffacc5b4875e920e038332575a2a5bff29f.camel@mrman314.tech/ +Signed-off-by: Johan Hovold +Reported-by: Felix Zhang +--- + drivers/bluetooth/hci_bcm4377.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/bluetooth/hci_bcm4377.c b/drivers/bluetooth/hci_bcm4377.c +index a61757835695..9a7243d5db71 100644 +--- a/drivers/bluetooth/hci_bcm4377.c ++++ b/drivers/bluetooth/hci_bcm4377.c +@@ -1417,7 +1417,7 @@ static int bcm4377_check_bdaddr(struct bcm4377_data *bcm4377) + + bda = (struct hci_rp_read_bd_addr *)skb->data; + if (!bcm4377_is_valid_bdaddr(bcm4377, &bda->bdaddr)) +- set_bit(HCI_QUIRK_INVALID_BDADDR, &bcm4377->hdev->quirks); ++ set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &bcm4377->hdev->quirks); + + kfree_skb(skb); + return 0; +@@ -2368,7 +2368,6 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id) + hdev->set_bdaddr = bcm4377_hci_set_bdaddr; + hdev->setup = bcm4377_hci_setup; + +- set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); + if (bcm4377->hw->broken_mws_transport_config) + set_bit(HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG, &hdev->quirks); + if (bcm4377->hw->broken_ext_scan) diff --git a/9004-bcm4377-fix-bdaddr-property.patch b/9004-bcm4377-fix-bdaddr-property.patch deleted file mode 100644 index c9af0ff..0000000 --- a/9004-bcm4377-fix-bdaddr-property.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/drivers/bluetooth/hci_bcm4377.c b/drivers/bluetooth/hci_bcm4377.c -index a61757835695..5c6fef1aa0f6 100644 ---- a/drivers/bluetooth/hci_bcm4377.c -+++ b/drivers/bluetooth/hci_bcm4377.c -@@ -513,6 +513,7 @@ struct bcm4377_hw { - unsigned long broken_ext_scan : 1; - unsigned long broken_mws_transport_config : 1; - unsigned long broken_le_coded : 1; -+ unsigned long use_bdaddr_property : 1; - - int (*send_calibration)(struct bcm4377_data *bcm4377); - int (*send_ptb)(struct bcm4377_data *bcm4377, -@@ -2368,7 +2369,8 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id) - hdev->set_bdaddr = bcm4377_hci_set_bdaddr; - hdev->setup = bcm4377_hci_setup; - -- set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); -+ if (bcm4377->hw->use_bdaddr_property) -+ set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); - if (bcm4377->hw->broken_mws_transport_config) - set_bit(HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG, &hdev->quirks); - if (bcm4377->hw->broken_ext_scan) -@@ -2465,6 +2467,7 @@ static const struct bcm4377_hw bcm4377_hw_variants[] = { - .has_bar0_core2_window2 = true, - .broken_mws_transport_config = true, - .broken_le_coded = true, -+ .use_bdaddr_property = true, - .send_calibration = bcm4378_send_calibration, - .send_ptb = bcm4378_send_ptb, - }, -@@ -2479,6 +2482,7 @@ static const struct bcm4377_hw bcm4377_hw_variants[] = { - .clear_pciecfg_subsystem_ctrl_bit19 = true, - .broken_mws_transport_config = true, - .broken_le_coded = true, -+ .use_bdaddr_property = true, - .send_calibration = bcm4387_send_calibration, - .send_ptb = bcm4378_send_ptb, - },