Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0db6542d authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'renesas-r7s72100-ccf-for-v3.16' of...

Merge tag 'renesas-r7s72100-ccf-for-v3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/boards

Merge "Renesas ARM Based r7s72100 SoC CCF Updates for v3.16" from Simon Horman:

r7s72100 (RZ/A1H) SoC and its Genmai board
* Add and use CCF support
* Initislise SCIF, I2C and SPI via DT

* tag 'renesas-r7s72100-ccf-for-v3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas

:
  ARM: shmobile: r7s72100: use workaround for non DT-clocks
  ARM: shmobile: Add forward declaration of struct clk to silence warning
  ARM: shmobile: r7s72100: remove SPI DT clocks from legacy clock support
  ARM: shmobile: r7s72100: add spi clocks to dtsi
  ARM: shmobile: r7s72100: remove I2C DT clocks from legacy clock support
  ARM: shmobile: r7s72100: add i2c clocks to dtsi
  ARM: shmobile: r7s72100: genmai: platform scif devices only for legacy support
  ARM: shmobile: r7s72100: genmai: add uart alias and activate scif2 as console
  ARM: shmobile: r7s72100: add scif nodes to dtsi
  ARM: shmobile: r7s72100: genmai: populate nodes for external clocks
  ARM: shmobile: r7s72100: add essential clock nodes to dtsi
  ARM: shmobile: r7s72100: document MSTP clock support

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents bcafdb4f 9fbb1ae0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ index in the group, from 0 to 31.
Required Properties:

  - compatible: Must be one of the following
    - "renesas,r7s72100-mstp-clocks" for R7S72100 (RZ) MSTP gate clocks
    - "renesas,r8a7790-mstp-clocks" for R8A7790 (R-Car H2) MSTP gate clocks
    - "renesas,r8a7791-mstp-clocks" for R8A7791 (R-Car M2) MSTP gate clocks
    - "renesas,cpg-mstp-clock" for generic MSTP gate clocks
