Message ID | 87mwtzcgbl.fsf@natisbad.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Mar 19, 2013 at 08:58:22PM +0100, Arnaud Ebalard wrote: > Hi, > > Add support for NETGEAR ReadyNAS Duo v2 (Hardware specs available > here: http://natisbad.org/NAS/). Hi Arnaud Thats a nice description of the hardware. There is another device using the same power supply controller, the USI Topkick. A few of the maintainers have these, so there would be the possibility of cooperating on a driver. It does not seem that complex a device. The topkick also seems to do Wake-on-LAN using this controller. There was a patch added recently which may allow this to work, depending on the PHY. > index 13482ea..511cd7d 100644 > --- a/arch/arm/configs/kirkwood_defconfig > +++ b/arch/arm/configs/kirkwood_defconfig > @@ -35,6 +35,7 @@ CONFIG_MACH_NETSPACE_LITE_V2_DT=y > CONFIG_MACH_NETSPACE_MINI_V2_DT=y > CONFIG_MACH_OPENBLOCKS_A6_DT=y > CONFIG_MACH_TOPKICK_DT=y > +CONFIG_MACH_READYNAS_DT=y > CONFIG_MACH_TS219=y > CONFIG_MACH_TS41X=y > CONFIG_MACH_DOCKSTAR=y Keeping with alphabetic ordering, it should be one place higher.... > diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig > index 7b6a64b..94df386 100644 > --- a/arch/arm/mach-kirkwood/Kconfig > +++ b/arch/arm/mach-kirkwood/Kconfig > @@ -108,6 +108,15 @@ config MACH_TS219_DT > or MV6282. If you have the wrong one, the buttons will not > work. > > +config MACH_READYNAS_DT > + bool "NETGEAR ReadyNAS Duo v2 (Flattened Device Tree)" > + select ARCH_KIRKWOOD_DT > + select ARM_APPENDED_DTB > + select ARM_ATAG_DTB_COMPAT > + help > + Say 'Y' here if you want your kernel to support the > + NETGEAR ReadyNAS Duo v2 using Fattened Device Tree. > + Again, should be a bit earlier. > config MACH_DOCKSTAR_DT > bool "Seagate FreeAgent Dockstar (Flattened Device Tree)" > select ARCH_KIRKWOOD_DT > diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile > index 4cc4bee..b9108ea 100644 > --- a/arch/arm/mach-kirkwood/Makefile > +++ b/arch/arm/mach-kirkwood/Makefile > @@ -26,6 +26,7 @@ obj-$(CONFIG_MACH_ICONNECT_DT) += board-iconnect.o > obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += board-dnskw.o > obj-$(CONFIG_MACH_IB62X0_DT) += board-ib62x0.o > obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.o > +obj-$(CONFIG_MACH_READYNAS_DT) += board-readynas.o > obj-$(CONFIG_MACH_DOCKSTAR_DT) += board-dockstar.o > obj-$(CONFIG_MACH_GOFLEXNET_DT) += board-goflexnet.o > obj-$(CONFIG_MACH_LSXL_DT) += board-lsxl.o Yes, you can guess.... Where ever you have inserted something, make sure it follows the given ordering. The issue here is merge conflicts. If we get another device contributed that is also added at the end, we get conflicts. If merges happening in the middle, the likelihood of a conflict is much smaller. > diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c > index 2e73e9d..a29f2ee 100644 > --- a/arch/arm/mach-kirkwood/board-dt.c > +++ b/arch/arm/mach-kirkwood/board-dt.c > @@ -144,6 +144,9 @@ static void __init kirkwood_dt_init(void) > if (of_machine_is_compatible("usi,topkick")) > usi_topkick_init(); > > + if (of_machine_is_compatible("netgear,readynas-duo-v2")) > + netgear_readynas_init(); > + > of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL); > } > > @@ -169,6 +172,7 @@ static const char * const kirkwood_dt_board_compat[] = { > "plathome,openblocks-a6", > "usi,topkick", > "zyxel,nsa310", > + "netgear,readynas-duo-v2", > NULL > }; > > diff --git a/arch/arm/mach-kirkwood/board-readynas.c b/arch/arm/mach-kirkwood/board-readynas.c > new file mode 100644 > index 0000000..47bc25e > --- /dev/null > +++ b/arch/arm/mach-kirkwood/board-readynas.c > @@ -0,0 +1,30 @@ > +/* > + * NETGEAR ReadyNAS Duo v2 Board setup for drivers not already > + * converted to DT. > + * > + * Copyright (C) 2013, Arnaud EBALARD <arno@natisbad.org> > + * > + * 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. > + */ > + > +#include <linux/kernel.h> > +#include <linux/init.h> > +#include <linux/platform_device.h> > +#include <linux/mv643xx_eth.h> > +#include <linux/delay.h> > +#include <asm/io.h> > +#include <mach/kirkwood.h> > +#include "common.h" Now that the msleep() has gone, delay.h is probably not needed. Maybe also io.h is not needed any more with the regulator DT? These are all minor issues. The code is good otherwise. Thanks Andrew
Hi, Andrew Lunn <andrew@lunn.ch> writes: > On Tue, Mar 19, 2013 at 08:58:22PM +0100, Arnaud Ebalard wrote: >> Hi, >> >> Add support for NETGEAR ReadyNAS Duo v2 (Hardware specs available >> here: http://natisbad.org/NAS/). > > Hi Arnaud > > Thats a nice description of the hardware. There is another device > using the same power supply controller, the USI Topkick. A few of the > maintainers have these, so there would be the possibility of > cooperating on a driver. It does not seem that complex a device. The > topkick also seems to do Wake-on-LAN using this controller. There was > a patch added recently which may allow this to work, depending on the > PHY. Does not come as a surprise. Netgear's 2.6.31.8 kernel contains a lot of the following: This kernel which derived from kernel-2.6.31-topkick1281p2 used for both Netgear DUOv3 and NV+v4. It is based on kernel 2.6.31.8 and Marvell 5.1.3 patch. Specially the USB3.0 driver come from kernel 2.6.39. Note: everything in it is marked DUOv3 even though the device is branded Duo v2. Don't know why. >> index 13482ea..511cd7d 100644 >> --- a/arch/arm/configs/kirkwood_defconfig >> +++ b/arch/arm/configs/kirkwood_defconfig >> @@ -35,6 +35,7 @@ CONFIG_MACH_NETSPACE_LITE_V2_DT=y >> CONFIG_MACH_NETSPACE_MINI_V2_DT=y >> CONFIG_MACH_OPENBLOCKS_A6_DT=y >> CONFIG_MACH_TOPKICK_DT=y >> +CONFIG_MACH_READYNAS_DT=y >> CONFIG_MACH_TS219=y >> CONFIG_MACH_TS41X=y >> CONFIG_MACH_DOCKSTAR=y > > Keeping with alphabetic ordering, it should be one place higher.... Damned, I saw TS followed by DOCKSTAR and thought the rule did not apply. Will resend a v3 with corrected ordering ... >> diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c >> + >> +#include <linux/kernel.h> >> +#include <linux/init.h> >> +#include <linux/platform_device.h> >> +#include <linux/mv643xx_eth.h> >> +#include <linux/delay.h> >> +#include <asm/io.h> >> +#include <mach/kirkwood.h> >> +#include "common.h" > > Now that the msleep() has gone, delay.h is probably not needed. Maybe > also io.h is not needed any more with the regulator DT? ... and that one too. Good catch. Thanks, a+
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 9c62558..125211d 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -65,6 +65,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-dns320.dtb \ kirkwood-lschlv2.dtb \ kirkwood-lsxhl.dtb \ kirkwood-mplcec4.dtb \ + kirkwood-netgear_readynas_duo_v2.dtb \ kirkwood-ns2.dtb \ kirkwood-ns2lite.dtb \ kirkwood-ns2max.dtb \ diff --git a/arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts b/arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts new file mode 100644 index 0000000..3756e5c --- /dev/null +++ b/arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts @@ -0,0 +1,180 @@ +/dts-v1/; + +/include/ "kirkwood.dtsi" +/include/ "kirkwood-6282.dtsi" + +/ { + model = "NETGEAR ReadyNAS Duo v2"; + compatible = "netgear,readynas-duo-v2", "netgear,readynas", "marvell,kirkwood-88f6282", "marvell,kirkwood"; + + memory { /* 256 MB */ + device_type = "memory"; + reg = <0x00000000 0x10000000>; + }; + + chosen { + bootargs = "console=ttyS0,115200n8 earlyprintk"; + }; + + ocp@f1000000 { + pinctrl: pinctrl@10000 { + + pinctrl-0 = < &pmx_uart0 + &pmx_button_power + &pmx_button_backup + &pmx_button_power + &pmx_led_power + &pmx_led_blue_activity + &pmx_led_blue_disk1 + &pmx_led_blue_disk2 + &pmx_led_blue_backup >; + pinctrl-names = "default"; + + pmx_button_power: pmx-button-power { + marvell,pins = "mpp47"; + marvell,function = "gpio"; + }; + pmx_button_backup: pmx-button-backup { + marvell,pins = "mpp45"; + marvell,function = "gpio"; + }; + pmx_button_reset: pmx-button-reset { + marvell,pins = "mpp13"; + marvell,function = "gpio"; + }; + pmx_led_power: pmx-led-power { + marvell,pins = "mpp31"; + marvell,function = "gpio"; + }; + pmx_led_blue_activity: pmx-led-blue-activity { + marvell,pins = "mpp38"; + marvell,function = "gpio"; + }; + pmx_led_blue_disk1: pmx-led-blue-disk1 { + marvell,pins = "mpp23"; + marvell,function = "gpio"; + }; + pmx_led_blue_disk2: pmx-led-blue-disk2 { + marvell,pins = "mpp22"; + marvell,function = "gpio"; + }; + pmx_led_blue_backup: pmx-led-blue-backup { + marvell,pins = "mpp29"; + marvell,function = "gpio"; + }; + }; + + i2c@11000 { + status = "okay"; + + rs5c372a: rs5c372a@32 { + compatible = "ricoh,rs5c372a"; + reg = <0x32>; + }; + }; + + serial@12000 { + status = "okay"; + }; + + nand@3000000 { + status = "okay"; + + partition@0 { + label = "u-boot"; + reg = <0x0000000 0x180000>; + read-only; + }; + + partition@180000 { + label = "u-boot-env"; + reg = <0x180000 0x20000>; + }; + + partition@200000 { + label = "uImage"; + reg = <0x0200000 0x600000>; + }; + + partition@800000 { + label = "minirootfs"; + reg = <0x0800000 0x1000000>; + }; + + partition@1800000 { + label = "jffs2"; + reg = <0x1800000 0x6800000>; + }; + }; + + sata@80000 { + status = "okay"; + nr-ports = <2>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + power_led { + label = "status:blue:power_led"; + gpios = <&gpio0 31 1>; /* GPIO 31 Active Low */ + linux,default-trigger = "default-on"; + }; + activity_led { + label = "status:blue:activity_led"; + gpios = <&gpio1 6 1>; /* GPIO 38 Active Low */ + }; + disk1_led { + label = "status:blue:disk1_led"; + gpios = <&gpio0 23 1>; /* GPIO 23 Active Low */ + }; + disk2_led { + label = "status:blue:disk2_led"; + gpios = <&gpio0 22 1>; /* GPIO 22 Active Low */ + }; + backup_led { + label = "status:blue:backup_led"; + gpios = <&gpio0 29 1>; /* GPIO 29 Active Low*/ + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + button@1 { + label = "Power Button"; + linux,code = <116>; /* KEY_POWER */ + gpios = <&gpio1 15 1>; + }; + button@2 { + label = "Reset Button"; + linux,code = <0x198>; /* KEY_RESTART */ + gpios = <&gpio0 13 1>; + }; + button@3 { + label = "Backup Button"; + linux,code = <133>; /* KEY_COPY */ + gpios = <&gpio1 13 1>; + }; + }; + + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + usb_power: regulator@1 { + compatible = "regulator-fixed"; + reg = <1>; + regulator-name = "USB 3.0 Power"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + regulator-always-on; + regulator-boot-on; + gpio = <&gpio1 14 0>; + }; + }; +}; diff --git a/arch/arm/configs/kirkwood_defconfig b/arch/arm/configs/kirkwood_defconfig index 13482ea..511cd7d 100644 --- a/arch/arm/configs/kirkwood_defconfig +++ b/arch/arm/configs/kirkwood_defconfig @@ -35,6 +35,7 @@ CONFIG_MACH_NETSPACE_LITE_V2_DT=y CONFIG_MACH_NETSPACE_MINI_V2_DT=y CONFIG_MACH_OPENBLOCKS_A6_DT=y CONFIG_MACH_TOPKICK_DT=y +CONFIG_MACH_READYNAS_DT=y CONFIG_MACH_TS219=y CONFIG_MACH_TS41X=y CONFIG_MACH_DOCKSTAR=y diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig index 7b6a64b..94df386 100644 --- a/arch/arm/mach-kirkwood/Kconfig +++ b/arch/arm/mach-kirkwood/Kconfig @@ -108,6 +108,15 @@ config MACH_TS219_DT or MV6282. If you have the wrong one, the buttons will not work. +config MACH_READYNAS_DT + bool "NETGEAR ReadyNAS Duo v2 (Flattened Device Tree)" + select ARCH_KIRKWOOD_DT + select ARM_APPENDED_DTB + select ARM_ATAG_DTB_COMPAT + help + Say 'Y' here if you want your kernel to support the + NETGEAR ReadyNAS Duo v2 using Fattened Device Tree. + config MACH_DOCKSTAR_DT bool "Seagate FreeAgent Dockstar (Flattened Device Tree)" select ARCH_KIRKWOOD_DT diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile index 4cc4bee..b9108ea 100644 --- a/arch/arm/mach-kirkwood/Makefile +++ b/arch/arm/mach-kirkwood/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_MACH_ICONNECT_DT) += board-iconnect.o obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += board-dnskw.o obj-$(CONFIG_MACH_IB62X0_DT) += board-ib62x0.o obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.o +obj-$(CONFIG_MACH_READYNAS_DT) += board-readynas.o obj-$(CONFIG_MACH_DOCKSTAR_DT) += board-dockstar.o obj-$(CONFIG_MACH_GOFLEXNET_DT) += board-goflexnet.o obj-$(CONFIG_MACH_LSXL_DT) += board-lsxl.o diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c index 2e73e9d..a29f2ee 100644 --- a/arch/arm/mach-kirkwood/board-dt.c +++ b/arch/arm/mach-kirkwood/board-dt.c @@ -144,6 +144,9 @@ static void __init kirkwood_dt_init(void) if (of_machine_is_compatible("usi,topkick")) usi_topkick_init(); + if (of_machine_is_compatible("netgear,readynas-duo-v2")) + netgear_readynas_init(); + of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL); } @@ -169,6 +172,7 @@ static const char * const kirkwood_dt_board_compat[] = { "plathome,openblocks-a6", "usi,topkick", "zyxel,nsa310", + "netgear,readynas-duo-v2", NULL }; diff --git a/arch/arm/mach-kirkwood/board-readynas.c b/arch/arm/mach-kirkwood/board-readynas.c new file mode 100644 index 0000000..47bc25e --- /dev/null +++ b/arch/arm/mach-kirkwood/board-readynas.c @@ -0,0 +1,30 @@ +/* + * NETGEAR ReadyNAS Duo v2 Board setup for drivers not already + * converted to DT. + * + * Copyright (C) 2013, Arnaud EBALARD <arno@natisbad.org> + * + * 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. + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/mv643xx_eth.h> +#include <linux/delay.h> +#include <asm/io.h> +#include <mach/kirkwood.h> +#include "common.h" + +static struct mv643xx_eth_platform_data netgear_readynas_ge00_data = { + .phy_addr = MV643XX_ETH_PHY_ADDR(0), +}; + +void __init netgear_readynas_init(void) +{ + kirkwood_ge00_init(&netgear_readynas_ge00_data); + kirkwood_pcie_init(KW_PCIE0); +} diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 5ed7056..ed9a4bd 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h @@ -147,6 +147,12 @@ void usi_topkick_init(void); static inline void usi_topkick_init(void) {}; #endif +#ifdef CONFIG_MACH_READYNAS_DT +void netgear_readynas_init(void); +#else +static inline void netgear_readynas_init(void) {}; +#endif + /* early init functions not converted to fdt yet */ char *kirkwood_id(void); void kirkwood_l2_init(void);