arm64: dts: rockchip: Add on-board WiFi/BT support for Rock960 boards

Message ID 20190207055349.27919-1-manivannan.sadhasivam@linaro.org
State Superseded
Headers show
Series
  • arm64: dts: rockchip: Add on-board WiFi/BT support for Rock960 boards
Related show

Commit Message

Manivannan Sadhasivam Feb. 7, 2019, 5:53 a.m.
Add on-board WiFi/BT support for Rock960 boards such as Rock960 based
on AP6356S and Ficus based on AP6354 wireless modules.

Firmwares for the respective boards are available here:

http://people.linaro.org/~manivannan.sadhasivam/rock960_wifi/
http://people.linaro.org/~manivannan.sadhasivam/ficus_wifi/

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

---
 .../boot/dts/rockchip/rk3399-rock960.dtsi     | 96 ++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)

-- 
2.17.1

Comments

Peter Robinson Feb. 8, 2019, 4:45 p.m. | #1
Hi Mani,

On Thu, Feb 7, 2019 at 5:54 AM Manivannan Sadhasivam
<manivannan.sadhasivam@linaro.org> wrote:
>

> Add on-board WiFi/BT support for Rock960 boards such as Rock960 based

> on AP6356S and Ficus based on AP6354 wireless modules.

>

> Firmwares for the respective boards are available here:

>

> http://people.linaro.org/~manivannan.sadhasivam/rock960_wifi/

> http://people.linaro.org/~manivannan.sadhasivam/ficus_wifi/

>

> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>


There's some warnings on building these I noticed in testing this on Fedora:

  DTC     arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning
(reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length
(4 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning
(pci_device_bus_num): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (i2c_bus_reg):
Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (spi_bus_reg):
Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning
(avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default
#address-cells value
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning
(avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default
#size-cells value

  DTC     arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning
(reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length
(4 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning
(pci_device_bus_num): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning
(i2c_bus_reg): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning
(spi_bus_reg): Failed prerequisite 'reg_format'
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning
(avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default
#address-cells value
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning
(avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default
#size-cells value

> ---

>  .../boot/dts/rockchip/rk3399-rock960.dtsi     | 96 ++++++++++++++++++-

>  1 file changed, 95 insertions(+), 1 deletion(-)

>

> diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> index 56abbb08c133..1b2f7cd82244 100644

> --- a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> @@ -9,6 +9,15 @@

>  #include "rk3399-opp.dtsi"

>

>  / {

> +       sdio_pwrseq: sdio-pwrseq {

> +               compatible = "mmc-pwrseq-simple";

> +               clocks = <&rk808 1>;

> +               clock-names = "ext_clock";

> +               pinctrl-names = "default";

> +               pinctrl-0 = <&wifi_enable_h>;

> +               reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;

> +       };

> +

>         vcc1v8_s0: vcc1v8-s0 {

>                 compatible = "regulator-fixed";

>                 regulator-name = "vcc1v8_s0";

> @@ -362,6 +371,20 @@

>  };

>

>  &pinctrl {

> +       bt {

> +               bt_enable_h: bt-enable-h {

> +                       rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;

> +               };

> +

> +               bt_host_wake_l: bt-host-wake-l {

> +                       rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;

> +               };

> +

> +               bt_wake_l: bt-wake-l {

> +                       rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;

> +               };

> +       };

> +

>         sdmmc {

>                 sdmmc_bus1: sdmmc-bus1 {

>                         rockchip,pins =

> @@ -387,6 +410,26 @@

>                 };

>         };

>

> +       sdio0 {

> +               sdio0_bus4: sdio0-bus4 {

> +                       rockchip,pins =

> +                               <2 20 RK_FUNC_1 &pcfg_pull_up_20ma>,

> +                               <2 21 RK_FUNC_1 &pcfg_pull_up_20ma>,

> +                               <2 22 RK_FUNC_1 &pcfg_pull_up_20ma>,

> +                               <2 23 RK_FUNC_1 &pcfg_pull_up_20ma>;

> +               };

> +

> +               sdio0_cmd: sdio0-cmd {

> +                       rockchip,pins =

> +                               <2 24 RK_FUNC_1 &pcfg_pull_up_20ma>;

> +               };

> +

> +               sdio0_clk: sdio0-clk {

> +                       rockchip,pins =

> +                               <2 25 RK_FUNC_1 &pcfg_pull_none_20ma>;

> +               };

> +       };

> +

>         pmic {

>                 pmic_int_l: pmic-int-l {

>                         rockchip,pins =

> @@ -403,6 +446,19 @@

>                                 <1 14 RK_FUNC_GPIO &pcfg_pull_down>;

>                 };

>         };

> +

> +       sdio-pwrseq {

> +               wifi_enable_h: wifi-enable-h {

> +                       rockchip,pins =

> +                               <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;

> +               };

> +       };

> +

> +       wifi {

> +               wifi_host_wake_l: wifi-host-wake-l {

> +                       rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;

> +               };

> +       };

>  };

>

>  &pwm2 {

> @@ -413,6 +469,33 @@

>         status = "okay";

>  };

>

> +&sdio0 {

> +       clock-frequency = <50000000>;

> +       bus-width = <4>;

> +       cap-sdio-irq;

> +       cap-sd-highspeed;

> +       no-emmc;

> +       keep-power-in-suspend;

> +       mmc-pwrseq = <&sdio_pwrseq>;

> +       non-removable;

> +       num-slots = <1>;

> +       pinctrl-names = "default";

> +       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;

> +       sd-uhs-sdr104;

> +

> +       status = "okay";

> +

> +       brcmf: wifi@1 {

> +               compatible = "brcm,bcm4329-fmac";

> +               reg = <1>;

> +               interrupt-parent = <&gpio0>;

> +               interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;

> +               interrupt-names = "host-wake";

> +               pinctrl-names = "default";

> +               pinctrl-0 = <&wifi_host_wake_l>;

> +       };

> +};

> +

>  &sdhci {

>         bus-width = <8>;

>         mmc-hs400-1_8v;

> @@ -439,8 +522,19 @@

>

>  &uart0 {

>         pinctrl-names = "default";

> -       pinctrl-0 = <&uart0_xfer &uart0_cts>;

> +       pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;

>         status = "okay";

> +

> +       bluetooth {

> +               compatible = "brcm,bcm43438-bt";

> +               clocks = <&rk808 1>;

> +               clock-names = "ext_clock";

> +               device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;

> +               host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;

> +               shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;

> +               pinctrl-names = "default";

> +               pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;

> +       };

>  };

>

>  &uart2 {

> --

> 2.17.1

>
Manivannan Sadhasivam Feb. 11, 2019, 11:31 a.m. | #2
Hi Peter,

On Fri, Feb 08, 2019 at 04:45:01PM +0000, Peter Robinson wrote:
> Hi Mani,

> 

> On Thu, Feb 7, 2019 at 5:54 AM Manivannan Sadhasivam

> <manivannan.sadhasivam@linaro.org> wrote:

> >

> > Add on-board WiFi/BT support for Rock960 boards such as Rock960 based

> > on AP6356S and Ficus based on AP6354 wireless modules.

> >

> > Firmwares for the respective boards are available here:

> >

> > http://people.linaro.org/~manivannan.sadhasivam/rock960_wifi/

> > http://people.linaro.org/~manivannan.sadhasivam/ficus_wifi/

> >

> > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

> 

> There's some warnings on building these I noticed in testing this on Fedora:

> 

>   DTC     arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning

> (reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length

> (4 bytes) (#address-cells == 2, #size-cells == 1)

> arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning

> (pci_device_bus_num): Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (i2c_bus_reg):

> Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (spi_bus_reg):

> Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> #address-cells value

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> #size-cells value

> 

>   DTC     arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning

> (reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length

> (4 bytes) (#address-cells == 2, #size-cells == 1)

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> (pci_device_bus_num): Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> (i2c_bus_reg): Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> (spi_bus_reg): Failed prerequisite 'reg_format'

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> #address-cells value

> arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> #size-cells value

> 


Hmm. Since the parent node "sdio0" is missing the address/size cells
property, the default value has been used by the DTC. I think it would
make sense to just drop the reg property from "wifi" node instead of
modifying the parent "sdio0" node.

If no one has any issue over this, I'll send out another revision with the
reg property removed.

Thanks,
Mani

> > ---

> >  .../boot/dts/rockchip/rk3399-rock960.dtsi     | 96 ++++++++++++++++++-

> >  1 file changed, 95 insertions(+), 1 deletion(-)

> >

> > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > index 56abbb08c133..1b2f7cd82244 100644

> > --- a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > @@ -9,6 +9,15 @@

> >  #include "rk3399-opp.dtsi"

> >

> >  / {

> > +       sdio_pwrseq: sdio-pwrseq {

> > +               compatible = "mmc-pwrseq-simple";

> > +               clocks = <&rk808 1>;

> > +               clock-names = "ext_clock";

> > +               pinctrl-names = "default";

> > +               pinctrl-0 = <&wifi_enable_h>;

> > +               reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;

> > +       };

> > +

> >         vcc1v8_s0: vcc1v8-s0 {

> >                 compatible = "regulator-fixed";

> >                 regulator-name = "vcc1v8_s0";

> > @@ -362,6 +371,20 @@

> >  };

> >

> >  &pinctrl {

> > +       bt {

> > +               bt_enable_h: bt-enable-h {

> > +                       rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;

> > +               };

> > +

> > +               bt_host_wake_l: bt-host-wake-l {

> > +                       rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;

> > +               };

> > +

> > +               bt_wake_l: bt-wake-l {

> > +                       rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;

> > +               };

> > +       };

> > +

> >         sdmmc {

> >                 sdmmc_bus1: sdmmc-bus1 {

> >                         rockchip,pins =

> > @@ -387,6 +410,26 @@

> >                 };

> >         };

> >

> > +       sdio0 {

> > +               sdio0_bus4: sdio0-bus4 {

> > +                       rockchip,pins =

> > +                               <2 20 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > +                               <2 21 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > +                               <2 22 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > +                               <2 23 RK_FUNC_1 &pcfg_pull_up_20ma>;

> > +               };

> > +

> > +               sdio0_cmd: sdio0-cmd {

> > +                       rockchip,pins =

> > +                               <2 24 RK_FUNC_1 &pcfg_pull_up_20ma>;

> > +               };

> > +

> > +               sdio0_clk: sdio0-clk {

> > +                       rockchip,pins =

> > +                               <2 25 RK_FUNC_1 &pcfg_pull_none_20ma>;

> > +               };

> > +       };

> > +

> >         pmic {

> >                 pmic_int_l: pmic-int-l {

> >                         rockchip,pins =

> > @@ -403,6 +446,19 @@

> >                                 <1 14 RK_FUNC_GPIO &pcfg_pull_down>;

> >                 };

> >         };

> > +

> > +       sdio-pwrseq {

> > +               wifi_enable_h: wifi-enable-h {

> > +                       rockchip,pins =

> > +                               <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;

> > +               };

> > +       };

> > +

> > +       wifi {

> > +               wifi_host_wake_l: wifi-host-wake-l {

> > +                       rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;

> > +               };

> > +       };

> >  };

> >

> >  &pwm2 {

> > @@ -413,6 +469,33 @@

> >         status = "okay";

> >  };

> >

> > +&sdio0 {

> > +       clock-frequency = <50000000>;

> > +       bus-width = <4>;

> > +       cap-sdio-irq;

> > +       cap-sd-highspeed;

> > +       no-emmc;

> > +       keep-power-in-suspend;

> > +       mmc-pwrseq = <&sdio_pwrseq>;

> > +       non-removable;

> > +       num-slots = <1>;

> > +       pinctrl-names = "default";

> > +       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;

> > +       sd-uhs-sdr104;

> > +

> > +       status = "okay";

> > +

> > +       brcmf: wifi@1 {

> > +               compatible = "brcm,bcm4329-fmac";

> > +               reg = <1>;

> > +               interrupt-parent = <&gpio0>;

> > +               interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;

> > +               interrupt-names = "host-wake";

> > +               pinctrl-names = "default";

> > +               pinctrl-0 = <&wifi_host_wake_l>;

> > +       };

> > +};

> > +

> >  &sdhci {

> >         bus-width = <8>;

> >         mmc-hs400-1_8v;

> > @@ -439,8 +522,19 @@

> >

> >  &uart0 {

> >         pinctrl-names = "default";

> > -       pinctrl-0 = <&uart0_xfer &uart0_cts>;

> > +       pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;

> >         status = "okay";

> > +

> > +       bluetooth {

> > +               compatible = "brcm,bcm43438-bt";

> > +               clocks = <&rk808 1>;

> > +               clock-names = "ext_clock";

> > +               device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;

> > +               host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;

> > +               shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;

> > +               pinctrl-names = "default";

> > +               pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;

> > +       };

> >  };

> >

> >  &uart2 {

> > --

> > 2.17.1

> >
Heiko Stuebner Feb. 11, 2019, 12:33 p.m. | #3
Am Montag, 11. Februar 2019, 12:31:28 CET schrieb Manivannan Sadhasivam:
> Hi Peter,

> 

> On Fri, Feb 08, 2019 at 04:45:01PM +0000, Peter Robinson wrote:

> > Hi Mani,

> > 

> > On Thu, Feb 7, 2019 at 5:54 AM Manivannan Sadhasivam

> > 

> > <manivannan.sadhasivam@linaro.org> wrote:

> > > Add on-board WiFi/BT support for Rock960 boards such as Rock960 based

> > > on AP6356S and Ficus based on AP6354 wireless modules.

> > > 

> > > Firmwares for the respective boards are available here:

> > > 

> > > http://people.linaro.org/~manivannan.sadhasivam/rock960_wifi/

> > > http://people.linaro.org/~manivannan.sadhasivam/ficus_wifi/

> > > 

> > > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

> > 

> > There's some warnings on building these I noticed in testing this on 

Fedora:
> >   DTC     arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb

> > 

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning

> > (reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length

> > (4 bytes) (#address-cells == 2, #size-cells == 1)

> > arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning

> > (pci_device_bus_num): Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (i2c_bus_reg):

> > Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-ficus.dtb: Warning (spi_bus_reg):

> > Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> > (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> > #address-cells value

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> > (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> > #size-cells value

> > 

> >   DTC     arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb

> > 

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:490.3-13: Warning

> > (reg_format): /dwmmc@fe310000/wifi@1:reg: property has invalid length

> > (4 bytes) (#address-cells == 2, #size-cells == 1)

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> > (pci_device_bus_num): Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> > (i2c_bus_reg): Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtb: Warning

> > (spi_bus_reg): Failed prerequisite 'reg_format'

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> > (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> > #address-cells value

> > arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi:488.16-496.4: Warning

> > (avoid_default_addr_size): /dwmmc@fe310000/wifi@1: Relying on default

> > #size-cells value

> 

> Hmm. Since the parent node "sdio0" is missing the address/size cells

> property, the default value has been used by the DTC. I think it would

> make sense to just drop the reg property from "wifi" node instead of

> modifying the parent "sdio0" node.

> 

> If no one has any issue over this, I'll send out another revision with the

> reg property removed.


actually I do think you might just want to add address+size-cells
to your &sdio0 instance instead. Especially as I'm not sure that the
system will find the card-node when matching against the card itself
without the reg property?

The core sdio0 does not necessarily have subnodes, so I guess
the *-cells may just live in the board dts?


Heiko



> > > ---

> > > 

> > >  .../boot/dts/rockchip/rk3399-rock960.dtsi     | 96 ++++++++++++++++++-

> > >  1 file changed, 95 insertions(+), 1 deletion(-)

> > > 

> > > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > > b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi index

> > > 56abbb08c133..1b2f7cd82244 100644

> > > --- a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > > +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi

> > > @@ -9,6 +9,15 @@

> > > 

> > >  #include "rk3399-opp.dtsi"

> > >  

> > >  / {

> > > 

> > > +       sdio_pwrseq: sdio-pwrseq {

> > > +               compatible = "mmc-pwrseq-simple";

> > > +               clocks = <&rk808 1>;

> > > +               clock-names = "ext_clock";

> > > +               pinctrl-names = "default";

> > > +               pinctrl-0 = <&wifi_enable_h>;

> > > +               reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;

> > > +       };

> > > +

> > > 

> > >         vcc1v8_s0: vcc1v8-s0 {

> > >         

> > >                 compatible = "regulator-fixed";

> > >                 regulator-name = "vcc1v8_s0";

> > > 

> > > @@ -362,6 +371,20 @@

> > > 

> > >  };

> > >  

> > >  &pinctrl {

> > > 

> > > +       bt {

> > > +               bt_enable_h: bt-enable-h {

> > > +                       rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO

> > > &pcfg_pull_none>; +               };

> > > +

> > > +               bt_host_wake_l: bt-host-wake-l {

> > > +                       rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO

> > > &pcfg_pull_none>; +               };

> > > +

> > > +               bt_wake_l: bt-wake-l {

> > > +                       rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO

> > > &pcfg_pull_none>; +               };

> > > +       };

> > > +

> > > 

> > >         sdmmc {

> > >         

> > >                 sdmmc_bus1: sdmmc-bus1 {

> > >                 

> > >                         rockchip,pins =

> > > 

> > > @@ -387,6 +410,26 @@

> > > 

> > >                 };

> > >         

> > >         };

> > > 

> > > +       sdio0 {

> > > +               sdio0_bus4: sdio0-bus4 {

> > > +                       rockchip,pins =

> > > +                               <2 20 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > > +                               <2 21 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > > +                               <2 22 RK_FUNC_1 &pcfg_pull_up_20ma>,

> > > +                               <2 23 RK_FUNC_1 &pcfg_pull_up_20ma>;

> > > +               };

> > > +

> > > +               sdio0_cmd: sdio0-cmd {

> > > +                       rockchip,pins =

> > > +                               <2 24 RK_FUNC_1 &pcfg_pull_up_20ma>;

> > > +               };

> > > +

> > > +               sdio0_clk: sdio0-clk {

> > > +                       rockchip,pins =

> > > +                               <2 25 RK_FUNC_1 &pcfg_pull_none_20ma>;

> > > +               };

> > > +       };

> > > +

> > > 

> > >         pmic {

> > >         

> > >                 pmic_int_l: pmic-int-l {

> > >                 

> > >                         rockchip,pins =

> > > 

> > > @@ -403,6 +446,19 @@

> > > 

> > >                                 <1 14 RK_FUNC_GPIO &pcfg_pull_down>;

> > >                 

> > >                 };

> > >         

> > >         };

> > > 

> > > +

> > > +       sdio-pwrseq {

> > > +               wifi_enable_h: wifi-enable-h {

> > > +                       rockchip,pins =

> > > +                               <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;

> > > +               };

> > > +       };

> > > +

> > > +       wifi {

> > > +               wifi_host_wake_l: wifi-host-wake-l {

> > > +                       rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO

> > > &pcfg_pull_none>; +               };

> > > +       };

> > > 

> > >  };

> > >  

> > >  &pwm2 {

> > > 

> > > @@ -413,6 +469,33 @@

> > > 

> > >         status = "okay";

> > >  

> > >  };

> > > 

> > > +&sdio0 {

> > > +       clock-frequency = <50000000>;

> > > +       bus-width = <4>;

> > > +       cap-sdio-irq;

> > > +       cap-sd-highspeed;

> > > +       no-emmc;

> > > +       keep-power-in-suspend;

> > > +       mmc-pwrseq = <&sdio_pwrseq>;

> > > +       non-removable;

> > > +       num-slots = <1>;

> > > +       pinctrl-names = "default";

> > > +       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;

> > > +       sd-uhs-sdr104;

> > > +

> > > +       status = "okay";

> > > +

> > > +       brcmf: wifi@1 {

> > > +               compatible = "brcm,bcm4329-fmac";

> > > +               reg = <1>;

> > > +               interrupt-parent = <&gpio0>;

> > > +               interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;

> > > +               interrupt-names = "host-wake";

> > > +               pinctrl-names = "default";

> > > +               pinctrl-0 = <&wifi_host_wake_l>;

> > > +       };

> > > +};

> > > +

> > > 

> > >  &sdhci {

> > >  

> > >         bus-width = <8>;

> > >         mmc-hs400-1_8v;

> > > 

> > > @@ -439,8 +522,19 @@

> > > 

> > >  &uart0 {

> > >  

> > >         pinctrl-names = "default";

> > > 

> > > -       pinctrl-0 = <&uart0_xfer &uart0_cts>;

> > > +       pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;

> > > 

> > >         status = "okay";

> > > 

> > > +

> > > +       bluetooth {

> > > +               compatible = "brcm,bcm43438-bt";

> > > +               clocks = <&rk808 1>;

> > > +               clock-names = "ext_clock";

> > > +               device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;

> > > +               host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;

> > > +               shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;

> > > +               pinctrl-names = "default";

> > > +               pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;

> > > +       };

> > > 

> > >  };

> > >  

> > >  &uart2 {

> > > 

> > > --

> > > 2.17.1

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi
index 56abbb08c133..1b2f7cd82244 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi
@@ -9,6 +9,15 @@ 
 #include "rk3399-opp.dtsi"
 
 / {
+	sdio_pwrseq: sdio-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		clocks = <&rk808 1>;
+		clock-names = "ext_clock";
+		pinctrl-names = "default";
+		pinctrl-0 = <&wifi_enable_h>;
+		reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
+	};
+
 	vcc1v8_s0: vcc1v8-s0 {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc1v8_s0";
@@ -362,6 +371,20 @@ 
 };
 
 &pinctrl {
+	bt {
+		bt_enable_h: bt-enable-h {
+			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+
+		bt_host_wake_l: bt-host-wake-l {
+			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+
+		bt_wake_l: bt-wake-l {
+			rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
 	sdmmc {
 		sdmmc_bus1: sdmmc-bus1 {
 			rockchip,pins =
@@ -387,6 +410,26 @@ 
 		};
 	};
 
+	sdio0 {
+		sdio0_bus4: sdio0-bus4 {
+			rockchip,pins =
+				<2 20 RK_FUNC_1 &pcfg_pull_up_20ma>,
+				<2 21 RK_FUNC_1 &pcfg_pull_up_20ma>,
+				<2 22 RK_FUNC_1 &pcfg_pull_up_20ma>,
+				<2 23 RK_FUNC_1 &pcfg_pull_up_20ma>;
+		};
+
+		sdio0_cmd: sdio0-cmd {
+			rockchip,pins =
+				<2 24 RK_FUNC_1 &pcfg_pull_up_20ma>;
+		};
+
+		sdio0_clk: sdio0-clk {
+			rockchip,pins =
+				<2 25 RK_FUNC_1 &pcfg_pull_none_20ma>;
+		};
+	};
+
 	pmic {
 		pmic_int_l: pmic-int-l {
 			rockchip,pins =
@@ -403,6 +446,19 @@ 
 				<1 14 RK_FUNC_GPIO &pcfg_pull_down>;
 		};
 	};
+
+	sdio-pwrseq {
+		wifi_enable_h: wifi-enable-h {
+			rockchip,pins =
+				<0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
+	wifi {
+		wifi_host_wake_l: wifi-host-wake-l {
+			rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
 };
 
 &pwm2 {
@@ -413,6 +469,33 @@ 
 	status = "okay";
 };
 
+&sdio0 {
+	clock-frequency = <50000000>;
+	bus-width = <4>;
+	cap-sdio-irq;
+	cap-sd-highspeed;
+	no-emmc;
+	keep-power-in-suspend;
+	mmc-pwrseq = <&sdio_pwrseq>;
+	non-removable;
+	num-slots = <1>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+	sd-uhs-sdr104;
+
+	status = "okay";
+
+	brcmf: wifi@1 {
+		compatible = "brcm,bcm4329-fmac";
+		reg = <1>;
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;
+		interrupt-names = "host-wake";
+		pinctrl-names = "default";
+		pinctrl-0 = <&wifi_host_wake_l>;
+	};
+};
+
 &sdhci {
 	bus-width = <8>;
 	mmc-hs400-1_8v;
@@ -439,8 +522,19 @@ 
 
 &uart0 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&uart0_xfer &uart0_cts>;
+	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
 	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm43438-bt";
+		clocks = <&rk808 1>;
+		clock-names = "ext_clock";
+		device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
+		host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
+		shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;
+	};
 };
 
 &uart2 {