+18 −1
Original line number Diff line number Diff line
/*
 * Device Tree Source for the Genmai board
 *
 * Copyright (C) 2013 Renesas Solutions Corp.
 * Copyright (C) 2013-14 Renesas Solutions Corp.
 * Copyright (C) 2014 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
@@ -15,6 +16,10 @@
	model = "Genmai";
	compatible = "renesas,genmai-reference", "renesas,r7s72100";

	aliases {
		serial2 = &scif2;
	};

	chosen {
		bootargs = "console=ttySC2,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp";
	};
@@ -30,6 +35,14 @@
	};
};

&extal_clk {
	clock-frequency = <13330000>;
};

&usb_x1_clk {
	clock-frequency = <48000000>;
};

&i2c2 {
	status = "okay";
	clock-frequency = <400000>;
@@ -40,3 +53,7 @@
		pagesize = <64>;
	};
};

&scif2 {
	status = "okay";
};
+214 −1
Original line number Diff line number Diff line
/*
 * Device Tree Source for the r7s72100 SoC
 *
 * Copyright (C) 2013 Renesas Solutions Corp.
 * Copyright (C) 2013-14 Renesas Solutions Corp.
 * Copyright (C) 2014 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

#include <dt-bindings/clock/r7s72100-clock.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
@@ -28,6 +30,112 @@
		spi4 = &spi4;
	};

	clocks {
		ranges;
		#address-cells = <1>;
		#size-cells = <1>;

		/* External clocks */
		extal_clk: extal_clk {
			#clock-cells = <0>;
			compatible = "fixed-clock";
			/* If clk present, value must be set by board */
			clock-frequency = <0>;
			clock-output-names = "extal";
		};

		usb_x1_clk: usb_x1_clk {
			#clock-cells = <0>;
			compatible = "fixed-clock";
			/* If clk present, value must be set by board */
			clock-frequency = <0>;
			clock-output-names = "usb_x1";
		};

		/* Special CPG clocks */
		cpg_clocks: cpg_clocks@fcfe0000 {
			#clock-cells = <1>;
			compatible = "renesas,r7s72100-cpg-clocks",
				     "renesas,rz-cpg-clocks";
			reg = <0xfcfe0000 0x18>;
			clocks = <&extal_clk>, <&usb_x1_clk>;
			clock-output-names = "pll", "i", "g";
		};

		/* Fixed factor clocks */
		b_clk: b_clk {
			#clock-cells = <0>;
			compatible = "fixed-factor-clock";
			clocks = <&cpg_clocks R7S72100_CLK_PLL>;
			clock-mult = <1>;
			clock-div = <3>;
			clock-output-names = "b";
		};
		p1_clk: p1_clk {
			#clock-cells = <0>;
			compatible = "fixed-factor-clock";
			clocks = <&cpg_clocks R7S72100_CLK_PLL>;
			clock-mult = <1>;
			clock-div = <6>;
			clock-output-names = "p1";
		};
		p0_clk: p0_clk {
			#clock-cells = <0>;
			compatible = "fixed-factor-clock";
			clocks = <&cpg_clocks R7S72100_CLK_PLL>;
			clock-mult = <1>;
			clock-div = <12>;
			clock-output-names = "p0";
		};

		/* MSTP clocks */
		mstp3_clks: mstp3_clks@fcfe0420 {
			#clock-cells = <1>;
			compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
			reg = <0xfcfe0420 4>;
			clocks = <&p0_clk>;
			clock-indices = <R7S72100_CLK_MTU2>;
			clock-output-names = "mtu2";
		};

		mstp4_clks: mstp4_clks@fcfe0424 {
			#clock-cells = <1>;
			compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
			reg = <0xfcfe0424 4>;
			clocks = <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>,
				 <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>;
			clock-indices = <
				R7S72100_CLK_SCIF0 R7S72100_CLK_SCIF1 R7S72100_CLK_SCIF2 R7S72100_CLK_SCIF3
				R7S72100_CLK_SCIF4 R7S72100_CLK_SCIF5 R7S72100_CLK_SCIF6 R7S72100_CLK_SCIF7
			>;
			clock-output-names = "scif0", "scif1", "scif2", "scif3", "scif4", "scif5", "scif6", "scif7";
		};

		mstp9_clks: mstp9_clks@fcfe0438 {
			#clock-cells = <1>;
			compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
			reg = <0xfcfe0438 4>;
			clocks = <&p0_clk>, <&p0_clk>, <&p0_clk>, <&p0_clk>;
			clock-indices = <
				R7S72100_CLK_I2C0 R7S72100_CLK_I2C1 R7S72100_CLK_I2C2 R7S72100_CLK_I2C3
			>;
			clock-output-names = "i2c0", "i2c1", "i2c2", "i2c3";
		};

		mstp10_clks: mstp10_clks@fcfe043c {
			#clock-cells = <1>;
			compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
			reg = <0xfcfe043c 4>;
			clocks = <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>,
				 <&p1_clk>;
			clock-indices = <
				R7S72100_CLK_SPI0 R7S72100_CLK_SPI1 R7S72100_CLK_SPI2 R7S72100_CLK_SPI3
				R7S72100_CLK_SPI4
			>;
			clock-output-names = "spi0", "spi1", "spi2", "spi3", "spi4";
		};
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
@@ -61,6 +169,7 @@
			     <0 162 IRQ_TYPE_LEVEL_HIGH>,
			     <0 163 IRQ_TYPE_LEVEL_HIGH>,
			     <0 164 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp9_clks R7S72100_CLK_I2C0>;
		clock-frequency = <100000>;
		status = "disabled";
	};
@@ -78,6 +187,7 @@
			     <0 170 IRQ_TYPE_LEVEL_HIGH>,
			     <0 171 IRQ_TYPE_LEVEL_HIGH>,
			     <0 172 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp9_clks R7S72100_CLK_I2C1>;
		clock-frequency = <100000>;
		status = "disabled";
	};
@@ -95,6 +205,7 @@
			     <0 178 IRQ_TYPE_LEVEL_HIGH>,
			     <0 179 IRQ_TYPE_LEVEL_HIGH>,
			     <0 180 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp9_clks R7S72100_CLK_I2C2>;
		clock-frequency = <100000>;
		status = "disabled";
	};
