arm: dts: vexpress: Move mcc node back into motherboard node
authorAndre Przywara <andre.przywara@arm.com>
Wed, 3 Jun 2020 16:22:37 +0000 (17:22 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Thu, 4 Jun 2020 12:52:21 +0000 (13:52 +0100)
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.

Link: https://lore.kernel.org/r/20200603162237.16319-1-andre.przywara@arm.com
Fixes: d9258898ad49 ("arm64: dts: vexpress: Move fixed devices out of bus node")
Reported-and-tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
arch/arm/boot/dts/vexpress-v2m-rs1.dtsi

index e6308fb761834c5b66854a3d24c65bc4128a4f65..a88ee5294d3550959c9722f726cec4d5d60cc655 100644 (file)
                };
        };
 
-       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";
                                                };
                                        };
                                };
+
+                               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>;
+                                       };
+                               };
                        };
                };
        };