[PATCH 3/7] ARM: dts: add dts files for exynos5260 SoC

Tomasz Figa t.figa at samsung.com
Tue Dec 10 12:10:18 EST 2013


Hi Pankaj, Rahul, Arun,

Please split generic SoC dtsi files and board dts files into separate
patches. Also please see my comments inline.

On Friday 06 of December 2013 21:26:27 Rahul Sharma wrote:
> From: Arun Kumar K <arun.kk at samsung.com>
> 
> The patch adds the dts files for exynos5260 and for xyref
> evt0 board.
[snip]
> +		gpx0: gpx0 {
> +			gpio-controller;
> +			#gpio-cells = <2>;
> +
> +			interrupt-controller;
> +			#interrupt-cells = <2>;

Just to make sure, all your GPX banks are muxed type, with wake-up
interrupts muxed to a single GIC interrupt line, right?

> +		};
[snip]
> +		cam_gpio_a: cam-gpio-a {
> +			samsung,pins = "gpe0-0", "gpe0-1", "gpe0-2", "gpe0-3",
> +				"gpe0-4", "gpe0-5", "gpe0-6", "gpe0-7",
> +				"gpe1-0", "gpe1-1";
> +				samsung,pin-function = <2>;

Incorrect indentation.

> +			samsung,pin-pud = <0>;
> +			samsung,pin-drv = <0>;
> +		};
[snip]
> +		hdmi_hpd_irq: hdmi-hpd-irq {
> +			samsung,pins = "gpx3-7";
> +			samsung,pin-function = <0>;

Function 0 is input, not a special function. It shouldn't be handled
this way. If a board needs to set up pull-up/down and driver strength
for GPIO pins then it should add its own board-specific pinconf nodes
with just pin-pud and/or pin-drv properties and without pin-function.

> +			samsung,pin-pud = <1>;
> +			samsung,pin-drv = <0>;
> +		};
> +	};
[snip]
> +		sd0_bus1: sd0-bus-width1 {
> +			samsung,pins = "gpc0-3";
> +			samsung,pin-function = <2>;
> +			samsung,pin-pud = <3>;
> +			samsung,pin-drv = <3>;
> +		};
> +
> +		sd0_bus4: sd0-bus-width4 {
> +			samsung,pins = "gpc0-3", "gpc0-4", "gpc0-5", "gpc0-6";
> +			samsung,pin-function = <2>;
> +			samsung,pin-pud = <3>;
> +			samsung,pin-drv = <3>;
> +		};
> +
> +		sd0_bus8: sd0-bus-width8 {
> +			samsung,pins = "gpc3-0", "gpc3-1", "gpc3-2", "gpc3-3";
> +			samsung,pin-function = <2>;
> +			samsung,pin-pud = <3>;
> +			samsung,pin-drv = <3>;
> +		};

This is inconsistent. To specify 1- and 4-bit SD busses you need to
include reference to just one pinconf node (sd0_bus1 or sd0_bus4), but
for 8-bit bus you need to specify both sd0_bus4 and sd0_bus8.

Please make the nodes exclusive, so you always need to specify all
possible configurations with given wiring (e.g. with 4 wires, you can
run in 1-bit and 4-bit modes, not just 4-bit).

Same for remaining instances of SD bus.

[snip]

> diff --git a/arch/arm/boot/dts/exynos5260-xyref5260-evt0.dts b/arch/arm/boot/dts/exynos5260-xyref5260-evt0.dts
> new file mode 100644
> index 0000000..aa1fcda
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos5260-xyref5260-evt0.dts
> @@ -0,0 +1,85 @@
> +/*
> + * SAMSUNG XYREF5260 EVT0 board device tree source
> + *
> + * Copyright (c) 2013 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +/dts-v1/;
> +#include "exynos5260.dtsi"
> +
> +/ {
> +	model = "SAMSUNG XYREF5260 EVT0 board based on EXYNOS5260";
> +	compatible = "samsung,xyref5260", "samsung,exynos5260";
> +

Shouldn't you have a memory node here?

> +	chosen {
> +		bootargs = "console=ttySAC2,115200";
> +	};
> +
> +	fixed-rate-clocks {
> +		oscclk {
> +			compatible = "samsung,exynos5260-oscclk";
> +			clock-frequency = <24000000>;
> +		};
> +	};

Please use generic fixed clock bindings. You can take [1] as an example
how to use them.

[1] arch/arm/boot/dts/s3c6410-smdk6410.dtsi

> +
> +	serial at 12C00000 {
> +		status = "okay";
> +	};
> +
> +	serial at 12C10000 {
> +		status = "okay";
> +	};
> +
> +	serial at 12C20000 {
> +		status = "okay";
> +	};
> +
> +	serial at 12860000 {

Is it the correct UART address? It seems a bit off compared to addresses
of other ports.

> +		status = "okay";
> +	};
> +
> +	dwmmc0 at 12140000 {
> +		status = "okay";
> +		num-slots = <1>;
> +		broken-cd;
> +		bypass-smu;

This is not a valid property, according to binding documentation.

> +		supports-highspeed;
> +		supports-hs200-mode; /* 200 Mhz */

