2018-09-04 14:47:08

by Christian Hewitt

[permalink] [raw]
Subject: [PATCH] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

This change adds the ttyAML1 uart used by the brmcfmac sdio module in
the WeTek Hub and WeTek Play 2 devices.

Signed-off-by: chewitt <[email protected]>
---
arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
index 70325b2..9476868 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
@@ -10,6 +10,7 @@
/ {
aliases {
serial0 = &uart_AO;
+ serial1 = &uart_A;
ethernet0 = &ethmac;
};

@@ -239,6 +240,13 @@
vqmmc-supply = <&vddio_boot>;
};

+/* This is connected to the Bluetooth module: */
+&uart_A {
+ status = "okay";
+ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
+ pinctrl-names = "default";
+};
+
/* This UART is brought out to the DB9 connector */
&uart_AO {
status = "okay";
--
2.7.4



2018-09-04 19:08:17

by Martin Blumenstingl

[permalink] [raw]
Subject: Re: [PATCH] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

Hi Christian,

On Tue, Sep 4, 2018 at 4:47 PM chewitt <[email protected]> wrote:
>
> This change adds the ttyAML1 uart used by the brmcfmac sdio module in
> the WeTek Hub and WeTek Play 2 devices.
do you know which Broadcom chip this is exactly?

I assume you want to use the "patchram" userspace program (or
something similar) to initialize the HCI controller?
it's been a while since a similar patch was rejected, but things have
gotten better since then. more details below

> Signed-off-by: chewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> index 70325b2..9476868 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> @@ -10,6 +10,7 @@
> / {
> aliases {
> serial0 = &uart_AO;
> + serial1 = &uart_A;
this can be dropped if you read on

> ethernet0 = &ethmac;
> };
>
> @@ -239,6 +240,13 @@
> vqmmc-supply = <&vddio_boot>;
> };
>
> +/* This is connected to the Bluetooth module: */
> +&uart_A {
> + status = "okay";
> + pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
> + pinctrl-names = "default";
insert bluetooth child-node from [0] here (with the correct max-speed,
*-gpios and clock* properties for this board)

some background: with Rob's serdev framework some Bluetooth controller
drivers recently gained the ability to get the controller into a
working state without any userspace utility. if you add the bluetooth
child-node here the kernel will:
- not create a /dev/ttyAMLn
- load the matching Bluetooth controller driver (the Broadcom one in your case)
- do the "initialize this Bluetooth controller with all the vendor
specific magic" dance (toggling GPIOs, loading firmware from userspace
via standard request_firmware, etc.)
- provide you with a ready-to-use hci0 interface


Regards
Martin


[0] https://elixir.bootlin.com/linux/v4.18/source/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt

2018-09-04 19:44:02

by Christian Hewitt

[permalink] [raw]
Subject: Re: [PATCH] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth


> On 4 Sep 2018, at 11:05 pm, Martin Blumenstingl <[email protected]> wrote:
>
> Hi Christian,
>
> On Tue, Sep 4, 2018 at 4:47 PM chewitt <[email protected]> wrote:
>>
>> This change adds the ttyAML1 uart used by the brmcfmac sdio module in
>> the WeTek Hub and WeTek Play 2 devices.
> do you know which Broadcom chip this is exactly?

It’s an AMPAK 6335 module. WiFi shows as BCM4339, BT shows as BCM4335(rev C0). I’ve submitted a patch to add the BT id earlier, see:
(https://marc.info/?l=linux-bluetooth&m=153608351032693&w=2)

> I assume you want to use the "patchram" userspace program (or
> something similar) to initialize the HCI controller?
> it's been a while since a similar patch was rejected, but things have
> gotten better since then. more details below
>
>> Signed-off-by: chewitt <[email protected]>
>> ---
>> arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 8 ++++++++
>> 1 file changed, 8 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
>> index 70325b2..9476868 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
>> +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
>> @@ -10,6 +10,7 @@
>> / {
>> aliases {
>> serial0 = &uart_AO;
>> + serial1 = &uart_A;
> this can be dropped if you read on
>
>> ethernet0 = &ethmac;
>> };
>>
>> @@ -239,6 +240,13 @@
>> vqmmc-supply = <&vddio_boot>;
>> };
>>
>> +/* This is connected to the Bluetooth module: */
>> +&uart_A {
>> + status = "okay";
>> + pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
>> + pinctrl-names = "default";
> insert bluetooth child-node from [0] here (with the correct max-speed,
> *-gpios and clock* properties for this board)
>
> some background: with Rob's serdev framework some Bluetooth controller
> drivers recently gained the ability to get the controller into a
> working state without any userspace utility. if you add the bluetooth
> child-node here the kernel will:
> - not create a /dev/ttyAMLn
> - load the matching Bluetooth controller driver (the Broadcom one in your case)
> - do the "initialize this Bluetooth controller with all the vendor
> specific magic" dance (toggling GPIOs, loading firmware from userspace
> via standard request_firmware, etc.)
> - provide you with a ready-to-use hci0 interface

No problem, i’ve done that for another device. I’ll investigate.

>
> Regards
> Martin
>
>
> [0] https://elixir.bootlin.com/linux/v4.18/source/Documentation/devicetree/bindings/net/broadcom-bluetooth.txt


2018-09-07 14:12:06

by Christian Hewitt

[permalink] [raw]
Subject: [PATCH v2] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

This change adds the uart_A used by the brmcfmac sdio module in the
WeTek Hub and WeTek Play 2 devices. meson_uart_probe seems to mandate
an alias (without it, BT is not working) so this is also included.

Signed-off-by: Christian Hewitt <[email protected]>
---
arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 13 +++++++++++++
1 file changed, 13 insertions(+)

diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
index 70325b2..e75ace7 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
@@ -10,6 +10,7 @@
/ {
aliases {
serial0 = &uart_AO;
+ serial1 = &uart_A;
ethernet0 = &ethmac;
};

@@ -239,6 +240,18 @@
vqmmc-supply = <&vddio_boot>;
};

+/* This is connected to the Bluetooth module: */
+&uart_A {
+ status = "okay";
+ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
+ pinctrl-names = "default";
+
+ bluetooth {
+ compatible = "brcm,bcm43438-bt";
+ shutdown-gpios = <&gpio GPIOX_20 GPIO_ACTIVE_HIGH>;
+ };
+};
+
/* This UART is brought out to the DB9 connector */
&uart_AO {
status = "okay";
--
2.7.4


2018-09-10 16:19:37

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v2] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

On Fri, Sep 7, 2018 at 7:16 AM Christian Hewitt
<[email protected]> wrote:
>

ttyAML1 has nothing to do with dts files.

> This change adds the uart_A used by the brmcfmac sdio module in the
> WeTek Hub and WeTek Play 2 devices. meson_uart_probe seems to mandate
> an alias (without it, BT is not working) so this is also included.

You should fix the alias being required. It should not be.

> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 13 +++++++++++++
> 1 file changed, 13 insertions(+)

2018-09-10 18:31:16

by Martin Blumenstingl

[permalink] [raw]
Subject: Re: [PATCH v2] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

Hi Rob,

On Fri, Sep 7, 2018 at 2:16 PM Christian Hewitt
<[email protected]> wrote:
>
> This change adds the uart_A used by the brmcfmac sdio module in the
> WeTek Hub and WeTek Play 2 devices. meson_uart_probe seems to mandate
> an alias (without it, BT is not working) so this is also included.
>
> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> index 70325b2..e75ace7 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> @@ -10,6 +10,7 @@
> / {
> aliases {
> serial0 = &uart_AO;
> + serial1 = &uart_A;
> ethernet0 = &ethmac;
> };
>
> @@ -239,6 +240,18 @@
> vqmmc-supply = <&vddio_boot>;
> };
>
> +/* This is connected to the Bluetooth module: */
> +&uart_A {
> + status = "okay";
> + pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
> + pinctrl-names = "default";
> +
> + bluetooth {
> + compatible = "brcm,bcm43438-bt";
I have a question regarding the Broadcom Bluetooth compatible strings:
Christian mentioned earlier that the Bluetooth controller identifies
itself as BCM4335C0 (BCM4335 rev. C0)

do we need to add a new compatible string (to
Documentation/devicetree/bindings/net/broadcom-bluetooth.txt)?
if yes: should we also add a new of_device_id to hci_bcm.c or should
board.dts simply use compatible = "brcm,bcm4335c0-bt",
"brcm,bcm43438-bt"?


Regards
Martin

2018-09-11 13:30:16

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH v2] ARM64: dts: meson-gxbb-wetek: add ttyAML1 uart for Bluetooth

On Mon, Sep 10, 2018 at 1:30 PM Martin Blumenstingl
<[email protected]> wrote:
>
> Hi Rob,
>
> On Fri, Sep 7, 2018 at 2:16 PM Christian Hewitt
> <[email protected]> wrote:
> >
> > This change adds the uart_A used by the brmcfmac sdio module in the
> > WeTek Hub and WeTek Play 2 devices. meson_uart_probe seems to mandate
> > an alias (without it, BT is not working) so this is also included.
> >
> > Signed-off-by: Christian Hewitt <[email protected]>
> > ---
> > arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 13 +++++++++++++
> > 1 file changed, 13 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> > index 70325b2..e75ace7 100644
> > --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> > +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
> > @@ -10,6 +10,7 @@
> > / {
> > aliases {
> > serial0 = &uart_AO;
> > + serial1 = &uart_A;
> > ethernet0 = &ethmac;
> > };
> >
> > @@ -239,6 +240,18 @@
> > vqmmc-supply = <&vddio_boot>;
> > };
> >
> > +/* This is connected to the Bluetooth module: */
> > +&uart_A {
> > + status = "okay";
> > + pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
> > + pinctrl-names = "default";
> > +
> > + bluetooth {
> > + compatible = "brcm,bcm43438-bt";
> I have a question regarding the Broadcom Bluetooth compatible strings:
> Christian mentioned earlier that the Bluetooth controller identifies
> itself as BCM4335C0 (BCM4335 rev. C0)
>
> do we need to add a new compatible string (to
> Documentation/devicetree/bindings/net/broadcom-bluetooth.txt)?

Probably so. Without, how do you determine firmware filenames for example?

> if yes: should we also add a new of_device_id to hci_bcm.c or should
> board.dts simply use compatible = "brcm,bcm4335c0-bt",
> "brcm,bcm43438-bt"?

A fallback is fine. I'd probably drop the 'c0' part. Is that readable
from a register?

Rob