[PATCH v7 4/4] arm64: dts: Add mediatek SoC mt8195 and evaluation board

Tinghan Shen tinghan.shen at mediatek.com
Thu Jan 6 03:14:55 PST 2022


On Thu, 2021-12-23 at 17:59 +0800, Chen-Yu Tsai wrote:
> Hi,
> 
> On Mon, Dec 20, 2021 at 8:20 PM Tinghan Shen <
> tinghan.shen at mediatek.com> wrote:
> > 
> > Add basic chip support for mediatek mt8195.
> > 
> > Signed-off-by: Seiya Wang <seiya.wang at mediatek.com>
> > Signed-off-by: Tinghan Shen <tinghan.shen at mediatek.com>
> > ---
> >  arch/arm64/boot/dts/mediatek/Makefile       |    1 +
> >  arch/arm64/boot/dts/mediatek/mt8195-evb.dts |  209 ++++
> >  arch/arm64/boot/dts/mediatek/mt8195.dtsi    | 1034
> > +++++++++++++++++++
> >  3 files changed, 1244 insertions(+)
> >  create mode 100644 arch/arm64/boot/dts/mediatek/mt8195-evb.dts
> >  create mode 100644 arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > 
> > diff --git a/arch/arm64/boot/dts/mediatek/Makefile
> > b/arch/arm64/boot/dts/mediatek/Makefile
> > index 4f68ebed2e31..7aa08bb4c078 100644
> > --- a/arch/arm64/boot/dts/mediatek/Makefile
> > +++ b/arch/arm64/boot/dts/mediatek/Makefile
> > @@ -32,4 +32,5 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-
> > krane-sku0.dtb
> >  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-krane-sku176.dtb
> >  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-pumpkin.dtb
> >  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8192-evb.dtb
> > +dtb-$(CONFIG_ARCH_MEDIATEK) += mt8195-evb.dtb
> >  dtb-$(CONFIG_ARCH_MEDIATEK) += mt8516-pumpkin.dtb
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8195-evb.dts
> > b/arch/arm64/boot/dts/mediatek/mt8195-evb.dts
> > new file mode 100644
> > index 000000000000..e581c6bbead6
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/mediatek/mt8195-evb.dts
> > @@ -0,0 +1,209 @@
> > +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> > +/*
> > + * Copyright (C) 2021 MediaTek Inc.
> > + * Author: Seiya Wang <seiya.wang at mediatek.com>
> > + */
> > +/dts-v1/;
> > +#include "mt8195.dtsi"
> > +
> > +/ {
> > +       model = "MediaTek MT8195 evaluation board";
> > +       compatible = "mediatek,mt8195-evb", "mediatek,mt8195";
> > +
> > +       aliases {
> > +               serial0 = &uart0;
> > +       };
> > +
> > +       chosen {
> > +               stdout-path = "serial0:921600n8";
> > +       };
> > +
> > +       memory at 40000000 {
> > +               device_type = "memory";
> > +               reg = <0 0x40000000 0 0x80000000>;
> > +       };
> > +};
> > +
> > +&auxadc {
> > +       status = "okay";
> > +};
> > +
> > +&i2c0 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c0_pin>;
> > +       clock-frequency = <100000>;
> > +       status = "okay";
> > +};
> > +
> > +&i2c1 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c1_pin>;
> > +       clock-frequency = <400000>;
> > +       status = "okay";
> > +};
> > +
> > +&i2c2 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c2_pin>;
> > +       status = "disabled";
> > +};
> > +
> > +&i2c3 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c3_pin>;
> > +       status = "disabled";
> > +};
> 
> Is there any reason in particular to list "disabled" devices here?
> Are they part of some GPIO header? If they are not accessible, then
> it's better to not list them. If they are, please leave a comment
> about it.
> 
> > +
> > +&i2c4 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c4_pin>;
> > +       clock-frequency = <400000>;
> > +       status = "okay";
> > +};
> > +
> > +&i2c5 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c5_pin>;
> > +       status = "disabled";
> > +};
> > +
> > +&i2c6 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&i2c6_pin>;
> > +       clock-frequency = <400000>;
> > +       status = "disabled";
> > +};
> 
> Same here.
> 
> > +
> > +&nor_flash {
> > +       status = "okay";
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&nor_pins_default>;
> 
> Please add an empty line between properties and child device nodes.
> It helps
> with readability and also fits the style of other parts and other DT
> files.
> 
> > +       flash at 0 {
> > +               compatible = "jedec,spi-nor";
> > +               reg = <0>;
> > +               spi-max-frequency = <50000000>;
> > +       };
> > +};
> > +
> > +&pio {
> > +       i2c0_pin: i2c0-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO8__FUNC_SDA0>,
> > +                                <PINMUX_GPIO9__FUNC_SCL0>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> 
> Please use the MTK_PULL_SET_RSEL_* macros with the bias-pull-*
> properties.
> We spent a lot of time defining those.
> 
> > +                       mediatek,drive-strength-adv = <0>;
> 
> This property is not part of the DT binding.
> 
> > +                       drive-strength = <MTK_DRIVE_6mA>;
> 
> Please just use raw numbers here. MTK_DRIVE_6mA just translates to 6.
> The binding already specifies mA as the unit for "drive-strength".
> 
> > +               };
> > +       };
> 
> Above comments apply to all the other "pins" nodes.
> 
> Please add an empty line between different child device nodes. It
> helps
> with readability and also fits the style of other parts and other DT
> files.
> 
> > +       i2c1_pin: i2c1-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO10__FUNC_SDA1>,
> > +                                <PINMUX_GPIO11__FUNC_SCL1>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> > +                       mediatek,drive-strength-adv = <0>;
> > +                       drive-strength = <MTK_DRIVE_6mA>;
> > +               };
> > +       };
> > +       i2c2_pin: i2c2-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO12__FUNC_SDA2>,
> > +                                <PINMUX_GPIO13__FUNC_SCL2>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> > +                       mediatek,drive-strength-adv = <7>;
> > +               };
> > +       };
> > +       i2c3_pin: i2c3-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO14__FUNC_SDA3>,
> > +                                <PINMUX_GPIO15__FUNC_SCL3>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> > +                       mediatek,drive-strength-adv = <7>;
> > +               };
> > +       };
> > +       i2c4_pin: i2c4-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO16__FUNC_SDA4>,
> > +                                <PINMUX_GPIO17__FUNC_SCL4>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> > +                       mediatek,drive-strength-adv = <7>;
> > +               };
> > +       };
> > +       i2c5_pin: i2c5-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO29__FUNC_SCL5>,
> > +                                <PINMUX_GPIO30__FUNC_SDA5>;
> > +                       bias-pull-up = <1>;
> > +                       mediatek,rsel = <7>;
> > +                       mediatek,drive-strength-adv = <7>;
> > +               };
> > +       };
> > +       i2c6_pin: i2c6-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO25__FUNC_SDA6>,
> > +                                <PINMUX_GPIO26__FUNC_SCL6>;
> > +                       bias-pull-up = <1>;
> > +               };
> > +       };
> > +       i2c7_pin: i2c7-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO27__FUNC_SCL7>,
> > +                                <PINMUX_GPIO28__FUNC_SDA7>;
> > +                       bias-pull-up = <1>;
> > +               };
> > +       };
> > +       nor_pins_default: nor-pins {
> > +               pins0 {
> > +                       pinmux = <PINMUX_GPIO142__FUNC_SPINOR_IO0>,
> > +                                        <PINMUX_GPIO141__FUNC_SPIN
> > OR_CK>,
> > +                                        <PINMUX_GPIO143__FUNC_SPIN
> > OR_IO1>;
> > +                       bias-pull-down;
> > +               };
> > +               pins1 {
> > +                       pinmux = <PINMUX_GPIO140__FUNC_SPINOR_CS>,
> > +                                    <PINMUX_GPIO130__FUNC_SPINOR_I
> > O2>,
> > +                                    <PINMUX_GPIO131__FUNC_SPINOR_I
> > O3>;
> > +                       bias-pull-up;
> > +               };
> > +       };
> > +       uart0_pin: uart0-pins {
> > +               pins {
> > +                       pinmux = <PINMUX_GPIO98__FUNC_UTXD0>,
> > +                               <PINMUX_GPIO99__FUNC_URXD0>;
> > +               };
> > +       };
> > +};
> > +
> > +&u2port0 {
> > +       status = "okay";
> > +};
> > +
> > +&u2port1 {
> > +       status = "okay";
> > +};
> > +
> > +&u3phy0 {
> > +       status="okay";
> > +};
> > +
> > +&u3phy1 {
> > +       status="okay";
> > +};
> > +
> > +&u3port0 {
> > +       status = "okay";
> > +};
> > +
> > +&u3port1 {
> > +       status = "okay";
> > +};
> > +
> > +&uart0 {
> > +       pinctrl-names = "default";
> > +       pinctrl-0 = <&uart0_pin>;
> > +       status = "okay";
> > +};
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > new file mode 100644
> > index 000000000000..057a8492edec
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi
> > @@ -0,0 +1,1034 @@
> > +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> > +/*
> > + * Copyright (c) 2021 MediaTek Inc.
> > + * Author: Seiya Wang <seiya.wang at mediatek.com>
> > + */
> > +
> > +/dts-v1/;
> > +#include <dt-bindings/clock/mt8195-clk.h>
> > +#include <dt-bindings/interrupt-controller/arm-gic.h>
> > +#include <dt-bindings/interrupt-controller/irq.h>
> > +#include <dt-bindings/phy/phy.h>
> > +#include <dt-bindings/pinctrl/mt8195-pinfunc.h>
> > +#include <dt-bindings/reset/ti-syscon.h>
> > +
> > +/ {
> > +       compatible = "mediatek,mt8195";
> > +       interrupt-parent = <&gic>;
> > +       #address-cells = <2>;
> > +       #size-cells = <2>;
> > +
> > +       clk26m: oscillator0 {
> 
> Please order device nodes based on the node name ("oscillator0"),
> not the label. An exception to this would be the "soc" node, which
> most tend to keep as the last node in the list.
> 
> Also, naming them "oscillator-26m" and "oscillator-32k" would make
> more sense than "oscillatorN".
> 
> > +               compatible = "fixed-clock";
> > +               #clock-cells = <0>;
> > +               clock-frequency = <26000000>;
> > +               clock-output-names = "clk26m";
> > +       };
> > +
> > +       clk32k: oscillator1 {
> > +               compatible = "fixed-clock";
> > +               #clock-cells = <0>;
> > +               clock-frequency = <32768>;
> > +               clock-output-names = "clk32k";
> > +       };
> > +
> > +       cpus {
> > +               #address-cells = <1>;
> > +               #size-cells = <0>;
> > +
> > +               cpu0: cpu at 0 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a55";
> > +                       reg = <0x000>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <1701000000>;
> > +                       capacity-dmips-mhz = <578>;
> > +                       cpu-idle-states = <&cpuoff_l
> > &clusteroff_l>;
> > +                       next-level-cache = <&l2_0>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu1: cpu at 100 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a55";
> > +                       reg = <0x100>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <1701000000>;
> > +                       capacity-dmips-mhz = <578>;
> > +                       cpu-idle-states = <&cpuoff_l
> > &clusteroff_l>;
> > +                       next-level-cache = <&l2_0>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu2: cpu at 200 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a55";
> > +                       reg = <0x200>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <1701000000>;
> > +                       capacity-dmips-mhz = <578>;
> > +                       cpu-idle-states = <&cpuoff_l
> > &clusteroff_l>;
> > +                       next-level-cache = <&l2_0>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu3: cpu at 300 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a55";
> > +                       reg = <0x300>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <1701000000>;
> > +                       capacity-dmips-mhz = <578>;
> > +                       cpu-idle-states = <&cpuoff_l
> > &clusteroff_l>;
> > +                       next-level-cache = <&l2_0>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu4: cpu at 400 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a78";
> > +                       reg = <0x400>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <2171000000>;
> > +                       capacity-dmips-mhz = <1024>;
> > +                       cpu-idle-states = <&cpuoff_b
> > &clusteroff_b>;
> > +                       next-level-cache = <&l2_1>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu5: cpu at 500 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a78";
> > +                       reg = <0x500>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <2171000000>;
> > +                       capacity-dmips-mhz = <1024>;
> > +                       cpu-idle-states = <&cpuoff_b
> > &clusteroff_b>;
> > +                       next-level-cache = <&l2_1>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu6: cpu at 600 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a78";
> > +                       reg = <0x600>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <2171000000>;
> > +                       capacity-dmips-mhz = <1024>;
> > +                       cpu-idle-states = <&cpuoff_b
> > &clusteroff_b>;
> > +                       next-level-cache = <&l2_1>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu7: cpu at 700 {
> > +                       device_type = "cpu";
> > +                       compatible = "arm,cortex-a78";
> > +                       reg = <0x700>;
> > +                       enable-method = "psci";
> > +                       clock-frequency = <2171000000>;
> > +                       capacity-dmips-mhz = <1024>;
> > +                       cpu-idle-states = <&cpuoff_b
> > &clusteroff_b>;
> > +                       next-level-cache = <&l2_1>;
> > +                       #cooling-cells = <2>;
> > +               };
> > +
> > +               cpu-map {
> > +                       cluster0 {
> > +                               core0 {
> > +                                       cpu = <&cpu0>;
> > +                               };
> 
> Please add an empty line between child nodes. This aids in
> readability.
> 
> > +                               core1 {
> > +                                       cpu = <&cpu1>;
> > +                               };
> > +                               core2 {
> > +                                       cpu = <&cpu2>;
> > +                               };
> > +                               core3 {
> > +                                       cpu = <&cpu3>;
> > +                               };
> > +                       };
> > +                       cluster1 {
> > +                               core0 {
> > +                                       cpu = <&cpu4>;
> > +                               };
> > +                               core1 {
> > +                                       cpu = <&cpu5>;
> > +                               };
> > +                               core2 {
> > +                                       cpu = <&cpu6>;
> > +                               };
> > +                               core3 {
> > +                                       cpu = <&cpu7>;
> > +                               };
> > +                       };
> > +               };
> > +
> > +               idle-states {
> > +                       entry-method = "arm,psci";
> 
> This should be just "psci".
> 
> Please add empty lines between properties and child device nodes, and
> in between device nodes.
> 
> > +                       cpuoff_l: cpuoff_l {
> 
> Please do not use underscores in device node names. Also, for the
> idle
> states, the binding requires the nodes to be named as "cpu-*" or
> "cluster-*". So {cpu,cluster}-off-{l,b} would work.
> 
> > +                               compatible = "arm,idle-state";
> > +                               arm,psci-suspend-param =
> > <0x00010001>;
> > +                               local-timer-stop;
> > +                               entry-latency-us = <50>;
> > +                               exit-latency-us = <95>;
> > +                               min-residency-us = <580>;
> > +                       };
> > +                       cpuoff_b: cpuoff_b {
> > +                               compatible = "arm,idle-state";
> > +                               arm,psci-suspend-param =
> > <0x00010001>;
> > +                               local-timer-stop;
> > +                               entry-latency-us = <45>;
> > +                               exit-latency-us = <140>;
> > +                               min-residency-us = <740>;
> > +                       };
> > +                       clusteroff_l: clusteroff_l {
> > +                               compatible = "arm,idle-state";
> > +                               arm,psci-suspend-param =
> > <0x01010002>;
> > +                               local-timer-stop;
> > +                               entry-latency-us = <55>;
> > +                               exit-latency-us = <155>;
> > +                               min-residency-us = <840>;
> > +                       };
> > +                       clusteroff_b: clusteroff_b {
> > +                               compatible = "arm,idle-state";
> > +                               arm,psci-suspend-param =
> > <0x01010002>;
> > +                               local-timer-stop;
> > +                               entry-latency-us = <50>;
> > +                               exit-latency-us = <200>;
> > +                               min-residency-us = <1000>;
> > +                       };
> > +               };
> > +
> > +               l2_0: l2-cache0 {
> > +                       compatible = "cache";
> > +                       next-level-cache = <&l3_0>;
> > +               };
> > +
> > +               l2_1: l2-cache1 {
> > +                       compatible = "cache";
> > +                       next-level-cache = <&l3_0>;
> > +               };
> > +
> > +               l3_0: l3-cache {
> > +                       compatible = "cache";
> > +               };
> > +       };
> > +
> > +       dsu-pmu {
> > +               compatible = "arm,dsu-pmu";
> > +               interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH 0>;
> > +               cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>,
> > +                      <&cpu4>, <&cpu5>, <&cpu6>, <&cpu7>;
> > +       };
> > +
> > +       pmu-a55 {
> > +               compatible = "arm,cortex-a55-pmu";
> > +               interrupt-parent = <&gic>;
> > +               interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH
> > &ppi_cluster0>;
> > +       };
> > +
> > +       pmu-a78 {
> > +               compatible = "arm,cortex-a78-pmu";
> > +               interrupt-parent = <&gic>;
> > +               interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH
> > &ppi_cluster1>;
> > +       };
> > +
> > +       psci {
> > +               compatible = "arm,psci-1.0";
> > +               method = "smc";
> > +       };
> > +
> > +       timer: timer {
> > +               compatible = "arm,armv8-timer";
> > +               interrupt-parent = <&gic>;
> > +               interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH 0>,
> > +                            <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH 0>,
> > +                            <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH 0>,
> > +                            <GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH 0>;
> > +               clock-frequency = <13000000>;
> 
> IIRC Marc already mentioned before that this should not be specified
> in
> the device tree. The firmware should have filled in the CNTFRQ
> register.
> 
> > +       };
> > +
> > +       soc {
> > +               #address-cells = <2>;
> > +               #size-cells = <2>;
> > +               compatible = "simple-bus";
> > +               ranges;
> > +
> > +               gic: interrupt-controller at c000000 {
> > +                       compatible = "arm,gic-v3";
> > +                       #interrupt-cells = <4>;
> > +                       #redistributor-regions = <1>;
> > +                       interrupt-parent = <&gic>;
> > +                       interrupt-controller;
> > +                       reg = <0 0x0c000000 0 0x40000>,
> > +                             <0 0x0c040000 0 0x200000>;
> > +                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH
> > 0>;
> > +
> > +                       ppi-partitions {
> > +                               ppi_cluster0: interrupt-partition-0 
> > {
> > +                                       affinity = <&cpu0 &cpu1
> > &cpu2 &cpu3>;
> > +                               };
> 
> Please add an extra line for readability.
> 
> > +                               ppi_cluster1: interrupt-partition-1 
> > {
> > +                                       affinity = <&cpu4 &cpu5
> > &cpu6 &cpu7>;
> > +                               };
> > +                       };
> > +               };
> > +
> > +               topckgen: syscon at 10000000 {
> > +                       compatible = "mediatek,mt8195-topckgen",
> > "syscon";
> > +                       reg = <0 0x10000000 0 0x1000>;
> > +                       #clock-cells = <1>;
> > +               };
> > +
> > +               infracfg_ao: syscon at 10001000 {
> > +                       compatible = "mediatek,mt8195-infracfg_ao", 
> > "syscon", "simple-mfd";
> > +                       reg = <0 0x10001000 0 0x1000>;
> > +                       #clock-cells = <1>;
> 
> Please add an extra line for readability.
> 
> > +                       infracfg_rst: reset-controller {
> > +                               compatible = "ti,syscon-reset";
> > +                               #reset-cells = <1>;
> > +                               ti,reset-bits = <
> > +                                       0x140 18 0x144 18 0 0
> > (ASSERT_SET | DEASSERT_SET | STATUS_NONE)
> > +                                       0x120 0 0x124 0 0
> > 0     (ASSERT_SET | DEASSERT_SET | STATUS_NONE)
> > +                                       0x730 10 0x734 10 0
> > 0     (ASSERT_SET | DEASSERT_SET | STATUS_NONE)
> > +                                       0x150 5 0x154 5 0
> > 0     (ASSERT_SET | DEASSERT_SET | STATUS_NONE)
> 
> This should be 7 cells per entry:
> 
>     ti,reset-bits =
>         <0x140 18 0x144 18 0 0 (ASSERT_SET | DEASSERT_SET |
> STATUS_NONE>,
>         <0x120 0 0x124 0 0 0 (ASSERT_SET | DEASSERT_SET |
> STATUS_NONE)>,
>         <...>,
>         <...>;
> 
> Also, please remove the extra spaces in each line. They aren't
> helping
> with formatting.
> 
> > +                               >;
> > +                       };
> > +               };
> > +
> > +               pio: pinctrl at 10005000 {
> > +                       compatible = "mediatek,mt8195-pinctrl";
> > +                       reg = <0 0x10005000 0 0x1000>,
> > +                             <0 0x11d10000 0 0x1000>,
> > +                             <0 0x11d30000 0 0x1000>,
> > +                             <0 0x11d40000 0 0x1000>,
> > +                             <0 0x11e20000 0 0x1000>,
> > +                             <0 0x11eb0000 0 0x1000>,
> > +                             <0 0x11f40000 0 0x1000>,
> > +                             <0 0x1000b000 0 0x1000>;
> > +                       reg-names = "iocfg0", "iocfg_bm",
> > "iocfg_bl",
> > +                                   "iocfg_br", "iocfg_lm",
> > "iocfg_rb",
> > +                                   "iocfg_tl", "eint";
> > +                       gpio-controller;
> > +                       #gpio-cells = <2>;
> > +                       gpio-ranges = <&pio 0 0 144>;
> > +                       interrupt-controller;
> > +                       interrupts = <GIC_SPI 235
> > IRQ_TYPE_LEVEL_HIGH 0>;
> 
> This looks correct now (a comment I raised in v4). Thanks.
> 
> > +                       #interrupt-cells = <2>;
> > +               };
> 
> [...]
> 
> > +               xhci0: usb at 11200000 {
> > +                       compatible = "mediatek,mt8195-xhci",
> > +                                    "mediatek,mtk-xhci";
> > +                       reg = <0 0x11200000 0 0x1000>,
> > +                             <0 0x11203e00 0 0x0100>;
> > +                       reg-names = "mac", "ippc";
> > +                       interrupts = <GIC_SPI 129
> > IRQ_TYPE_LEVEL_HIGH 0>;
> > +                       phys = <&u2port0 PHY_TYPE_USB2>,
> > +                              <&u3port0 PHY_TYPE_USB3>;
> > +                       assigned-clocks = <&topckgen
> > CLK_TOP_USB_TOP>,
> > +                                         <&topckgen
> > CLK_TOP_SSUSB_XHCI>;
> > +                       assigned-clock-parents = <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>,
> > +                                                <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>;
> > +                       clocks = <&infracfg_ao CLK_INFRA_AO_SSUSB>,
> > +                                <&infracfg_ao
> > CLK_INFRA_AO_SSUSB_XHCI>,
> > +                                <&topckgen CLK_TOP_SSUSB_REF>,
> > +                                <&apmixedsys CLK_APMIXED_USB1PLL>;
> > +                       clock-names = "sys_ck", "xhci_ck",
> > "ref_ck", "mcu_ck";
> 
> The binding for this needs to be fixed. It expects clocks in the
> order
> specified in the binding, and this doesn't match. 

ok

> Also, "dma_ck" is missing
> and will likely cause warnings to be generated.

only sys_ck is required, others are optional as described in binding

> 
> This goes for all the xhci device nodes.
> 
> > +                       status = "disabled";
> > +               };
> > +
> > +               mmc0: mmc at 11230000 {
> > +                       compatible = "mediatek,mt8195-mmc",
> > +                                    "mediatek,mt8183-mmc";
> > +                       reg = <0 0x11230000 0 0x10000>,
> > +                             <0 0x11f50000 0 0x1000>;
> 
> The binding only allows one entry. Please fix the binding first.
> This was added with MT8183, and the fix should list the relavent
> commit.
> 
> > +                       interrupts = <GIC_SPI 131
> > IRQ_TYPE_LEVEL_HIGH 0>;
> > +                       clocks = <&topckgen CLK_TOP_MSDC50_0>,
> > +                                <&infracfg_ao CLK_INFRA_AO_MSDC0>,
> > +                                <&infracfg_ao
> > CLK_INFRA_AO_MSDC0_SRC>;
> > +                       clock-names = "source", "hclk",
> > "source_cg";
> > +                       status = "disabled";
> > +               };
> > +
> 
> [...]
> 
> > +
> > +               xhci1: usb at 11290000 {
> > +                       compatible = "mediatek,mt8195-xhci",
> > +                                    "mediatek,mtk-xhci";
> > +                       reg = <0 0x11290000 0 0x1000>,
> > +                             <0 0x11293e00 0 0x0100>;
> > +                       reg-names = "mac", "ippc";
> > +                       interrupts = <GIC_SPI 530
> > IRQ_TYPE_LEVEL_HIGH 0>;
> > +                       phys = <&u2port1 PHY_TYPE_USB2>;
> 
> Shouldn't there be a USB3 phy?

currently only enable usb2, usb3 phy is used by pcie.

> 
> > +                       assigned-clocks = <&topckgen
> > CLK_TOP_USB_TOP_1P>,
> > +                                         <&topckgen
> > CLK_TOP_SSUSB_XHCI_1P>;
> > +                       assigned-clock-parents = <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>,
> > +                                                <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>;
> > +                       clocks = <&pericfg_ao
> > CLK_PERI_AO_SSUSB_1P_BUS>,
> > +                                <&topckgen CLK_TOP_SSUSB_P1_REF>,
> > +                                <&pericfg_ao
> > CLK_PERI_AO_SSUSB_1P_XHCI>,
> > +                                <&apmixedsys CLK_APMIXED_USB1PLL>;
> > +                       clock-names = "sys_ck", "ref_ck",
> > "xhci_ck", "mcu_ck";
> > +                       status = "disabled";
> > +               };
> > +
> > +               xhci2: usb at 112a0000 {
> > +                       compatible = "mediatek,mt8195-xhci",
> > +                                    "mediatek,mtk-xhci";
> > +                       reg = <0 0x112a0000 0 0x1000>,
> > +                             <0 0x112a3e00 0 0x0100>;
> > +                       reg-names = "mac", "ippc";
> > +                       interrupts = <GIC_SPI 533
> > IRQ_TYPE_LEVEL_HIGH 0>;
> > +                       phys = <&u2port2 PHY_TYPE_USB2>;
> > +                       assigned-clocks = <&topckgen
> > CLK_TOP_USB_TOP_2P>,
> > +                                         <&topckgen
> > CLK_TOP_SSUSB_XHCI_2P>;
> > +                       assigned-clock-parents = <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>,
> > +                                                <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>;
> > +                       clocks = <&pericfg_ao
> > CLK_PERI_AO_SSUSB_2P_BUS>,
> > +                                <&topckgen CLK_TOP_SSUSB_P2_REF>,
> > +                                <&pericfg_ao
> > CLK_PERI_AO_SSUSB_2P_XHCI>;
> > +                       clock-names = "sys_ck", "ref_ck",
> > "xhci_ck";
> > +                       status = "disabled";
> > +               };
> > +
> > +               xhci3: usb at 112b0000 {
> > +                       compatible = "mediatek,mt8195-xhci",
> > +                                    "mediatek,mtk-xhci";
> > +                       reg = <0 0x112b0000 0 0x1000>,
> > +                             <0 0x112b3e00 0 0x0100>;
> > +                       reg-names = "mac", "ippc";
> > +                       interrupts = <GIC_SPI 536
> > IRQ_TYPE_LEVEL_HIGH 0>;
> > +                       phys = <&u2port3 PHY_TYPE_USB2>;
> > +                       assigned-clocks = <&topckgen
> > CLK_TOP_USB_TOP_3P>,
> > +                                         <&topckgen
> > CLK_TOP_SSUSB_XHCI_3P>;
> > +                       assigned-clock-parents = <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>,
> > +                                                <&topckgen
> > CLK_TOP_UNIVPLL_D5_D4>;
> > +                       clocks = <&pericfg_ao
> > CLK_PERI_AO_SSUSB_3P_BUS>,
> > +                                <&pericfg_ao
> > CLK_PERI_AO_SSUSB_3P_XHCI>,
> > +                                <&topckgen CLK_TOP_SSUSB_P3_REF>;
> > +                       clock-names = "sys_ck", "xhci_ck",
> > "ref_ck";
> > +                       usb2-lpm-disable;
> 
> Could you explain why this is needed only for this controller?

This controller is fixed with a BT, there is something issue when
enable usb2 lpm, so just disabled tmp.

> 
> > +                       status = "disabled";
> > +               };
> > +
> > +               u3phy2: t-phy at 11c40000 {
> 
> Just "phy" for the node name. (Or maybe "serdes".) t-phy is not
> generic.

following t-phy’s dt-binding. 
here using t-phy is to avoid dt-check warning, because it has some sub-
phys.

> > +                       compatible = "mediatek,mt8195-tphy",
> > "mediatek,generic-tphy-v3";
> > +                       #address-cells = <1>;
> > +                       #size-cells = <1>;
> > +                       ranges = <0 0 0x11c40000 0x700>;
> > +                       status = "disabled";
> > +
> > +                       u2port2: usb-phy at 0 {
> > +                               reg = <0x0 0x700>;
> > +                               clocks = <&topckgen
> > CLK_TOP_SSUSB_PHY_P2_REF>;
> > +                               clock-names = "ref";
> > +                               #phy-cells = <1>;
> > +                       };
> > +               };
> > +
> 
> [...]
> 
> > +               ufsphy: ufs-phy at 11fa0000 {
> 
> I would have preferred "phy" for the device node, but this seems
> already
> defined in the binding.
> 
> This IP block is not listed in the datasheet I have, so I am unable
> to
> verify the properties listed here.
> 
> > +                       compatible = "mediatek,mt8195-ufsphy",
> > "mediatek,mt8183-ufsphy";
> > +                       reg = <0 0x11fa0000 0 0xc000>;
> > +                       clocks = <&clk26m>, <&clk26m>;
> > +                       clock-names = "unipro", "mp";
> > +                       #phy-cells = <0>;
> > +                       status = "disabled";
> > +               };
> > +
> 
> Most of the issues I raised in this version were issues with things
> not
> matching the bindings. Please apply your patches on -next and run
> `make dtbs_check`.

ok. I'll apply comments at next version. Thank you.

> 
> 
> ChenYu




More information about the Linux-mediatek mailing list