Bluetooth: hci_bcm: do not mark valid bd_addr as invalid
authorJohan Hovold <johan+linaro@kernel.org>
Fri, 2 Jun 2023 08:19:12 +0000 (10:19 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 29 Jun 2023 17:52:08 +0000 (10:52 -0700)
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 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. Use this flag to indicate
when the address can be overridden by firmware (long term, this should
probably just always be allowed).

Fixes: 6945795bc81a ("Bluetooth: fix use-bdaddr-property quirk")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://lore.kernel.org/lkml/ecef83c8-497f-4011-607b-a63c24764867@samsung.com
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/bluetooth/hci_bcm.c

index 83bf5d4..874d230 100644 (file)
@@ -643,7 +643,8 @@ static int bcm_setup(struct hci_uart *hu)
         * Allow the bootloader to set a valid address through the
         * device tree.
         */
-       set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hu->hdev->quirks);
+       if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hu->hdev->quirks))
+               set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hu->hdev->quirks);
 
        if (!bcm_request_irq(bcm))
                err = bcm_setup_sleep(hu);