[U-Boot] [PATCH 4/4] sunxi: board: fixup the BT address for Orange Pi 3

Andre Heider a.heider at gmail.com
Sat Nov 23 07:42:10 UTC 2019


On 23/11/2019 04:24, Chen-Yu Tsai wrote:
> On Fri, Nov 22, 2019 at 9:05 PM Andre Heider <a.heider at gmail.com> wrote:
>>
>> The BCM4345C5 of the Orange Pi 3 ships with the controller default
>> address. Fix it up so it can function properly.
>>
>> The used address is "ethaddr" with the LSB flipped.
>>
>> Signed-off-by: Andre Heider <a.heider at gmail.com>
>> ---
>>
>> NOTE:
>>   "local-bd-address" is a universal property, the kernel patch for
>>   btbcm to use that is in bluetooth-next.
>>
>>   board/sunxi/board.c | 28 ++++++++++++++++++++++++++++
>>   1 file changed, 28 insertions(+)
>>
>> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
>> index bb35d6b66e..2897bf45e1 100644
>> --- a/board/sunxi/board.c
>> +++ b/board/sunxi/board.c
>> @@ -856,6 +856,32 @@ int misc_init_r(void)
>>          return 0;
>>   }
>>
>> +static void fixup_bd_address(void *blob)
>> +{
>> +#if defined(CONFIG_MACH_SUN50I_H6)
>> +       /* Some devices ship with the controller default address.
>> +        * Set a valid address through the device tree.
>> +        */
>> +       uchar mac[ETH_ALEN], bdaddr[ETH_ALEN];
>> +       int i;
>> +
>> +       if (!of_machine_is_compatible("xunlong,orangepi-3"))
>> +               return;
>> +
>> +       if (!eth_env_get_enetaddr("ethaddr", mac))
>> +               return;
>> +
>> +       /* Addresses need to be in the binary format of the corresponding stack */
>> +       for (i = 0; i < ETH_ALEN; ++i)
>> +               bdaddr[i] = mac[ETH_ALEN - i - 1];
>> +
>> +       bdaddr[0] ^= 1;
> 
> IIRC someone mentioned before that unlike Ethernet and WiFi,
> Bluetooth does not have a "locally administered" address space,
> so any address used could possibly collide with other devices.

The kernel even refuses to use the controller default address, likely 
because of collisions. While this patch obviously doesn't guarantee a 
unique address, I guess it's in the same ballpark as "ethaddr" for 
sunxi. This at least gets BT working out of the box.

But I guess we should give the user an option to set a bdaddr of her/his 
choosing. I'll add support for reading the env var "bdaddr" and fall 
back to this address generation if that wasn't successful.

Or do you think we can do better?

Regards,
Andre


More information about the U-Boot mailing list