The Lenovo Iomega ix4-300d is a 4-Bay sata NAS with dual Gb,
USB2.0 & 3.0, powered by a Marvell Armada XP MV78230 dual core CPU.
http://shop.lenovo.com/us/en/servers/network-storage/lenovoemc/ix4-300d/
Signed-off-by: Benoit Masson <[email protected]>
---
arch/arm/boot/dts/Makefile | 3 +-
arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts | 286 ++++++++++++++++++++++++
2 files changed, 288 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index adb5ed9..4429495 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -437,8 +437,9 @@ dtb-$(CONFIG_MACH_ARMADA_XP) += \
armada-xp-axpwifiap.dtb \
armada-xp-db.dtb \
armada-xp-gp.dtb \
- armada-xp-netgear-rn2120.dtb \
+ armada-xp-lenovo-ix4-300d.dtb \
armada-xp-matrix.dtb \
+ armada-xp-netgear-rn2120.dtb \
armada-xp-openblocks-ax3-4.dtb
dtb-$(CONFIG_MACH_DOVE) += dove-cm-a510.dtb \
dove-cubox.dtb \
diff --git a/arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts b/arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts
new file mode 100644
index 0000000..cee0ef4
--- /dev/null
+++ b/arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts
@@ -0,0 +1,286 @@
+/*
+ * Device Tree file for Lenovo Iomega ix4-300d
+ *
+ * Copyright (C) 2014, Benoit Masson <[email protected]>
+ *
+ * This program 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.
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include "armada-xp-mv78230.dtsi"
+
+/ {
+ model = "Lenovo Iomega ix4-300d";
+ compatible = "lenovo,ix4-300d", "marvell,armadaxp-mv78230",
+ "marvell,armadaxp", "marvell,armada-370-xp";
+
+ chosen {
+ bootargs = "console=ttyS0,115200 earlyprintk";
+ stdout-path = "/soc/internal-regs/serial@12000";
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0 0x00000000 0 0x20000000>; /* 512MB */
+ };
+
+ soc {
+ ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xd0000000 0x100000
+ MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000>;
+
+ pcie-controller {
+ status = "okay";
+
+ /* Quad port sata: Marvell 88SX7042 */
+ pcie@1,0 {
+ /* Port 0, Lane 0 */
+ status = "okay";
+ };
+
+ /* USB 3.0 xHCI controller: NEC D720200F1 */
+ pcie@5,0 {
+ /* Port 1, Lane 0 */
+ status = "okay";
+ };
+ };
+
+ internal-regs {
+ pinctrl {
+ poweroff_pin: poweroff-pin {
+ marvell,pins = "mpp24";
+ marvell,function = "gpio";
+ };
+
+ power_button_pin: power-button-pin {
+ marvell,pins = "mpp44";
+ marvell,function = "gpio";
+ };
+
+ reset_button_pin: reset-button-pin {
+ marvell,pins = "mpp45";
+ marvell,function = "gpio";
+ };
+ select_button_pin: select-button-pin {
+ marvell,pins = "mpp41";
+ marvell,function = "gpio";
+ };
+
+ scroll_button_pin: scroll-button-pin {
+ marvell,pins = "mpp42";
+ marvell,function = "gpio";
+ };
+
+ hdd_led_pin: hdd-led-pin {
+ marvell,pins = "mpp26";
+ marvell,function = "gpio";
+ };
+ };
+
+ serial@12000 {
+ status = "okay";
+ };
+
+ mdio {
+ phy0: ethernet-phy@0 { /* Marvell 88E1318 */
+ reg = <0>;
+ };
+
+ phy1: ethernet-phy@1 { /* Marvell 88E1318 */
+ reg = <1>;
+ };
+ };
+
+ ethernet@70000 {
+ status = "okay";
+ phy = <&phy0>;
+ phy-mode = "rgmii-id";
+ };
+
+ ethernet@74000 {
+ status = "okay";
+ phy = <&phy1>;
+ phy-mode = "rgmii-id";
+ };
+
+ usb@50000 {
+ status = "okay";
+ };
+
+ usb@51000 {
+ status = "okay";
+ };
+
+ i2c@11000 {
+ compatible = "marvell,mv78230-a0-i2c",
+ "marvell,mv64xxx-i2c";
+ clock-frequency = <400000>;
+ status = "okay";
+
+ adt7473@2e {
+ compatible = "adi,adt7473";
+ reg = <0x2e>;
+ };
+
+ pcf8563@51 {
+ compatible = "nxp,pcf8563";
+ reg = <0x51>;
+ };
+
+ };
+
+ nand@d0000 {
+ status = "okay";
+ num-cs = <1>;
+ marvell,nand-keep-config;
+ marvell,nand-enable-arbiter;
+ nand-on-flash-bbt;
+
+ partition@0 {
+ label = "u-boot";
+ reg = <0x0000000 0xe0000>;
+ read-only;
+ };
+
+ partition@e0000 {
+ label = "u-boot-env";
+ reg = <0xe0000 0x20000>;
+ read-only;
+ };
+
+ partition@100000 {
+ label = "u-boot-env2";
+ reg = <0x100000 0x20000>;
+ read-only;
+ };
+
+ partition@120000 {
+ label = "zImage";
+ reg = <0x120000 0x400000>;
+ };
+
+ partition@520000 {
+ label = "initrd";
+ reg = <0x520000 0x400000>;
+ };
+
+ partition@xE00000 {
+ label = "boot";
+ reg = <0xE00000 0x3F200000>;
+ };
+
+ partition@flash {
+ label = "flash";
+ reg = <0x0 0x40000000>;
+ };
+ };
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ pinctrl-0 = <&power_button_pin &reset_button_pin
+ &select_button_pin &scroll_button_pin>;
+ pinctrl-names = "default";
+
+ power-button {
+ label = "Power Button";
+ linux,code = <KEY_POWER>;
+ gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
+ };
+
+ reset-button {
+ label = "Reset Button";
+ linux,code = <KEY_RESTART>;
+ gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
+ };
+
+ select-button {
+ label = "Select Button";
+ linux,code = <BTN_SELECT>;
+ gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+ };
+
+ scroll-button {
+ label = "Scroll Button";
+ linux,code = <KEY_SCROLLDOWN>;
+ gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+ };
+ };
+
+ spi3 {
+ compatible = "spi-gpio";
+ status = "okay";
+ gpio-sck = <&gpio0 25 0>;
+ gpio-mosi = <&gpio1 15 0>; /*gpio 47*/
+ cs-gpios = <&gpio0 27 0 >;
+ num-chipselects = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ gpio2: gpio2@0 {
+ compatible = "fairchild,74hc595";
+ gpio-controller;
+ #gpio-cells = <2>;
+ reg = <0>;
+ registers-number = <2>;
+ spi-max-frequency = <100000>;
+ };
+ };
+
+ gpio-leds {
+ compatible = "gpio-leds";
+ pinctrl-0 = <&hdd_led_pin>;
+ pinctrl-names = "default";
+
+ hdd-led {
+ label = "ix4-300d:hdd:blue";
+ gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+
+ power-led {
+ label = "ix4-300d:power:white";
+ gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
+ /* init blinking while booting */
+ linux,default-trigger = "timer";
+ default-state = "on";
+ };
+
+ sysfail-led {
+ label = "ix4-300d:sysfail:red";
+ gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+
+ sys-led {
+ label = "ix4-300d:sys:blue";
+ gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+
+ hddfail-led {
+ label = "ix4-300d:hddfail:red";
+ gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+
+ };
+
+ /*
+ * Warning: you need both eth1 & 0 PHY initialized (i.e having
+ * them up does the tweak) for poweroff to shutdown otherwise it
+ * reboots
+ */
+ gpio-poweroff {
+ compatible = "gpio-poweroff";
+ pinctrl-0 = <&poweroff_pin>;
+ pinctrl-names = "default";
+ gpios = <&gpio0 24 GPIO_ACTIVE_HIGH>;
+ };
+};
--
1.9.1
Hi Benoit
> + i2c@11000 {
> + compatible = "marvell,mv78230-a0-i2c",
> + "marvell,mv64xxx-i2c";
The point of my patches is that you don't need the
"marvell,mv78230-a0-i2c". It will work out at runtime if the SoC is A0
stepping and automatically enable the workaround. Please test with
only "marvell,mv64xxx-i2c";
Andrew
On Sunday 27 July 2014 03:52:44 Andrew Lunn wrote:
> Hi Benoit
>
> > + i2c@11000 {
> > + compatible = "marvell,mv78230-a0-i2c",
> > + "marvell,mv64xxx-i2c";
>
> The point of my patches is that you don't need the
> "marvell,mv78230-a0-i2c". It will work out at runtime if the SoC is A0
> stepping and automatically enable the workaround. Please test with
> only "marvell,mv64xxx-i2c";
>
It should still list both "marvell,mv78230-i2c" and "marvell,mv64xxx-i2c",
as the generic name may not be enough to describe the register layout
correctly.
Arnd
Le 28 juil. 2014 ? 10:49, Arnd Bergmann <[email protected]> a ?crit :
> On Sunday 27 July 2014 03:52:44 Andrew Lunn wrote:
>> Hi Benoit
Hi Arnd,
>>
>>> + i2c@11000 {
>>> + compatible = "marvell,mv78230-a0-i2c",
>>> + "marvell,mv64xxx-i2c";
>>
>> The point of my patches is that you don't need the
>> "marvell,mv78230-a0-i2c". It will work out at runtime if the SoC is A0
>> stepping and automatically enable the workaround. Please test with
>> only "marvell,mv64xxx-i2c";
>>
>
> It should still list both "marvell,mv78230-i2c" and "marvell,mv64xxx-i2c",
> as the generic name may not be enough to describe the register layout
> correctly.
I tend to disagree since the dts include the armada-xp.dtsi, which already declare
"i2c0: i2c@11000 {
compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
reg = <0x11000 0x100>;
};
"
I tested the dts on the device and it does inherits the i2c declaration, did I miss something here ?
Benoit
> Arnd
On Monday 28 July 2014 12:50:47 Benoit Masson wrote:
> >
> > It should still list both "marvell,mv78230-i2c" and "marvell,mv64xxx-i2c",
> > as the generic name may not be enough to describe the register layout
> > correctly.
>
> I tend to disagree since the dts include the armada-xp.dtsi, which already declare
>
> "i2c0: i2c@11000 {
> compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
> reg = <0x11000 0x100>;
> };
> "
>
> I tested the dts on the device and it does inherits the i2c declaration, did I miss something here ?
>
Inheriting from armada-xp.dtsi is fine, but if you manually set
"marvell,mv64xxx-i2c", that will override the old setting
and drop the "marvell,mv78230-i2c" part, which is bad because
it may break things later if it turns out that the mv78230
variant is not completely compatible with the old
mv64xxx variant.
Arnd
Le 28 juil. 2014 ? 13:02, Arnd Bergmann <[email protected]> a ?crit :
> On Monday 28 July 2014 12:50:47 Benoit Masson wrote:
>>>
>>> It should still list both "marvell,mv78230-i2c" and "marvell,mv64xxx-i2c",
>>> as the generic name may not be enough to describe the register layout
>>> correctly.
>>
>> I tend to disagree since the dts include the armada-xp.dtsi, which already declare
>>
>> "i2c0: i2c@11000 {
>> compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
>> reg = <0x11000 0x100>;
>> };
>> "
>>
>> I tested the dts on the device and it does inherits the i2c declaration, did I miss something here ?
>>
>
> Inheriting from armada-xp.dtsi is fine, but if you manually set
> "marvell,mv64xxx-i2c", that will override the old setting
> and drop the "marvell,mv78230-i2c" part, which is bad because
> it may break things later if it turns out that the mv78230
> variant is not completely compatible with the old
> mv64xxx variant.
Ok then does this mean I can simply remove the "compatible" line to only inherits from armada-xp-dtsi ?
"i2c@11000 {
clock-frequency = <400000>;
status = "okay";
"
Would this be enough ?
Benoit
>
> Arnd
On Monday 28 July 2014 13:17:56 Benoit Masson wrote:
>
> Ok then does this mean I can simply remove the "compatible" line to only inherits from armada-xp-dtsi ?
>
> "i2c@11000 {
> clock-frequency = <400000>;
> status = "okay";
> "
>
> Would this be enough ?
Yes, this looks ideal.
Arnd