[U-Boot] soc vs. clocks in device-tree

Hello,
in my device-tree (for stm32f429 - as found in the linux kernel) exist two branches /soc and /clocks. While /soc contains all embedded functionality of the SOC, /clocks contain the external crystal, like in the following snippet.
/ { clocks { clk_hse: clk-hse { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <0>; }; };
soc { rcc: rcc@40023810 { #clock-cells = <2>; compatible = "st,stm32f42xx-rcc", "st,stm32-rcc"; reg = <0x40023800 0x400>; clocks = <&clk_hse>; }; ... }; };
While /soc is detected in u-boot using the simple-bus class, /clocks is ignored completely, Because of that, the crystal isn't detected, too. If I move the crystal into the /soc branch, it is found and can be referenced.
Poking through the code I haven't yet found the reason, why soc is initialized as simple-bus and clocks is not. Could someone please enlighten me?
best regards Benjamin Tietz

Hi Benjamin,
On 20 June 2016 at 12:42, Benjamin Tietz uboot@dresden.micronet24.de wrote:
Hello,
in my device-tree (for stm32f429 - as found in the linux kernel) exist two branches /soc and /clocks. While /soc contains all embedded functionality of the SOC, /clocks contain the external crystal, like in the following snippet.
/ { clocks { clk_hse: clk-hse { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <0>; }; };
soc { rcc: rcc@40023810 { #clock-cells = <2>; compatible = "st,stm32f42xx-rcc", "st,stm32-rcc"; reg = <0x40023800 0x400>; clocks = <&clk_hse>; }; ... };
};
While /soc is detected in u-boot using the simple-bus class, /clocks is ignored completely, Because of that, the crystal isn't detected, too. If I move the crystal into the /soc branch, it is found and can be referenced.
Can you add this:
compatible = "simple-bus";
Poking through the code I haven't yet found the reason, why soc is initialized as simple-bus and clocks is not. Could someone please enlighten me?
No, I don't understand that either. From what I know of it, there is no special case logic for "soc".
best regards Benjamin Tietz
Regards, Simon

Hi Simon,
On Tue, Jun 21, 2016 at 08:50:11PM -0600, Simon Glass wrote:
Hi Benjamin,
On 20 June 2016 at 12:42, Benjamin Tietz uboot@dresden.micronet24.de wrote:
Hello,
in my device-tree (for stm32f429 - as found in the linux kernel) exist two branches /soc and /clocks. While /soc contains all embedded functionality of the SOC, /clocks contain the external crystal, like in the following snippet.
/ { clocks { clk_hse: clk-hse { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <0>; }; };
soc { rcc: rcc@40023810 { #clock-cells = <2>; compatible = "st,stm32f42xx-rcc", "st,stm32-rcc"; reg = <0x40023800 0x400>; clocks = <&clk_hse>; }; ... };
};
While /soc is detected in u-boot using the simple-bus class, /clocks is ignored completely, Because of that, the crystal isn't detected, too. If I move the crystal into the /soc branch, it is found and can be referenced.
Can you add this:
compatible = "simple-bus";
Thank you, that is the solution.
Poking through the code I haven't yet found the reason, why soc is initialized as simple-bus and clocks is not. Could someone please enlighten me?
No, I don't understand that either. From what I know of it, there is no special case logic for "soc".
There really is no special logic. For the soc-part that line is hidden within the processor-specific dts-file (armv7-m.dtsi in this case.). The "clock" doesn't appear there, so no compatible line was parsed and the node ignored.
best regards Benjamin Tietz
Regards, Simon
Regards Benjamin
participants (2)
-
Benjamin Tietz
-
Simon Glass