mbox series

[v4,00/14] Add device tree support for sc7180

Message ID 20191106065017.22144-1-rnayak@codeaurora.org
Headers show
Series Add device tree support for sc7180 | expand

Message

Rajendra Nayak Nov. 6, 2019, 6:50 a.m. UTC
Changes in v4:
* Rebased on top of Rob;s for-next
* reorderd patches to take care of pdc dependency
* Updated pdc binding to use a soc specific and soc independent compatible
* Other updates based on v3 feedback, changes listed in each patch 

Changes in v3:
* PATCH 2/11: Updated the qup and uart lables to be consistent
with the naming convention followed in sdm845 as suggested
by Matthias
* Dropped 2 patches from v2 which added the new compatible and
binding updates for sc7180 pdc and reused sdm845 compatible instead
as suggested by Marc Z

This series adds DT support for basic peripherals on qualcomm's sc7180 SoC,
drivers for which are already upstream.

The series has a dependency on gcc clock driver patches [1]
to merge first

[1] https://www.spinics.net/lists/linux-clk/msg41851.html

Kiran Gunda (3):
  arm64: dts: qcom: sc7180: Add SPMI PMIC arbiter device
  arm64: dts: qcom: pm6150: Add PM6150/PM6150L PMIC peripherals
  arm64: dts: qcom: sc7180-idp: Add RPMh regulators

Maulik Shah (3):
  arm64: dts: qcom: sc7180: Add cmd_db reserved area
  arm64: dts: qcom: sc7180: Add rpmh-rsc node
  arm64: dts: qcom: sc7180: Add pdc interrupt controller

Rajendra Nayak (5):
  dt-bindings: qcom: Add SC7180 bindings
  arm64: dts: sc7180: Add minimal dts/dtsi files for SC7180 soc
  dt-bindings: arm-smmu: update binding for qcom sc7180 SoC
  drivers: irqchip: qcom-pdc: Move to an SoC independent compatible
  dt-bindings: qcom,pdc: Add compatible for sc7180

Roja Rani Yarubandi (1):
  arm64: dts: sc7180: Add qupv3_0 and qupv3_1

Taniya Das (1):
  arm64: dts: qcom: SC7180: Add node for rpmhcc clock driver

Vivek Gautam (1):
  arm64: dts: sc7180: Add device node for apps_smmu

 .../devicetree/bindings/arm/qcom.yaml         |    6 +
 .../interrupt-controller/qcom,pdc.txt         |    3 +-
 .../devicetree/bindings/iommu/arm,smmu.yaml   |    1 +
 arch/arm64/boot/dts/qcom/Makefile             |    1 +
 arch/arm64/boot/dts/qcom/pm6150.dtsi          |   72 ++
 arch/arm64/boot/dts/qcom/pm6150l.dtsi         |   31 +
 arch/arm64/boot/dts/qcom/sc7180-idp.dts       |  402 ++++++
 arch/arm64/boot/dts/qcom/sc7180.dtsi          | 1133 +++++++++++++++++
 drivers/irqchip/qcom-pdc.c                    |    2 +-
 9 files changed, 1649 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm64/boot/dts/qcom/pm6150.dtsi
 create mode 100644 arch/arm64/boot/dts/qcom/pm6150l.dtsi
 create mode 100644 arch/arm64/boot/dts/qcom/sc7180-idp.dts
 create mode 100644 arch/arm64/boot/dts/qcom/sc7180.dtsi

Comments

Lina Iyer Nov. 6, 2019, 6:20 p.m. UTC | #1
On Wed, Nov 06 2019 at 23:52 -0700, Rajendra Nayak wrote:
>Remove the sdm845 SoC specific compatible to make the driver
>easily reusable across other SoC's with the same IP block.
>This will reduce further churn adding any SoC specific
>compatibles unless really needed.
>
>Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
>Cc: Lina Iyer <ilina@codeaurora.org>
>Cc: Marc Zyngier <maz@kernel.org>
Reviewed-by: Lina Iyer <ilina@codeaurora.org>