Neither is this one.

> +		fifo-depth = <0x40>;

This is a property of the SoC, not the board.

> +		card-detect-delay = <200>;
> +		samsung,dw-mshc-ciu-div = <3>;
> +		samsung,dw-mshc-sdr-timing = <0 4>;
> +		samsung,dw-mshc-ddr-timing = <0 2>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_bus8>;
> +
> +		slot at 0 {
> +			reg = <0>;
> +			bus-width = <8>;
> +		};
> +	};
> +
> +	dwmmc2 at 12160000 {
> +		status = "okay";
> +		num-slots = <1>;
> +		supports-highspeed;
> +		fifo-depth = <0x40>;

See above.

> +		card-detect-delay = <200>;
> +		samsung,dw-mshc-ciu-div = <3>;
> +		samsung,dw-mshc-sdr-timing = <2 3>;
> +		samsung,dw-mshc-ddr-timing = <1 2>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
> +
> +		slot at 0 {
> +			reg = <0>;
> +			bus-width = <4>;
> +			disable-wp;
> +		};
> +	};
> +};
> diff --git a/arch/arm/boot/dts/exynos5260.dtsi b/arch/arm/boot/dts/exynos5260.dtsi
> new file mode 100644
> index 0000000..fcb8d4f
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos5260.dtsi
> @@ -0,0 +1,315 @@
> +/*
> + * SAMSUNG EXYNOS5260 SoC device tree source
> + *
> + * Copyright (c) 2013 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include "skeleton.dtsi"
> +#include "exynos5260-pinctrl.dtsi"
> +
> +#include <dt-bindings/clk/exynos5260-clk.h>

This won't compile, because this file hasn't been added yet by previous
patches.

Isn't it possible to reuse some of the definitions from exynos5.dtsi? How
much different is this SoC from other SoCs from the series?

> +
> +/ {
> +	compatible = "samsung,exynos5260";
> +	interrupt-parent = <&gic>;
> +
> +	aliases {
> +		pinctrl0 = &pinctrl_0;
> +		pinctrl1 = &pinctrl_1;
> +		pinctrl2 = &pinctrl_2;
> +	};
> +
> +	chipid at 10000000 {
> +		compatible = "samsung,exynos4210-chipid";
> +		reg = <0x10000000 0x100>;
> +	};
> +
> +	cpus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		cpu at 0 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a15";
> +			reg = <0>;
> +			cci-control-port = <&cci_control1>;
> +		};
> +		cpu at 1 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a15";
> +			reg = <1>;
> +			cci-control-port = <&cci_control1>;
> +		};
> +		cpu at 2 {

@unit-address suffix must match the first entry of reg property.

> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x100>;
> +			cci-control-port = <&cci_control0>;
> +		};
> +		cpu at 3 {

Ditto.

> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x101>;
> +			cci-control-port = <&cci_control0>;
> +		};
> +		cpu at 4 {

Ditto.

> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x102>;
> +			cci-control-port = <&cci_control0>;
> +		};
> +		cpu at 5 {

Ditto.

> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x103>;
> +			cci-control-port = <&cci_control0>;
> +		};
> +	};
> +
> +	cmus {

You need compatible = "simple-bus" here if you need the nodes below
to be instantiated.

However I'm not sure if there is a point in placing them inside
a simple-bus. This needs more thought, so please give me a bit
more time to think over this and patches 4 and 7.

> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges;
> +
> +		cmu_top: clock-controller at 0x10010000 {

coding style: There should be no 0x prefix in @unit-address suffix.
+ all the CMU instances below.

[snip]
> +
> +	gic:interrupt-controller at 10481000 {

coding style: There should be a space after the colon ending the label.

> +		compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
> +		#interrupt-cells = <3>;
> +		#address-cells = <0>;
> +		#size-cells = <0>;
> +		interrupt-controller;
> +		reg = <0x10481000 0x1000>,
> +			<0x10482000 0x1000>,
> +			<0x10484000 0x2000>,
> +			<0x10486000 0x2000>;
> +		interrupts = <1 9 0xf04>;
> +	};
> +
> +	mct at 100B0000 {
> +		compatible = "samsung,exynos4210-mct";
> +		reg = <0x100B0000 0xb00>;

nit: Inconsistent hexadecimal character case, on Exynos in dts* files
upper case should be used.

Also the reg size looks a bit suspicious, as it's not even page aligned.
Is it the whole area used by the MCT block, not just the used registers?

> +		interrupt-controller;

MCT is not an interrupt controller.

> +		#interrups-cells = <2>;

Ditto. This is a property specific to interrupt controllers.

> +		interrupt-parent = <&mct_map>;
> +		interrupts = <0 0>, <1 0>, <2 0>, <3 0>,
> +				<4 0>, <5 0>, <6 0>, <7 0>,
> +				<8 0>, <9 0>, <10 0>, <11 0>;
> +		clocks = <&cmu_top FIN_PLL>, <&cmu_peri PERI_PCLK_MCT>;
> +		clock-names = "fin_pll", "mct";
> +
> +		mct_map: mct-map {
> +			#interrupt-cells = <2>;

Why two cells are needed? Using just one woudl simplify interrupt
specifiers above and interrupt-map specifiers below.

> +			#address-cells = <0>;
> +			#size-cells = <0>;
> +			interrupt-map = <0x0 0 &gic 0 104 0>,
> +					<0x1 0 &gic 0 105 0>,
> +					<0x2 0 &gic 0 106 0>,
> +					<0x3 0 &gic 0 107 0>,
> +					<0x4 0 &gic 0 122 0>,
> +					<0x5 0 &gic 0 123 0>,
> +					<0x6 0 &gic 0 124 0>,
> +					<0x7 0 &gic 0 125 0>,
> +					<0x8 0 &gic 0 126 0>,
> +					<0x9 0 &gic 0 127 0>,
> +					<0xa 0 &gic 0 128 0>,
> +					<0xb 0 &gic 0 129 0>;
> +		};
> +	};
> +
> +	cci at 10F00000 {
> +		compatible = "arm,cci-400";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		reg = <0x10F00000 0x1000>;
> +		ranges = <0x0 0x10F00000 0x6000>;
> +
> +		cci_control0: slave-if at 4000 {			/* Please check again */

