On Sun, 31 May 2015 02:18:26 +0200 Alban Bedel <albeu@xxxxxxx> wrote: > Add a DTS for TL-WR1043ND version 1 and allow to have it built in the > kernel to circumvent the broken u-boot found on these boards. > Currently only the UART, LEDs and buttons are supported. > > Signed-off-by: Alban Bedel <albeu@xxxxxxx> > --- > v2: * Rebased for the new vendor directory structure > * Merged the 2 separate patch for SoC dtsi and board DTS in a > single one > * Fixed the node names to use ePAPR standardized names > v3: * Moved adding the Kconfig Builtin devicetree menu to this patch > * Set the Kconfig builtin DTB menu as optional, removed config > DTB_ATH79_NONE and slightly improved the menu name and help > message. > v4: * Always build the DTB to improve testing coverage > * Added the SPI controller as the binding has been accepted in > the SPI tree. > --- > arch/mips/ath79/Kconfig | 12 ++ > arch/mips/boot/dts/Makefile | 1 + > arch/mips/boot/dts/qca/Makefile | 11 ++ > arch/mips/boot/dts/qca/ar9132.dtsi | 133 +++++++++++++++++++++++ > arch/mips/boot/dts/qca/ar9132_tl_wr1043nd_v1.dts | 112 +++++++++++++++++++ > 5 files changed, 269 insertions(+) > create mode 100644 arch/mips/boot/dts/qca/Makefile > create mode 100644 arch/mips/boot/dts/qca/ar9132.dtsi > create mode 100644 arch/mips/boot/dts/qca/ar9132_tl_wr1043nd_v1.dts > > diff --git a/arch/mips/ath79/Kconfig b/arch/mips/ath79/Kconfig > index dfc6020..13c04cf 100644 > --- a/arch/mips/ath79/Kconfig > +++ b/arch/mips/ath79/Kconfig > @@ -71,6 +71,18 @@ config ATH79_MACH_UBNT_XM > Say 'Y' here if you want your kernel to support the > Ubiquiti Networks XM (rev 1.0) board. > > +choice > + prompt "Build a DTB in the kernel" > + optional > + help > + Select a devicetree that should be built into the kernel. > + > + config DTB_TL_WR1043ND_V1 > + bool "TL-WR1043ND Version 1" > + select BUILTIN_DTB > + select SOC_AR913X > +endchoice > + > endmenu > > config SOC_AR71XX > diff --git a/arch/mips/boot/dts/Makefile b/arch/mips/boot/dts/Makefile > index 5d95e4b..9975485 100644 > --- a/arch/mips/boot/dts/Makefile > +++ b/arch/mips/boot/dts/Makefile > @@ -3,6 +3,7 @@ dts-dirs += cavium-octeon > dts-dirs += lantiq > dts-dirs += mti > dts-dirs += netlogic > +dts-dirs += qca > dts-dirs += ralink > > obj-y := $(addsuffix /, $(dts-dirs)) > diff --git a/arch/mips/boot/dts/qca/Makefile b/arch/mips/boot/dts/qca/Makefile > new file mode 100644 > index 0000000..2d61455d > --- /dev/null > +++ b/arch/mips/boot/dts/qca/Makefile > @@ -0,0 +1,11 @@ > +# All DTBs > +dtb-$(CONFIG_ATH79) += ar9132_tl_wr1043nd_v1.dtb > + > +# Select a DTB to build in the kernel > +obj-$(CONFIG_DTB_TL_WR1043ND_V1) += ar9132_tl_wr1043nd_v1.dtb.o > + > +# Force kbuild to make empty built-in.o if necessary > +obj- += dummy.o > + > +always := $(dtb-y) > +clean-files := *.dtb *.dtb.S > diff --git a/arch/mips/boot/dts/qca/ar9132.dtsi b/arch/mips/boot/dts/qca/ar9132.dtsi > new file mode 100644 > index 0000000..4759cff > --- /dev/null > +++ b/arch/mips/boot/dts/qca/ar9132.dtsi > @@ -0,0 +1,133 @@ > +/ { > + compatible = "qca,ar9132"; > + > + #address-cells = <1>; > + #size-cells = <1>; > + > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + cpu@0 { > + device_type = "cpu"; > + compatible = "mips,mips24Kc"; > + reg = <0>; > + }; > + }; > + > + cpuintc: interrupt-controller { > + compatible = "qca,ar9132-cpu-intc", "qca,ar7100-cpu-intc"; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + > + qca,ddr-wb-channel-interrupts = <2>, <3>, <4>, <5>; > + qca,ddr-wb-channels = <&ddr_ctrl 3>, <&ddr_ctrl 2>, > + <&ddr_ctrl 0>, <&ddr_ctrl 1>; > + }; > + > + ahb { > + compatible = "simple-bus"; > + ranges; > + > + #address-cells = <1>; > + #size-cells = <1>; > + > + interrupt-parent = <&cpuintc>; > + > + apb { > + compatible = "simple-bus"; > + ranges; > + > + #address-cells = <1>; > + #size-cells = <1>; > + > + interrupt-parent = <&miscintc>; > + > + ddr_ctrl: memory-controller@18000000 { > + compatible = "qca,ar9132-ddr-controller", > + "qca,ar7240-ddr-controller"; > + reg = <0x18000000 0x100>; > + > + #qca,ddr-wb-channel-cells = <1>; > + }; > + > + uart@18020000 { > + compatible = "ns8250"; > + reg = <0x18020000 0x20>; > + interrupts = <3>; > + > + clocks = <&pll 2>; > + clock-names = "uart"; > + > + reg-io-width = <4>; > + reg-shift = <2>; > + no-loopback-test; > + > + status = "disabled"; > + }; > + > + gpio: gpio@18040000 { > + compatible = "qca,ar9132-gpio", > + "qca,ar7100-gpio"; > + reg = <0x18040000 0x30>; > + interrupts = <2>; > + > + ngpios = <22>; > + > + gpio-controller; > + #gpio-cells = <2>; > + > + interrupt-controller; > + #interrupt-cells = <2>; > + }; > + > + pll: pll-controller@18050000 { > + compatible = "qca,ar9132-ppl", > + "qca,ar9130-pll"; > + reg = <0x18050000 0x20>; > + > + clock-names = "ref"; > + /* The board must provides the ref clock */ > + > + #clock-cells = <1>; > + clock-output-names = "cpu", "ddr", "ahb"; > + }; > + > + wdt@18060008 { > + compatible = "qca,ar7130-wdt"; > + reg = <0x18060008 0x8>; > + > + interrupts = <4>; > + > + clocks = <&pll 2>; > + clock-names = "wdt"; > + }; > + > + miscintc: interrupt-controller@18060010 { > + compatible = "qca,ar9132-misc-intc", > + "qca,ar7100-misc-intc"; > + reg = <0x18060010 0x4>; > + > + interrupt-parent = <&cpuintc>; > + interrupts = <6>; > + > + interrupt-controller; > + #interrupt-cells = <1>; > + }; > + }; > + > + spi@1f000000 { Could we add an alias here? E.g. spi: spi@1f000000 { So we can use the alias in the board dts file with zero indent. E.g &spi { status = "okay"; num-cs = <1>; flash@0 { ... Just the same change can be used with uart@18020000. > diff --git a/arch/mips/boot/dts/qca/ar9132_tl_wr1043nd_v1.dts b/arch/mips/boot/dts/qca/ar9132_tl_wr1043nd_v1.dts > new file mode 100644 > index 0000000..003015a > --- /dev/null > +++ b/arch/mips/boot/dts/qca/ar9132_tl_wr1043nd_v1.dts > @@ -0,0 +1,112 @@ > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > + > +#include "ar9132.dtsi" > + > +/ { > + compatible = "tplink,tl-wr1043nd-v1", "qca,ar9132"; > + model = "TP-Link TL-WR1043ND Version 1"; > + > + alias { > + serial0 = "/ahb/apb/uart@18020000"; > + }; > + > + memory@0 { > + device_type = "memory"; > + reg = <0x0 0x2000000>; > + }; > + > + extosc: oscillator { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <40000000>; > + }; > + > + ahb { > + apb { > + uart@18020000 { > + status = "okay"; > + }; > + > + pll-controller@18050000 { > + clocks = <&extosc>; > + }; > + }; > + > + spi@1f000000 { > + status = "okay"; > + num-cs = <1>; > + > + flash@0 { > + #address-cells = <1>; > + #size-cells = <1>; > + compatible = "s25sl064a"; > + reg = <0>; > + spi-max-frequency = <25000000>; > + > + partition@0 { > + label = "u-boot"; > + reg = <0x000000 0x020000>; > + }; > + > + partition@1 { > + label = "firmware"; > + reg = <0x020000 0x7D0000>; > + }; > + > + partition@2 { > + label = "art"; > + reg = <0x7F0000 0x010000>; > + read-only; > + }; > + }; > + }; > + }; > + > + gpio-keys { > + compatible = "gpio-keys-polled"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + poll-interval = <20>; > + button@0 { > + label = "reset"; > + linux,code = <KEY_RESTART>; > + gpios = <&gpio 3 GPIO_ACTIVE_LOW>; > + debounce-interval = <60>; > + }; > + > + button@1 { > + label = "qss"; > + linux,code = <KEY_WPS_BUTTON>; > + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; > + debounce-interval = <60>; > + }; > + }; > + > + leds { > + compatible = "gpio-leds"; > + led@0 { > + label = "tp-link:green:usb"; > + gpios = <&gpio 1 GPIO_ACTIVE_LOW>; > + }; > + > + led@1 { > + label = "tp-link:green:system"; > + gpios = <&gpio 2 GPIO_ACTIVE_LOW>; > + linux,default-trigger = "heartbeat"; > + }; > + > + led@2 { > + label = "tp-link:green:qss"; > + gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; > + }; > + > + led@3 { > + label = "tp-link:green:wlan"; > + gpios = <&gpio 9 GPIO_ACTIVE_LOW>; > + }; > + }; > +}; > -- > 2.0.0 > > -- -- Best regards, Antony Pavlov