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

Rahul Sharma r.sh.open at gmail.com
Mon Jan 6 04:40:32 EST 2014


Hi Tomasz,

On 10 December 2013 22:40, Tomasz Figa <t.figa at samsung.com> wrote:
> Hi Pankaj, Rahul, Arun,
>
> Please split generic SoC dtsi files and board dts files into separate
> patches. Also please see my comments inline.

I will split them to SoC and Board DT patches.

>
> 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?

There is no combiner in 5260. Each GPX bank is connected one GIC interrupt
line.

>
>> +             };
> [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.
>

Done.

>> +                     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.

I moved this node to Board file. I hope that is correct.

>
>> +                     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).
>

Ok. I will remove "gpc0-3" from sdX_bus4.

> 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?

I added 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

Ok. I will changes this.

>
>> +
>> +     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.
>

This is correct.

>> +             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.

I will remove them. These are optional properties which are not being referred
in the mainline driver.

>
>> +             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.
>

I will reorder the patches to ensure build doesn't break.

> 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?

It is quite different than other Exynos5 SoCs specially the physical
address of the
IPs.

>
>> +
>> +/ {
>> +     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.

Ok. I will change this.

>
>> +                     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.

Please let me know if you have a better solution.

>
>> +             #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.

ok. Done.

> + all the CMU instances below.
>
> [snip]
>> +
>> +     gic:interrupt-controller at 10481000 {
>
> coding style: There should be a space after the colon ending the label.
>
Done.

>> +             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?
>

Done.

>> +             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.
>

Done.

>> +                     #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?

I removed the comments.

>
>> +
>> +             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.

Done.

Regards,
Rahul Sharma.

>
> Best regards,
> Tomasz
>



More information about the linux-arm-kernel mailing list