On Wed, Jun 03, 2020 at 05:22:37PM +0100, Andre Przywara wrote: > Commit d9258898ad49 ("arm64: dts: arm: vexpress: Move fixed devices > out of bus node") moved the "mcc" DT node into the root node, because > it does not have any children using "reg" properties, so does violate > some dtc checks about "simple-bus" nodes. > However this broke the vexpress config-bus code, which walks up the > device tree to find the first node with an "arm,vexpress,site" property. > This gave the wrong result (matching the root node instead of the > motherboard node), so broke the clocks and some other devices for > VExpress boards. > > Move the whole node back into its original position. This re-introduces > the dtc warning, but is conceptually the right thing to do. The dtc > warning seems to be overzealous here, there are discussions on fixing or > relaxing this check instead. > > Fixes: d9258898ad49 ("arm64: dts: arm: vexpress: Move fixed devices out of bus node") > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> Tested-by: Guenter Roeck <linux@xxxxxxxxxxxx> > --- > P.S. The broken commit has not reached mainline yet, but is already in > arm-soc/arm/dt. > > arch/arm/boot/dts/vexpress-v2m-rs1.dtsi | 146 ++++++++++++------------ > 1 file changed, 73 insertions(+), 73 deletions(-) > > diff --git a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi > index e6308fb76183..a88ee5294d35 100644 > --- a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi > +++ b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi > @@ -100,79 +100,6 @@ > }; > }; > > - mcc { > - compatible = "arm,vexpress,config-bus"; > - arm,vexpress,config-bridge = <&v2m_sysreg>; > - > - oscclk0 { > - /* MCC static memory clock */ > - compatible = "arm,vexpress-osc"; > - arm,vexpress-sysreg,func = <1 0>; > - freq-range = <25000000 60000000>; > - #clock-cells = <0>; > - clock-output-names = "v2m:oscclk0"; > - }; > - > - v2m_oscclk1: oscclk1 { > - /* CLCD clock */ > - compatible = "arm,vexpress-osc"; > - arm,vexpress-sysreg,func = <1 1>; > - freq-range = <23750000 65000000>; > - #clock-cells = <0>; > - clock-output-names = "v2m:oscclk1"; > - }; > - > - v2m_oscclk2: oscclk2 { > - /* IO FPGA peripheral clock */ > - compatible = "arm,vexpress-osc"; > - arm,vexpress-sysreg,func = <1 2>; > - freq-range = <24000000 24000000>; > - #clock-cells = <0>; > - clock-output-names = "v2m:oscclk2"; > - }; > - > - volt-vio { > - /* Logic level voltage */ > - compatible = "arm,vexpress-volt"; > - arm,vexpress-sysreg,func = <2 0>; > - regulator-name = "VIO"; > - regulator-always-on; > - label = "VIO"; > - }; > - > - temp-mcc { > - /* MCC internal operating temperature */ > - compatible = "arm,vexpress-temp"; > - arm,vexpress-sysreg,func = <4 0>; > - label = "MCC"; > - }; > - > - reset { > - compatible = "arm,vexpress-reset"; > - arm,vexpress-sysreg,func = <5 0>; > - }; > - > - muxfpga { > - compatible = "arm,vexpress-muxfpga"; > - arm,vexpress-sysreg,func = <7 0>; > - }; > - > - shutdown { > - compatible = "arm,vexpress-shutdown"; > - arm,vexpress-sysreg,func = <8 0>; > - }; > - > - reboot { > - compatible = "arm,vexpress-reboot"; > - arm,vexpress-sysreg,func = <9 0>; > - }; > - > - dvimode { > - compatible = "arm,vexpress-dvimode"; > - arm,vexpress-sysreg,func = <11 0>; > - }; > - }; > - > bus@8000000 { > motherboard-bus { > model = "V2M-P1"; > @@ -435,6 +362,79 @@ > }; > }; > }; > + > + mcc { > + compatible = "arm,vexpress,config-bus"; > + arm,vexpress,config-bridge = <&v2m_sysreg>; > + > + oscclk0 { > + /* MCC static memory clock */ > + compatible = "arm,vexpress-osc"; > + arm,vexpress-sysreg,func = <1 0>; > + freq-range = <25000000 60000000>; > + #clock-cells = <0>; > + clock-output-names = "v2m:oscclk0"; > + }; > + > + v2m_oscclk1: oscclk1 { > + /* CLCD clock */ > + compatible = "arm,vexpress-osc"; > + arm,vexpress-sysreg,func = <1 1>; > + freq-range = <23750000 65000000>; > + #clock-cells = <0>; > + clock-output-names = "v2m:oscclk1"; > + }; > + > + v2m_oscclk2: oscclk2 { > + /* IO FPGA peripheral clock */ > + compatible = "arm,vexpress-osc"; > + arm,vexpress-sysreg,func = <1 2>; > + freq-range = <24000000 24000000>; > + #clock-cells = <0>; > + clock-output-names = "v2m:oscclk2"; > + }; > + > + volt-vio { > + /* Logic level voltage */ > + compatible = "arm,vexpress-volt"; > + arm,vexpress-sysreg,func = <2 0>; > + regulator-name = "VIO"; > + regulator-always-on; > + label = "VIO"; > + }; > + > + temp-mcc { > + /* MCC internal operating temperature */ > + compatible = "arm,vexpress-temp"; > + arm,vexpress-sysreg,func = <4 0>; > + label = "MCC"; > + }; > + > + reset { > + compatible = "arm,vexpress-reset"; > + arm,vexpress-sysreg,func = <5 0>; > + }; > + > + muxfpga { > + compatible = "arm,vexpress-muxfpga"; > + arm,vexpress-sysreg,func = <7 0>; > + }; > + > + shutdown { > + compatible = "arm,vexpress-shutdown"; > + arm,vexpress-sysreg,func = <8 0>; > + }; > + > + reboot { > + compatible = "arm,vexpress-reboot"; > + arm,vexpress-sysreg,func = <9 0>; > + }; > + > + dvimode { > + compatible = "arm,vexpress-dvimode"; > + arm,vexpress-sysreg,func = <11 0>; > + }; > + }; > }; > }; > }; > -- > 2.17.1 >