diff mbox

[2/3] ARM: dts: imx6sx: Add UDOO Neo support

Message ID 1467691450-22975-3-git-send-email-afaerber@suse.de
State New
Headers show

Commit Message

Andreas Färber July 5, 2016, 4:04 a.m. UTC
Add initial device trees for UDOO Neo Basic, Extended and Full boards.
Serial console is enabled, other serial ports are prepared.
Both user LEDs are enabled, with the orange one reserved for the M4.
I2C based PMIC is enabled. Ethernet is enabled for Basic and Full.

Cc: Ettore Chimenti <ettore.chimenti@udoo.org>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 arch/arm/boot/dts/Makefile                     |   5 +-
 arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts    |  69 +++++++
 arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts |  54 +++++
 arch/arm/boot/dts/imx6sx-udoo-neo-full.dts     |  69 +++++++
 arch/arm/boot/dts/imx6sx-udoo-neo.dtsi         | 261 +++++++++++++++++++++++++
 5 files changed, 457 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts
 create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts
 create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo-full.dts
 create mode 100644 arch/arm/boot/dts/imx6sx-udoo-neo.dtsi

Comments

Uwe Kleine-König July 5, 2016, 6:27 a.m. UTC | #1
Hello,

On Tue, Jul 05, 2016 at 06:04:09AM +0200, Andreas Färber wrote:
> +&iomuxc {
> +	imx6sx-udoo-neo {

There is no need for this machine group. Please just put the pinctrl
groups directly into &iomuxc { }.

> +		pinctrl_enet1: enet1grp {
> +			fsl,pins =
> +				<MX6SX_PAD_ENET1_CRS__GPIO2_IO_1	0xa0b1>,
> +				<MX6SX_PAD_ENET1_MDC__ENET1_MDC		0xa0b1>,

It's unusual to write pinmuxes this way. The usual form is to write it
in a single array. (Not sure I'm using the right term here.) Having said
that I like it your way, but still it should (IMHO) get a more official
blessing.

Best regards
Uwe
Fabio Estevam July 5, 2016, 12:04 p.m. UTC | #2
On Tue, Jul 5, 2016 at 1:04 AM, Andreas Färber <afaerber@suse.de> wrote:

> +/dts-v1/;
> +
> +#include "imx6sx-udoo-neo.dtsi"
> +
> +/ {
> +       model = "UDOO Neo Basic";

This should be something like:

model = "Udoo i.MX6 SoloX UDOO Neo Basic";

> +       compatible = "fsl,imx6sx";

compatible = "udoo,imx6sx-udoo-neo", "fsl,imx6sx";

Then you can also send a separate patch to add udoo to
Documentation/devicetree/bindings/vendor-prefixes.txt.

Same applies to other places in this patch.

> +&fec1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&pinctrl_enet1>;
> +       phy-mode = "rmii";
> +       phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>;

Shouldn't this be GPIO_ACTIVE_LOW instead?
Andreas Färber July 5, 2016, 1:55 p.m. UTC | #3
Hi Fabio,

Am 05.07.2016 um 14:04 schrieb Fabio Estevam:
> On Tue, Jul 5, 2016 at 1:04 AM, Andreas Färber <afaerber@suse.de> wrote:
> 
>> +/dts-v1/;
>> +
>> +#include "imx6sx-udoo-neo.dtsi"
>> +
>> +/ {
>> +       model = "UDOO Neo Basic";
> 
> This should be something like:
> 
> model = "Udoo i.MX6 SoloX UDOO Neo Basic";

Why should anyone use such a weird concatenation of names? If you wanted
"UDOO Neo Basic (based on i.MX 6SoloX)" that would be more
understandable, but there is no UDOO Neo Basic board with another SoC:

http://www.udoo.org/udoo-neo/

imx6dl-udoo.dts uses "Udoo i.MX6 Dual-lite Board" and
imx6q-udoo.dts  uses "Udoo i.MX6 Quad Board".

So I'm open to discussing UDOO vs. Udoo spelling, but I don't see a
requirement for mixing board vendor, SoC name and board name.

/proc/cpuinfo displays "Freescale i.MX6 SoloX (Device Tree)" based on
SoC compatible string and mach-imx/mach-imx6sx.c.

Note that NXP calls it "i.MX6SX" or "i.MX 6SoloX" (spacing):

http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/i.mx-applications-processors/i.mx-6-processors/i.mx6qp/i.mx-6solox-processors-heterogeneous-processing-with-arm-cortex-a9-and-cortex-m4-cores:i.MX6SX

>> +       compatible = "fsl,imx6sx";
> 
> compatible = "udoo,imx6sx-udoo-neo", "fsl,imx6sx";
> 
> Then you can also send a separate patch to add udoo to
> Documentation/devicetree/bindings/vendor-prefixes.txt.
> 
> Same applies to other places in this patch.

I know we could add compatibles. But you say it backwards: If I add a
compatible string the vendor _must_ be defined in vendor-prefixes.txt
and the board compatible _must_ be documented, too. Since I saw that
there is no prefix for UDOO in vendor-prefixes.txt nor an arm/udoo.txt
file to document its board compatibles _despite_ "udoo,imx6q-udoo" and
"udoo,imx6dl-udoo" being in use, as an annoyed UDOO Neo owner I'd rather
leave it to UDOO to add those on their own as follow-up if they care.
Their downstream kernel does not have such a compatible string, they use
"fsl,imx6sx-sdb", which looks like a bad case of copy&paste to me.

However, "udoo,neo-basic", "udoo,neo", "fsl,imx6sx" should be sufficient
since unlike the Quad/Dual situation there is no SoC variation here. Or
"seco,udoo-neo"? "udoo,udoo-neo" looks duplicate.

>> +&fec1 {
>> +       pinctrl-names = "default";
>> +       pinctrl-0 = <&pinctrl_enet1>;
>> +       phy-mode = "rmii";
>> +       phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>;
> 
> Shouldn't this be GPIO_ACTIVE_LOW instead?

Hm, network worked okay for me like this, how do we verify?

Schematics are here: http://www.udoo.org/other-resources/

Thanks,
Andreas
Andreas Färber July 5, 2016, 2:46 p.m. UTC | #4
Hi Uwe,

Am 05.07.2016 um 08:27 schrieb Uwe Kleine-König:
> On Tue, Jul 05, 2016 at 06:04:09AM +0200, Andreas Färber wrote:
>> +&iomuxc {
>> +	imx6sx-udoo-neo {
> 
> There is no need for this machine group. Please just put the pinctrl
> groups directly into &iomuxc { }.

OK, will do. Adopted from imx6sx-sdb.dtsi and imx6sx-sabreauto.dts -
please update the existing files to be like you expect new ones to be.

>> +		pinctrl_enet1: enet1grp {
>> +			fsl,pins =
>> +				<MX6SX_PAD_ENET1_CRS__GPIO2_IO_1	0xa0b1>,
>> +				<MX6SX_PAD_ENET1_MDC__ENET1_MDC		0xa0b1>,
> 
> It's unusual to write pinmuxes this way. The usual form is to write it
> in a single array. (Not sure I'm using the right term here.) Having said
> that I like it your way, but still it should (IMHO) get a more official
> blessing.

In previous reviews I've been told that this is the new expected way to
write tuples, so I assumed that would apply here too, in that you can
have a varying count of tuples (mux lines), which in this case happen to
always have the same cell count (6).

For example I've rewritten pinctrl-0 lines in exynos5250 device trees
because maintainers considered it lazy to spare the inner ">, <",
despite still used in many places including bindings documentation.

The binary .dtb representation should be the same either way.

booting-without-of.txt doesn't comment and has no such example apart
from compatible string lists, so not sure whether that's just different
maintainer tastes or formalized somewhere?

That said, I seem to have a talent for finding such inconsistencies. ;)

Cheers,
Andreas
Uwe Kleine-König July 5, 2016, 6:33 p.m. UTC | #5
On Tue, Jul 05, 2016 at 03:55:23PM +0200, Andreas Färber wrote:
> Hi Fabio,
> 
> Am 05.07.2016 um 14:04 schrieb Fabio Estevam:
> > On Tue, Jul 5, 2016 at 1:04 AM, Andreas Färber <afaerber@suse.de> wrote:
> > 
> >> +/dts-v1/;
> >> +
> >> +#include "imx6sx-udoo-neo.dtsi"
> >> +
> >> +/ {
> >> +       model = "UDOO Neo Basic";
> > 
> > This should be something like:
> > 
> > model = "Udoo i.MX6 SoloX UDOO Neo Basic";
> 
> Why should anyone use such a weird concatenation of names? If you wanted
> "UDOO Neo Basic (based on i.MX 6SoloX)" that would be more
> understandable, but there is no UDOO Neo Basic board with another SoC:
> 
> http://www.udoo.org/udoo-neo/
> 
> imx6dl-udoo.dts uses "Udoo i.MX6 Dual-lite Board" and
> imx6q-udoo.dts  uses "Udoo i.MX6 Quad Board".

Ack, I'm OK with "UDOO Neo Basic" et al, too.

> > [ discussion about what to use for compatible ]
> However, "udoo,neo-basic", "udoo,neo", "fsl,imx6sx" should be sufficient
> since unlike the Quad/Dual situation there is no SoC variation here. Or
> "seco,udoo-neo"? "udoo,udoo-neo" looks duplicate.

I'd use

	"udoo,neo-basic", "fsl,imx6sx";

> >> +&fec1 {
> >> +       pinctrl-names = "default";
> >> +       pinctrl-0 = <&pinctrl_enet1>;
> >> +       phy-mode = "rmii";
> >> +       phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>;
> > 
> > Shouldn't this be GPIO_ACTIVE_LOW instead?
> 
> Hm, network worked okay for me like this, how do we verify?
> 
> Schematics are here: http://www.udoo.org/other-resources/

The phy's RST# pin is connected to a signal that routes to ENET1_CRS /
C7. That corresponds to GPIO2_IO01.

Also that's what is used in "my" device tree that was created by a
colleague who probably took udoo's dts as reference.

Regarding the question how to verify that:

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ ifup eth0
	eth0: 100Mbps full duplex link detected
	T DHCP client bound to address 192.168.24.110

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ ping 192.168.23.4
	host 192.168.23.4 is alive

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ gpio_direction_output 33 0

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ ping 192.168.23.4
	eth0: transmission timeout
	T eth0: transmission timeout
	T eth0: transmission timeout
	T eth0: transmission timeout
	T eth0: transmission timeout
	T eth0: transmission timeout
	ping failed: Connection timed out

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ gpio_direction_output 33 1

	barebox@Freescale i.MX6 SoloX UDOO NEO Board:/ ping 192.168.23.4
	host 192.168.23.4 is alive

So I'd say the right thing to do is:

	phy-reset-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;

And as the fec driver ignores the flag (for historic reasons), the only
other correct possibility is:

	phy-reset-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
	phy-reset-active-high;

which is wrong here though.

Best regards
Uwe
Shawn Guo Aug. 8, 2016, 2:04 p.m. UTC | #6
On Tue, Jul 05, 2016 at 06:04:09AM +0200, Andreas Färber wrote:
> +&fec1 {
> +	status = "okay";
> +	phy-handle = <&ethphy1>;

We generally have 'status' at the bottom of property list.

Shawn

> +
> +	mdio {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		ethphy1: ethernet-phy@0 {
> +			compatible = "ethernet-phy-ieee802.3-c22";
> +			reg = <0>;
> +		};
> +	};
> +};
diff mbox

Patch

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 8ff3f580d7de..780e17976a14 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -397,7 +397,10 @@  dtb-$(CONFIG_SOC_IMX6SX) += \
 	imx6sx-sabreauto.dtb \
 	imx6sx-sdb-reva.dtb \
 	imx6sx-sdb-sai.dtb \
-	imx6sx-sdb.dtb
+	imx6sx-sdb.dtb \
+	imx6sx-udoo-neo-basic.dtb \
+	imx6sx-udoo-neo-extended.dtb \
+	imx6sx-udoo-neo-full.dtb
 dtb-$(CONFIG_SOC_IMX6UL) += \
 	imx6ul-14x14-evk.dtb \
 	imx6ul-pico-hobbit.dtb \
diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts
new file mode 100644
index 000000000000..615a1df89c0c
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-udoo-neo-basic.dts
@@ -0,0 +1,69 @@ 
+/*
+ * Copyright (c) 2016 Andreas Färber
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "imx6sx-udoo-neo.dtsi"
+
+/ {
+	model = "UDOO Neo Basic";
+	compatible = "fsl,imx6sx";
+
+	memory {
+		reg = <0x80000000 0x20000000>;
+	};
+};
+
+&fec1 {
+	status = "okay";
+	phy-handle = <&ethphy1>;
+
+	mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		ethphy1: ethernet-phy@0 {
+			compatible = "ethernet-phy-ieee802.3-c22";
+			reg = <0>;
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts
new file mode 100644
index 000000000000..d6fdd17cd3ac
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-udoo-neo-extended.dts
@@ -0,0 +1,54 @@ 
+/*
+ * Copyright (c) 2016 Andreas Färber
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "imx6sx-udoo-neo.dtsi"
+
+/ {
+	model = "UDOO Neo Extended";
+	compatible = "fsl,imx6sx";
+
+	memory {
+		reg = <0x80000000 0x40000000>;
+	};
+};
diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts
new file mode 100644
index 000000000000..d4820c7cd152
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-udoo-neo-full.dts
@@ -0,0 +1,69 @@ 
+/*
+ * Copyright (c) 2016 Andreas Färber
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "imx6sx-udoo-neo.dtsi"
+
+/ {
+	model = "UDOO Neo Full";
+	compatible = "fsl,imx6sx";
+
+	memory {
+		reg = <0x80000000 0x40000000>;
+	};
+};
+
+&fec1 {
+	status = "okay";
+	phy-handle = <&ethphy1>;
+
+	mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		ethphy1: ethernet-phy@0 {
+			compatible = "ethernet-phy-ieee802.3-c22";
+			reg = <0>;
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
new file mode 100644
index 000000000000..e074409644d8
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
@@ -0,0 +1,261 @@ 
+/*
+ * Copyright (c) 2016 Andreas Färber
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "imx6sx.dtsi"
+
+/ {
+	compatible = "fsl,imx6sx";
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		red {
+			label = "udoo-neo:red:mmc";
+			gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>;
+			default-state = "off";
+		};
+
+		orange {
+			label = "udoo-neo:orange:user";
+			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>;
+			default-state = "keep";
+		};
+	};
+};
+
+&cpu0 {
+	arm-supply = <&sw1a_reg>;
+	soc-supply = <&sw1c_reg>;
+};
+
+&fec1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_enet1>;
+	phy-mode = "rmii";
+	phy-reset-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>;
+};
+
+&i2c1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_i2c1>;
+	clock-frequency = <100000>;
+	status = "okay";
+
+	pmic: pmic@08 {
+		compatible = "fsl,pfuze3000";
+		reg = <0x08>;
+
+		regulators {
+			sw1a_reg: sw1a {
+				regulator-min-microvolt = <700000>;
+				regulator-max-microvolt = <1475000>;
+				regulator-boot-on;
+				regulator-always-on;
+				regulator-ramp-delay = <6250>;
+			};
+
+			sw1c_reg: sw1b {
+				regulator-min-microvolt = <700000>;
+				regulator-max-microvolt = <1475000>;
+				regulator-boot-on;
+				regulator-always-on;
+				regulator-ramp-delay = <6250>;
+			};
+
+			sw2_reg: sw2 {
+				regulator-min-microvolt = <1500000>;
+				regulator-max-microvolt = <1850000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			sw3a_reg: sw3 {
+				regulator-min-microvolt = <900000>;
+				regulator-max-microvolt = <1650000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			swbst_reg: swbst {
+				regulator-min-microvolt = <5000000>;
+				regulator-max-microvolt = <5150000>;
+			};
+
+			snvs_reg: vsnvs {
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <3000000>;
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			vref_reg: vrefddr {
+				regulator-boot-on;
+				regulator-always-on;
+			};
+
+			vgen1_reg: vldo1 {
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+			};
+
+			vgen2_reg: vldo2 {
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <1550000>;
+			};
+
+			vgen3_reg: vccsd {
+				regulator-min-microvolt = <2850000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+			};
+
+			vgen4_reg: v33 {
+				regulator-min-microvolt = <2850000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+			};
+
+			vgen5_reg: vldo3 {
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+			};
+
+			vgen6_reg: vldo4 {
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+			};
+		};
+	};
+};
+
+&iomuxc {
+	imx6sx-udoo-neo {
+		pinctrl_enet1: enet1grp {
+			fsl,pins =
+				<MX6SX_PAD_ENET1_CRS__GPIO2_IO_1	0xa0b1>,
+				<MX6SX_PAD_ENET1_MDC__ENET1_MDC		0xa0b1>,
+				<MX6SX_PAD_ENET1_MDIO__ENET1_MDIO	0xa0b1>,
+				<MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0	0xa0b1>,
+				<MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1	0xa0b1>,
+				<MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN	0xa0b1>,
+
+				<MX6SX_PAD_ENET1_TX_CLK__ENET1_REF_CLK1	0x3081>,
+				<MX6SX_PAD_ENET2_TX_CLK__GPIO2_IO_9	0x3081>,
+				<MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0	0x3081>,
+				<MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1	0x3081>,
+				<MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN	0x3081>,
+				<MX6SX_PAD_RGMII1_RXC__ENET1_RX_ER	0x3081>,
+
+				<MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M	0x91>;
+		};
+
+		pinctrl_i2c1: i2c1grp {
+			fsl,pins =
+				<MX6SX_PAD_GPIO1_IO00__I2C1_SCL		0x4001b8b1>,
+				<MX6SX_PAD_GPIO1_IO01__I2C1_SDA		0x4001b8b1>;
+		};
+
+		pinctrl_uart1: uart1grp {
+			fsl,pins =
+				<MX6SX_PAD_GPIO1_IO04__UART1_TX		0x1b0b1>,
+				<MX6SX_PAD_GPIO1_IO05__UART1_RX		0x1b0b1>;
+		};
+
+		pinctrl_uart2: uart2grp {
+			fsl,pins =
+				<MX6SX_PAD_GPIO1_IO06__UART2_TX		0x1b0b1>,
+				<MX6SX_PAD_GPIO1_IO07__UART2_RX		0x1b0b1>;
+		};
+
+		pinctrl_uart5: uart5grp {
+			fsl,pins =
+				<MX6SX_PAD_SD4_DATA4__UART5_RX		0x1b0b1>,
+				<MX6SX_PAD_SD4_DATA5__UART5_TX		0x1b0b1>;
+		};
+
+		pinctrl_uart6: uart6grp {
+			fsl,pins =
+				<MX6SX_PAD_CSI_DATA00__UART6_RI_B	0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA01__UART6_DSR_B	0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA02__UART6_DTR_B	0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA03__UART6_DCD_B	0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA04__UART6_RX		0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA05__UART6_TX		0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA06__UART6_RTS_B	0x1b0b1>,
+				<MX6SX_PAD_CSI_DATA07__UART6_CTS_B	0x1b0b1>;
+		};
+	};
+};
+
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart1>;
+	status = "okay";
+};
+
+/* Cortex-M4 serial */
+&uart2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart2>;
+	status = "disabled";
+};
+
+/* Arduino serial */
+&uart5 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart5>;
+	status = "disabled";
+};
+
+&uart6 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_uart6>;
+	uart-has-rtscts;
+	status = "disabled";
+};