@@ -112,10 +223,107 @@
			     <0 186 IRQ_TYPE_LEVEL_HIGH>,
			     <0 187 IRQ_TYPE_LEVEL_HIGH>,
			     <0 188 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp9_clks R7S72100_CLK_I2C3>;
		clock-frequency = <100000>;
		status = "disabled";
	};

	scif0: serial@e8007000 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8007000 64>;
		interrupts = <0 190 IRQ_TYPE_LEVEL_HIGH>,
			     <0 191 IRQ_TYPE_LEVEL_HIGH>,
			     <0 192 IRQ_TYPE_LEVEL_HIGH>,
			     <0 189 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF0>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif1: serial@e8007800 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8007800 64>;
		interrupts = <0 194 IRQ_TYPE_LEVEL_HIGH>,
			     <0 195 IRQ_TYPE_LEVEL_HIGH>,
			     <0 196 IRQ_TYPE_LEVEL_HIGH>,
			     <0 193 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF1>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif2: serial@e8008000 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8008000 64>;
		interrupts = <0 198 IRQ_TYPE_LEVEL_HIGH>,
			     <0 199 IRQ_TYPE_LEVEL_HIGH>,
			     <0 200 IRQ_TYPE_LEVEL_HIGH>,
			     <0 197 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF2>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif3: serial@e8008800 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8008800 64>;
		interrupts = <0 202 IRQ_TYPE_LEVEL_HIGH>,
			     <0 203 IRQ_TYPE_LEVEL_HIGH>,
			     <0 204 IRQ_TYPE_LEVEL_HIGH>,
			     <0 201 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF3>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif4: serial@e8009000 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8009000 64>;
		interrupts = <0 206 IRQ_TYPE_LEVEL_HIGH>,
			     <0 207 IRQ_TYPE_LEVEL_HIGH>,
			     <0 208 IRQ_TYPE_LEVEL_HIGH>,
			     <0 205 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF4>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif5: serial@e8009800 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe8009800 64>;
		interrupts = <0 210 IRQ_TYPE_LEVEL_HIGH>,
			     <0 211 IRQ_TYPE_LEVEL_HIGH>,
			     <0 212 IRQ_TYPE_LEVEL_HIGH>,
			     <0 209 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF5>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif6: serial@e800a000 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe800a000 64>;
		interrupts = <0 214 IRQ_TYPE_LEVEL_HIGH>,
			     <0 215 IRQ_TYPE_LEVEL_HIGH>,
			     <0 216 IRQ_TYPE_LEVEL_HIGH>,
			     <0 213 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF6>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	scif7: serial@e800a800 {
		compatible = "renesas,scif-r7s72100", "renesas,scif";
		reg = <0xe800a800 64>;
		interrupts = <0 218 IRQ_TYPE_LEVEL_HIGH>,
			     <0 219 IRQ_TYPE_LEVEL_HIGH>,
			     <0 220 IRQ_TYPE_LEVEL_HIGH>,
			     <0 217 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&mstp4_clks R7S72100_CLK_SCIF7>;
		clock-names = "sci_ick";
		status = "disabled";
	};

	spi0: spi@e800c800 {
		compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
		reg = <0xe800c800 0x24>;
@@ -123,6 +331,7 @@
			     <0 239 IRQ_TYPE_LEVEL_HIGH>,
			     <0 240 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "error", "rx", "tx";
		clocks = <&mstp10_clks R7S72100_CLK_SPI0>;
		num-cs = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
@@ -136,6 +345,7 @@
			     <0 242 IRQ_TYPE_LEVEL_HIGH>,
			     <0 243 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "error", "rx", "tx";
		clocks = <&mstp10_clks R7S72100_CLK_SPI1>;
		num-cs = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
@@ -149,6 +359,7 @@
			     <0 245 IRQ_TYPE_LEVEL_HIGH>,
			     <0 246 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "error", "rx", "tx";
		clocks = <&mstp10_clks R7S72100_CLK_SPI2>;
		num-cs = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
@@ -162,6 +373,7 @@
			     <0 248 IRQ_TYPE_LEVEL_HIGH>,
			     <0 249 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "error", "rx", "tx";
		clocks = <&mstp10_clks R7S72100_CLK_SPI3>;
		num-cs = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
@@ -175,6 +387,7 @@
			     <0 251 IRQ_TYPE_LEVEL_HIGH>,
			     <0 252 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-names = "error", "rx", "tx";
		clocks = <&mstp10_clks R7S72100_CLK_SPI4>;
		num-cs = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
+12 −2
Original line number Diff line number Diff line
@@ -18,18 +18,28 @@
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include <linux/clk-provider.h>
#include <linux/kernel.h>
#include <linux/of_platform.h>
#include <mach/clock.h>
#include <mach/common.h>
#include <mach/r7s72100.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>

#ifdef CONFIG_COMMON_CLK
/*
 * This is a really crude hack to provide clkdev support to platform
 * devices until they get moved to DT.
 */
static const struct clk_name clk_names[] = {
	{ "mtu2", "fck", "sh-mtu2" },
};
#endif

static void __init genmai_add_standard_devices(void)
{
#ifdef CONFIG_COMMON_CLK
	of_clk_init(NULL);
	shmobile_clk_workaround(clk_names, ARRAY_SIZE(clk_names), true);
#else
	r7s72100_clock_init();
#endif
+44 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@

#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/serial_sci.h>
#include <linux/sh_eth.h>
#include <linux/spi/rspi.h>
#include <linux/spi/spi.h>
@@ -89,6 +90,40 @@ static const struct spi_board_info spi_info[] __initconst = {
	},
};

/* SCIF */
#define R7S72100_SCIF(index, baseaddr, irq)				\
static const struct plat_sci_port scif##index##_platform_data = {	\
	.type		= PORT_SCIF,					\
	.regtype	= SCIx_SH2_SCIF_FIFODATA_REGTYPE,		\
	.flags		= UPF_BOOT_AUTOCONF | UPF_IOREMAP,		\
	.scscr		= SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE |	\
			  SCSCR_REIE,					\
};									\
									\