>---
> drivers/irqchip/qcom-pdc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
>index faa7d61b9d6c..c175333bb646 100644
>--- a/drivers/irqchip/qcom-pdc.c
>+++ b/drivers/irqchip/qcom-pdviewed-by: Lina Iyer <ilina@codeaurora.org>
>@@ -309,4 +309,4 @@ static int qcom_pdc_init(struct device_node *node, struct device_node *parent)
> 	return ret;
> }
>
>-IRQCHIP_DECLARE(pdc_sdm845, "qcom,sdm845-pdc", qcom_pdc_init);
>+IRQCHIP_DECLARE(qcom_pdc, "qcom,pdc", qcom_pdc_init);
>--
>QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
>of Code Aurora Forum, hosted by The Linux Foundation
>
Stephen Boyd Nov. 6, 2019, 7:10 p.m. UTC | #2
Quoting Rajendra Nayak (2019-11-05 22:50:10)
> Remove the sdm845 SoC specific compatible to make the driver
> easily reusable across other SoC's with the same IP block.
> This will reduce further churn adding any SoC specific
> compatibles unless really needed.
> 
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> Cc: Lina Iyer <ilina@codeaurora.org>
> Cc: Marc Zyngier <maz@kernel.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 6, 2019, 7:11 p.m. UTC | #3
Quoting Rajendra Nayak (2019-11-05 22:50:12)
> From: Maulik Shah <mkshah@codeaurora.org>
> 
> Add pdc interrupt controller for sc7180
> 
> Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 5:46 p.m. UTC | #4
Quoting Rajendra Nayak (2019-11-05 22:50:05)
> diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi
> new file mode 100644
> index 000000000000..17870dd67390
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi
> @@ -0,0 +1,299 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * SC7180 SoC device tree source
> + *
> + * Copyright (c) 2019, The Linux Foundation. All rights reserved.
> + */
> +
> +#include <dt-bindings/clock/qcom,gcc-sc7180.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> +/ {
> +       interrupt-parent = <&intc>;
> +
> +       #address-cells = <2>;
> +       #size-cells = <2>;
> +
> +       chosen { };
> +
> +       clocks {
> +               xo_board: xo-board {
> +                       compatible = "fixed-clock";
> +                       clock-frequency = <38400000>;
> +                       #clock-cells = <0>;
> +               };
> +
> +               sleep_clk: sleep-clk {
> +                       compatible = "fixed-clock";
> +                       clock-frequency = <32764>;
> +                       clock-output-names = "sleep_clk";

Remove this one too?

> +                       #clock-cells = <0>;
> +               };
> +       };
> +
[...]
> +       memory@80000000 {
> +               device_type = "memory";
> +               /* We expect the bootloader to fill in the size */
> +               reg = <0 0x80000000 0 0>;
> +       };
> +
> +       pmu {
> +               compatible = "arm,armv8-pmuv3";
> +               interrupts = <GIC_PPI 5 IRQ_TYPE_LEVEL_HIGH>;
> +       };
> +
> +       psci {
> +               compatible = "arm,psci-1.0";
> +               method = "smc";
> +       };
> +
> +       soc: soc {
> +               #address-cells = <2>;
> +               #size-cells = <2>;
> +               ranges = <0 0 0 0 0x10 0>;
> +               dma-ranges = <0 0 0 0 0x10 0>;
> +               compatible = "simple-bus";
> +
> +               gcc: clock-controller@100000 {
> +                       compatible = "qcom,gcc-sc7180";
> +                       reg = <0 0x00100000 0 0x1f0000>;
> +                       #clock-cells = <1>;
> +                       #reset-cells = <1>;
> +                       #power-domain-cells = <1>;
> +               };
> +
> +               qupv3_id_1: geniqup@ac0000 {
> +                       compatible = "qcom,geni-se-qup";
> +                       reg = <0 0x00ac0000 0 0x6000>;
> +                       clock-names = "m-ahb", "s-ahb";
> +                       clocks = <&gcc GCC_QUPV3_WRAP_1_M_AHB_CLK>,
> +                                <&gcc GCC_QUPV3_WRAP_1_S_AHB_CLK>;
> +                       #address-cells = <2>;
> +                       #size-cells = <2>;
> +                       ranges;
> +                       status = "disabled";
> +
> +                       uart8: serial@a88000 {
> +                               compatible = "qcom,geni-debug-uart";
> +                               reg = <0 0x00a88000 0 0x4000>;
> +                               clock-names = "se";
> +                               clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
> +                               pinctrl-names = "default";
> +                               pinctrl-0 = <&qup_uart8_default>;
> +                               interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
> +                               status = "disabled";
> +                       };
> +               };
> +
> +               tlmm: pinctrl@3500000 {
> +                       compatible = "qcom,sc7180-pinctrl";
> +                       reg = <0 0x03500000 0 0x300000>,
> +                             <0 0x03900000 0 0x300000>,
> +                             <0 0x03d00000 0 0x300000>;
> +                       reg-names = "west", "north", "south";
> +                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
> +                       gpio-controller;
> +                       #gpio-cells = <2>;
> +                       interrupt-controller;
> +                       #interrupt-cells = <2>;
> +                       gpio-ranges = <&tlmm 0 0 120>;
> +
> +                       qup_uart8_default: qup-uart8-default {
> +                               pinmux {
> +                                       pins = "gpio44", "gpio45";
> +                                       function = "qup12";

That looks weird to have qup12 function on uart8. It's right?

> +                               };
> +                       };
> +               };
> +
Stephen Boyd Nov. 7, 2019, 5:47 p.m. UTC | #5
Quoting Rajendra Nayak (2019-11-05 22:50:07)
> From: Vivek Gautam <vivek.gautam@codeaurora.org>
> 
> Adding device node for APPS SMMU that is connected to
> devices such as display, video, usb, mmc, etc. on SC7180
> chipset.
> 
> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 5:47 p.m. UTC | #6
Quoting Rajendra Nayak (2019-11-05 22:50:08)
> From: Maulik Shah <mkshah@codeaurora.org>
> 
> Command_db provides mapping for resource key and address managed
> by remote processor. Add cmd_db reserved memory area.
> 
> Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 5:53 p.m. UTC | #7
Quoting Rajendra Nayak (2019-11-05 22:50:09)
> diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi
> index 61250560c7ef..98c8ab7d613c 100644
> --- a/arch/arm64/boot/dts/qcom/sc7180.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi
> @@ -387,6 +388,24 @@
>                                 status = "disabled";
>                         };
>                 };
> +
> +               apps_rsc: rsc@18200000 {

The node name is non-standard. This has been a problem since sdm845
though so it would be nice if we can invent some new name for this that
is standard at some point in the future.

> +                       label = "apps_rsc";

Can we remove this property? The value seems minimal given that we can
use the dev_name() and get the address in there instead of using a label.
Stephen Boyd Nov. 7, 2019, 5:53 p.m. UTC | #8
Quoting Rajendra Nayak (2019-11-05 22:50:09)
> From: Maulik Shah <mkshah@codeaurora.org>
> 
> Add device bindings for the application processor's rsc. The rsc
> contains the TCS that are used for communicating with the hardened
> resource accelerators on Qualcomm Technologies, Inc. (QTI) SoCs.
> 
> Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 5:54 p.m. UTC | #9
Quoting Rajendra Nayak (2019-11-05 22:50:13)
> From: Kiran Gunda <kgunda@codeaurora.org>
> 
> Add SPMI PMIC arbiter device to communicate with PMICs
> attached to SPMI bus.
> 
> Signed-off-by: Kiran Gunda <kgunda@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 5:59 p.m. UTC | #10
Quoting Rajendra Nayak (2019-11-05 22:50:14)
> From: Kiran Gunda <kgunda@codeaurora.org>
> 
> Add PM6150/PM6150L peripherals such as PON, GPIOs, ADC and other
> PMIC infra modules.
> 
> Signed-off-by: Kiran Gunda <kgunda@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 6:50 p.m. UTC | #11
Quoting Rajendra Nayak (2019-11-05 22:50:16)
> From: Taniya Das <tdas@codeaurora.org>
> 
> Add node for rpmhcc clock driver.
> 
> Signed-off-by: Taniya Das <tdas@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Stephen Boyd Nov. 7, 2019, 6:52 p.m. UTC | #12
Quoting Rajendra Nayak (2019-11-05 22:50:17)
> From: Roja Rani Yarubandi <rojay@codeaurora.org>
> 
> Add QUP SE instances configuration for sc7180.
> 
> Signed-off-by: Roja Rani Yarubandi <rojay@codeaurora.org>
> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>

It has the weird qup numbering too, but I guess it's correct somehow.
Rajendra Nayak Nov. 8, 2019, 3:48 a.m. UTC | #13
On 11/7/2019 11:16 PM, Stephen Boyd wrote:
> Quoting Rajendra Nayak (2019-11-05 22:50:05)
>> diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> new file mode 100644
>> index 000000000000..17870dd67390
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> @@ -0,0 +1,299 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * SC7180 SoC device tree source
>> + *
>> + * Copyright (c) 2019, The Linux Foundation. All rights reserved.
>> + */
>> +
>> +#include <dt-bindings/clock/qcom,gcc-sc7180.h>
>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>> +
>> +/ {
>> +       interrupt-parent = <&intc>;
>> +
>> +       #address-cells = <2>;
>> +       #size-cells = <2>;
>> +
>> +       chosen { };
>> +
>> +       clocks {
>> +               xo_board: xo-board {
>> +                       compatible = "fixed-clock";
>> +                       clock-frequency = <38400000>;
>> +                       #clock-cells = <0>;
>> +               };
>> +
>> +               sleep_clk: sleep-clk {
>> +                       compatible = "fixed-clock";
>> +                       clock-frequency = <32764>;
>> +                       clock-output-names = "sleep_clk";
> 
> Remove this one too?

ah, yes. Not sure how I missed that :/

> 
>> +                       #clock-cells = <0>;
>> +               };
>> +       };
>> +
> [...]
>> +       memory@80000000 {
>> +               device_type = "memory";
>> +               /* We expect the bootloader to fill in the size */
>> +               reg = <0 0x80000000 0 0>;
>> +       };
>> +
>> +       pmu {
>> +               compatible = "arm,armv8-pmuv3";
>> +               interrupts = <GIC_PPI 5 IRQ_TYPE_LEVEL_HIGH>;
>> +       };
>> +
>> +       psci {
>> +               compatible = "arm,psci-1.0";
>> +               method = "smc";
>> +       };
>> +
>> +       soc: soc {
>> +               #address-cells = <2>;
>> +               #size-cells = <2>;
>> +               ranges = <0 0 0 0 0x10 0>;
>> +               dma-ranges = <0 0 0 0 0x10 0>;
>> +               compatible = "simple-bus";
>> +
>> +               gcc: clock-controller@100000 {
>> +                       compatible = "qcom,gcc-sc7180";
>> +                       reg = <0 0x00100000 0 0x1f0000>;
>> +                       #clock-cells = <1>;
>> +                       #reset-cells = <1>;
>> +                       #power-domain-cells = <1>;
>> +               };
>> +
>> +               qupv3_id_1: geniqup@ac0000 {
>> +                       compatible = "qcom,geni-se-qup";
>> +                       reg = <0 0x00ac0000 0 0x6000>;
>> +                       clock-names = "m-ahb", "s-ahb";
>> +                       clocks = <&gcc GCC_QUPV3_WRAP_1_M_AHB_CLK>,
>> +                                <&gcc GCC_QUPV3_WRAP_1_S_AHB_CLK>;
>> +                       #address-cells = <2>;
>> +                       #size-cells = <2>;
>> +                       ranges;
>> +                       status = "disabled";
>> +
>> +                       uart8: serial@a88000 {
>> +                               compatible = "qcom,geni-debug-uart";
>> +                               reg = <0 0x00a88000 0 0x4000>;
>> +                               clock-names = "se";
>> +                               clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
>> +                               pinctrl-names = "default";
>> +                               pinctrl-0 = <&qup_uart8_default>;
>> +                               interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
>> +                               status = "disabled";
>> +                       };
>> +               };
>> +
>> +               tlmm: pinctrl@3500000 {
>> +                       compatible = "qcom,sc7180-pinctrl";
>> +                       reg = <0 0x03500000 0 0x300000>,
>> +                             <0 0x03900000 0 0x300000>,
>> +                             <0 0x03d00000 0 0x300000>;
>> +                       reg-names = "west", "north", "south";
>> +                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
>> +                       gpio-controller;
>> +                       #gpio-cells = <2>;
>> +                       interrupt-controller;
>> +                       #interrupt-cells = <2>;
>> +                       gpio-ranges = <&tlmm 0 0 120>;
>> +
>> +                       qup_uart8_default: qup-uart8-default {
>> +                               pinmux {
>> +                                       pins = "gpio44", "gpio45";
>> +                                       function = "qup12";
> 
> That looks weird to have qup12 function on uart8. It's right?

So we have 2 qup instances each with 6 SEs on sc7180.
So the i2c/uart/spi SE instances are numbered from 0 to 5 in the first qup
and 6 to 11 in the next.
The pinctrl functions however have it named qup0 to 5 for first and
qup10 to 15 for the next which is weird. Now all data in the pinctrl
driver is autogenerated using hw description so its coming from that.

Just for comparison, on sdm845 we had 2 qup instances with 8 SE's
and the function names were qup0 to 8 for first and 9 to 15 for the
second.
Rajendra Nayak Nov. 8, 2019, 3:50 a.m. UTC | #14
On 11/7/2019 11:23 PM, Stephen Boyd wrote:
> Quoting Rajendra Nayak (2019-11-05 22:50:09)
>> diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> index 61250560c7ef..98c8ab7d613c 100644
>> --- a/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> @@ -387,6 +388,24 @@
>>                                  status = "disabled";
>>                          };
>>                  };
>> +
>> +               apps_rsc: rsc@18200000 {
> 
> The node name is non-standard. This has been a problem since sdm845
> though so it would be nice if we can invent some new name for this that
> is standard at some point in the future.
> 
>> +                       label = "apps_rsc";
> 
> Can we remove this property? The value seems minimal given that we can
> use the dev_name() and get the address in there instead of using a label.

Sure, i'll remove it.
Rajendra Nayak Nov. 8, 2019, 3:52 a.m. UTC | #15
On 11/8/2019 12:22 AM, Stephen Boyd wrote:
> Quoting Rajendra Nayak (2019-11-05 22:50:17)
>> From: Roja Rani Yarubandi <rojay@codeaurora.org>
>>
>> Add QUP SE instances configuration for sc7180.
>>
>> Signed-off-by: Roja Rani Yarubandi <rojay@codeaurora.org>
>> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
>> ---
> 
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
> 
> It has the weird qup numbering too, but I guess it's correct somehow.

I responded to PATCH 2/14 as to why its weird.
Stephen Boyd Nov. 8, 2019, 7:09 p.m. UTC | #16
Quoting Rajendra Nayak (2019-11-07 19:48:57)
> 
> On 11/7/2019 11:16 PM, Stephen Boyd wrote:
> > Quoting Rajendra Nayak (2019-11-05 22:50:05)
> >> +                       qup_uart8_default: qup-uart8-default {
> >> +                               pinmux {
> >> +                                       pins = "gpio44", "gpio45";
> >> +                                       function = "qup12";
> > 
> > That looks weird to have qup12 function on uart8. It's right?
> 
> So we have 2 qup instances each with 6 SEs on sc7180.
> So the i2c/uart/spi SE instances are numbered from 0 to 5 in the first qup
> and 6 to 11 in the next.
> The pinctrl functions however have it named qup0 to 5 for first and
> qup10 to 15 for the next which is weird. Now all data in the pinctrl
> driver is autogenerated using hw description so its coming from that.
> 
> Just for comparison, on sdm845 we had 2 qup instances with 8 SE's
> and the function names were qup0 to 8 for first and 9 to 15 for the
> second.
> 

Alright. Good to know the hardware description is all messed up.