Huh? Please check again and send correct data.

> +			compatible = "arm,cci-400-ctrl-if";
> +			interface-type = "ace";
> +			reg = <0x4000 0x1000>;			/* Please check again */
> +		};
> +
> +		cci_control1: slave-if at 5000 {			/* Please check again */
> +			compatible = "arm,cci-400-ctrl-if";
> +			interface-type = "ace";
> +			reg = <0x5000 0x1000>;			/* Please check again */
> +		};
> +	};
> +
> +	pinctrl_0: pinctrl at 11600000 {
> +		compatible = "samsung,exynos5260-pinctrl";
> +		reg = <0x11600000 0x1000>;
> +		interrupts = <0 79 0>;				/* GPIO_RT */

Instead of using such comment, maybe it would be better to rename
labels of pinctrl nodes to be more meaningful, such as pinctrl_rt,
pinctrl_fsys and pinctrl_aud?

> +
> +		wakeup-interrupt-controller {
> +			compatible = "samsung,exynos4210-wakeup-eint";
> +			interrupt-parent = <&gic>;
> +			interrupts = <0 32 0>;
> +		};
> +	};
[snip]
> +
> +	dwmmc_0: dwmmc0 at 12140000 {

Please use generic "mmc@" names for MMC nodes and move fifo-depth property
here to SoC-level dtsi.

Best regards,
Tomasz




More information about the linux-arm-kernel mailing list