static struct resource scif##index##_resources[] = {			\
	DEFINE_RES_MEM(baseaddr, 0x100),				\
	DEFINE_RES_IRQ(irq + 1),					\
	DEFINE_RES_IRQ(irq + 2),					\
	DEFINE_RES_IRQ(irq + 3),					\
	DEFINE_RES_IRQ(irq),						\
}									\

R7S72100_SCIF(0, 0xe8007000, gic_iid(221));
R7S72100_SCIF(1, 0xe8007800, gic_iid(225));
R7S72100_SCIF(2, 0xe8008000, gic_iid(229));
R7S72100_SCIF(3, 0xe8008800, gic_iid(233));
R7S72100_SCIF(4, 0xe8009000, gic_iid(237));
R7S72100_SCIF(5, 0xe8009800, gic_iid(241));
R7S72100_SCIF(6, 0xe800a000, gic_iid(245));
R7S72100_SCIF(7, 0xe800a800, gic_iid(249));

#define r7s72100_register_scif(index)					       \
	platform_device_register_resndata(&platform_bus, "sh-sci", index,      \
					  scif##index##_resources,	       \
					  ARRAY_SIZE(scif##index##_resources), \
					  &scif##index##_platform_data,	       \
					  sizeof(scif##index##_platform_data))

static void __init genmai_add_standard_devices(void)
{
	r7s72100_clock_init();
@@ -102,6 +137,15 @@ static void __init genmai_add_standard_devices(void)
	r7s72100_register_rspi(3);
	r7s72100_register_rspi(4);
	spi_register_board_info(spi_info, ARRAY_SIZE(spi_info));

	r7s72100_register_scif(0);
	r7s72100_register_scif(1);
	r7s72100_register_scif(2);
	r7s72100_register_scif(3);
	r7s72100_register_scif(4);
	r7s72100_register_scif(5);
	r7s72100_register_scif(6);
	r7s72100_register_scif(7);
}

static const char * const genmai_boards_compat_dt[] __initconst = {
Loading