Re: [PATCH v4 6/8] Bluetooth: hci_sync: Add NVMEM-backed BD address retrieval
Loic Poulain <[email protected]> Fri, 12 Jun 2026 12:00:19 +0200
| Newsgroups | org.infradead.lists.ath10k,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-block,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mmc,org.kernel.vger.linux-wireless,org.kernel.vger.netdev |
|---|---|
| Message-ID | <CAFEp6-3Z92KNVv6hbG_zrzan4+cP-TCkoc693orKwvQyvP_YHA@mail.gmail.com> |
On Fri, Jun 12, 2026 at 11:11 AM Dmitry Baryshkov <[email protected]> wrote: > > On Tue, Jun 09, 2026 at 09:52:31AM +0200, Loic Poulain wrote: > > Some devices store the Bluetooth BD address in non-volatile > > memory, which can be accessed through the NVMEM framework. > > Similar to Ethernet or WiFi MAC addresses, add support for > > reading the BD address from a 'local-bd-address' NVMEM cell. > > > > As with the device-tree provided BD address, add a quirk to > > indicate whether a device or platform should attempt to read > > the address from NVMEM when no valid in-chip address is present. > > Also add a quirk to indicate if the address is stored in > > big-endian byte order. > > > > Reviewed-by: Bartosz Golaszewski <[email protected]> > > Signed-off-by: Loic Poulain <[email protected]> > > --- > > include/net/bluetooth/hci.h | 18 ++++++++++++++++++ > > net/bluetooth/hci_sync.c | 39 ++++++++++++++++++++++++++++++++++++++- > > 2 files changed, 56 insertions(+), 1 deletion(-) > > > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h > > index 572b1c620c5d653a1fe10b26c1b0ba33e8f4968f..7686466d1109253b0d75edeb5f6a99fb98ce4cc6 100644 > > --- a/include/net/bluetooth/hci.h > > +++ b/include/net/bluetooth/hci.h > > @@ -164,6 +164,24 @@ enum { > > */ > > HCI_QUIRK_BDADDR_PROPERTY_BROKEN, > > > > + /* When this quirk is set, the public Bluetooth address > > + * initially reported by HCI Read BD Address command > > + * is considered invalid. The public BD Address can be > > + * retrieved via a 'local-bd-address' NVMEM cell. > > Why do we need a quirk here? Can't we always assume that if there is an > NVMEM cell, it contains a correct address, even if HCI command returned > a seemingly-sensible one? The pattern follows HCI_QUIRK_USE_BDADDR_PROPERTY, the quirk indicates that the address returned by the HCI Read BD Address command is invalid and should be overridden using a fwnode property. Without this quirk, even a valid fwnode-provided address is ignored. So here this is primarily done to align with that established behavior, although whether that design choice is ideal is a good question. This also raises the question of why an explicit HCI_QUIRK_USE_* flag is required to allow reading from NVMEM when the controller-provided address is known to be invalid, rather than attempting to use any available backend (fwnode-prop or NVMEM). but this remains consistent with the behavior established by the fwnode-based quirk. So, I think these aspects could be revisited in a Bluetooth follow-up series if there is interest in reworking the overall addr fallback design. Regards, Loic > > > + * > > + * This quirk can be set before hci_register_dev is called or > > + * during the hdev->setup vendor callback. > > + */ > > + HCI_QUIRK_USE_BDADDR_NVMEM, > > + > > + /* When this quirk is set, the Bluetooth Device Address provided by > > + * the 'local-bd-address' NVMEM is stored in big-endian order. > > + * > > + * This quirk can be set before hci_register_dev is called or > > + * during the hdev->setup vendor callback. > > + */ > > + HCI_QUIRK_BDADDR_NVMEM_BE, > > Also, is this necessary? Are the devices which store the address in the > wrong format in the NVMEM? > > > + > > /* When this quirk is set, the duplicate filtering during > > * scanning is based on Bluetooth devices addresses. To allow > > * RSSI based updates, restart scanning if needed. > > -- > With best wishes > Dmitry