Skip to contentSkip to conversation

Add R8A7790 CAN DT support

PATCH New Sergei Shtylyov 2 participants 5 messages Dec 29, 2014 – Jan 5, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover Add R8A7790 CAN DT support

Hello.

Here's the set of 2 patches against Simon Horman's 'renesas.git' repo,
'renesas-devel-20141229-v3.19-rc2' tag. Here we add the CAN device tree support for the R8A7790 SoC (unfortunately, it's impossible to test CAN on the Lager board). It depends on the clk driver RCAN clock patch posted recently in order to work.

[1/2] ARM: shmobile: r8a7790: add CAN clocks
[2/2] ARM: shmobile: r8a7790: add CAN DT support

WBR, Sergei

#1 lore raw

PATCH 1/2 ARM: shmobile: r8a7790: add CAN clocks

The R-Car CAN controllers can derive the CAN bus clock not only from their peripheral clock input (clkp1) but also from the other internal clock (clkp2) and external clock fed on CAN_CLK pin. Describe those clocks in the device tree, along with the USB_EXTAL clock from which clkp2 is derived.

---
 arch/arm/boot/dts/r8a7790.dtsi            |   22 ++++++++++++++++++++--
 include/dt-bindings/clock/r8a7790-clock.h |    1 +
 2 files changed, 21 insertions(+), 2 deletions(-)
arch/arm/boot/dts/r8a7790.dtsi +20 -2
Index: renesas/arch/arm/boot/dts/r8a7790.dtsi
===================================================================
@@ -838,16 +838,34 @@
 			clock-output-names = "audio_clk_c";
 		};
 
+		/* External USB clock - can be overridden by the board */
+		usb_extal_clk: usb_extal_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <48000000>;
+			clock-output-names = "usb_extal";
+		};
+
+		/* External CAN clock */
+		can_clk: can_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			/* This value must be overriden by the board. */
+			clock-frequency = <0>;
+			clock-output-names = "can_clk";
+			status = "disabled";
+		};
+
 		/* Special CPG clocks */
 		cpg_clocks: cpg_clocks at e6150000 {
 			compatible = "renesas,r8a7790-cpg-clocks",
 				     "renesas,rcar-gen2-cpg-clocks";
 			reg = <0 0xe6150000 0 0x1000>;
-			clocks = <&extal_clk>;
+			clocks = <&extal_clk &usb_extal_clk>;
 			#clock-cells = <1>;
 			clock-output-names = "main", "pll0", "pll1", "pll3",
 					     "lb", "qspi", "sdh", "sd0", "sd1",
-					     "z";
+					     "z", "rcan";
 		};
 
 		/* Variable factor clocks */
include/dt-bindings/clock/r8a7790-clock.h +1 -0
Index: renesas/include/dt-bindings/clock/r8a7790-clock.h
===================================================================
@@ -21,6 +21,7 @@
 #define R8A7790_CLK_SD0			7
 #define R8A7790_CLK_SD1			8
 #define R8A7790_CLK_Z			9
+#define R8A7790_CLK_RCAN		10
 
 /* MSTP0 */
 #define R8A7790_CLK_MSIOF0		0
#3 lore raw

PATCH 2/2 ARM: shmobile: r8a7790: add CAN DT support

In reply to Sergei Shtylyov

Define the generic R8A7790 parts of the CAN0/1 device nodes.

---
 arch/arm/boot/dts/r8a7790.dtsi |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
arch/arm/boot/dts/r8a7790.dtsi +20 -0
Index: renesas/arch/arm/boot/dts/r8a7790.dtsi
===================================================================
@@ -792,6 +792,26 @@
 		};
 	};
 
+	can0: can at e6e80000 {
+		compatible = "renesas,can-r8a7790";
+		reg = <0 0xe6e80000 0 0x1000>;
+		interrupts = <0 186 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&mstp9_clks R8A7790_CLK_RCAN0>,
+		       	 <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;
+		clock-names = "clkp1", "clkp2", "can_clk";
+		status = "disabled";
+	};
+
+	can1: can at e6e88000 {
+		compatible = "renesas,can-r8a7790";
+		reg = <0 0xe6e88000 0 0x1000>;
+		interrupts = <0 187 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&mstp9_clks R8A7790_CLK_RCAN1>,
+		       	 <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;
+		clock-names = "clkp1", "clkp2", "can_clk";
+		status = "disabled";
+	};
+
 	clocks {
 		#address-cells = <2>;
 		#size-cells = <2>;
#2 lore raw

PATCH 1/2 ARM: shmobile: r8a7790: add CAN clocks

In reply to Sergei Shtylyov
Quoted 6 lines · Sergei Shtylyov

The R-Car CAN controllers can derive the CAN bus clock not only from their peripheral clock input (clkp1) but also from the other internal clock (clkp2) and external clock fed on CAN_CLK pin. Describe those clocks in the device tree, along with the USB_EXTAL clock from which clkp2 is derived.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

#4 lore raw

PATCH 2/2 ARM: shmobile: r8a7790: add CAN DT support

In reply to Sergei Shtylyov
Quoted 3 lines · Sergei Shtylyov

Define the generic R8A7790 parts of the CAN0/1 device nodes.

Apart from the minor nit below

arch/arm/boot/dts/r8a7790.dtsi line 800

Quoted 12 lines
arch/arm/boot/dts/r8a7790.dtsi +6 -0
@@ -792,6 +792,26 @@
                };
        };
 
+       can0: can at e6e80000 {
+               compatible = "renesas,can-r8a7790";
+               reg = <0 0xe6e80000 0 0x1000>;
+               interrupts = <0 186 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&mstp9_clks R8A7790_CLK_RCAN0>,
+                        <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;

.git/rebase-apply/patch:18: space before tab in indent.

      <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;

arch/arm/boot/dts/r8a7790.dtsi line 810

Quoted 10 lines
arch/arm/boot/dts/r8a7790.dtsi +10 -0
+               clock-names = "clkp1", "clkp2", "can_clk";
+               status = "disabled";
+       };
+
+       can1: can at e6e88000 {
+               compatible = "renesas,can-r8a7790";
+               reg = <0 0xe6e88000 0 0x1000>;
+               interrupts = <0 187 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&mstp9_clks R8A7790_CLK_RCAN1>,
+                        <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;

.git/rebase-apply/patch:28: space before tab in indent.

      <&cpg_clocks R8A7790_CLK_RCAN>, <&can_clk>;

arch/arm/boot/dts/r8a7790.dtsi line 803

Quoted 3 lines
arch/arm/boot/dts/r8a7790.dtsi +3 -0
+               clock-names = "clkp1", "clkp2", "can_clk";
+               status = "disabled";
+       };

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds