Message ID | 1341325365-21393-9-git-send-email-andrew@lunn.ch (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Hi Andrew, On Tuesday 03 July 2012 16:22:41 Andrew Lunn wrote: > The two different variants of QNAP TS devices, varying by SoC, put the > GPIO keys on different GPIO lines. Hence we need two different DT > board descriptions, which share the same board-ts219.c file. Why don't you reorder this patch to be after patch 11/12 so that you do not need to update this file in patch 11/12? > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> > Acked-by: Jason Cooper <jason@lakedaemon.net> > --- [snip] > > +config MACH_TS219_DT > + bool "Device Tree for QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" This looks too long, how about just "Device Tree for QNAP TS-11x, TS-21x NAS" for instance? > + 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 QNAP > + TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and > + TS-219P+ Turbo NAS devices using Fattened Device Tree. > + There are two different Device Tree descriptions, depending > + on if the device is based on an if the board uses the MV6281 > + or MV6282. If you have the wrong one, the buttons will not > + work. > + > config MACH_TS219 > bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" > help > diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile > index d2b0590..0468b23 100644 > --- a/arch/arm/mach-kirkwood/Makefile > +++ b/arch/arm/mach-kirkwood/Makefile > @@ -25,3 +25,4 @@ obj-$(CONFIG_MACH_DREAMPLUG_DT) += board-dreamplug.o > 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 > diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach- kirkwood/Makefile.boot > index 02edbdf..4a1f66a 100644 > --- a/arch/arm/mach-kirkwood/Makefile.boot > +++ b/arch/arm/mach-kirkwood/Makefile.boot > @@ -7,3 +7,4 @@ dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns320.dtb > dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb > dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb > dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb > +dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-qnap-ts219.dtb > diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach- kirkwood/board-dt.c > index 24c8fdd..b7cd6d2 100644 > --- a/arch/arm/mach-kirkwood/board-dt.c > +++ b/arch/arm/mach-kirkwood/board-dt.c > @@ -76,6 +76,9 @@ static void __init kirkwood_dt_init(void) > if (of_machine_is_compatible("raidsonic,ib-nas62x0")) > ib62x0_init(); > > + if (of_machine_is_compatible("qnap,ts219")) > + qnap_dt_ts219_init(); > + > of_platform_populate(NULL, kirkwood_dt_match_table, > kirkwood_auxdata_lookup, NULL); > } > @@ -86,6 +89,7 @@ static const char *kirkwood_dt_board_compat[] = { > "dlink,dns-325", > "iom,iconnect", > "raidsonic,ib-nas62x0", > + "qnap,ts219", > NULL > }; > > diff --git a/arch/arm/mach-kirkwood/board-ts219.c b/arch/arm/mach- kirkwood/board-ts219.c > new file mode 100644 > index 0000000..00b79ea > --- /dev/null > +++ b/arch/arm/mach-kirkwood/board-ts219.c > @@ -0,0 +1,87 @@ > +/* > + * > + * QNAP TS-11x/TS-21x Turbo NAS Board Setup via DT > + * > + * Copyright (C) 2012 Andrew Lunn <andrew@lunn.ch> > + * > + * Based on the board file ts219-setup.c: > + * > + * Copyright (C) 2009 Martin Michlmayr <tbm@cyrius.com> > + * Copyright (C) 2008 Byron Bradley <byron.bbradley@gmail.com> > + * > + * 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/ata_platform.h> > +#include <linux/gpio_keys.h> > +#include <linux/input.h> > +#include <asm/mach-types.h> > +#include <asm/mach/arch.h> > +#include <mach/kirkwood.h> > +#include "common.h" > +#include "mpp.h" > +#include "tsx1x-common.h" > + > +static struct mv643xx_eth_platform_data qnap_ts219_ge00_data = { > + .phy_addr = MV643XX_ETH_PHY_ADDR(8), > +}; > + > +static struct mv_sata_platform_data qnap_ts219_sata_data = { > + .n_ports = 2, > +}; > + > +static unsigned int qnap_ts219_mpp_config[] __initdata = { > + MPP0_SPI_SCn, > + MPP1_SPI_MOSI, > + MPP2_SPI_SCK, > + MPP3_SPI_MISO, > + MPP4_SATA1_ACTn, > + MPP5_SATA0_ACTn, > + MPP8_TW0_SDA, > + MPP9_TW0_SCK, > + MPP10_UART0_TXD, > + MPP11_UART0_RXD, > + MPP13_UART1_TXD, /* PIC controller */ > + MPP14_UART1_RXD, /* PIC controller */ > + MPP15_GPIO, /* USB Copy button (on devices with 88F6281) */ > + MPP16_GPIO, /* Reset button (on devices with 88F6281) */ > + MPP36_GPIO, /* RAM: 0: 256 MB, 1: 512 MB */ > + MPP37_GPIO, /* Reset button (on devices with 88F6282) */ > + MPP43_GPIO, /* USB Copy button (on devices with 88F6282) */ > + MPP44_GPIO, /* Board ID: 0: TS-11x, 1: TS-21x */ > + 0 > +}; > + > +void __init qnap_dt_ts219_init(void) > +{ > + u32 dev, rev; > + > + kirkwood_mpp_conf(qnap_ts219_mpp_config); > + > + kirkwood_pcie_id(&dev, &rev); > + if (dev == MV88F6282_DEV_ID) > + qnap_ts219_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); > + > + kirkwood_ge00_init(&qnap_ts219_ge00_data); > + kirkwood_sata_init(&qnap_ts219_sata_data); > + kirkwood_ehci_init(); > + > + pm_power_off = qnap_tsx1x_power_off; > +} > + > +/* FIXME: Will not work with DT. Maybe use MPP40_GPIO? */ > +static int __init ts219_pci_init(void) > +{ > + if (machine_is_ts219()) > + kirkwood_pcie_init(KW_PCIE0); > + > + return 0; > +} > +subsys_initcall(ts219_pci_init); > diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach- kirkwood/common.h > index 9248fa2..e0c2324 100644 > --- a/arch/arm/mach-kirkwood/common.h > +++ b/arch/arm/mach-kirkwood/common.h > @@ -58,6 +58,11 @@ void dreamplug_init(void); > #else > static inline void dreamplug_init(void) {}; > #endif > +#ifdef CONFIG_MACH_TS219_DT > +void qnap_dt_ts219_init(void); > +#else > +static inline void qnap_dt_ts219_init(void) {}; > +#endif > > #ifdef CONFIG_MACH_DLINK_KIRKWOOD_DT > void dnskw_init(void); > -- > 1.7.10 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
On Tue, Jul 03, 2012 at 05:47:57PM +0200, Florian Fainelli wrote: > Hi Andrew, > > On Tuesday 03 July 2012 16:22:41 Andrew Lunn wrote: > > The two different variants of QNAP TS devices, varying by SoC, put the > > GPIO keys on different GPIO lines. Hence we need two different DT > > board descriptions, which share the same board-ts219.c file. > > Why don't you reorder this patch to be after patch 11/12 so that you do not > need to update this file in patch 11/12? It just reflects the order i did the work. I can rebase it, but what is the advantage? It should be fully bisectable as is. > > > > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> > > Acked-by: Jason Cooper <jason@lakedaemon.net> > > --- > [snip] > > > > +config MACH_TS219_DT > > + bool "Device Tree for QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, > TS-219P and TS-219P+ Turbo NAS" > > This looks too long, how about just "Device Tree for QNAP TS-11x, TS-21x NAS" > for instance? Yes, i was not too happy with this. I copied the none DT version as a basis, since that is what kernel builds know at the moment. Since i'm not alone not liking it, i will change it as you suggested. Thanks Andrew ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
diff --git a/arch/arm/boot/dts/kirkwood-ts219-6281.dts b/arch/arm/boot/dts/kirkwood-ts219-6281.dts new file mode 100644 index 0000000..ccbf327 --- /dev/null +++ b/arch/arm/boot/dts/kirkwood-ts219-6281.dts @@ -0,0 +1,21 @@ +/dts-v1/; + +/include/ "kirkwood-ts219.dtsi" + +/ { + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + button@1 { + label = "USB Copy"; + linux,code = <133>; + gpios = <&gpio0 15 1>; + }; + button@2 { + label = "Reset"; + linux,code = <0x198>; + gpios = <&gpio0 16 1>; + }; + }; +}; \ No newline at end of file diff --git a/arch/arm/boot/dts/kirkwood-ts219-6282.dts b/arch/arm/boot/dts/kirkwood-ts219-6282.dts new file mode 100644 index 0000000..fbe9932 --- /dev/null +++ b/arch/arm/boot/dts/kirkwood-ts219-6282.dts @@ -0,0 +1,21 @@ +/dts-v1/; + +/include/ "kirkwood-ts219.dtsi" + +/ { + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + button@1 { + label = "USB Copy"; + linux,code = <133>; + gpios = <&gpio1 11 1>; + }; + button@2 { + label = "Reset"; + linux,code = <0x198>; + gpios = <&gpio1 5 1>; + }; + }; +}; \ No newline at end of file diff --git a/arch/arm/boot/dts/kirkwood-ts219.dtsi b/arch/arm/boot/dts/kirkwood-ts219.dtsi new file mode 100644 index 0000000..e0520c3 --- /dev/null +++ b/arch/arm/boot/dts/kirkwood-ts219.dtsi @@ -0,0 +1,73 @@ +/include/ "kirkwood.dtsi" + +/ { + model = "QNAP TS219 family"; + compatible = "qnap,ts219", "mrvl,kirkwood"; + + memory { + device_type = "memory"; + reg = <0x00000000 0x20000000>; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + ocp@f1000000 { + i2c@11000 { + status = "okay"; + + s35390a: s35390a@30 { + compatible = "s35390a"; + reg = <0x30>; + }; + }; + serial@12000 { + clock-frequency = <200000000>; + status = "okay"; + }; + serial@12100 { + clock-frequency = <200000000>; + status = "okay"; + }; + spi@10600 { + status = "okay"; + + m25p128@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "m25p128"; + reg = <0>; + spi-max-frequency = <20000000>; + mode = <0>; + + partition@0000000 { + reg = <0x00000000 0x00080000>; + label = "U-Boot"; + }; + + partition@00200000 { + reg = <0x00200000 0x00200000>; + label = "Kernel"; + }; + + partition@00400000 { + reg = <0x00400000 0x00900000>; + label = "RootFS1"; + }; + partition@00d00000 { + reg = <0x00d00000 0x00300000>; + label = "RootFS2"; + }; + partition@00040000 { + reg = <0x00080000 0x00040000>; + label = "U-Boot Config"; + }; + partition@000c0000 { + reg = <0x000c0000 0x00140000>; + label = "NAS Config"; + }; + }; + }; + }; +}; diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig index 199764f..089d094 100644 --- a/arch/arm/mach-kirkwood/Kconfig +++ b/arch/arm/mach-kirkwood/Kconfig @@ -80,6 +80,20 @@ config MACH_IB62X0_DT RaidSonic IB-NAS6210 & IB-NAS6220 devices, using Flattened Device Tree. +config MACH_TS219_DT + bool "Device Tree for QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" + 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 QNAP + TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and + TS-219P+ Turbo NAS devices using Fattened Device Tree. + There are two different Device Tree descriptions, depending + on if the device is based on an if the board uses the MV6281 + or MV6282. If you have the wrong one, the buttons will not + work. + config MACH_TS219 bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" help diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile index d2b0590..0468b23 100644 --- a/arch/arm/mach-kirkwood/Makefile +++ b/arch/arm/mach-kirkwood/Makefile @@ -25,3 +25,4 @@ obj-$(CONFIG_MACH_DREAMPLUG_DT) += board-dreamplug.o 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 diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot index 02edbdf..4a1f66a 100644 --- a/arch/arm/mach-kirkwood/Makefile.boot +++ b/arch/arm/mach-kirkwood/Makefile.boot @@ -7,3 +7,4 @@ dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns320.dtb dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb +dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-qnap-ts219.dtb diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c index 24c8fdd..b7cd6d2 100644 --- a/arch/arm/mach-kirkwood/board-dt.c +++ b/arch/arm/mach-kirkwood/board-dt.c @@ -76,6 +76,9 @@ static void __init kirkwood_dt_init(void) if (of_machine_is_compatible("raidsonic,ib-nas62x0")) ib62x0_init(); + if (of_machine_is_compatible("qnap,ts219")) + qnap_dt_ts219_init(); + of_platform_populate(NULL, kirkwood_dt_match_table, kirkwood_auxdata_lookup, NULL); } @@ -86,6 +89,7 @@ static const char *kirkwood_dt_board_compat[] = { "dlink,dns-325", "iom,iconnect", "raidsonic,ib-nas62x0", + "qnap,ts219", NULL }; diff --git a/arch/arm/mach-kirkwood/board-ts219.c b/arch/arm/mach-kirkwood/board-ts219.c new file mode 100644 index 0000000..00b79ea --- /dev/null +++ b/arch/arm/mach-kirkwood/board-ts219.c @@ -0,0 +1,87 @@ +/* + * + * QNAP TS-11x/TS-21x Turbo NAS Board Setup via DT + * + * Copyright (C) 2012 Andrew Lunn <andrew@lunn.ch> + * + * Based on the board file ts219-setup.c: + * + * Copyright (C) 2009 Martin Michlmayr <tbm@cyrius.com> + * Copyright (C) 2008 Byron Bradley <byron.bbradley@gmail.com> + * + * 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/ata_platform.h> +#include <linux/gpio_keys.h> +#include <linux/input.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <mach/kirkwood.h> +#include "common.h" +#include "mpp.h" +#include "tsx1x-common.h" + +static struct mv643xx_eth_platform_data qnap_ts219_ge00_data = { + .phy_addr = MV643XX_ETH_PHY_ADDR(8), +}; + +static struct mv_sata_platform_data qnap_ts219_sata_data = { + .n_ports = 2, +}; + +static unsigned int qnap_ts219_mpp_config[] __initdata = { + MPP0_SPI_SCn, + MPP1_SPI_MOSI, + MPP2_SPI_SCK, + MPP3_SPI_MISO, + MPP4_SATA1_ACTn, + MPP5_SATA0_ACTn, + MPP8_TW0_SDA, + MPP9_TW0_SCK, + MPP10_UART0_TXD, + MPP11_UART0_RXD, + MPP13_UART1_TXD, /* PIC controller */ + MPP14_UART1_RXD, /* PIC controller */ + MPP15_GPIO, /* USB Copy button (on devices with 88F6281) */ + MPP16_GPIO, /* Reset button (on devices with 88F6281) */ + MPP36_GPIO, /* RAM: 0: 256 MB, 1: 512 MB */ + MPP37_GPIO, /* Reset button (on devices with 88F6282) */ + MPP43_GPIO, /* USB Copy button (on devices with 88F6282) */ + MPP44_GPIO, /* Board ID: 0: TS-11x, 1: TS-21x */ + 0 +}; + +void __init qnap_dt_ts219_init(void) +{ + u32 dev, rev; + + kirkwood_mpp_conf(qnap_ts219_mpp_config); + + kirkwood_pcie_id(&dev, &rev); + if (dev == MV88F6282_DEV_ID) + qnap_ts219_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); + + kirkwood_ge00_init(&qnap_ts219_ge00_data); + kirkwood_sata_init(&qnap_ts219_sata_data); + kirkwood_ehci_init(); + + pm_power_off = qnap_tsx1x_power_off; +} + +/* FIXME: Will not work with DT. Maybe use MPP40_GPIO? */ +static int __init ts219_pci_init(void) +{ + if (machine_is_ts219()) + kirkwood_pcie_init(KW_PCIE0); + + return 0; +} +subsys_initcall(ts219_pci_init); diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 9248fa2..e0c2324 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h @@ -58,6 +58,11 @@ void dreamplug_init(void); #else static inline void dreamplug_init(void) {}; #endif +#ifdef CONFIG_MACH_TS219_DT +void qnap_dt_ts219_init(void); +#else +static inline void qnap_dt_ts219_init(void) {}; +#endif #ifdef CONFIG_MACH_DLINK_KIRKWOOD_DT void dnskw_init(void);