diff --git a/include/kernel-version.mk b/include/kernel-version.mk index a1f646d8475aaec2a329587c1e982db9c14c3ee1..58eee28f905b242d2cb6dd23fc3177a1861361f2 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -6,13 +6,13 @@ ifdef CONFIG_TESTING_KERNEL KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) endif -LINUX_VERSION-4.9 = .212 -LINUX_VERSION-4.14 = .169 -LINUX_VERSION-4.19 = .101 +LINUX_VERSION-4.9 = .214 +LINUX_VERSION-4.14 = .171 +LINUX_VERSION-4.19 = .106 -LINUX_KERNEL_HASH-4.9.212 = ade738a606c9b52ecf764e94b4e77116caa3a2b8abd30f4534d220ac6894be30 -LINUX_KERNEL_HASH-4.14.169 = d88ea97993c56b1fa0b0a05061bcde476c6be4fc3bb2de8bd97a8f8ff7278249 -LINUX_KERNEL_HASH-4.19.101 = be26156abdb38ac0576a34a235ef456bb8ca67fbbe56fc6649b8d069159f8bc4 +LINUX_KERNEL_HASH-4.9.214 = b47f093dac7034c7c4722e80042c05e4ef53c14a4f28aa992117a127d2b1e483 +LINUX_KERNEL_HASH-4.14.171 = 4fe02489e4b4a187eccf0ef87df6100534c9d485e76d876b1fa247c7635332a0 +LINUX_KERNEL_HASH-4.19.106 = 63c8bd76a9b282e18112f8ff9e3fd41e3d1df9f9b7248ea1a370b05a827e9cda remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1))))))) diff --git a/target/linux/ar71xx/patches-4.14/450-gpio-nxp-74hc153-gpio-chip-driver.patch b/target/linux/ar71xx/patches-4.14/450-gpio-nxp-74hc153-gpio-chip-driver.patch index 0902773ff4523ff0492c7cd5a5a4b62185439a57..48a36cc4ecd0da4b33430917b18c6ba4fd1332e7 100644 --- a/target/linux/ar71xx/patches-4.14/450-gpio-nxp-74hc153-gpio-chip-driver.patch +++ b/target/linux/ar71xx/patches-4.14/450-gpio-nxp-74hc153-gpio-chip-driver.patch @@ -1,6 +1,6 @@ --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1299,4 +1299,12 @@ config GPIO_VIPERBOARD +@@ -1300,4 +1300,12 @@ config GPIO_VIPERBOARD endmenu diff --git a/target/linux/ar71xx/patches-4.14/451-gpio-74x164-improve-platform-device-support.patch b/target/linux/ar71xx/patches-4.14/451-gpio-74x164-improve-platform-device-support.patch index 8039a71689016fa795ae9cdbd0746dc19320b789..b3c990ccec4d5fe97b0808b4ba4c83e17953e124 100644 --- a/target/linux/ar71xx/patches-4.14/451-gpio-74x164-improve-platform-device-support.patch +++ b/target/linux/ar71xx/patches-4.14/451-gpio-74x164-improve-platform-device-support.patch @@ -109,7 +109,7 @@ +#endif --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1251,7 +1251,6 @@ menu "SPI GPIO expanders" +@@ -1252,7 +1252,6 @@ menu "SPI GPIO expanders" config GPIO_74X164 tristate "74x164 serial-in/parallel-out 8-bits shift register" diff --git a/target/linux/ar71xx/patches-4.14/452-gpio-add-gpio-latch-driver.patch b/target/linux/ar71xx/patches-4.14/452-gpio-add-gpio-latch-driver.patch index 13c5781deec97ea1c9e8327cb185a6d31de5afd5..98e9123ce7bb152a0e423249342a0402781fc6ab 100644 --- a/target/linux/ar71xx/patches-4.14/452-gpio-add-gpio-latch-driver.patch +++ b/target/linux/ar71xx/patches-4.14/452-gpio-add-gpio-latch-driver.patch @@ -1,6 +1,6 @@ --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1306,4 +1306,9 @@ config GPIO_NXP_74HC153 +@@ -1307,4 +1307,9 @@ config GPIO_NXP_74HC153 Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO interface supporting input mode only. diff --git a/target/linux/ar71xx/patches-4.14/525-MIPS-ath79-enable-qca-usb-quirks.patch b/target/linux/ar71xx/patches-4.14/525-MIPS-ath79-enable-qca-usb-quirks.patch index 0e33674adf0a9df969be03b9d7a5606401cd9e08..3cafbe290ce7b55d81905dd840d889d6e6ced18f 100644 --- a/target/linux/ar71xx/patches-4.14/525-MIPS-ath79-enable-qca-usb-quirks.patch +++ b/target/linux/ar71xx/patches-4.14/525-MIPS-ath79-enable-qca-usb-quirks.patch @@ -77,7 +77,7 @@ + + switch (pdev->id) { + case 0: -+ base = 0x18116c94; ++ base = 0x18116d94; + break; + + case 1: diff --git a/target/linux/ar71xx/patches-4.14/910-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-4.14/910-unaligned_access_hacks.patch index f2732ebb20bacc82561cce1ee3251eb85087fb9a..6c216712b1edebc5bec7ee6e6caa5d8ec954f46e 100644 --- a/target/linux/ar71xx/patches-4.14/910-unaligned_access_hacks.patch +++ b/target/linux/ar71xx/patches-4.14/910-unaligned_access_hacks.patch @@ -831,7 +831,7 @@ * No flags defined yet. --- a/net/core/utils.c +++ b/net/core/utils.c -@@ -424,8 +424,14 @@ void inet_proto_csum_replace16(__sum16 * +@@ -441,8 +441,14 @@ void inet_proto_csum_replace16(__sum16 * bool pseudohdr) { __be32 diff[] = { diff --git a/target/linux/ar71xx/patches-4.14/953-qca955x-pci-reset-fixes.patch b/target/linux/ar71xx/patches-4.14/953-qca955x-pci-reset-fixes.patch new file mode 100644 index 0000000000000000000000000000000000000000..0acca2a08f4c933bc634dfb6f625a0779bf58531 --- /dev/null +++ b/target/linux/ar71xx/patches-4.14/953-qca955x-pci-reset-fixes.patch @@ -0,0 +1,120 @@ +--- a/arch/mips/ath79/common.c ++++ b/arch/mips/ath79/common.c +@@ -153,6 +153,24 @@ void ath79_device_reset_clear(u32 mask) + } + EXPORT_SYMBOL_GPL(ath79_device_reset_clear); + ++void ath79_device_reset2_clear(u32 mask) ++{ ++ unsigned long flags; ++ u32 reg; ++ u32 t; ++ ++ if (soc_is_qca955x()) ++ reg = QCA955X_RESET_REG_RESET2_MODULE; ++ else ++ panic("Reset register not defined for this SOC"); ++ ++ spin_lock_irqsave(&ath79_device_reset_lock, flags); ++ t = ath79_reset_rr(reg); ++ ath79_reset_wr(reg, t & ~mask); ++ spin_unlock_irqrestore(&ath79_device_reset_lock, flags); ++} ++EXPORT_SYMBOL_GPL(ath79_device_reset2_clear); ++ + u32 ath79_device_reset_get(u32 mask) + { + unsigned long flags; +--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h ++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h +@@ -411,6 +411,7 @@ + #define QCA955X_PLL_CPU_CONFIG_REG 0x00 + #define QCA955X_PLL_DDR_CONFIG_REG 0x04 + #define QCA955X_PLL_CLK_CTRL_REG 0x08 ++#define QCA955X_PLL_PCIE_CONFIG_REG 0x0c + #define QCA955X_PLL_ETH_XMII_CONTROL_REG 0x28 + #define QCA955X_PLL_ETH_SGMII_CONTROL_REG 0x48 + #define QCA955X_PLL_ETH_SGMII_SERDES_REG 0x4c +@@ -565,6 +566,7 @@ + #define QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS 0xac + + #define QCA955X_RESET_REG_RESET_MODULE 0x1c ++#define QCA955X_RESET_REG_RESET2_MODULE 0xc4 + #define QCA955X_RESET_REG_BOOTSTRAP 0xb0 + #define QCA955X_RESET_REG_EXT_INT_STATUS 0xac + +--- a/arch/mips/include/asm/mach-ath79/ath79.h ++++ b/arch/mips/include/asm/mach-ath79/ath79.h +@@ -178,6 +178,7 @@ static inline u32 ath79_reset_rr(unsigne + + void ath79_device_reset_set(u32 mask); + void ath79_device_reset_clear(u32 mask); ++void ath79_device_reset2_clear(u32 mask); + u32 ath79_device_reset_get(u32 mask); + + void ath79_cpu_irq_init(unsigned irq_wb_chan2, unsigned irq_wb_chan3); +--- a/arch/mips/pci/pci-ar724x.c ++++ b/arch/mips/pci/pci-ar724x.c +@@ -335,18 +335,37 @@ static void ar724x_pci_hw_init(struct ar + int wait = 0; + + /* deassert PCIe host controller and PCIe PHY reset */ +- ath79_device_reset_clear(AR724X_RESET_PCIE); +- ath79_device_reset_clear(AR724X_RESET_PCIE_PHY); ++ if (soc_is_qca955x()) { ++ ath79_device_reset_clear(QCA955X_RESET_PCIE); ++ mdelay(10); ++ ath79_device_reset_clear(QCA955X_RESET_PCIE_PHY); ++ mdelay(10); ++ ath79_device_reset2_clear(QCA955X_RESET_PCIE); ++ mdelay(10); ++ ath79_device_reset2_clear(QCA955X_RESET_PCIE_PHY); ++ mdelay(10); ++ } else { ++ ath79_device_reset_clear(AR724X_RESET_PCIE); ++ ath79_device_reset_clear(AR724X_RESET_PCIE_PHY); ++ } + + /* remove the reset of the PCIE PLL */ +- ppl = ath79_pll_rr(AR724X_PLL_REG_PCIE_CONFIG); +- ppl &= ~AR724X_PLL_REG_PCIE_CONFIG_PPL_RESET; +- ath79_pll_wr(AR724X_PLL_REG_PCIE_CONFIG, ppl); ++ if (!soc_is_qca955x()) { ++ ppl = ath79_pll_rr(AR724X_PLL_REG_PCIE_CONFIG); ++ ppl &= ~AR724X_PLL_REG_PCIE_CONFIG_PPL_RESET; ++ ath79_pll_wr(AR724X_PLL_REG_PCIE_CONFIG, ppl); ++ } + + /* deassert bypass for the PCIE PLL */ +- ppl = ath79_pll_rr(AR724X_PLL_REG_PCIE_CONFIG); +- ppl &= ~AR724X_PLL_REG_PCIE_CONFIG_PPL_BYPASS; +- ath79_pll_wr(AR724X_PLL_REG_PCIE_CONFIG, ppl); ++ if (soc_is_qca955x()) { ++ ppl = ath79_pll_rr(QCA955X_PLL_PCIE_CONFIG_REG); ++ ppl &= ~AR724X_PLL_REG_PCIE_CONFIG_PPL_BYPASS; ++ ath79_pll_wr(QCA955X_PLL_PCIE_CONFIG_REG, ppl); ++ } else { ++ ppl = ath79_pll_rr(AR724X_PLL_REG_PCIE_CONFIG); ++ ppl &= ~AR724X_PLL_REG_PCIE_CONFIG_PPL_BYPASS; ++ ath79_pll_wr(AR724X_PLL_REG_PCIE_CONFIG, ppl); ++ } + + /* set PCIE Application Control to ready */ + app = __raw_readl(apc->ctrl_base + AR724X_PCI_REG_APP); +@@ -422,8 +441,14 @@ static int ar724x_pci_probe(struct platf + * Do the full PCIE Root Complex Initialization Sequence if the PCIe + * host controller is in reset. + */ +- if (ath79_reset_rr(AR724X_RESET_REG_RESET_MODULE) & AR724X_RESET_PCIE) +- ar724x_pci_hw_init(apc); ++ if (soc_is_qca955x()) { ++ if (ath79_reset_rr(QCA955X_RESET_REG_RESET_MODULE) & QCA955X_RESET_PCIE || ++ ath79_reset_rr(QCA955X_RESET_REG_RESET2_MODULE) & QCA955X_RESET_PCIE) ++ ar724x_pci_hw_init(apc); ++ } else { ++ if (ath79_reset_rr(AR724X_RESET_REG_RESET_MODULE) & AR724X_RESET_PCIE) ++ ar724x_pci_hw_init(apc); ++ } + + apc->link_up = ar724x_pci_check_link(apc); + if (!apc->link_up) diff --git a/target/linux/ar71xx/patches-4.14/955-qca953x-fix-potential-missing-irq-dispatch.patch b/target/linux/ar71xx/patches-4.14/955-qca953x-fix-potential-missing-irq-dispatch.patch new file mode 100644 index 0000000000000000000000000000000000000000..517402998913fbded394f29ade940c3dca7d1cad --- /dev/null +++ b/target/linux/ar71xx/patches-4.14/955-qca953x-fix-potential-missing-irq-dispatch.patch @@ -0,0 +1,27 @@ +--- a/arch/mips/ath79/irq.c ++++ b/arch/mips/ath79/irq.c +@@ -69,15 +69,21 @@ static void qca953x_ip2_irq_dispatch(str + u32 status; + + status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS); ++ status &= QCA953X_PCIE_WMAC_INT_PCIE_ALL | QCA953X_PCIE_WMAC_INT_WMAC_ALL; ++ ++ if (status == 0) { ++ spurious_interrupt(); ++ return; ++ } + + if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) { + ath79_ddr_wb_flush(3); + generic_handle_irq(ATH79_IP2_IRQ(0)); +- } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) { ++ } ++ ++ if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) { + ath79_ddr_wb_flush(4); + generic_handle_irq(ATH79_IP2_IRQ(1)); +- } else { +- spurious_interrupt(); + } + } + diff --git a/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch b/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch index 30d7b2f6bd0b1c3aad2fbb8f32d584ca271dfa92..c9008adc1bcf79d8f4c253da468ee02824f5dad4 100644 --- a/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch +++ b/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch @@ -1,6 +1,6 @@ --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1214,4 +1214,12 @@ config GPIO_VIPERBOARD +@@ -1215,4 +1215,12 @@ config GPIO_VIPERBOARD endmenu diff --git a/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch b/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch index 87cdcc8d080b8dbfd0a455a4794e76c06a352302..11a2196cf4b8978934e0cda4847c4ae8a4567d09 100644 --- a/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch +++ b/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch @@ -109,7 +109,7 @@ +#endif --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1155,7 +1155,6 @@ menu "SPI GPIO expanders" +@@ -1156,7 +1156,6 @@ menu "SPI GPIO expanders" config GPIO_74X164 tristate "74x164 serial-in/parallel-out 8-bits shift register" diff --git a/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch b/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch index feb5ab43a4494821c9fc61abea2d81b1e5bb96a2..98a4885d0240376cd7847813dbbd0eaa2d89150e 100644 --- a/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch +++ b/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch @@ -1,6 +1,6 @@ --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig -@@ -1221,4 +1221,9 @@ config GPIO_NXP_74HC153 +@@ -1222,4 +1222,9 @@ config GPIO_NXP_74HC153 Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO interface supporting input mode only. diff --git a/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch index 5e03ad32112d76875665a0fd8b5056bab98478aa..37aaf92e6e3a68322d0471ce6afdc24655aeec6d 100644 --- a/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch +++ b/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch @@ -869,7 +869,7 @@ * No flags defined yet. --- a/net/core/utils.c +++ b/net/core/utils.c -@@ -321,8 +321,14 @@ void inet_proto_csum_replace16(__sum16 * +@@ -338,8 +338,14 @@ void inet_proto_csum_replace16(__sum16 * bool pseudohdr) { __be32 diff[] = { diff --git a/target/linux/ath25/patches-4.14/130-watchdog.patch b/target/linux/ath25/patches-4.14/130-watchdog.patch index 890d7ad4913c10bf119c4822d05bf43793fa9006..01904d69a54e77a2991c43148484ecdcc9184f35 100644 --- a/target/linux/ath25/patches-4.14/130-watchdog.patch +++ b/target/linux/ath25/patches-4.14/130-watchdog.patch @@ -212,7 +212,7 @@ +MODULE_ALIAS("platform:" DRIVER_NAME); --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig -@@ -1646,6 +1646,13 @@ config PIC32_DMT +@@ -1647,6 +1647,13 @@ config PIC32_DMT To compile this driver as a loadable module, choose M here. The module will be called pic32-dmt. diff --git a/target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh b/target/linux/ath79/base-files/lib/functions/mikrotik-caldata.sh similarity index 100% rename from target/linux/ath79/generic/base-files/lib/functions/mikrotik-caldata.sh rename to target/linux/ath79/base-files/lib/functions/mikrotik-caldata.sh diff --git a/target/linux/ath79/config-4.19 b/target/linux/ath79/config-4.19 index be5e46ac76986b55894a3d3edd9befb0d4278ccd..d92da1fbe2cdfffc956014e5533c3756a8c3883c 100644 --- a/target/linux/ath79/config-4.19 +++ b/target/linux/ath79/config-4.19 @@ -211,6 +211,7 @@ CONFIG_SERIAL_AR933X_CONSOLE=y CONFIG_SERIAL_AR933X_NR_UARTS=2 CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SPI=y +CONFIG_SPI_AR934X=y CONFIG_SPI_ATH79=y CONFIG_SPI_BITBANG=y CONFIG_SPI_GPIO=y diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts index f3d27f2bdff017cac5eded6029bb15c0291894cd..96573bdf14fbac2697795a578fe1e56cf1afe66c 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts @@ -18,7 +18,6 @@ partition@50000 { label = "u-boot-env"; reg = <0x050000 0x020000>; - read-only; }; partition@70000 { diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts index ac6f2362ecb224ca3d18541429a317c20acbb083..75c68d83c778f0bdc0fcf5a402358dd0edb549bd 100644 --- a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts +++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts @@ -18,7 +18,6 @@ partition@50000 { label = "u-boot-env"; reg = <0x050000 0x020000>; - read-only; }; partition@70000 { diff --git a/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts b/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts new file mode 100644 index 0000000000000000000000000000000000000000..8e0a80cb328ed92e0d5b7d1930f35744baf1997a --- /dev/null +++ b/target/linux/ath79/dts/ar7161_siemens_ws-ap3610.dts @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "ar7100.dtsi" + +/ { + compatible = "siemens,ws-ap3610", "qca,ar7161"; + model = "Siemens WS-AP3610"; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + aliases { + led-boot = &led_power_green; + led-failsafe = &led_power_red; + led-running = &led_power_green; + led-upgrade = &led_power_red; + label-mac-device = ð0; + }; + + extosc: ref { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-output-names = "ref"; + clock-frequency = <40000000>; + }; + + leds { + compatible = "gpio-leds"; + + led_power_green: led_power_green { + label = "ws-ap3610:green:power"; + gpios = <&gpio 7 GPIO_ACTIVE_LOW>; + }; + + led_power_red: led_power_red { + label = "ws-ap3610:red:power"; + gpios = <&gpio 8 GPIO_ACTIVE_LOW>; + }; + + led_wlan5_blue { + label = "ws-ap3610:blue:wlan5"; + gpios = <&gpio 2 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + + led_wlan5_green { + label = "ws-ap3610:green:wlan5"; + gpios = <&gpio 3 GPIO_ACTIVE_LOW>; + }; + + led_wlan2_blue { + label = "ws-ap3610:blue:wlan2"; + gpios = <&gpio 4 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy1tpt"; + }; + + led_wlan2_green { + label = "ws-ap3610:green:wlan2"; + gpios = <&gpio 5 GPIO_ACTIVE_LOW>; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&gpio 11 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&pcie0 { + status = "okay"; +}; + +&uart { + status = "okay"; +}; + +&mdio0 { + status = "okay"; + + phy0: ethernet-phy@0 { + /* + * When the compatible-is missing, PHY autodetection + * is performed, but the PHY-ID reads all 0xff. + * + * Linux does not create the device in this case, + * and the reset is never even de-asserted. + */ + compatible = "ethernet-phy-id0143.bca2", + "ethernet-phy-ieee802.3-c22"; + reg = <0>; + + resets = <&rst 8>; + reset-names = "phy"; + reset-assert-us = <10000>; + reset-deassert-us = <10000>; + }; +}; + +ð0 { + status = "okay"; + + phy-mode = "rgmii-id"; + phy-handle = <&phy0>; +}; + +&spi { + status = "okay"; + + num-cs = <1>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x40000>; + read-only; + }; + + partition@40000 { + label = "u-boot-bak"; + reg = <0x40000 0x40000>; + read-only; + }; + + partition@80000 { + compatible = "denx,uimage"; + label = "firmware"; + reg = <0x80000 0xe00000>; + }; + + partition@e80000 { + label = "cfg1"; + reg = <0xe80000 0x40000>; + read-only; + }; + + partition@ec0000 { + label = "cfg2"; + reg = <0xec0000 0x40000>; + read-only; + }; + + partition@f00000 { + label = "nvram1"; + reg = <0xf00000 0x40000>; + read-only; + }; + + partition@f40000 { + label = "nvram2"; + reg = <0xf40000 0x40000>; + read-only; + }; + + partition@f80000 { + label = "rsvd1"; + reg = <0xf80000 0x40000>; + read-only; + }; + + partition@fc0000 { + label = "rsvd2"; + reg = <0xfc0000 0x40000>; + read-only; + }; + }; + }; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr74xn-v1.dtsi b/target/linux/ath79/dts/ar7240_tplink.dtsi similarity index 71% rename from target/linux/ath79/dts/ar7240_tplink_tl-wr74xn-v1.dtsi rename to target/linux/ath79/dts/ar7240_tplink.dtsi index 147fcad66639eb5edb628fd0943ebb2f2799da70..de0b36bbf8ea6bd7a2955d8ff494d8daf612ea63 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr74xn-v1.dtsi +++ b/target/linux/ath79/dts/ar7240_tplink.dtsi @@ -32,10 +32,11 @@ }; }; - leds { + leds: leds { compatible = "gpio-leds"; + pinctrl-names = "default"; - pinctrl-0 = <&switch_led_pins>; + pinctrl-0 = <&pinmux_switch_led_pins>; led_system: system { label = "tp-link:green:system"; @@ -46,31 +47,6 @@ label = "tp-link:green:qss"; gpios = <&gpio 0 GPIO_ACTIVE_LOW>; }; - - lan1 { - label = "tp-link:green:lan1"; - gpios = <&gpio 13 GPIO_ACTIVE_LOW>; - }; - - lan2 { - label = "tp-link:green:lan2"; - gpios = <&gpio 14 GPIO_ACTIVE_LOW>; - }; - - lan3 { - label = "tp-link:green:lan3"; - gpios = <&gpio 15 GPIO_ACTIVE_LOW>; - }; - - lan4 { - label = "tp-link:green:lan4"; - gpios = <&gpio 16 GPIO_ACTIVE_LOW>; - }; - - wan { - label = "tp-link:green:wan"; - gpios = <&gpio 17 GPIO_ACTIVE_LOW>; - }; }; ath9k-leds { @@ -105,7 +81,7 @@ read-only; }; - firmware: partition@20000 { + partition@20000 { compatible = "tplink,firmware"; reg = <0x20000 0x3d0000>; label = "firmware"; @@ -120,25 +96,14 @@ }; }; -ð0 { - status = "okay"; - - mtd-mac-address = <&uboot 0x1fc00>; - mtd-mac-address-increment = <(-1)>; -}; - ð1 { status = "okay"; - - mtd-mac-address = <&uboot 0x1fc00>; - mtd-mac-address-increment = <1>; }; &pcie { status = "okay"; ath9k: wifi@0,0 { - compatible = "pci168c,002b"; reg = <0x0000 0 0 0 0>; qca,no-eeprom; mtd-mac-address = <&uboot 0x1fc00>; @@ -148,7 +113,7 @@ }; &pinmux { - switch_led_pins: pinmux_switch_led_pins { + pinmux_switch_led_pins: switch_led_pins { pinctrl-single,bits = <0x0 0x0 0xf8>; }; }; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa.dtsi b/target/linux/ath79/dts/ar7240_tplink_tl-wa.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..ac5a4d5ee9f296275e5b3f3e432d40d37e9d5f99 --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa.dtsi @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "ar7240_tplink.dtsi" + +&leds { + lan { + label = "tp-link:green:lan"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + }; +}; + +ð1 { + mtd-mac-address = <&uboot 0x1fc00>; +}; + +&ath9k { + compatible = "pci168c,002a"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa701nd-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wa701nd-v1.dts new file mode 100644 index 0000000000000000000000000000000000000000..6dd50018b2b03fdf04a86adeacde93f94fb7ea43 --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa701nd-v1.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7240_tplink_tl-wa.dtsi" + +/ { + model = "TP-Link TL-WA701ND v1"; + compatible = "tplink,tl-wa701nd-v1", "qca,ar7240"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa730re-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wa730re-v1.dts new file mode 100644 index 0000000000000000000000000000000000000000..e1277a8128015c37d4971b0964c94ef1fa22cc25 --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa730re-v1.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7240_tplink_tl-wa.dtsi" + +/ { + model = "TP-Link TL-WA730RE v1"; + compatible = "tplink,tl-wa730re-v1", "qca,ar7240"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa801nd-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wa801nd-v1.dts new file mode 100644 index 0000000000000000000000000000000000000000..2db22c0e211fe97fe85fb7dd28b05acbe0da82fc --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa801nd-v1.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7240_tplink_tl-wa.dtsi" + +/ { + model = "TP-Link TL-WA801ND v1"; + compatible = "tplink,tl-wa801nd-v1", "qca,ar7240"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa830re-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wa830re-v1.dts new file mode 100644 index 0000000000000000000000000000000000000000..f74ddc04ed164afccbf981d271a2e5825030a2a0 --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa830re-v1.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7240_tplink_tl-wa.dtsi" + +/ { + model = "TP-Link TL-WA830RE v1"; + compatible = "tplink,tl-wa830re-v1", "qca,ar7240"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wa901nd-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wa901nd-v1.dts new file mode 100644 index 0000000000000000000000000000000000000000..5422e5c600d719f9dc1ad6d0b2f1db9e6fc37c5b --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wa901nd-v1.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7240_tplink_tl-wa.dtsi" + +/ { + model = "TP-Link TL-WA901ND v1"; + compatible = "tplink,tl-wa901nd-v1", "qca,ar7240"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr.dtsi b/target/linux/ath79/dts/ar7240_tplink_tl-wr.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..7621b1d53cecbd7c7359a97aac4793d6549d8055 --- /dev/null +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr.dtsi @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "ar7240_tplink.dtsi" + +&leds { + lan1 { + label = "tp-link:green:lan1"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + }; + + lan2 { + label = "tp-link:green:lan2"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + }; + + lan3 { + label = "tp-link:green:lan3"; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + }; + + lan4 { + label = "tp-link:green:lan4"; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; + }; + + wan { + label = "tp-link:green:wan"; + gpios = <&gpio 17 GPIO_ACTIVE_LOW>; + }; +}; + +ð0 { + status = "okay"; + + mtd-mac-address = <&uboot 0x1fc00>; + mtd-mac-address-increment = <(-1)>; +}; + +ð1 { + mtd-mac-address = <&uboot 0x1fc00>; + mtd-mac-address-increment = <1>; +}; + +&ath9k { + compatible = "pci168c,002b"; +}; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v1.dts index be18fdd052bba2b634159cf89a993a8e078cff72..c49272bcb97e65965c3823caa552e39e73feb722 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v1.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v1.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR740N v1/v2"; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v3.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v3.dts index d0addda44a27ee8ee384f0bc37c1e04f4359b431..23867a252137691f92fe1c84ab6918c63422d343 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v3.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr740n-v3.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR740N v3"; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr741-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr741-v1.dts index af9c90755914f6fad6095b918c052a6758840299..38d7f2af600be708fafe5d396619d4b13c2ffcda 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr741-v1.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr741-v1.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR741N/ND v1/v2"; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr743nd-v1.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr743nd-v1.dts index 2c55dff97e3d258ebe9a2230c852ec736a7e9c4d..6cfaa9905c88bd85acd0bd9818cd52bbadfee576 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr743nd-v1.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr743nd-v1.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR743ND v1"; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr841-v5.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr841-v5.dts index e881821d6c60b82d47ef741ce477bec493053132..c030342d22679f0a606d0502679d4faea79448a9 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr841-v5.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr841-v5.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR841N/ND v5/v6"; diff --git a/target/linux/ath79/dts/ar7240_tplink_tl-wr941-v4.dts b/target/linux/ath79/dts/ar7240_tplink_tl-wr941-v4.dts index 8d844d54f7bdd23b06549670349ba7d44bf520d2..c8fe835e7eb22d824ad9846fc7acf1db68d001de 100644 --- a/target/linux/ath79/dts/ar7240_tplink_tl-wr941-v4.dts +++ b/target/linux/ath79/dts/ar7240_tplink_tl-wr941-v4.dts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include "ar7240_tplink_tl-wr74xn-v1.dtsi" +#include "ar7240_tplink_tl-wr.dtsi" / { model = "TP-Link TL-WR941N/ND v4"; diff --git a/target/linux/ath79/dts/ar7241_ubnt_nanostation-loco-m.dts b/target/linux/ath79/dts/ar7241_ubnt_nanostation-loco-m.dts new file mode 100644 index 0000000000000000000000000000000000000000..386b7c7073ae70f2de659e4d9e9467efbd356a28 --- /dev/null +++ b/target/linux/ath79/dts/ar7241_ubnt_nanostation-loco-m.dts @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7241_ubnt_xm_outdoor.dtsi" + +/ { + compatible = "ubnt,nanostation-loco-m", "ubnt,xm", "qca,ar7241"; + model = "Ubiquiti Nanostation Loco M"; +}; + +ð1 { + compatible = "syscon", "simple-mfd"; +}; diff --git a/target/linux/ath79/dts/ar7241_ubnt_picostation-m.dts b/target/linux/ath79/dts/ar7241_ubnt_picostation-m.dts new file mode 100644 index 0000000000000000000000000000000000000000..e2376a1b9251a7472118fc9eba359503ce3636ec --- /dev/null +++ b/target/linux/ath79/dts/ar7241_ubnt_picostation-m.dts @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar7241_ubnt_xm_outdoor.dtsi" + +/ { + compatible = "ubnt,picostation-m", "ubnt,xm", "qca,ar7241"; + model = "Ubiquiti Picostation M"; +}; + +ð1 { + compatible = "syscon", "simple-mfd"; +}; diff --git a/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts b/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts index e55affdf2031c2cf88650ee3ec84391703da6b63..6542ce9e4df20dbc8d924f4819a9ecc1d4cc9354 100644 --- a/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts +++ b/target/linux/ath79/dts/ar9132_tplink_tl-wa901nd-v2.dts @@ -113,6 +113,12 @@ phy12: ethernet-phy@c { reg = <0xc>; phy-mode = "mii"; + + resets = <&rst 8>; + reset-names = "phy"; + + reset-assert-us = <10000>; + reset-deassert-us = <10000>; }; }; diff --git a/target/linux/ath79/dts/ar9330.dtsi b/target/linux/ath79/dts/ar9330.dtsi index 042b70e0bb41019b894a191e8128ec72dd6b8850..8e52ae8fdb353028a376cd04951d9b808a71e5ca 100644 --- a/target/linux/ath79/dts/ar9330.dtsi +++ b/target/linux/ath79/dts/ar9330.dtsi @@ -119,11 +119,10 @@ }; spi: spi@1f000000 { - compatible = "qca,ar7100-spi"; - reg = <0x1f000000 0x10>; + compatible = "qca,ar934x-spi"; + reg = <0x1f000000 0x1c>; clocks = <&pll ATH79_CLK_AHB>; - clock-names = "ahb"; #address-cells = <1>; #size-cells = <0>; diff --git a/target/linux/ath79/dts/ar9341_tplink.dtsi b/target/linux/ath79/dts/ar9341_tplink.dtsi index 0a950bd1a639e3ac5c46dca84825ad2af54802fa..6bd7c3409bac75c08db54d60677deff27be1e468 100644 --- a/target/linux/ath79/dts/ar9341_tplink.dtsi +++ b/target/linux/ath79/dts/ar9341_tplink.dtsi @@ -18,9 +18,6 @@ keys: keys { compatible = "gpio-keys"; - pinctrl-names = "default"; - pinctrl-0 = <&jtag_disable_pins>; - rfkill { label = "WiFi"; linux,code = ; @@ -85,7 +82,14 @@ }; &gpio { - status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&jtag_disable_pins &pmx_usb_power>; +}; + +&pinmux { + pmx_usb_power: usb_power { + pinctrl-single,bits = <0x4 0x0 0xff>; + }; }; ð0 { diff --git a/target/linux/ath79/dts/ar9342_ubnt_bullet-m-xw.dts b/target/linux/ath79/dts/ar9342_ubnt_bullet-m-xw.dts index b483fdddbd8e47f81f22c9111921ed2a015b2698..a636ce72738853f88247f1d85c928848d944fb2e 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_bullet-m-xw.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_bullet-m-xw.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "ar9342_ubnt_xw.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_lap-120.dts b/target/linux/ath79/dts/ar9342_ubnt_lap-120.dts index 757654eaee8b8958bdf774570b497849ee0c602e..9ea6079264973d9477672bd03ea28671a2c52efc 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_lap-120.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_lap-120.dts @@ -1,8 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /dts-v1/; -#include - #include "ar9342_ubnt_wa.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_litebeam-ac-gen2.dts b/target/linux/ath79/dts/ar9342_ubnt_litebeam-ac-gen2.dts index d7eacf44d0339f4ce63b313de58e358ea63c7023..3c7050753eac2e59b75778241bc2735917fa8443 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_litebeam-ac-gen2.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_litebeam-ac-gen2.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /dts-v1/; -#include -#include - #include "ar9342_ubnt_wa.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_nanobeam-ac.dts b/target/linux/ath79/dts/ar9342_ubnt_nanobeam-ac.dts index 30d054dfedf73fa0f251183af47df05112067c19..08c73ff3672fe4fcd38a7151136b6b9aa8078aa2 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_nanobeam-ac.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_nanobeam-ac.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /dts-v1/; -#include -#include - #include "ar9342_ubnt_wa.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac-loco.dts b/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac-loco.dts index 89904721c0ea88af3b0b505568f69a44a5897be6..1a3875570e2f7540b148f5728cb2de9e6d59959e 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac-loco.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac-loco.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /dts-v1/; -#include -#include - #include "ar9342_ubnt_wa.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac.dts b/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac.dts index 97597e5f15ed68fd8ad8be2d15d801d54fbf5902..0e3c6b5c9f130a2400265ceb269578b8054ae4de 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_nanostation-ac.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /dts-v1/; -#include -#include - #include "ar9342_ubnt_wa.dtsi" / { diff --git a/target/linux/ath79/dts/ar9342_ubnt_nanostation-loco-m-xw.dts b/target/linux/ath79/dts/ar9342_ubnt_nanostation-loco-m-xw.dts index 8fb05eda24451a1213a396beabe72f133cd2b310..fe28c14bb710671a529fcb578037e8c52674b7b5 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_nanostation-loco-m-xw.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_nanostation-loco-m-xw.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "ar9342_ubnt_xw.dtsi" / { @@ -19,6 +16,7 @@ phy1: ethernet-phy@1 { reg = <1>; phy-mode = "mii"; + reset-gpios = <&gpio 0 GPIO_ACTIVE_LOW>; }; }; diff --git a/target/linux/ath79/dts/ar9342_ubnt_nanostation-m-xw.dts b/target/linux/ath79/dts/ar9342_ubnt_nanostation-m-xw.dts index 7ca61fe27a55b68311efb91cf21713587a0b8d99..70758644db8b697696b79094f4ca056c85f0169f 100644 --- a/target/linux/ath79/dts/ar9342_ubnt_nanostation-m-xw.dts +++ b/target/linux/ath79/dts/ar9342_ubnt_nanostation-m-xw.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "ar9342_ubnt_xw.dtsi" / { diff --git a/target/linux/ath79/dts/ar9344_qihoo_c301.dts b/target/linux/ath79/dts/ar9344_qihoo_c301.dts index 746c7f588e66c7932eaa30c249df5f330940f5ec..46d1f4c4c8e6cdda553cf4b11a699f3fdd5c2ed2 100644 --- a/target/linux/ath79/dts/ar9344_qihoo_c301.dts +++ b/target/linux/ath79/dts/ar9344_qihoo_c301.dts @@ -110,7 +110,6 @@ status = "okay"; num-cs = <2>; - cs-gpios= <0>, <0>; flash@0 { #address-cells = <1>; diff --git a/target/linux/ath79/dts/ar9344_teltonika_rut955.dts b/target/linux/ath79/dts/ar9344_teltonika_rut955.dts new file mode 100644 index 0000000000000000000000000000000000000000..a8aeef0fa456f3cec4cb68487eb6363b9a05339b --- /dev/null +++ b/target/linux/ath79/dts/ar9344_teltonika_rut955.dts @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "ar9344.dtsi" + +/ { + model = "Teltonika RUT955"; + compatible = "teltonika,rut955", "qca,ar9344"; + + aliases { + serial0 = &uart; + serial1 = &hs_uart; + led-boot = &led_system_green; + led-failsafe = &led_system_red; + led-running = &led_system_green; + led-upgrade = &led_system_red; + label-mac-device = ð1; + }; + + i2c { + compatible = "i2c-gpio"; + scl-gpios = <&gpio 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; + #address-cells = <1>; + #size-cells = <0>; + + hwmon@4d { + compatible = "microchip,mcp3221"; + reg = <0x4d>; + }; + }; + + leds { + compatible = "gpio-leds"; + + signal1 { + label = "rut955:green:signal1"; + gpios = <&gpio_ext 0 GPIO_ACTIVE_HIGH>; + }; + + signal2 { + label = "rut955:green:signal2"; + gpios = <&gpio_ext 1 GPIO_ACTIVE_HIGH>; + }; + + signal3 { + label = "rut955:green:signal3"; + gpios = <&gpio_ext 2 GPIO_ACTIVE_HIGH>; + }; + + signal4 { + label = "rut955:green:signal4"; + gpios = <&gpio_ext 3 GPIO_ACTIVE_HIGH>; + }; + + signal5 { + label = "rut955:green:signal5"; + gpios = <&gpio_ext 4 GPIO_ACTIVE_HIGH>; + }; + + led_system_red: system_red { + label = "rut955:red:system"; + gpios = <&gpio_ext 5 GPIO_ACTIVE_HIGH>; + }; + + led_system_green: system_green { + label = "rut955:green:system"; + gpios = <&gpio_ext 6 GPIO_ACTIVE_HIGH>; + default-state = "on"; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + linux,code = ; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; +}; + +&gpio { + pinctrl-names = "default"; + pinctrl-0 = <&jtag_disable_pins>; + + gpio-line-names = "RS485_D", "led_wan", "DIN3", "mmc_cs", + "ext_sck", "", "", "", + "", "", "", "", + "ext_mosi", "led_lan2", "led_lan1", "", + "i2c_scl", "i2c_sda", "", "DIN2", + "ext_cs", "DIN1", "led_lan3", "", + "", "", "", "", + "", "", "", ""; + + ext_sck { + gpio-hog; + gpios = <4 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:ext:sck"; + }; + + ext_mosi { + gpio-hog; + gpios = <12 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:ext:mosi"; + }; + + ext_cs { + gpio-hog; + gpios = <20 GPIO_ACTIVE_HIGH>; + output-low; + line-name = "rut955:ext:cs"; + }; + + mmc_cs { + gpio-hog; + gpios = <3 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:mmc:cs"; + }; + + uart1_td { + gpio-hog; + gpios = <18 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:uart1:td"; + }; + + uart1_rd { + gpio-hog; + gpios = <11 GPIO_ACTIVE_LOW>; + input; + line-name = "rut955:uart1:rd"; + }; + + led_wan { + gpio-hog; + gpios = <1 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:led:wan"; + }; + + led_lan2 { + gpio-hog; + gpios = <13 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:led:lan2"; + }; + + led_lan1 { + gpio-hog; + gpios = <14 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:led:lan1"; + }; + + led_lan3 { + gpio-hog; + gpios = <22 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "rut955:led:lan3"; + }; +}; + +&ref { + clock-frequency = <40000000>; +}; + +&uart { + status = "okay"; +}; + +&hs_uart { + status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&pmx_uart2>; + + rts-gpios = <&gpio 0 GPIO_ACTIVE_HIGH>; + rs485-rts-active-low; + linux,rs485-enabled-at-boot-time; +}; + +&spi { + status = "okay"; + + num-cs = <3>; + pinctrl-names = "default"; + pinctrl-0 = <&pmx_spi>; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x20000>; + read-only; + }; + + config: partition@20000 { + label = "config"; + reg = <0x20000 0x10000>; + read-only; + }; + + art: partition@30000 { + label = "art"; + reg = <0x30000 0x10000>; + read-only; + }; + + partition@40000 { + label = "firmware"; + reg = <0x40000 0xf30000>; + compatible = "tplink,firmware"; + }; + + partition@f70000 { + label = "event-log"; + reg = <0xf70000 0x90000>; + read-only; + }; + }; + }; + + microsd@1 { + status = "disabled"; + + compatible = "mmc-spi-slot"; + spi-max-frequency = <25000000>; + reg = <1>; + voltage-ranges = <3200 3400>; + broken-cd; + }; + + gpio_ext: gpio_ext@2 { + compatible = "fairchild,74hc595"; + reg = <2>; + gpio-controller; + #gpio-cells = <2>; + registers-number = <2>; + spi-max-frequency = <10000000>; + gpio-line-names = "led_signal_bar1", "led_signal_bar2", "led_signal_bar3", "led_signal_bar4", + "led_signal_bar5", "led_status_red", "led_status_green", "sim_sel", + "DOUT1", "DOUT2", "modem_vbus", "modem_rst", + "DOUT3", "RS485_R", "SDCS", "HWRST"; + }; +}; + +&usb { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + port@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + + port@1 { + compatible = "usb-a-connector"; + reg = <1>; + }; + + port@3 { + label = "RS-232 serial adapter"; + reg = <3>; + }; + + port@4 { + label = "internal wwan modem"; + reg = <4>; + }; + }; +}; + +&usb_phy { + status = "okay"; +}; + +&wmac { + status = "okay"; + + mtd-cal-data = <&art 0x1000>; + mtd-mac-address = <&config 0x0>; + mtd-mac-address-increment = <2>; +}; + +ð0 { + status = "okay"; + + phy-handle = <&swphy4>; + + mtd-mac-address = <&config 0x0>; + mtd-mac-address-increment = <1>; +}; + +ð1 { + status = "okay"; + + mtd-mac-address = <&config 0x0>; +}; + +&builtin_switch { + pinctrl-names = "default"; + pinctrl-0 = <&pmx_leds_switch>; +}; + +&pinmux { + pmx_spi: spi { + // SPI_CS1 on GPIO 3, 2nd SCK on GPIO 4 + // 2nd MOSI on GPIO 12, SPI_CS2 on GPIO 20 + pinctrl-single,bits = <0x0 0x07000000 0xff000000>, + <0x4 0x0a 0xff>, + <0xc 0x0b 0xff>, + <0x14 0x08 0xff>; + }; + + pmx_leds_switch: leds_switch { + // switch port LEDs on GPIO 1, GPIO 13, GPIO 14 and GPIO 22 + pinctrl-single,bits = <0x0 0x00002d00 0x0000ff00>, + <0xc 0x002c2b00 0x00ffff00>, + <0x14 0x002a0000 0x00ff0000>; + }; + + pmx_uart2: uart2 { + // UART1_DTR on GPIO 0, UART1_RD on GPIO 11, UART1_TD on GPIO 18 + pinctrl-single,bits = <0x0 0x0 0xff>, + <0x10 0x4f000000 0xff000000>, + <0x3c 0x000b0000 0x00ff0000>; + }; +}; diff --git a/target/linux/ath79/dts/ar934x.dtsi b/target/linux/ath79/dts/ar934x.dtsi index 8cd0b4e086748858c90ecaeb9dcfca4963831073..e8c21fb71061522aca98e8df0e063dd2892badfd 100644 --- a/target/linux/ath79/dts/ar934x.dtsi +++ b/target/linux/ath79/dts/ar934x.dtsi @@ -133,6 +133,19 @@ #reset-cells = <1>; }; + + hs_uart: uart@18500000 { + compatible = "qca,ar9330-uart"; + reg = <0x18500000 0x14>; + + interrupts = <6>; + interrupt-parent = <&miscintc>; + + clocks = <&pll ATH79_CLK_UART1>; + clock-names = "uart"; + + status = "disabled"; + }; }; nand: nand@1b000200 { @@ -183,11 +196,10 @@ }; spi: spi@1f000000 { - compatible = "qca,ar9340-spi", "qca,ar7100-spi"; + compatible = "qca,ar934x-spi"; reg = <0x1f000000 0x1c>; clocks = <&pll ATH79_CLK_AHB>; - clock-names = "ahb"; #address-cells = <1>; #size-cells = <0>; diff --git a/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi b/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi index 8b90f0205d9bbc71642db53c79b0534be253a372..d769225fd4c3e86da49b1c013b005d5830c16bc0 100644 --- a/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi +++ b/target/linux/ath79/dts/qca9531_glinet_gl-ar300m.dtsi @@ -1,3 +1,4 @@ + #include #include @@ -75,7 +76,6 @@ status = "okay"; num-cs = <2>; - cs-gpios = <0>, <0>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca953x.dtsi b/target/linux/ath79/dts/qca953x.dtsi index 73a6ad91e5fdbe39e1b80f542db2f4ef541d0676..e359badd2b53fd8cb254aa2742f41398ce4539ec 100644 --- a/target/linux/ath79/dts/qca953x.dtsi +++ b/target/linux/ath79/dts/qca953x.dtsi @@ -201,11 +201,10 @@ }; spi: spi@1f000000 { - compatible = "qca,ar9530-spi", "qca,ar7100-spi"; - reg = <0x1f000000 0x10>; + compatible = "qca,ar934x-spi"; + reg = <0x1f000000 0x1c>; clocks = <&pll ATH79_CLK_AHB>; - clock-names = "ahb"; status = "disabled"; diff --git a/target/linux/ath79/dts/qca9557.dtsi b/target/linux/ath79/dts/qca9557.dtsi index d5d3f0254442419afbf0008ee7537304a74a599c..69ea6398045179e388608086e57433a4d232e3c8 100644 --- a/target/linux/ath79/dts/qca9557.dtsi +++ b/target/linux/ath79/dts/qca9557.dtsi @@ -292,11 +292,10 @@ }; spi: spi@1f000000 { - compatible = "qca,ar9557-spi", "qca,ar7100-spi"; - reg = <0x1f000000 0x10>; + compatible = "qca,ar934x-spi"; + reg = <0x1f000000 0x1c>; clocks = <&pll ATH79_CLK_AHB>; - clock-names = "ahb"; status = "disabled"; diff --git a/target/linux/ath79/dts/qca9557_iodata_wn-ac1167dgr.dts b/target/linux/ath79/dts/qca9557_iodata_wn-ac1167dgr.dts index c2fc7abcb3f6c63f0d00d0d276d010b22bf442c0..3dd84f14217107e58e494e0e2098181543489d08 100644 --- a/target/linux/ath79/dts/qca9557_iodata_wn-ac1167dgr.dts +++ b/target/linux/ath79/dts/qca9557_iodata_wn-ac1167dgr.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9557_iodata_wn-ac-dgr.dtsi" / { diff --git a/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr.dts b/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr.dts index ef47e1e41fc46f0dae9766cbcee40703b1ab059e..12da5a24f84493227b901286edd93dadd2ff0701 100644 --- a/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr.dts +++ b/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9557_iodata_wn-ac-dgr.dtsi" / { diff --git a/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr2.dts b/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr2.dts index c8cde8b813d370bf8fb5016eabd3424b6c8efe89..771e55b4184d59343d600458149e6a0b4d044b22 100644 --- a/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr2.dts +++ b/target/linux/ath79/dts/qca9557_iodata_wn-ac1600dgr2.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9557_iodata_wn-ac-dgr.dtsi" / { diff --git a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts index 045806fa6ef8385b8b59eaef5e997ea39fdd8c40..c87e350e6b0f0ad8726d4846da04a41989f16dc5 100644 --- a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts +++ b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v1.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9558_comfast_cf-wr650ac.dtsi" / { diff --git a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts index 67ed1f886b5c5c718553097388f5d102d2baddd3..47eb4063e19f03442e4032bc84fdb48a328015e5 100644 --- a/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts +++ b/target/linux/ath79/dts/qca9558_comfast_cf-wr650ac-v2.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9558_comfast_cf-wr650ac.dtsi" / { diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v2.dts b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v2.dts index f49f143d1401745a7a4cb4ac7dcb7f0782afe295..21256ea1605ee02823cf896236845bbc6457fcf6 100644 --- a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v2.dts +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v2.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9558_tplink_tl-wr1043nd.dtsi" / { diff --git a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v3.dts b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v3.dts index 5efa417216b13c1c481df15c2c187f7de0834de1..7b1ca788f9777af6f1c9dc79637321eb2b365401 100644 --- a/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v3.dts +++ b/target/linux/ath79/dts/qca9558_tplink_tl-wr1043nd-v3.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9558_tplink_tl-wr1043nd.dtsi" / { diff --git a/target/linux/ath79/dts/qca9563_elecom_wrc-1750ghbk2-i.dts b/target/linux/ath79/dts/qca9563_elecom_wrc-1750ghbk2-i.dts index 0152f62cd8a244d51303b21017e1389cdbd6d53b..01a8c2133d11fe4c34fed8f42bb29cc6e342b8dc 100644 --- a/target/linux/ath79/dts/qca9563_elecom_wrc-1750ghbk2-i.dts +++ b/target/linux/ath79/dts/qca9563_elecom_wrc-1750ghbk2-i.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9563_elecom_wrc-ghbk2-i.dtsi" / { diff --git a/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts index 7ebd15342cf6c725e9669b4a90f4f45ff5443ba0..df926ebe301c55222bbe0d220a8cef0522b91708 100644 --- a/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts +++ b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts @@ -1,9 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT /dts-v1/; -#include -#include - #include "qca9563_elecom_wrc-ghbk2-i.dtsi" / { diff --git a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi index 3e30a0fd0b1354a41f3d37f8464877a3864252d6..8a00029c658932d74458763773c7829f2dc90152 100644 --- a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi +++ b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi @@ -75,7 +75,6 @@ status = "okay"; num-cs = <2>; - cs-gpios = <0>, <0>; flash_nor: flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi b/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi index bc06c5bd9dff574c2d6576f2dd3a7e5f5078e161..29b422536f36d9925ac3e091a7e64f482e4eaa83 100644 --- a/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi +++ b/target/linux/ath79/dts/qca9563_netgear_wndr.dtsi @@ -100,7 +100,6 @@ status = "okay"; num-cs = <2>; - cs-gpios = <0>, <0>; flash@0 { compatible = "jedec,spi-nor"; diff --git a/target/linux/ath79/dts/qca956x.dtsi b/target/linux/ath79/dts/qca956x.dtsi index 03541b86fbe2d8d2fe06e023f3e47976840a1995..d0ce952ef443601511c6b6f1a2e2dbadeeac76ff 100644 --- a/target/linux/ath79/dts/qca956x.dtsi +++ b/target/linux/ath79/dts/qca956x.dtsi @@ -215,11 +215,10 @@ }; spi: spi@1f000000 { - compatible = "qca,qca9560-spi", "qca,ar7100-spi"; - reg = <0x1f000000 0x10>; + compatible = "qca,ar934x-spi"; + reg = <0x1f000000 0x1c>; clocks = <&pll ATH79_CLK_AHB>; - clock-names = "ahb"; status = "disabled"; diff --git a/target/linux/ath79/dts/tp9343_tplink_tl-wr940n-v6.dts b/target/linux/ath79/dts/tp9343_tplink_tl-wr940n-v6.dts new file mode 100644 index 0000000000000000000000000000000000000000..31f0c14afbb9d35ade8338ae12a8dae8ad8f1187 --- /dev/null +++ b/target/linux/ath79/dts/tp9343_tplink_tl-wr940n-v6.dts @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "tp9343_tplink_tl-wr94x.dtsi" + +/ { + compatible = "tplink,tl-wr940n-v6", "qca,tp9343"; + model = "TP-Link TL-WR940N v6"; + + aliases { + led-boot = &led_diag_orange; + led-failsafe = &led_diag_orange; + led-running = &led_diag_orange; + led-upgrade = &led_diag_orange; + }; + + leds { + compatible = "gpio-leds"; + + wan_blue { + label = "tp-link:blue:wan"; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + }; + + led_diag_orange: diag_orange { + label = "tp-link:orange:diag"; + gpios = <&gpio 15 GPIO_ACTIVE_HIGH>; + default-state = "on"; + }; + }; +}; + +ð1 { + mtd-mac-address = <&uboot 0x1fc00>; +}; diff --git a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index 6123a26f2c6ea55b7a589272c2d5fe6c003ec36d..2394ccc90d10883a64554232740b3608901d032d 100644 --- a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -1214,14 +1214,22 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit) unsigned int offset = ag->rx_buf_offset; int ring_mask = BIT(ring->order) - 1; int ring_size = BIT(ring->order); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) + struct list_head rx_list; + struct sk_buff *next; +#else struct sk_buff_head queue; +#endif struct sk_buff *skb; int done = 0; DBG("%s: rx packets, limit=%d, curr=%u, dirty=%u\n", dev->name, limit, ring->curr, ring->dirty); - +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) + INIT_LIST_HEAD(&rx_list); +#else skb_queue_head_init(&queue); +#endif while (done < limit) { unsigned int i = ring->curr & ring_mask; @@ -1263,7 +1271,11 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit) } else { skb->dev = dev; skb->ip_summed = CHECKSUM_NONE; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) + list_add_tail(&skb->list, &rx_list); +#else __skb_queue_tail(&queue, skb); +#endif } next: @@ -1275,10 +1287,16 @@ next: ag71xx_ring_rx_refill(ag); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0)) + list_for_each_entry_safe(skb, next, &rx_list, list) + skb->protocol = eth_type_trans(skb, dev); + netif_receive_skb_list(&rx_list); +#else while ((skb = __skb_dequeue(&queue)) != NULL) { skb->protocol = eth_type_trans(skb, dev); netif_receive_skb(skb); } +#endif DBG("%s: rx finish, curr=%u, dirty=%u, done=%d\n", dev->name, ring->curr, ring->dirty, done); diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds index 55d677252534eaee068612e102593c7abc45e7eb..6668e15a74dd4167ed6ee1a1e65400a93eebd1e8 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds @@ -219,6 +219,7 @@ tplink,cpe510-v3) tplink,cpe610-v1|\ tplink,tl-wr902ac-v1) ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0" + ucidef_set_led_netdev "internet" "Internet" "tp-link:green:internet" "eth0" ;; tplink,re355-v1|\ tplink,re450-v1|\ @@ -243,9 +244,11 @@ trendnet,tew-823dru) ;; ubnt,bullet-m|\ ubnt,bullet-m-xw|\ +ubnt,nanostation-loco-m|\ ubnt,nanostation-loco-m-xw|\ ubnt,nanostation-m|\ ubnt,nanostation-m-xw|\ +ubnt,picostation-m|\ ubnt,rocket-m) ucidef_set_rssimon "wlan0" "200000" "1" ucidef_set_led_rssi "rssilow" "RSSILOW" "ubnt:red:link1" "wlan0" "1" "100" diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index a3fcf357157d9fe58a5e683f15c47ea0fba3a594..ef58d9e124a0251d622ee126f27e312fffca0840 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -30,6 +30,7 @@ ath79_setup_interfaces() pisen,ts-d084|\ pisen,wmb001n|\ pisen,wmm003n|\ + siemens,ws-ap3610|\ tplink,cpe210-v2|\ tplink,cpe210-v3|\ tplink,cpe510-v2|\ @@ -46,7 +47,9 @@ ath79_setup_interfaces() ubnt,litebeam-ac-gen2|\ ubnt,nanobeam-ac|\ ubnt,nanostation-ac-loco|\ + ubnt,nanostation-loco-m|\ ubnt,nanostation-loco-m-xw|\ + ubnt,picostation-m|\ ubnt,rocket-m|\ ubnt,unifiac-lite|\ ubnt,unifiac-lr|\ @@ -217,6 +220,11 @@ ath79_setup_interfaces() ucidef_add_switch "switch0" \ "0@eth0" "1:lan" "2:lan" "3:wan" ;; + teltonika,rut955) + ucidef_set_interface_wan "eth1" + ucidef_add_switch "switch0" \ + "0@eth0" "2:lan:3" "3:lan:2" "4:lan:1" + ;; tplink,archer-a7-v5|\ tplink,archer-c6-v2|\ tplink,archer-c6-v2-us|\ @@ -425,7 +433,9 @@ ath79_setup_macs() ;; ubnt,airrouter|\ ubnt,bullet-m|\ + ubnt,nanostation-loco-m|\ ubnt,nanostation-m|\ + ubnt,picostation-m|\ ubnt,rocket-m|\ ubnt,unifi) label_mac=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches b/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches index 967e2c76801e946ae7b4073f3ee27c1bbdfd751e..b5b46f16bfaa44410712907dee7e1549ed0e268d 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches +++ b/target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches @@ -38,6 +38,14 @@ dlink,dir-835-a1) librerouter,librerouter-v1) ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "1" "0" ;; +teltonika,rut955) + ucidef_add_gpio_switch "sim_sel" "SIM select" "503" "1" + ucidef_add_gpio_switch "DOUT1" "DOUT1 (OC)" "504" "0" + ucidef_add_gpio_switch "DOUT2" "DOUT2 (Relay)" "505" "0" + ucidef_add_gpio_switch "modem_vbus" "Modem enable" "506" "1" + ucidef_add_gpio_switch "modem_rst" "Modem reset" "507" "0" + ucidef_add_gpio_switch "DOUT3" "DOUT3" "508" "0" + ;; tplink,archer-c25-v1) ucidef_add_gpio_switch "led_control" "LED control" "21" "0" ucidef_add_gpio_switch "led_reset" "LED reset" "19" "1" diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index b43146ca30911ba7c316629ef0fa7f2a5a606af3..6ccdbafc73620eaf95860d96e45d659f95f11c77 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -163,7 +163,9 @@ case "$FIRMWARE" in tplink,tl-wr842n-v1|\ ubnt,airrouter|\ ubnt,bullet-m|\ + ubnt,nanostation-loco-m|\ ubnt,nanostation-m|\ + ubnt,picostation-m|\ ubnt,rocket-m) ath9k_eeprom_extract "art" 0x1000 0x1000 ;; diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac index 8c8b7932bc60e7cc5ccdf698d74f067965847483..f814bd46ad2e6f1d0596d377d02c8ac24f986d21 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac @@ -34,6 +34,9 @@ case "$board" in [ "$PHYNBR" -eq 1 ] && \ k2t_get_mac "lan_mac" > /sys${DEVPATH}/macaddress ;; + siemens,ws-ap3610) + mtd_get_mac_ascii cfg1 RADIOADDR${PHYNBR} > /sys${DEVPATH}/macaddress + ;; trendnet,tew-823dru) # set the 2.4G interface mac address to LAN MAC [ "$PHYNBR" -eq 1 ] && \ diff --git a/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh b/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh new file mode 100644 index 0000000000000000000000000000000000000000..a0fb9fc7174c6f44ccc733bbf995cd941816b8ea --- /dev/null +++ b/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +. /lib/functions.sh + +preinit_set_mac_address() { + case $(board_name) in + siemens,ws-ap3610) + ip link set dev eth0 address $(mtd_get_mac_ascii cfg1 ethaddr) + ;; + esac +} + +boot_hook_add preinit_main preinit_set_mac_address diff --git a/target/linux/ath79/generic/config-default b/target/linux/ath79/generic/config-default index 2d8f7f20c21131a49ae22448de6d7bb9b6a4d1c8..6cd1518e3ac8657a9687b07ba1c07fc85e118e2e 100644 --- a/target/linux/ath79/generic/config-default +++ b/target/linux/ath79/generic/config-default @@ -1,4 +1,5 @@ CONFIG_AT803X_PHY=y +CONFIG_BROADCOM_PHY=y CONFIG_GPIO_WATCHDOG=y CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y CONFIG_INTEL_XWAY_PHY=y diff --git a/target/linux/ath79/generic/target.mk b/target/linux/ath79/generic/target.mk index 15841ff2c60241eb6ae27cc5fc0f891fb5e9f241..488aa6df16554b08f25a0022829dd398570b74b7 100644 --- a/target/linux/ath79/generic/target.mk +++ b/target/linux/ath79/generic/target.mk @@ -1,7 +1,7 @@ BOARDNAME:=Generic FEATURES += minor squashfs -DEFAULT_PACKAGES += wpad +DEFAULT_PACKAGES += wpad-basic define Target/Description Build firmware images for generic Atheros AR71xx/AR913x/AR934x based boards. diff --git a/target/linux/ath79/image/common-tp-link.mk b/target/linux/ath79/image/common-tp-link.mk index cfc574e4fbe7151acf59748a75f9d48091ce510e..5b27390c1b313cbd3476920599e0b49629c00c07 100644 --- a/target/linux/ath79/image/common-tp-link.mk +++ b/target/linux/ath79/image/common-tp-link.mk @@ -11,6 +11,7 @@ endef define Device/tplink-v1 DEVICE_VENDOR := TP-Link + TPLINK_HWID := 0x0 TPLINK_HWREV := 0x1 TPLINK_HEADER_VERSION := 1 LOADER_TYPE := gz @@ -23,6 +24,7 @@ endef define Device/tplink-v2 DEVICE_VENDOR := TP-Link + TPLINK_HWID := 0x0 TPLINK_HWREV := 0x1 TPLINK_HWREVADD := 0x0 TPLINK_HVERSION := 3 @@ -74,9 +76,10 @@ endef define Device/tplink-safeloader $(Device/tplink-v1) + TPLINK_HWREV := 0x0 KERNEL := kernel-bin | append-dtb | lzma | tplink-v1-header -O IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade | \ - append-metadata | check-size $$$$(IMAGE_SIZE) + append-metadata | check-size $$$$(IMAGE_SIZE) IMAGE/factory.bin := append-rootfs | tplink-safeloader factory endef diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk index 2a2384762bd81bae10f4ab821c3bce97af4ee608..33a8ee3f44708a87279b69398341900e106f4203 100644 --- a/target/linux/ath79/image/generic-tp-link.mk +++ b/target/linux/ath79/image/generic-tp-link.mk @@ -320,8 +320,6 @@ define Device/tplink_re350k-v1 DEVICE_VARIANT := v1 DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct TPLINK_BOARD_ID := RE350K-V1 - TPLINK_HWID := 0x0 - TPLINK_HWREV := 0 endef TARGET_DEVICES += tplink_re350k-v1 @@ -330,8 +328,6 @@ define Device/tplink_rex5x-v1 SOC := qca9558 IMAGE_SIZE := 6016k DEVICE_PACKAGES := kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct - TPLINK_HWID := 0x0 - TPLINK_HWREV := 0 endef define Device/tplink_re355-v1 @@ -359,8 +355,6 @@ define Device/tplink_re450-v2 DEVICE_MODEL := RE450 DEVICE_VARIANT := v2 DEVICE_PACKAGES := kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct - TPLINK_HWID := 0x0 - TPLINK_HWREV := 0 TPLINK_BOARD_ID := RE450-V2 LOADER_TYPE := elf endef @@ -585,8 +579,6 @@ define Device/tplink_tl-wr902ac-v1 -swconfig -uboot-envtools TPLINK_BOARD_ID := TL-WR902AC-V1 IMAGE_SIZE := 7360k - TPLINK_HWID := 0x0 - TPLINK_HWREV := 0 SUPPORTED_DEVICES += tl-wr902ac-v1 endef TARGET_DEVICES += tplink_tl-wr902ac-v1 diff --git a/target/linux/ath79/image/generic-ubnt.mk b/target/linux/ath79/image/generic-ubnt.mk index ffae83eda592e55e6a98dfece12607b668aacdb6..a4aff09feca528a7721af35500905452000097f5 100644 --- a/target/linux/ath79/image/generic-ubnt.mk +++ b/target/linux/ath79/image/generic-ubnt.mk @@ -179,6 +179,14 @@ define Device/ubnt_nanostation-ac-loco endef TARGET_DEVICES += ubnt_nanostation-ac-loco +define Device/ubnt_nanostation-loco-m + $(Device/ubnt-xm) + DEVICE_MODEL := Nanostation Loco M + DEVICE_PACKAGES += rssileds + SUPPORTED_DEVICES += bullet-m +endef +TARGET_DEVICES += ubnt_nanostation-loco-m + define Device/ubnt_nanostation-loco-m-xw $(Device/ubnt-xw) DEVICE_MODEL := Nanostation Loco M @@ -203,6 +211,14 @@ define Device/ubnt_nanostation-m-xw endef TARGET_DEVICES += ubnt_nanostation-m-xw +define Device/ubnt_picostation-m + $(Device/ubnt-xm) + DEVICE_MODEL := Picostation M + DEVICE_PACKAGES += rssileds + SUPPORTED_DEVICES += bullet-m +endef +TARGET_DEVICES += ubnt_picostation-m + define Device/ubnt_rocket-m $(Device/ubnt-xm) DEVICE_MODEL := Rocket-M diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 98ba520a541be6dba0e509f7e72cd4c19153211c..cacfa04145c141dcb23a8d3a76fa1e934655b573 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -36,6 +36,11 @@ define Build/addpattern -mv "$@.new" "$@" endef +define Build/append-md5sum-bin + $(STAGING_DIR_HOST)/bin/mkhash md5 $@ | sed 's/../\\\\x&/g' |\ + xargs echo -ne >> $@ +endef + define Build/cybertan-trx @echo -n '' > $@-empty.bin -$(STAGING_DIR_HOST)/bin/trx -o $@.new \ @@ -73,6 +78,17 @@ define Build/pisen_wmb001n-factory rm -rf "$@.tmp" endef +define Build/teltonika-fw-fake-checksum + # Teltonika U-Boot web based firmware upgrade/recovery routine compares + # 16 bytes from md5sum1[16] field in TP-Link v1 header (offset: 76 bytes + # from begin of the firmware file) with 16 bytes stored just before + # 0xdeadc0de marker. Values are only compared, MD5 sum is not verified. + let \ + offs="$$(stat -c%s $@) - 20"; \ + dd if=$@ bs=1 count=16 skip=76 |\ + dd of=$@ bs=1 count=16 seek=$$offs conv=notrunc +endef + define Device/seama KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma KERNEL_INITRAMFS := $$(KERNEL) | seama @@ -158,6 +174,7 @@ define Device/avm_fritz300e append-squashfs-fakeroot-be | pad-to 256 | append-rootfs | pad-rootfs | \ append-metadata | check-size $$$$(IMAGE_SIZE) DEVICE_PACKAGES := fritz-tffs rssileds -swconfig + SUPPORTED_DEVICES += fritz300e endef TARGET_DEVICES += avm_fritz300e @@ -1040,6 +1057,21 @@ define Device/rosinson_wr818 endef TARGET_DEVICES += rosinson_wr818 +define Device/siemens_ws-ap3610 + SOC := ar7161 + DEVICE_VENDOR := Siemens + DEVICE_MODEL := WS-AP3610 + IMAGE_SIZE := 14336k + BLOCKSIZE := 256k + LOADER_TYPE := bin + LOADER_FLASH_OFFS := 0x82000 + COMPILE := loader-$(1).bin + COMPILE/loader-$(1).bin := loader-okli-compile + KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 8128 | uImage none + KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none +endef +TARGET_DEVICES += siemens_ws-ap3610 + define Device/sitecom_wlr-7100 SOC := ar1022 DEVICE_VENDOR := Sitecom @@ -1054,6 +1086,28 @@ define Device/sitecom_wlr-7100 endef TARGET_DEVICES += sitecom_wlr-7100 +define Device/teltonika_rut955 + SOC := ar9344 + DEVICE_VENDOR := Teltonika + DEVICE_MODEL := RUT955 + DEVICE_PACKAGES := kmod-usb2 kmod-usb-acm kmod-usb-net-qmi-wwan \ + kmod-usb-serial-option kmod-hwmon-mcp3021 uqmi -uboot-envtools + IMAGE_SIZE := 15552k + TPLINK_HWID := 0x35000001 + TPLINK_HWREV := 0x1 + TPLINK_HEADER_VERSION := 1 + KERNEL := kernel-bin | append-dtb | lzma | tplink-v1-header + KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | uImage lzma + IMAGES += factory.bin + IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs |\ + pad-rootfs | teltonika-fw-fake-checksum | append-string master |\ + append-md5sum-bin | check-size $$$$(IMAGE_SIZE) + IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) |\ + append-rootfs | pad-rootfs | append-metadata |\ + check-size $$$$(IMAGE_SIZE) +endef +TARGET_DEVICES += teltonika_rut955 + define Device/trendnet_tew-823dru SOC := qca9558 DEVICE_VENDOR := Trendnet diff --git a/target/linux/ath79/image/tiny-tp-link.mk b/target/linux/ath79/image/tiny-tp-link.mk index 2107e47cc3e543b4765f9fb6423ce9365a773471..29fdfec1e5826b02fcd84a9253848f4853792700 100644 --- a/target/linux/ath79/image/tiny-tp-link.mk +++ b/target/linux/ath79/image/tiny-tp-link.mk @@ -66,6 +66,46 @@ define Device/tplink_tl-mr3420-v2 endef TARGET_DEVICES += tplink_tl-mr3420-v2 +define Device/tplink_tl-wa701nd-v1 + $(Device/tplink-4m) + SOC := ar7240 + DEVICE_MODEL := TL-WA701ND + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x07010001 + SUPPORTED_DEVICES += tl-wa901nd +endef +TARGET_DEVICES += tplink_tl-wa701nd-v1 + +define Device/tplink_tl-wa730re-v1 + $(Device/tplink-4m) + SOC := ar7240 + DEVICE_MODEL := TL-WA730RE + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x07300001 + SUPPORTED_DEVICES += tl-wa901nd +endef +TARGET_DEVICES += tplink_tl-wa730re-v1 + +define Device/tplink_tl-wa801nd-v1 + $(Device/tplink-4m) + SOC := ar7240 + DEVICE_MODEL := TL-WA801ND + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x08010001 + SUPPORTED_DEVICES += tl-wa901nd +endef +TARGET_DEVICES += tplink_tl-wa801nd-v1 + +define Device/tplink_tl-wa830re-v1 + $(Device/tplink-4m) + SOC := ar7240 + DEVICE_MODEL := TL-WA830RE + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x08300010 + SUPPORTED_DEVICES += tl-wa901nd +endef +TARGET_DEVICES += tplink_tl-wa830re-v1 + define Device/tplink_tl-wa850re-v1 $(Device/tplink-4mlzma) SOC := ar9341 @@ -85,12 +125,21 @@ define Device/tplink_tl-wa850re-v2 DEVICE_VARIANT := v2 TPLINK_BOARD_ID := TLWA850REV2 TPLINK_HWID := 0x08500002 - TPLINK_HWREV := 0x0 DEVICE_PACKAGES := rssileds SUPPORTED_DEVICES += tl-wa850re-v2 endef TARGET_DEVICES += tplink_tl-wa850re-v2 +define Device/tplink_tl-wa901nd-v1 + $(Device/tplink-4m) + SOC := ar7240 + DEVICE_MODEL := TL-WA901ND + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x09010001 + SUPPORTED_DEVICES += tl-wa901nd +endef +TARGET_DEVICES += tplink_tl-wa901nd-v1 + define Device/tplink_tl-wa901nd-v2 $(Device/tplink-4m) SOC := ar9132 @@ -264,6 +313,20 @@ define Device/tplink_tl-wr940n-v4 endef TARGET_DEVICES += tplink_tl-wr940n-v4 +define Device/tplink_tl-wr940n-v6 + $(Device/tplink-4mlzma) + SOC := tp9343 + DEVICE_MODEL := TL-WR940N + DEVICE_VARIANT := v6 + TPLINK_HWID := 0x09400006 + SUPPORTED_DEVICES += tl-wr940n-v6 + IMAGES += factory-us.bin factory-eu.bin factory-br.bin + IMAGE/factory-us.bin := tplink-v1-image factory -C US + IMAGE/factory-eu.bin := tplink-v1-image factory -C EU + IMAGE/factory-br.bin := tplink-v1-image factory -C BR +endef +TARGET_DEVICES += tplink_tl-wr940n-v6 + define Device/tplink_tl-wr941-v2 $(Device/tplink-4m) SOC := ar9132 diff --git a/target/linux/ath79/patches-4.14/910-unaligned_access_hacks.patch b/target/linux/ath79/patches-4.14/910-unaligned_access_hacks.patch index 6234ba4703429110cee89553c17a91a8a7b8254b..cff52e5add0bbb635cd14e1e19e389f301f69518 100644 --- a/target/linux/ath79/patches-4.14/910-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-4.14/910-unaligned_access_hacks.patch @@ -811,7 +811,7 @@ * No flags defined yet. --- a/net/core/utils.c +++ b/net/core/utils.c -@@ -424,8 +424,14 @@ void inet_proto_csum_replace16(__sum16 * +@@ -441,8 +441,14 @@ void inet_proto_csum_replace16(__sum16 * bool pseudohdr) { __be32 diff[] = { diff --git a/target/linux/ath79/patches-4.19/0039-MIPS-ath79-export-UART1-reference-clock.patch b/target/linux/ath79/patches-4.19/0039-MIPS-ath79-export-UART1-reference-clock.patch new file mode 100644 index 0000000000000000000000000000000000000000..8656fafe0ecf1cd9edb44f2a0f51be06323e1e1d --- /dev/null +++ b/target/linux/ath79/patches-4.19/0039-MIPS-ath79-export-UART1-reference-clock.patch @@ -0,0 +1,52 @@ +--- a/arch/mips/ath79/clock.c ++++ b/arch/mips/ath79/clock.c +@@ -42,6 +42,7 @@ static const char * const clk_names[ATH7 + [ATH79_CLK_AHB] = "ahb", + [ATH79_CLK_REF] = "ref", + [ATH79_CLK_MDIO] = "mdio", ++ [ATH79_CLK_UART1] = "uart1", + }; + + static const char * __init ath79_clk_name(int type) +@@ -346,6 +347,9 @@ static void __init ar934x_clocks_init(vo + if (clk_ctrl & AR934X_PLL_SWITCH_CLOCK_CONTROL_MDIO_CLK_SEL) + ath79_set_clk(ATH79_CLK_MDIO, 100 * 1000 * 1000); + ++ if (clk_ctrl & AR934X_PLL_SWITCH_CLOCK_CONTROL_UART1_CLK_SEL) ++ ath79_set_clk(ATH79_CLK_UART1, 100 * 1000 * 1000); ++ + iounmap(dpll_base); + } + +@@ -651,6 +655,9 @@ static void __init ath79_clocks_init_dt( + if (!clks[ATH79_CLK_MDIO]) + clks[ATH79_CLK_MDIO] = clks[ATH79_CLK_REF]; + ++ if (!clks[ATH79_CLK_UART1]) ++ clks[ATH79_CLK_UART1] = clks[ATH79_CLK_REF]; ++ + if (of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data)) { + pr_err("%pOF: could not register clk provider\n", np); + goto err_iounmap; +--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h ++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h +@@ -351,6 +351,7 @@ + #define AR934X_PLL_CPU_DDR_CLK_CTRL_AHBCLK_FROM_DDRPLL BIT(24) + + #define AR934X_PLL_SWITCH_CLOCK_CONTROL_MDIO_CLK_SEL BIT(6) ++#define AR934X_PLL_SWITCH_CLOCK_CONTROL_UART1_CLK_SEL BIT(7) + + #define QCA953X_PLL_CPU_CONFIG_REG 0x00 + #define QCA953X_PLL_DDR_CONFIG_REG 0x04 +--- a/include/dt-bindings/clock/ath79-clk.h ++++ b/include/dt-bindings/clock/ath79-clk.h +@@ -15,7 +15,8 @@ + #define ATH79_CLK_AHB 2 + #define ATH79_CLK_REF 3 + #define ATH79_CLK_MDIO 4 ++#define ATH79_CLK_UART1 5 + +-#define ATH79_CLK_END 5 ++#define ATH79_CLK_END 6 + + #endif /* __DT_BINDINGS_ATH79_CLK_H */ diff --git a/target/linux/ath79/patches-4.19/0050-v5.1-drivers-provide-devm_platform_ioremap_resource.patch b/target/linux/ath79/patches-4.19/0050-v5.1-drivers-provide-devm_platform_ioremap_resource.patch new file mode 100644 index 0000000000000000000000000000000000000000..32c960f320fcba16852ad9ecd66f67db65ea9f47 --- /dev/null +++ b/target/linux/ath79/patches-4.19/0050-v5.1-drivers-provide-devm_platform_ioremap_resource.patch @@ -0,0 +1,61 @@ +From 7945f929f1a77a1c8887a97ca07f87626858ff42 Mon Sep 17 00:00:00 2001 +From: Bartosz Golaszewski +Date: Wed, 20 Feb 2019 11:12:39 +0000 +Subject: [PATCH] drivers: provide devm_platform_ioremap_resource() + +There are currently 1200+ instances of using platform_get_resource() +and devm_ioremap_resource() together in the kernel tree. + +This patch wraps these two calls in a single helper. Thanks to that +we don't have to declare a local variable for struct resource * and can +omit the redundant argument for resource type. We also have one +function call less. + +Signed-off-by: Bartosz Golaszewski +Acked-by: Greg Kroah-Hartman +Reviewed-by: Andy Shevchenko +Signed-off-by: Linus Walleij +--- + drivers/base/platform.c | 18 ++++++++++++++++++ + include/linux/platform_device.h | 3 +++ + 2 files changed, 21 insertions(+) + +--- a/drivers/base/platform.c ++++ b/drivers/base/platform.c +@@ -81,6 +81,24 @@ struct resource *platform_get_resource(s + EXPORT_SYMBOL_GPL(platform_get_resource); + + /** ++ * devm_platform_ioremap_resource - call devm_ioremap_resource() for a platform ++ * device ++ * ++ * @pdev: platform device to use both for memory resource lookup as well as ++ * resource managemend ++ * @index: resource index ++ */ ++void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev, ++ unsigned int index) ++{ ++ struct resource *res; ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, index); ++ return devm_ioremap_resource(&pdev->dev, res); ++} ++EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource); ++ ++/** + * platform_get_irq - get an IRQ for a device + * @dev: platform device + * @num: IRQ number index +--- a/include/linux/platform_device.h ++++ b/include/linux/platform_device.h +@@ -51,6 +51,9 @@ extern struct device platform_bus; + extern void arch_setup_pdev_archdata(struct platform_device *); + extern struct resource *platform_get_resource(struct platform_device *, + unsigned int, unsigned int); ++extern void __iomem * ++devm_platform_ioremap_resource(struct platform_device *pdev, ++ unsigned int index); + extern int platform_get_irq(struct platform_device *, unsigned int); + extern int platform_irq_count(struct platform_device *); + extern struct resource *platform_get_resource_byname(struct platform_device *, diff --git a/target/linux/ath79/patches-4.19/0051-spi-add-driver-for-ar934x-spi-controller.patch b/target/linux/ath79/patches-4.19/0051-spi-add-driver-for-ar934x-spi-controller.patch new file mode 100644 index 0000000000000000000000000000000000000000..9feea723f365710158fbdff7a762932245085a78 --- /dev/null +++ b/target/linux/ath79/patches-4.19/0051-spi-add-driver-for-ar934x-spi-controller.patch @@ -0,0 +1,283 @@ +From 7e161c423a232ef7ddf6c11b09ebe471dd5a23cf Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Wed, 5 Feb 2020 18:25:37 +0800 +Subject: [PATCH v4 1/2] spi: add driver for ar934x spi controller + +This patch adds driver for SPI controller found in Qualcomm Atheros +AR934x/QCA95xx SoCs. +This controller is a superset of the already supported qca,ar7100-spi. +Besides the bit-bang mode in spi-ath79.c, this new controller added +a new "shift register" mode, allowing faster spi operations. + +Signed-off-by: Chuanhong Guo +--- + drivers/spi/Kconfig | 7 ++ + drivers/spi/Makefile | 1 + + drivers/spi/spi-ar934x.c | 235 +++++++++++++++++++++++++++++++++++++++ + 3 files changed, 243 insertions(+) + create mode 100644 drivers/spi/spi-ar934x.c + +--- a/drivers/spi/Kconfig ++++ b/drivers/spi/Kconfig +@@ -61,6 +61,13 @@ config SPI_ALTERA + help + This is the driver for the Altera SPI Controller. + ++config SPI_AR934X ++ tristate "Qualcomm Atheros AR934X/QCA95XX SPI controller driver" ++ depends on ATH79 || COMPILE_TEST ++ help ++ This enables support for the SPI controller present on the ++ Qualcomm Atheros AR934X/QCA95XX SoCs. ++ + config SPI_ATH79 + tristate "Atheros AR71XX/AR724X/AR913X SPI controller driver" + depends on ATH79 && GPIOLIB +--- a/drivers/spi/Makefile ++++ b/drivers/spi/Makefile +@@ -14,6 +14,7 @@ obj-$(CONFIG_SPI_LOOPBACK_TEST) += spi- + + # SPI master controller drivers (bus) + obj-$(CONFIG_SPI_ALTERA) += spi-altera.o ++obj-$(CONFIG_SPI_AR934X) += spi-ar934x.o + obj-$(CONFIG_SPI_ARMADA_3700) += spi-armada-3700.o + obj-$(CONFIG_SPI_ATMEL) += spi-atmel.o + obj-$(CONFIG_SPI_ATH79) += spi-ath79.o +--- /dev/null ++++ b/drivers/spi/spi-ar934x.c +@@ -0,0 +1,235 @@ ++// SPDX-License-Identifier: GPL-2.0 ++// ++// SPI controller driver for Qualcomm Atheros AR934x/QCA95xx SoCs ++// ++// Copyright (C) 2020 Chuanhong Guo ++// ++// Based on spi-mt7621.c: ++// Copyright (C) 2011 Sergiy ++// Copyright (C) 2011-2013 Gabor Juhos ++// Copyright (C) 2014-2015 Felix Fietkau ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DRIVER_NAME "spi-ar934x" ++ ++#define AR934X_SPI_REG_FS 0x00 ++#define AR934X_SPI_ENABLE BIT(0) ++ ++#define AR934X_SPI_REG_IOC 0x08 ++#define AR934X_SPI_IOC_INITVAL 0x70000 ++ ++#define AR934X_SPI_REG_CTRL 0x04 ++#define AR934X_SPI_CLK_MASK GENMASK(5, 0) ++ ++#define AR934X_SPI_DATAOUT 0x10 ++ ++#define AR934X_SPI_REG_SHIFT_CTRL 0x14 ++#define AR934X_SPI_SHIFT_EN BIT(31) ++#define AR934X_SPI_SHIFT_CS(n) BIT(28 + (n)) ++#define AR934X_SPI_SHIFT_TERM 26 ++#define AR934X_SPI_SHIFT_VAL(cs, term, count) \ ++ (AR934X_SPI_SHIFT_EN | AR934X_SPI_SHIFT_CS(cs) | \ ++ (term) << AR934X_SPI_SHIFT_TERM | (count)) ++ ++#define AR934X_SPI_DATAIN 0x18 ++ ++struct ar934x_spi { ++ struct spi_controller *ctlr; ++ void __iomem *base; ++ struct clk *clk; ++ unsigned int clk_freq; ++}; ++ ++static inline int ar934x_spi_clk_div(struct ar934x_spi *sp, unsigned int freq) ++{ ++ int div = DIV_ROUND_UP(sp->clk_freq, freq * 2) - 1; ++ ++ if (div < 0) ++ return 0; ++ else if (div > AR934X_SPI_CLK_MASK) ++ return -EINVAL; ++ else ++ return div; ++} ++ ++static int ar934x_spi_setup(struct spi_device *spi) ++{ ++ struct ar934x_spi *sp = spi_controller_get_devdata(spi->master); ++ ++ if ((spi->max_speed_hz == 0) || ++ (spi->max_speed_hz > (sp->clk_freq / 2))) { ++ spi->max_speed_hz = sp->clk_freq / 2; ++ } else if (spi->max_speed_hz < (sp->clk_freq / 128)) { ++ dev_err(&spi->dev, "spi clock is too low\n"); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int ar934x_spi_transfer_one_message(struct spi_controller *master, ++ struct spi_message *m) ++{ ++ struct ar934x_spi *sp = spi_controller_get_devdata(master); ++ struct spi_transfer *t = NULL; ++ struct spi_device *spi = m->spi; ++ unsigned long trx_done, trx_cur; ++ int stat = 0; ++ u8 term = 0; ++ int div, i; ++ u32 reg; ++ const u8 *tx_buf; ++ u8 *buf; ++ ++ m->actual_length = 0; ++ list_for_each_entry(t, &m->transfers, transfer_list) { ++ if (t->speed_hz) ++ div = ar934x_spi_clk_div(sp, t->speed_hz); ++ else ++ div = ar934x_spi_clk_div(sp, spi->max_speed_hz); ++ if (div < 0) { ++ stat = -EIO; ++ goto msg_done; ++ } ++ ++ reg = ioread32(sp->base + AR934X_SPI_REG_CTRL); ++ reg &= ~AR934X_SPI_CLK_MASK; ++ reg |= div; ++ iowrite32(reg, sp->base + AR934X_SPI_REG_CTRL); ++ iowrite32(0, sp->base + AR934X_SPI_DATAOUT); ++ ++ for (trx_done = 0; trx_done < t->len; trx_done += 4) { ++ trx_cur = t->len - trx_done; ++ if (trx_cur > 4) ++ trx_cur = 4; ++ else if (list_is_last(&t->transfer_list, &m->transfers)) ++ term = 1; ++ ++ if (t->tx_buf) { ++ tx_buf = t->tx_buf + trx_done; ++ reg = tx_buf[0]; ++ for (i = 1; i < trx_cur; i++) ++ reg = reg << 8 | tx_buf[i]; ++ iowrite32(reg, sp->base + AR934X_SPI_DATAOUT); ++ } ++ ++ reg = AR934X_SPI_SHIFT_VAL(spi->chip_select, term, ++ trx_cur * 8); ++ iowrite32(reg, sp->base + AR934X_SPI_REG_SHIFT_CTRL); ++ stat = readl_poll_timeout( ++ sp->base + AR934X_SPI_REG_SHIFT_CTRL, reg, ++ !(reg & AR934X_SPI_SHIFT_EN), 0, 5); ++ if (stat < 0) ++ goto msg_done; ++ ++ if (t->rx_buf) { ++ reg = ioread32(sp->base + AR934X_SPI_DATAIN); ++ buf = t->rx_buf + trx_done; ++ for (i = 0; i < trx_cur; i++) { ++ buf[trx_cur - i - 1] = reg & 0xff; ++ reg >>= 8; ++ } ++ } ++ } ++ m->actual_length += t->len; ++ } ++ ++msg_done: ++ m->status = stat; ++ spi_finalize_current_message(master); ++ ++ return 0; ++} ++ ++static const struct of_device_id ar934x_spi_match[] = { ++ { .compatible = "qca,ar934x-spi" }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(of, ar934x_spi_match); ++ ++static int ar934x_spi_probe(struct platform_device *pdev) ++{ ++ struct spi_controller *ctlr; ++ struct ar934x_spi *sp; ++ void __iomem *base; ++ struct clk *clk; ++ int ret; ++ ++ base = devm_platform_ioremap_resource(pdev, 0); ++ if (IS_ERR(base)) ++ return PTR_ERR(base); ++ ++ clk = devm_clk_get(&pdev->dev, NULL); ++ if (IS_ERR(clk)) { ++ dev_err(&pdev->dev, "failed to get clock\n"); ++ return PTR_ERR(clk); ++ } ++ ++ ret = clk_prepare_enable(clk); ++ if (ret) ++ return ret; ++ ++ ctlr = spi_alloc_master(&pdev->dev, sizeof(*sp)); ++ if (!ctlr) { ++ dev_info(&pdev->dev, "failed to allocate spi controller\n"); ++ return -ENOMEM; ++ } ++ ++ /* disable flash mapping and expose spi controller registers */ ++ iowrite32(AR934X_SPI_ENABLE, base + AR934X_SPI_REG_FS); ++ /* restore pins to default state: CSn=1 DO=CLK=0 */ ++ iowrite32(AR934X_SPI_IOC_INITVAL, base + AR934X_SPI_REG_IOC); ++ ++ ctlr->mode_bits = SPI_LSB_FIRST; ++ ctlr->setup = ar934x_spi_setup; ++ ctlr->transfer_one_message = ar934x_spi_transfer_one_message; ++ ctlr->bits_per_word_mask = SPI_BPW_MASK(8); ++ ctlr->dev.of_node = pdev->dev.of_node; ++ ctlr->num_chipselect = 3; ++ ++ dev_set_drvdata(&pdev->dev, ctlr); ++ ++ sp = spi_controller_get_devdata(ctlr); ++ sp->base = base; ++ sp->clk = clk; ++ sp->clk_freq = clk_get_rate(clk); ++ sp->ctlr = ctlr; ++ ++ return devm_spi_register_controller(&pdev->dev, ctlr); ++} ++ ++static int ar934x_spi_remove(struct platform_device *pdev) ++{ ++ struct spi_controller *ctlr; ++ struct ar934x_spi *sp; ++ ++ ctlr = dev_get_drvdata(&pdev->dev); ++ sp = spi_controller_get_devdata(ctlr); ++ ++ clk_disable_unprepare(sp->clk); ++ ++ return 0; ++} ++ ++static struct platform_driver ar934x_spi_driver = { ++ .driver = { ++ .name = DRIVER_NAME, ++ .of_match_table = ar934x_spi_match, ++ }, ++ .probe = ar934x_spi_probe, ++ .remove = ar934x_spi_remove, ++}; ++ ++module_platform_driver(ar934x_spi_driver); ++ ++MODULE_DESCRIPTION("SPI controller driver for Qualcomm Atheros AR934x/QCA95xx"); ++MODULE_AUTHOR("Chuanhong Guo "); ++MODULE_LICENSE("GPL v2"); ++MODULE_ALIAS("platform:" DRIVER_NAME); diff --git a/target/linux/ath79/patches-4.19/0060-serial-ar933x_uart-set-UART_CS_-RX-TX-_READY_ORIDE.patch b/target/linux/ath79/patches-4.19/0060-serial-ar933x_uart-set-UART_CS_-RX-TX-_READY_ORIDE.patch new file mode 100644 index 0000000000000000000000000000000000000000..485aadcbbd46f9727d3ab0c843cd26d634eca6a8 --- /dev/null +++ b/target/linux/ath79/patches-4.19/0060-serial-ar933x_uart-set-UART_CS_-RX-TX-_READY_ORIDE.patch @@ -0,0 +1,64 @@ +From patchwork Fri Feb 7 09:53:35 2020 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 1190470 +Date: Fri, 7 Feb 2020 11:53:35 +0200 +From: Daniel Golle +To: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org +Cc: Greg Kroah-Hartman , + Jiri Slaby , + Chuanhong Guo , + Eitan Cohen , + Ori Gofen +Subject: [PATCH] serial: ar933x_uart: set UART_CS_{RX,TX}_READY_ORIDE +Message-ID: <20200207095335.GA179836@makrotopia.org> +MIME-Version: 1.0 +Content-Disposition: inline +Sender: linux-kernel-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-kernel@vger.kernel.org + +On AR934x this UART is usually not initialized by the bootloader +as it is only used as a secondary serial port while the primary +UART is a newly introduced NS16550-compatible. +In order to make use of the ar933x-uart on AR934x without RTS/CTS +hardware flow control, one needs to set the +UART_CS_{RX,TX}_READY_ORIDE bits as other than on AR933x where this +UART is used as primary/console, the bootloader on AR934x typically +doesn't set those bits. +Setting them explicitely on AR933x should not do any harm, so just +set them unconditionally. + +Tested-by: Chuanhong Guo +Signed-off-by: Daniel Golle +--- + drivers/tty/serial/ar933x_uart.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/tty/serial/ar933x_uart.c ++++ b/drivers/tty/serial/ar933x_uart.c +@@ -286,6 +286,10 @@ static void ar933x_uart_set_termios(stru + ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, + AR933X_UART_CS_HOST_INT_EN); + ++ /* enable RX and TX ready overide */ ++ ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, ++ AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); ++ + /* reenable the UART */ + ar933x_uart_rmw(up, AR933X_UART_CS_REG, + AR933X_UART_CS_IF_MODE_M << AR933X_UART_CS_IF_MODE_S, +@@ -418,6 +422,10 @@ static int ar933x_uart_startup(struct ua + ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, + AR933X_UART_CS_HOST_INT_EN); + ++ /* enable RX and TX ready overide */ ++ ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, ++ AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); ++ + /* Enable RX interrupts */ + up->ier = AR933X_UART_INT_RX_VALID; + ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); diff --git a/target/linux/ath79/patches-4.19/0061-tty-serial-ar933x-uart-rs485-gpio.patch b/target/linux/ath79/patches-4.19/0061-tty-serial-ar933x-uart-rs485-gpio.patch new file mode 100644 index 0000000000000000000000000000000000000000..7bbcaa08a6ce59e028df22c708e5839142b05149 --- /dev/null +++ b/target/linux/ath79/patches-4.19/0061-tty-serial-ar933x-uart-rs485-gpio.patch @@ -0,0 +1,267 @@ +From patchwork Fri Feb 21 21:23:31 2020 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 1198835 +Date: Fri, 21 Feb 2020 22:23:31 +0100 +From: Daniel Golle +To: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org +Cc: Greg Kroah-Hartman , + Jiri Slaby , Petr =?utf-8?q?=C5=A0tetiar?= , + Chuanhong Guo , Piotr Dymacz +Subject: [PATCH v2] serial: ar933x_uart: add RS485 support +Message-ID: <20200221212331.GA21467@makrotopia.org> +MIME-Version: 1.0 +Content-Disposition: inline +Sender: linux-kernel-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-kernel@vger.kernel.org + +Emulate half-duplex operation and use mctrl_gpio to add support for +RS485 tranceiver with transmit/receive switch hooked to RTS GPIO line. +This is needed to make use of the RS485 port found on Teltonika RUT955. + +Signed-off-by: Daniel Golle +--- +v2: use bool to indicate ongoing half-duplex send, use it afterwards + to decide whether we've just been in a send operation. + + drivers/tty/serial/Kconfig | 1 + + drivers/tty/serial/ar933x_uart.c | 113 +++++++++++++++++++++++++++++-- + 2 files changed, 108 insertions(+), 6 deletions(-) + +--- a/drivers/tty/serial/Kconfig ++++ b/drivers/tty/serial/Kconfig +@@ -1296,6 +1296,7 @@ config SERIAL_AR933X + tristate "AR933X serial port support" + depends on HAVE_CLK && ATH79 + select SERIAL_CORE ++ select SERIAL_MCTRL_GPIO if GPIOLIB + help + If you have an Atheros AR933X SOC based board and want to use the + built-in UART of the SoC, say Y to this option. +--- a/drivers/tty/serial/ar933x_uart.c ++++ b/drivers/tty/serial/ar933x_uart.c +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -29,6 +30,8 @@ + + #include + ++#include "serial_mctrl_gpio.h" ++ + #define DRIVER_NAME "ar933x-uart" + + #define AR933X_UART_MAX_SCALE 0xff +@@ -47,6 +50,8 @@ struct ar933x_uart_port { + unsigned int min_baud; + unsigned int max_baud; + struct clk *clk; ++ struct mctrl_gpios *gpios; ++ struct gpio_desc *rts_gpiod; + }; + + static inline unsigned int ar933x_uart_read(struct ar933x_uart_port *up, +@@ -100,6 +105,18 @@ static inline void ar933x_uart_stop_tx_i + ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); + } + ++static inline void ar933x_uart_start_rx_interrupt(struct ar933x_uart_port *up) ++{ ++ up->ier |= AR933X_UART_INT_RX_VALID; ++ ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); ++} ++ ++static inline void ar933x_uart_stop_rx_interrupt(struct ar933x_uart_port *up) ++{ ++ up->ier &= ~AR933X_UART_INT_RX_VALID; ++ ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); ++} ++ + static inline void ar933x_uart_putc(struct ar933x_uart_port *up, int ch) + { + unsigned int rdata; +@@ -125,11 +142,21 @@ static unsigned int ar933x_uart_tx_empty + + static unsigned int ar933x_uart_get_mctrl(struct uart_port *port) + { +- return TIOCM_CAR; ++ struct ar933x_uart_port *up = ++ container_of(port, struct ar933x_uart_port, port); ++ int ret = TIOCM_CTS | TIOCM_DSR | TIOCM_CAR; ++ ++ mctrl_gpio_get(up->gpios, &ret); ++ ++ return ret; + } + + static void ar933x_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) + { ++ struct ar933x_uart_port *up = ++ container_of(port, struct ar933x_uart_port, port); ++ ++ mctrl_gpio_set(up->gpios, mctrl); + } + + static void ar933x_uart_start_tx(struct uart_port *port) +@@ -140,6 +167,37 @@ static void ar933x_uart_start_tx(struct + ar933x_uart_start_tx_interrupt(up); + } + ++static void ar933x_uart_wait_tx_complete(struct ar933x_uart_port *up) ++{ ++ unsigned int status; ++ unsigned int timeout = 60000; ++ ++ /* Wait up to 60ms for the character(s) to be sent. */ ++ do { ++ status = ar933x_uart_read(up, AR933X_UART_CS_REG); ++ if (--timeout == 0) ++ break; ++ udelay(1); ++ } while (status & AR933X_UART_CS_TX_BUSY); ++ ++ if (timeout == 0) ++ dev_err(up->port.dev, "waiting for TX timed out\n"); ++} ++ ++static void ar933x_uart_rx_flush(struct ar933x_uart_port *up) ++{ ++ unsigned int status; ++ ++ /* clear RX_VALID interrupt */ ++ ar933x_uart_write(up, AR933X_UART_INT_REG, AR933X_UART_INT_RX_VALID); ++ ++ /* remove characters from the RX FIFO */ ++ do { ++ ar933x_uart_write(up, AR933X_UART_DATA_REG, AR933X_UART_DATA_RX_CSR); ++ status = ar933x_uart_read(up, AR933X_UART_DATA_REG); ++ } while (status & AR933X_UART_DATA_RX_CSR); ++} ++ + static void ar933x_uart_stop_tx(struct uart_port *port) + { + struct ar933x_uart_port *up = +@@ -153,8 +211,7 @@ static void ar933x_uart_stop_rx(struct u + struct ar933x_uart_port *up = + container_of(port, struct ar933x_uart_port, port); + +- up->ier &= ~AR933X_UART_INT_RX_VALID; +- ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); ++ ar933x_uart_stop_rx_interrupt(up); + } + + static void ar933x_uart_break_ctl(struct uart_port *port, int break_state) +@@ -336,11 +393,20 @@ static void ar933x_uart_rx_chars(struct + static void ar933x_uart_tx_chars(struct ar933x_uart_port *up) + { + struct circ_buf *xmit = &up->port.state->xmit; ++ struct serial_rs485 *rs485conf = &up->port.rs485; + int count; ++ bool half_duplex_send = false; + + if (uart_tx_stopped(&up->port)) + return; + ++ if ((rs485conf->flags & SER_RS485_ENABLED) && ++ (up->port.x_char || !uart_circ_empty(xmit))) { ++ ar933x_uart_stop_rx_interrupt(up); ++ gpiod_set_value(up->rts_gpiod, !!(rs485conf->flags & SER_RS485_RTS_ON_SEND)); ++ half_duplex_send = true; ++ } ++ + count = up->port.fifosize; + do { + unsigned int rdata; +@@ -368,8 +434,14 @@ static void ar933x_uart_tx_chars(struct + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) + uart_write_wakeup(&up->port); + +- if (!uart_circ_empty(xmit)) ++ if (!uart_circ_empty(xmit)) { + ar933x_uart_start_tx_interrupt(up); ++ } else if (half_duplex_send) { ++ ar933x_uart_wait_tx_complete(up); ++ ar933x_uart_rx_flush(up); ++ ar933x_uart_start_rx_interrupt(up); ++ gpiod_set_value(up->rts_gpiod, !!(rs485conf->flags & SER_RS485_RTS_AFTER_SEND)); ++ } + } + + static irqreturn_t ar933x_uart_interrupt(int irq, void *dev_id) +@@ -427,8 +499,7 @@ static int ar933x_uart_startup(struct ua + AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); + + /* Enable RX interrupts */ +- up->ier = AR933X_UART_INT_RX_VALID; +- ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); ++ ar933x_uart_start_rx_interrupt(up); + + spin_unlock_irqrestore(&up->port.lock, flags); + +@@ -511,6 +582,21 @@ static const struct uart_ops ar933x_uart + .verify_port = ar933x_uart_verify_port, + }; + ++static int ar933x_config_rs485(struct uart_port *port, ++ struct serial_rs485 *rs485conf) ++{ ++ struct ar933x_uart_port *up = ++ container_of(port, struct ar933x_uart_port, port); ++ ++ if ((rs485conf->flags & SER_RS485_ENABLED) && ++ !up->rts_gpiod) { ++ dev_err(port->dev, "RS485 needs rts-gpio\n"); ++ return 1; ++ } ++ port->rs485 = *rs485conf; ++ return 0; ++} ++ + #ifdef CONFIG_SERIAL_AR933X_CONSOLE + static struct ar933x_uart_port * + ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS]; +@@ -680,6 +766,8 @@ static int ar933x_uart_probe(struct plat + goto err_disable_clk; + } + ++ uart_get_rs485_mode(&pdev->dev, &port->rs485); ++ + port->mapbase = mem_res->start; + port->line = id; + port->irq = irq_res->start; +@@ -690,6 +778,7 @@ static int ar933x_uart_probe(struct plat + port->regshift = 2; + port->fifosize = AR933X_UART_FIFO_SIZE; + port->ops = &ar933x_uart_ops; ++ port->rs485_config = ar933x_config_rs485; + + baud = ar933x_uart_get_baud(port->uartclk, AR933X_UART_MAX_SCALE, 1); + up->min_baud = max_t(unsigned int, baud, AR933X_UART_MIN_BAUD); +@@ -697,6 +786,18 @@ static int ar933x_uart_probe(struct plat + baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP); + up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD); + ++ up->gpios = mctrl_gpio_init(port, 0); ++ if (IS_ERR(up->gpios) && PTR_ERR(up->gpios) != -ENOSYS) ++ return PTR_ERR(up->gpios); ++ ++ up->rts_gpiod = mctrl_gpio_to_gpiod(up->gpios, UART_GPIO_RTS); ++ ++ if ((port->rs485.flags & SER_RS485_ENABLED) && ++ !up->rts_gpiod) { ++ dev_err(&pdev->dev, "lacking rts-gpio, disabling RS485\n"); ++ port->rs485.flags &= ~SER_RS485_ENABLED; ++ } ++ + #ifdef CONFIG_SERIAL_AR933X_CONSOLE + ar933x_console_ports[up->port.line] = up; + #endif diff --git a/target/linux/ath79/patches-4.19/700-net-phy-add-reset-controller-support.patch b/target/linux/ath79/patches-4.19/700-net-phy-add-reset-controller-support.patch new file mode 100644 index 0000000000000000000000000000000000000000..9f96390911c7a619795545b37cc775392e06fb03 --- /dev/null +++ b/target/linux/ath79/patches-4.19/700-net-phy-add-reset-controller-support.patch @@ -0,0 +1,107 @@ +From 71dd6c0dff51b5f1fef2e9dfa6f6a948aac975f3 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Wed, 17 Apr 2019 23:59:21 +0200 +Subject: [PATCH] net: phy: add support for reset-controller + +This commit adds support for PHY reset pins handled by a reset controller. + +Signed-off-by: David Bauer +Reviewed-by: Andrew Lunn +Signed-off-by: David S. Miller +--- + drivers/net/phy/mdio_bus.c | 27 +++++++++++++++++++++++++-- + drivers/net/phy/mdio_device.c | 13 +++++++++++-- + include/linux/mdio.h | 1 + + 3 files changed, 37 insertions(+), 4 deletions(-) + +--- a/drivers/net/phy/mdio_bus.c ++++ b/drivers/net/phy/mdio_bus.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -65,8 +66,23 @@ static int mdiobus_register_gpiod(struct + + mdiodev->reset = gpiod; + +- /* Assert the reset signal again */ +- mdio_device_reset(mdiodev, 1); ++ return 0; ++} ++ ++static int mdiobus_register_reset(struct mdio_device *mdiodev) ++{ ++ struct reset_control *reset = NULL; ++ ++ if (mdiodev->dev.of_node) ++ reset = devm_reset_control_get_exclusive(&mdiodev->dev, ++ "phy"); ++ if (PTR_ERR(reset) == -ENOENT || ++ PTR_ERR(reset) == -ENOTSUPP) ++ reset = NULL; ++ else if (IS_ERR(reset)) ++ return PTR_ERR(reset); ++ ++ mdiodev->reset_ctrl = reset; + + return 0; + } +@@ -82,6 +98,13 @@ int mdiobus_register_device(struct mdio_ + err = mdiobus_register_gpiod(mdiodev); + if (err) + return err; ++ ++ err = mdiobus_register_reset(mdiodev); ++ if (err) ++ return err; ++ ++ /* Assert the reset signal */ ++ mdio_device_reset(mdiodev, 1); + } + + mdiodev->bus->mdio_map[mdiodev->addr] = mdiodev; +--- a/drivers/net/phy/mdio_device.c ++++ b/drivers/net/phy/mdio_device.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -121,10 +122,18 @@ void mdio_device_reset(struct mdio_devic + { + unsigned int d; + +- if (!mdiodev->reset) ++ if (!mdiodev->reset && !mdiodev->reset_ctrl) + return; + +- gpiod_set_value(mdiodev->reset, value); ++ if (mdiodev->reset) ++ gpiod_set_value(mdiodev->reset, value); ++ ++ if (mdiodev->reset_ctrl) { ++ if (value) ++ reset_control_assert(mdiodev->reset_ctrl); ++ else ++ reset_control_deassert(mdiodev->reset_ctrl); ++ } + + d = value ? mdiodev->reset_assert_delay : mdiodev->reset_deassert_delay; + if (d) +--- a/include/linux/mdio.h ++++ b/include/linux/mdio.h +@@ -40,6 +40,7 @@ struct mdio_device { + int addr; + int flags; + struct gpio_desc *reset; ++ struct reset_control *reset_ctrl; + unsigned int reset_assert_delay; + unsigned int reset_deassert_delay; + }; diff --git a/target/linux/ath79/patches-4.19/701-mdio-bus-dont-use-managed-reset-controller.patch b/target/linux/ath79/patches-4.19/701-mdio-bus-dont-use-managed-reset-controller.patch new file mode 100644 index 0000000000000000000000000000000000000000..16e7f20370258138d920959fd643be8169e7b4ed --- /dev/null +++ b/target/linux/ath79/patches-4.19/701-mdio-bus-dont-use-managed-reset-controller.patch @@ -0,0 +1,44 @@ +From 32085f25d7b68404055f3525c780142fc72e543f Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Fri, 22 Nov 2019 22:44:51 +0100 +Subject: [PATCH] mdio_bus: don't use managed reset-controller + +Geert Uytterhoeven reported that using devm_reset_controller_get leads +to a WARNING when probing a reset-controlled PHY. This is because the +device devm_reset_controller_get gets supplied is not actually the +one being probed. + +Acquire an unmanaged reset-control as well as free the reset_control on +unregister to fix this. + +Reported-by: Geert Uytterhoeven +CC: Andrew Lunn +Signed-off-by: David Bauer +Reviewed-by: Andrew Lunn +Signed-off-by: David S. Miller +--- + drivers/net/phy/mdio_bus.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/phy/mdio_bus.c ++++ b/drivers/net/phy/mdio_bus.c +@@ -74,8 +74,8 @@ static int mdiobus_register_reset(struct + struct reset_control *reset = NULL; + + if (mdiodev->dev.of_node) +- reset = devm_reset_control_get_exclusive(&mdiodev->dev, +- "phy"); ++ reset = of_reset_control_get_exclusive(mdiodev->dev.of_node, ++ "phy"); + if (PTR_ERR(reset) == -ENOENT || + PTR_ERR(reset) == -ENOTSUPP) + reset = NULL; +@@ -118,6 +118,8 @@ int mdiobus_unregister_device(struct mdi + if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev) + return -EINVAL; + ++ reset_control_put(mdiodev->reset_ctrl); ++ + mdiodev->bus->mdio_map[mdiodev->addr] = NULL; + + return 0; diff --git a/target/linux/ath79/patches-4.19/910-unaligned_access_hacks.patch b/target/linux/ath79/patches-4.19/910-unaligned_access_hacks.patch index 92396c13e8875ef1e59090cfd5bb4a06d10d189d..1b63db7ba44ec626650082e97c8ff1d01b734480 100644 --- a/target/linux/ath79/patches-4.19/910-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-4.19/910-unaligned_access_hacks.patch @@ -802,7 +802,7 @@ * No flags defined yet. --- a/net/core/utils.c +++ b/net/core/utils.c -@@ -447,8 +447,14 @@ void inet_proto_csum_replace16(__sum16 * +@@ -464,8 +464,14 @@ void inet_proto_csum_replace16(__sum16 * bool pseudohdr) { __be32 diff[] = { diff --git a/target/linux/ath79/tiny/base-files/etc/board.d/01_leds b/target/linux/ath79/tiny/base-files/etc/board.d/01_leds index 75de6f3aade717e2fcb65444d1d18c9e3815a92d..c62fdfd083c5e8b0d0b58e72d921ad12b45c3161 100755 --- a/target/linux/ath79/tiny/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/tiny/base-files/etc/board.d/01_leds @@ -41,7 +41,12 @@ on,n150r) ucidef_set_led_switch "lan2" "LAN2" "netgear:green:lan2" "switch0" "0x04" "0x0f" ;; tplink,tl-mr3020-v1|\ -tplink,tl-mr3040-v2) +tplink,tl-mr3040-v2|\ +tplink,tl-wa701nd-v1|\ +tplink,tl-wa730re-v1|\ +tplink,tl-wa801nd-v1|\ +tplink,tl-wa830re-v1|\ +tplink,tl-wa901nd-v1) ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0" ;; tplink,tl-mr3420-v2|\ @@ -95,6 +100,9 @@ tplink,tl-wr941nd-v6) ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04" ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02" ;; +tplink,tl-wr940n-v6) + ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth1" + ;; esac board_config_flush diff --git a/target/linux/ath79/tiny/base-files/etc/board.d/02_network b/target/linux/ath79/tiny/base-files/etc/board.d/02_network index 56200de59e1dde86bd54c7f261983d2a5e458962..29c55c98a1d662d0855cd031ecc78f2daff6d087 100755 --- a/target/linux/ath79/tiny/base-files/etc/board.d/02_network +++ b/target/linux/ath79/tiny/base-files/etc/board.d/02_network @@ -32,8 +32,13 @@ ath79_setup_interfaces() tplink,tl-mr10u|\ tplink,tl-mr3020-v1|\ tplink,tl-mr3040-v2|\ + tplink,tl-wa701nd-v1|\ + tplink,tl-wa730re-v1|\ + tplink,tl-wa801nd-v1|\ + tplink,tl-wa830re-v1|\ tplink,tl-wa850re-v1|\ tplink,tl-wa850re-v2|\ + tplink,tl-wa901nd-v1|\ tplink,tl-wa901nd-v2|\ tplink,tl-wr703n) ucidef_set_interface_lan "eth0" @@ -47,6 +52,7 @@ ath79_setup_interfaces() tplink,tl-wr841-v12|\ tplink,tl-wr940n-v3|\ tplink,tl-wr940n-v4|\ + tplink,tl-wr940n-v6|\ tplink,tl-wr941nd-v6) ucidef_set_interface_wan "eth1" ucidef_add_switch "switch0" \ diff --git a/target/linux/ath79/tiny/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/tiny/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index e54b6acdba6ae38ff4b1b2a27a6367506816b6a2..43d88ef0ce02d9ef9c746cf1ce967742d2e5fa3a 100644 --- a/target/linux/ath79/tiny/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/tiny/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -65,6 +65,11 @@ case "$FIRMWARE" in "ath9k-eeprom-pci-0000:00:00.0.bin") case $board in buffalo,whr-g301n|\ + tplink,tl-wa701nd-v1|\ + tplink,tl-wa730re-v1|\ + tplink,tl-wa801nd-v1|\ + tplink,tl-wa830re-v1|\ + tplink,tl-wa901nd-v1|\ tplink,tl-wr841-v5|\ tplink,tl-wr941-v4) ath9k_eeprom_extract "art" 0x1000 0xeb8 diff --git a/target/linux/bcm27xx/patches-4.19/950-0029-mm-Remove-the-PFN-busy-warning.patch b/target/linux/bcm27xx/patches-4.19/950-0029-mm-Remove-the-PFN-busy-warning.patch index 76a53fea0d97f0869e947a92ad7d53e711b601b3..ada81969b056f2ff24cf190288c4023bd748c7b2 100644 --- a/target/linux/bcm27xx/patches-4.19/950-0029-mm-Remove-the-PFN-busy-warning.patch +++ b/target/linux/bcm27xx/patches-4.19/950-0029-mm-Remove-the-PFN-busy-warning.patch @@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt --- a/mm/page_alloc.c +++ b/mm/page_alloc.c -@@ -7977,8 +7977,6 @@ int alloc_contig_range(unsigned long sta +@@ -8007,8 +8007,6 @@ int alloc_contig_range(unsigned long sta /* Make sure the range is really isolated. */ if (test_pages_isolated(outer_start, end, false)) { diff --git a/target/linux/bcm27xx/patches-4.19/950-0089-OF-DT-Overlay-configfs-interface.patch b/target/linux/bcm27xx/patches-4.19/950-0089-OF-DT-Overlay-configfs-interface.patch index e3caf880ea6d93db6a1035431503383c6e876a2f..65af09dbeb642255db915ce8350194509a2df36e 100644 --- a/target/linux/bcm27xx/patches-4.19/950-0089-OF-DT-Overlay-configfs-interface.patch +++ b/target/linux/bcm27xx/patches-4.19/950-0089-OF-DT-Overlay-configfs-interface.patch @@ -90,8 +90,8 @@ configfs: New of_overlay API +make sense for developers (since it avoids problems with namespaces). --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig -@@ -104,4 +104,11 @@ config OF_OVERLAY - config OF_NUMA +@@ -108,4 +108,11 @@ config OF_DMA_DEFAULT_COHERENT + # arches should select this if DMA is coherent by default for OF devices bool +config OF_CONFIGFS diff --git a/target/linux/bcm27xx/patches-4.19/950-0786-leds-pca963x-Fix-open-drain-initialization.patch b/target/linux/bcm27xx/patches-4.19/950-0786-leds-pca963x-Fix-open-drain-initialization.patch deleted file mode 100644 index e63d4c6bc1b5d8cc4a8bb31be60afa21484b2530..0000000000000000000000000000000000000000 --- a/target/linux/bcm27xx/patches-4.19/950-0786-leds-pca963x-Fix-open-drain-initialization.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 1738aaf187e0c8e97fbdd9661960b835f45e8985 Mon Sep 17 00:00:00 2001 -From: Zahari Petkov -Date: Mon, 18 Nov 2019 23:02:55 +0200 -Subject: [PATCH] leds: pca963x: Fix open-drain initialization - -commit 697529091ac7a0a90ca349b914bb30641c13c753 upstream. - -Before commit bb29b9cccd95 ("leds: pca963x: Add bindings to invert -polarity") Mode register 2 was initialized directly with either 0x01 -or 0x05 for open-drain or totem pole (push-pull) configuration. - -Afterwards, MODE2 initialization started using bitwise operations on -top of the default MODE2 register value (0x05). Using bitwise OR for -setting OUTDRV with 0x01 and 0x05 does not produce correct results. -When open-drain is used, instead of setting OUTDRV to 0, the driver -keeps it as 1: - -Open-drain: 0x05 | 0x01 -> 0x05 (0b101 - incorrect) -Totem pole: 0x05 | 0x05 -> 0x05 (0b101 - correct but still wrong) - -Now OUTDRV setting uses correct bitwise operations for initialization: - -Open-drain: 0x05 & ~0x04 -> 0x01 (0b001 - correct) -Totem pole: 0x05 | 0x04 -> 0x05 (0b101 - correct) - -Additional MODE2 register definitions are introduced now as well. - -Fixes: bb29b9cccd95 ("leds: pca963x: Add bindings to invert polarity") -Signed-off-by: Zahari Petkov -Signed-off-by: Pavel Machek ---- - drivers/leds/leds-pca963x.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - ---- a/drivers/leds/leds-pca963x.c -+++ b/drivers/leds/leds-pca963x.c -@@ -43,6 +43,8 @@ - #define PCA963X_LED_PWM 0x2 /* Controlled through PWM */ - #define PCA963X_LED_GRP_PWM 0x3 /* Controlled through PWM/GRPPWM */ - -+#define PCA963X_MODE2_OUTDRV 0x04 /* Open-drain or totem pole */ -+#define PCA963X_MODE2_INVRT 0x10 /* Normal or inverted direction */ - #define PCA963X_MODE2_DMBLNK 0x20 /* Enable blinking */ - - #define PCA963X_MODE1 0x00 -@@ -462,12 +464,12 @@ static int pca963x_probe(struct i2c_clie - PCA963X_MODE2); - /* Configure output: open-drain or totem pole (push-pull) */ - if (pdata->outdrv == PCA963X_OPEN_DRAIN) -- mode2 |= 0x01; -+ mode2 &= ~PCA963X_MODE2_OUTDRV; - else -- mode2 |= 0x05; -+ mode2 |= PCA963X_MODE2_OUTDRV; - /* Configure direction: normal or inverted */ - if (pdata->dir == PCA963X_INVERTED) -- mode2 |= 0x10; -+ mode2 |= PCA963X_MODE2_INVRT; - i2c_smbus_write_byte_data(pca963x->chip->client, PCA963X_MODE2, - mode2); - } diff --git a/target/linux/bcm53xx/patches-4.14/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch b/target/linux/bcm53xx/patches-4.14/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch index 65f9a52907982d6f9dbb100ffb25e919703056b0..9ce2087c31e0b4606efa2204026dcc42f4dbffb3 100644 --- a/target/linux/bcm53xx/patches-4.14/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch +++ b/target/linux/bcm53xx/patches-4.14/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch @@ -75,7 +75,7 @@ Signed-off-by: RafaÅ‚ MiÅ‚ecki chosen { - bootargs = "earlycon"; -+ bootargs = "console=ttyS0,115200 earlycon"; ++ bootargs = "console=ttyS0,115200 earlycon"; }; memory { diff --git a/target/linux/bcm53xx/patches-4.14/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch b/target/linux/bcm53xx/patches-4.14/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch index d79b2d0b706c0b9dbf2424a624ce47fb3d627e01..446ba6cdcdb98c1dfb2f519bc232fe25ecc8639a 100644 --- a/target/linux/bcm53xx/patches-4.14/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch +++ b/target/linux/bcm53xx/patches-4.14/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch @@ -13,7 +13,7 @@ Signed-off-by: RafaÅ‚ MiÅ‚ecki --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1226,6 +1226,18 @@ static const struct flash_info *spi_nor_ +@@ -1230,6 +1230,18 @@ static const struct flash_info *spi_nor_ } dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", id[0], id[1], id[2]); diff --git a/target/linux/bcm53xx/patches-4.19/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch b/target/linux/bcm53xx/patches-4.19/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch index 65f9a52907982d6f9dbb100ffb25e919703056b0..9ce2087c31e0b4606efa2204026dcc42f4dbffb3 100644 --- a/target/linux/bcm53xx/patches-4.19/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch +++ b/target/linux/bcm53xx/patches-4.19/320-ARM-dts-BCM5301X-Add-serial-to-the-bootargs.patch @@ -75,7 +75,7 @@ Signed-off-by: RafaÅ‚ MiÅ‚ecki chosen { - bootargs = "earlycon"; -+ bootargs = "console=ttyS0,115200 earlycon"; ++ bootargs = "console=ttyS0,115200 earlycon"; }; memory { diff --git a/target/linux/bcm53xx/patches-4.19/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch b/target/linux/bcm53xx/patches-4.19/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch index 21687e7a35024285f0c75f20cb37a05ef156e8d6..cfbf86ef6fac583b63981c5390e51eb66e35b3e7 100644 --- a/target/linux/bcm53xx/patches-4.19/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch +++ b/target/linux/bcm53xx/patches-4.19/400-mtd-spi-nor-detect-JEDEC-incompatible-w25q128-using-.patch @@ -13,7 +13,7 @@ Signed-off-by: RafaÅ‚ MiÅ‚ecki --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1301,6 +1301,18 @@ static const struct flash_info *spi_nor_ +@@ -1305,6 +1305,18 @@ static const struct flash_info *spi_nor_ } dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", id[0], id[1], id[2]); diff --git a/target/linux/brcm47xx/patches-4.14/209-b44-register-adm-switch.patch b/target/linux/brcm47xx/patches-4.14/209-b44-register-adm-switch.patch index 6e655ac802c2ac8d72999c64948c61bc5c98ff51..cdeb1f96e927e7c886cce12135855447d433491a 100644 --- a/target/linux/brcm47xx/patches-4.14/209-b44-register-adm-switch.patch +++ b/target/linux/brcm47xx/patches-4.14/209-b44-register-adm-switch.patch @@ -19,7 +19,7 @@ Subject: [PATCH 210/210] b44: register adm switch #include #include -@@ -2248,6 +2250,69 @@ static void b44_adjust_link(struct net_d +@@ -2251,6 +2253,69 @@ static void b44_adjust_link(struct net_d } } @@ -89,7 +89,7 @@ Subject: [PATCH 210/210] b44: register adm switch static int b44_register_phy_one(struct b44 *bp) { struct mii_bus *mii_bus; -@@ -2283,6 +2348,9 @@ static int b44_register_phy_one(struct b +@@ -2286,6 +2351,9 @@ static int b44_register_phy_one(struct b if (!mdiobus_is_registered_device(bp->mii_bus, bp->phy_addr) && (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { @@ -99,7 +99,7 @@ Subject: [PATCH 210/210] b44: register adm switch dev_info(sdev->dev, "could not find PHY at %i, use fixed one\n", bp->phy_addr); -@@ -2477,6 +2545,7 @@ static void b44_remove_one(struct ssb_de +@@ -2480,6 +2548,7 @@ static void b44_remove_one(struct ssb_de unregister_netdev(dev); if (bp->flags & B44_FLAG_EXTERNAL_PHY) b44_unregister_phy_one(bp); diff --git a/target/linux/brcm47xx/patches-4.14/210-b44_phy_fix.patch b/target/linux/brcm47xx/patches-4.14/210-b44_phy_fix.patch index 5620d5cd5f2e04db098ba79fc21afba57984d967..bff60521089848b42251948789fb467101519fb2 100644 --- a/target/linux/brcm47xx/patches-4.14/210-b44_phy_fix.patch +++ b/target/linux/brcm47xx/patches-4.14/210-b44_phy_fix.patch @@ -43,7 +43,7 @@ if (bp->flags & B44_FLAG_EXTERNAL_PHY) return 0; -@@ -2178,6 +2203,8 @@ static int b44_get_invariants(struct b44 +@@ -2181,6 +2206,8 @@ static int b44_get_invariants(struct b44 * valid PHY address. */ bp->phy_addr &= 0x1F; diff --git a/target/linux/brcm47xx/patches-4.14/831-old_gpio_wdt.patch b/target/linux/brcm47xx/patches-4.14/831-old_gpio_wdt.patch index c8233226e8a409fee4fe951c976d161da44bc442..88f472e63c8f1845f414dcf0877ea1c17027a08e 100644 --- a/target/linux/brcm47xx/patches-4.14/831-old_gpio_wdt.patch +++ b/target/linux/brcm47xx/patches-4.14/831-old_gpio_wdt.patch @@ -4,7 +4,7 @@ Signed-off-by: Mathias Adam --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig -@@ -1472,6 +1472,15 @@ config WDT_MTX1 +@@ -1473,6 +1473,15 @@ config WDT_MTX1 Hardware driver for the MTX-1 boards. This is a watchdog timer that will reboot the machine after a 100 seconds timer expired. diff --git a/target/linux/brcm47xx/patches-4.19/831-old_gpio_wdt.patch b/target/linux/brcm47xx/patches-4.19/831-old_gpio_wdt.patch index 259dc01256a714c640f7cfc8c4c74366a46a0a43..5c2c21ddb067107d16d1790c472a3e0233c4bb83 100644 --- a/target/linux/brcm47xx/patches-4.19/831-old_gpio_wdt.patch +++ b/target/linux/brcm47xx/patches-4.19/831-old_gpio_wdt.patch @@ -111,7 +111,7 @@ Signed-off-by: Mathias Adam + int first_interval; +} gpio_wdt_device; + -+static void gpio_wdt_trigger(unsigned long unused) ++static void gpio_wdt_trigger(struct timer_list *unused) +{ + spin_lock(&gpio_wdt_device.lock); + if (gpio_wdt_device.running && ticks > 0) @@ -268,7 +268,7 @@ Signed-off-by: Mathias Adam + init_completion(&gpio_wdt_device.stop); + gpio_wdt_device.queue = 0; + clear_bit(0, &gpio_wdt_device.inuse); -+ setup_timer(&gpio_wdt_device.timer, gpio_wdt_trigger, 0L); ++ timer_setup(&gpio_wdt_device.timer, gpio_wdt_trigger, 0L); + gpio_wdt_device.default_ticks = ticks; + + gpio_wdt_start(); diff --git a/target/linux/generic/backport-4.19/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch b/target/linux/generic/backport-4.19/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch index e638e0702665861a83828ec283409412f9c47d5d..7c574fd34339df895a61deb71ee7efa4cce09ff2 100644 --- a/target/linux/generic/backport-4.19/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch +++ b/target/linux/generic/backport-4.19/210-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch @@ -52,7 +52,7 @@ Signed-off-by: Will Deacon /* -@@ -128,9 +128,9 @@ struct user_sve_header { +@@ -129,9 +129,9 @@ struct user_sve_header { */ /* Offset from the start of struct user_sve_header to the register data */ @@ -65,7 +65,7 @@ Signed-off-by: Will Deacon /* * The register data content and layout depends on the value of the -@@ -176,39 +176,36 @@ struct user_sve_header { +@@ -177,39 +177,36 @@ struct user_sve_header { * Additional data might be appended in the future. */ @@ -117,7 +117,7 @@ Signed-off-by: Will Deacon #define SVE_PT_SVE_FPCR_OFFSET(vq) \ (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE) -@@ -219,8 +216,8 @@ struct user_sve_header { +@@ -220,8 +217,8 @@ struct user_sve_header { #define SVE_PT_SVE_SIZE(vq, flags) \ ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \ diff --git a/target/linux/generic/hack-4.14/400-mt29f_spinand-fix-memleak.patch b/target/linux/generic/hack-4.14/400-mt29f_spinand-fix-memleak.patch new file mode 100644 index 0000000000000000000000000000000000000000..d479aba01a558e3632b5822370fa76763fe43dbc --- /dev/null +++ b/target/linux/generic/hack-4.14/400-mt29f_spinand-fix-memleak.patch @@ -0,0 +1,90 @@ +--- a/drivers/staging/mt29f_spinand/mt29f_spinand.c ++++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c +@@ -492,7 +492,7 @@ static int spinand_program_page(struct s + #ifdef CONFIG_MTD_SPINAND_ONDIEECC + unsigned int i, j; + +- wbuf = devm_kzalloc(&spi_nand->dev, CACHE_BUF, GFP_KERNEL); ++ wbuf = kzalloc(CACHE_BUF, GFP_KERNEL); + if (!wbuf) + return -ENOMEM; + +@@ -500,7 +500,7 @@ static int spinand_program_page(struct s + retval = spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf); + if (retval < 0) { + dev_err(&spi_nand->dev, "ecc error on read page!!!\n"); +- return retval; ++ goto cleanup; + } + + for (i = offset, j = 0; i < len; i++, j++) +@@ -510,7 +510,7 @@ static int spinand_program_page(struct s + retval = spinand_enable_ecc(spi_nand); + if (retval < 0) { + dev_err(&spi_nand->dev, "enable ecc failed!!\n"); +- return retval; ++ goto cleanup; + } + } + #else +@@ -519,7 +519,7 @@ static int spinand_program_page(struct s + retval = spinand_write_enable(spi_nand); + if (retval < 0) { + dev_err(&spi_nand->dev, "write enable failed!!\n"); +- return retval; ++ goto cleanup; + } + if (wait_till_ready(spi_nand)) + dev_err(&spi_nand->dev, "wait timedout!!!\n"); +@@ -527,23 +527,24 @@ static int spinand_program_page(struct s + retval = spinand_program_data_to_cache(spi_nand, page_id, + offset, len, wbuf); + if (retval < 0) +- return retval; ++ goto cleanup; + retval = spinand_program_execute(spi_nand, page_id); + if (retval < 0) +- return retval; ++ goto cleanup; + while (1) { + retval = spinand_read_status(spi_nand, &status); + if (retval < 0) { + dev_err(&spi_nand->dev, + "error %d reading status register\n", retval); +- return retval; ++ goto cleanup; + } + + if ((status & STATUS_OIP_MASK) == STATUS_READY) { + if ((status & STATUS_P_FAIL_MASK) == STATUS_P_FAIL) { + dev_err(&spi_nand->dev, + "program error, page %d\n", page_id); +- return -1; ++ retval = -1; ++ goto cleanup; + } + break; + } +@@ -553,13 +554,20 @@ static int spinand_program_page(struct s + retval = spinand_disable_ecc(spi_nand); + if (retval < 0) { + dev_err(&spi_nand->dev, "disable ecc failed!!\n"); +- return retval; ++ goto cleanup; + } + enable_hw_ecc = 0; + } ++ kfree(wbuf); + #endif +- + return 0; ++ ++cleanup: ++#ifdef CONFIG_MTD_SPINAND_ONDIEECC ++ kfree(wbuf); ++#endif ++ return retval; ++ + } + + /** diff --git a/target/linux/generic/hack-4.19/204-module_strip.patch b/target/linux/generic/hack-4.19/204-module_strip.patch index b9d7c886ae5ec2e409e87f32417e5f20bd7a16c7..c9f84dd637e411df43a7dcf72bd2cc1aadf04848 100644 --- a/target/linux/generic/hack-4.19/204-module_strip.patch +++ b/target/linux/generic/hack-4.19/204-module_strip.patch @@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau config MODULES_TREE_LOOKUP --- a/kernel/module.c +++ b/kernel/module.c -@@ -3027,9 +3027,11 @@ static int setup_load_info(struct load_i +@@ -3028,9 +3028,11 @@ static int setup_load_info(struct load_i static int check_modinfo(struct module *mod, struct load_info *info, int flags) { @@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau if (flags & MODULE_INIT_IGNORE_VERMAGIC) modmagic = NULL; -@@ -3050,6 +3052,7 @@ static int check_modinfo(struct module * +@@ -3051,6 +3053,7 @@ static int check_modinfo(struct module * mod->name); add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK); } diff --git a/target/linux/generic/hack-4.19/902-debloat_proc.patch b/target/linux/generic/hack-4.19/902-debloat_proc.patch index 3ee7fdafd0b5431425f2694558430729f8ac37dd..1442cee8bb96e3920b499c1100bfe8e3431636e4 100644 --- a/target/linux/generic/hack-4.19/902-debloat_proc.patch +++ b/target/linux/generic/hack-4.19/902-debloat_proc.patch @@ -132,7 +132,7 @@ Signed-off-by: Felix Fietkau do { \ --- a/ipc/msg.c +++ b/ipc/msg.c -@@ -1291,6 +1291,9 @@ void __init msg_init(void) +@@ -1292,6 +1292,9 @@ void __init msg_init(void) { msg_init_ns(&init_ipc_ns); diff --git a/target/linux/generic/pending-4.14/479-mtd-spi-nor-add-xtx-xt25f128b.patch b/target/linux/generic/pending-4.14/479-mtd-spi-nor-add-xtx-xt25f128b.patch new file mode 100644 index 0000000000000000000000000000000000000000..7545cf842722cef9bfca59fd27307c973b906df0 --- /dev/null +++ b/target/linux/generic/pending-4.14/479-mtd-spi-nor-add-xtx-xt25f128b.patch @@ -0,0 +1,42 @@ +From patchwork Thu Feb 6 17:19:41 2020 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 1234465 +Date: Thu, 6 Feb 2020 19:19:41 +0200 +From: Daniel Golle +To: linux-mtd@lists.infradead.org +Subject: [PATCH v2] mtd: spi-nor: Add support for xt25f128b chip +Message-ID: <20200206171941.GA2398@makrotopia.org> +MIME-Version: 1.0 +Content-Disposition: inline +List-Subscribe: , + +Cc: Eitan Cohen , Piotr Dymacz , + Tudor Ambarus +Sender: "linux-mtd" +Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org + +Add XT25F128B made by XTX Technology (Shenzhen) Limited. +This chip supports dual and quad read and uniform 4K-byte erase. +Verified on Teltonika RUT955 which comes with XT25F128B in recent +versions of the device. + +Signed-off-by: Daniel Golle +--- + drivers/mtd/spi-nor/spi-nor.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -1198,6 +1198,9 @@ static const struct flash_info spi_nor_i + /* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */ + { "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, ++ ++ /* XTX Technology (Shenzhen) Limited */ ++ { "xt25f128b", INFO(0x0B4018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { }, + }; + diff --git a/target/linux/generic/pending-4.14/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch b/target/linux/generic/pending-4.14/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch index 5c71c9cf7060c7c93b33d5d17a78ee88780af3a0..4e632b05a07ad16fa2b3fc307e4d464e6ecd4bcc 100644 --- a/target/linux/generic/pending-4.14/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch +++ b/target/linux/generic/pending-4.14/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch @@ -8,22 +8,17 @@ Signed-off-by: Koen Vandeputte drivers/mtd/spi-nor/spi-nor.c | 5 +++++ 1 file changed, 5 insertions(+) -diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c -index f4afe123e9dc..a34fa42d47a2 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -2346,6 +2346,11 @@ static const struct flash_info spi_nor_ids[] = { - { "mb85rs1mt", INFO(0x047f27, 0, 128 * 1024, 1, SPI_NOR_NO_ERASE) }, +@@ -976,6 +976,11 @@ static const struct flash_info spi_nor_i /* GigaDevice */ -+ { + { + "gd25d05", INFO(0xc84010, 0, 64 * 1024, 1, + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) + }, - { ++ { "gd25q16", INFO(0xc84015, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | --- -2.17.1 - + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) diff --git a/target/linux/generic/pending-4.19/479-mtd-spi-nor-add-xtx-xt25f128b.patch b/target/linux/generic/pending-4.19/479-mtd-spi-nor-add-xtx-xt25f128b.patch new file mode 100644 index 0000000000000000000000000000000000000000..664837928b65b78360e0c2162c3581a39defcc71 --- /dev/null +++ b/target/linux/generic/pending-4.19/479-mtd-spi-nor-add-xtx-xt25f128b.patch @@ -0,0 +1,42 @@ +From patchwork Thu Feb 6 17:19:41 2020 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 1234465 +Date: Thu, 6 Feb 2020 19:19:41 +0200 +From: Daniel Golle +To: linux-mtd@lists.infradead.org +Subject: [PATCH v2] mtd: spi-nor: Add support for xt25f128b chip +Message-ID: <20200206171941.GA2398@makrotopia.org> +MIME-Version: 1.0 +Content-Disposition: inline +List-Subscribe: , + +Cc: Eitan Cohen , Piotr Dymacz , + Tudor Ambarus +Sender: "linux-mtd" +Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org + +Add XT25F128B made by XTX Technology (Shenzhen) Limited. +This chip supports dual and quad read and uniform 4K-byte erase. +Verified on Teltonika RUT955 which comes with XT25F128B in recent +versions of the device. + +Signed-off-by: Daniel Golle +--- + drivers/mtd/spi-nor/spi-nor.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -1273,6 +1273,9 @@ static const struct flash_info spi_nor_i + /* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */ + { "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, ++ ++ /* XTX Technology (Shenzhen) Limited */ ++ { "xt25f128b", INFO(0x0B4018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { }, + }; + diff --git a/target/linux/generic/pending-4.19/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch b/target/linux/generic/pending-4.19/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch index 5c71c9cf7060c7c93b33d5d17a78ee88780af3a0..69c0e66d994cfd21d52d828d92667897a7426a64 100644 --- a/target/linux/generic/pending-4.19/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch +++ b/target/linux/generic/pending-4.19/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch @@ -8,22 +8,17 @@ Signed-off-by: Koen Vandeputte drivers/mtd/spi-nor/spi-nor.c | 5 +++++ 1 file changed, 5 insertions(+) -diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c -index f4afe123e9dc..a34fa42d47a2 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -2346,6 +2346,11 @@ static const struct flash_info spi_nor_ids[] = { - { "mb85rs1mt", INFO(0x047f27, 0, 128 * 1024, 1, SPI_NOR_NO_ERASE) }, +@@ -1017,6 +1017,11 @@ static const struct flash_info spi_nor_i /* GigaDevice */ -+ { + { + "gd25d05", INFO(0xc84010, 0, 64 * 1024, 1, + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) + }, - { ++ { "gd25q16", INFO(0xc84015, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | --- -2.17.1 - + SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) diff --git a/target/linux/generic/pending-4.19/810-pci_disable_common_quirks.patch b/target/linux/generic/pending-4.19/810-pci_disable_common_quirks.patch index c8c28b51755398371ee0e6ffd7b82d2cd0cf06f5..738bbd71d104997006ba2073f6534f2c97d2a5f7 100644 --- a/target/linux/generic/pending-4.19/810-pci_disable_common_quirks.patch +++ b/target/linux/generic/pending-4.19/810-pci_disable_common_quirks.patch @@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos /* * The Mellanox Tavor device gives false positive parity errors. Mark this * device with a broken_parity_status to allow PCI scanning code to "skip" -@@ -3152,6 +3153,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I +@@ -3147,6 +3148,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata); @@ -42,7 +42,7 @@ Signed-off-by: Gabor Juhos /* * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum. * To work around this, query the size it should be configured to by the -@@ -3177,6 +3180,8 @@ static void quirk_intel_ntb(struct pci_d +@@ -3172,6 +3175,8 @@ static void quirk_intel_ntb(struct pci_d DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb); @@ -51,7 +51,7 @@ Signed-off-by: Gabor Juhos /* * Some BIOS implementations leave the Intel GPU interrupts enabled, even * though no one is handling them (e.g., if the i915 driver is never -@@ -3215,6 +3220,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN +@@ -3210,6 +3215,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); diff --git a/target/linux/ipq40xx/base-files/etc/board.d/01_leds b/target/linux/ipq40xx/base-files/etc/board.d/01_leds index 739932682c3b7826df951fa2d9198f74ba1a93d6..a4d33c0dbef2305632c16a0e6b365e7a58471396 100755 --- a/target/linux/ipq40xx/base-files/etc/board.d/01_leds +++ b/target/linux/ipq40xx/base-files/etc/board.d/01_leds @@ -33,7 +33,7 @@ avm,fritzbox-4040) ucidef_set_led_switch "lan" "LAN" "fritz4040:green:lan" "switch0" "0x1e" ;; engenius,eap1300) - ucidef_set_led_netdev "lan" "LAN" "${boardname}:blue:lan" "eth0" + ucidef_set_led_switch "lan" "LAN" "${boardname}:blue:lan" "switch0" "0x20" ucidef_set_led_wlan "wlan2g" "WLAN2G" "${boardname}:blue:wlan2g" "phy0tpt" ucidef_set_led_wlan "wlan5g" "WLAN5G" "${boardname}:yellow:wlan5g" "phy1tpt" ucidef_set_led_default "mesh" "MESH" "${boardname}:blue:mesh" "0" diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile index 19c911913f29a87db5c514f964c010ba6eaa9816..398f850ac21ee84f80a1b8f9bcbf95b2756efa46 100644 --- a/target/linux/ipq40xx/image/Makefile +++ b/target/linux/ipq40xx/image/Makefile @@ -118,7 +118,7 @@ define Device/avm_fritzbox-4040 IMAGE_SIZE := 29753344 UBOOT_PATH := $(STAGING_DIR_IMAGE)/uboot-fritz4040.bin UBOOT_PARTITION_SIZE := 524288 - IMAGES = eva.bin sysupgrade.bin + IMAGES = sysupgrade.bin IMAGE/eva.bin := append-uboot | pad-to $$$$(UBOOT_PARTITION_SIZE) | append-kernel | append-rootfs | pad-rootfs IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata DEVICE_PACKAGES := fritz-tffs fritz-caldata diff --git a/target/linux/ipq40xx/patches-4.14/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch b/target/linux/ipq40xx/patches-4.14/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch index b77ab89e666e5dae330a605a875cf3786e131b4b..3b219f46b2eae387d78f740810913585acebe613 100644 --- a/target/linux/ipq40xx/patches-4.14/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch +++ b/target/linux/ipq40xx/patches-4.14/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1032,6 +1032,7 @@ static const struct flash_info spi_nor_i +@@ -1037,6 +1037,7 @@ static const struct flash_info spi_nor_i { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, @@ -8,7 +8,7 @@ { "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) }, { "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) }, { "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, -@@ -1205,11 +1206,12 @@ static const struct flash_info spi_nor_i +@@ -1209,11 +1210,12 @@ static const struct flash_info spi_nor_i { }, }; @@ -23,7 +23,7 @@ tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN); if (tmp < 0) { -@@ -1220,10 +1222,16 @@ static const struct flash_info *spi_nor_ +@@ -1224,10 +1226,16 @@ static const struct flash_info *spi_nor_ for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) { info = &spi_nor_ids[tmp]; if (info->id_len) { @@ -42,7 +42,7 @@ dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", id[0], id[1], id[2]); return ERR_PTR(-ENODEV); -@@ -2683,7 +2691,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2687,7 +2695,7 @@ int spi_nor_scan(struct spi_nor *nor, co info = spi_nor_match_id(name); /* Try to auto-detect if chip name wasn't specified or not found */ if (!info) @@ -51,7 +51,7 @@ if (IS_ERR_OR_NULL(info)) return -ENOENT; -@@ -2694,7 +2702,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2698,7 +2706,7 @@ int spi_nor_scan(struct spi_nor *nor, co if (name && info->id_len) { const struct flash_info *jinfo; diff --git a/target/linux/ipq40xx/patches-4.14/710-net-add-qualcomm-essedma-ethernet-driver.patch b/target/linux/ipq40xx/patches-4.14/710-net-add-qualcomm-essedma-ethernet-driver.patch index 1e47f2fe90af0d01460414eb38d7f39b11753ce8..05354a960bbf37431396ba051794396a3332506e 100644 --- a/target/linux/ipq40xx/patches-4.14/710-net-add-qualcomm-essedma-ethernet-driver.patch +++ b/target/linux/ipq40xx/patches-4.14/710-net-add-qualcomm-essedma-ethernet-driver.patch @@ -1523,7 +1523,7 @@ Signed-off-by: Christian Lamparter + int res; + + if (skb->protocol == htons(ETH_P_IPV6)) { -+ dev_err(&adapter->pdev->dev, "IPv6 not supported\n"); ++ dev_err(&adapter->pdev->dev, "\n"); + res = -EINVAL; + goto no_protocol_err; + } diff --git a/target/linux/ipq40xx/patches-4.19/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch b/target/linux/ipq40xx/patches-4.19/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch index 66746b962a4bab1598fa5050a928b634c9c82bcf..6f7a3a693b10a9939c7498dc8b132e7d393b87e7 100644 --- a/target/linux/ipq40xx/patches-4.19/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch +++ b/target/linux/ipq40xx/patches-4.19/303-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1094,6 +1094,7 @@ static const struct flash_info spi_nor_i +@@ -1099,6 +1099,7 @@ static const struct flash_info spi_nor_i { "mx25u12835f", INFO(0xc22538, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, @@ -8,7 +8,7 @@ { "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) }, { "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) }, { "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, -@@ -1280,11 +1281,12 @@ static const struct flash_info spi_nor_i +@@ -1284,11 +1285,12 @@ static const struct flash_info spi_nor_i { }, }; @@ -23,7 +23,7 @@ tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN); if (tmp < 0) { -@@ -1295,10 +1297,16 @@ static const struct flash_info *spi_nor_ +@@ -1299,10 +1301,16 @@ static const struct flash_info *spi_nor_ for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) { info = &spi_nor_ids[tmp]; if (info->id_len) { @@ -42,7 +42,7 @@ dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", id[0], id[1], id[2]); return ERR_PTR(-ENODEV); -@@ -2832,7 +2840,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2836,7 +2844,7 @@ int spi_nor_scan(struct spi_nor *nor, co info = spi_nor_match_id(name); /* Try to auto-detect if chip name wasn't specified or not found */ if (!info) @@ -51,7 +51,7 @@ if (IS_ERR_OR_NULL(info)) return -ENOENT; -@@ -2843,7 +2851,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2847,7 +2855,7 @@ int spi_nor_scan(struct spi_nor *nor, co if (name && info->id_len) { const struct flash_info *jinfo; @@ -59,4 +59,4 @@ + jinfo = spi_nor_read_id(nor, name); if (IS_ERR(jinfo)) { return PTR_ERR(jinfo); - } else if (jinfo != info) { \ No newline at end of file + } else if (jinfo != info) { diff --git a/target/linux/ipq40xx/patches-4.19/304-mtd-spi-nor-Add-support-for-mx25r3235f.patch b/target/linux/ipq40xx/patches-4.19/304-mtd-spi-nor-Add-support-for-mx25r3235f.patch new file mode 100644 index 0000000000000000000000000000000000000000..ad66f409b1f818d6c8e499b47459eb67238518df --- /dev/null +++ b/target/linux/ipq40xx/patches-4.19/304-mtd-spi-nor-Add-support-for-mx25r3235f.patch @@ -0,0 +1,26 @@ +From 158acdbf0336f601971637f988b57a6a67a0869b Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Sun, 15 Dec 2019 13:10:50 +0100 +Subject: [PATCH] mtd: spi-nor: Add support for mx25r3235f + +Add MTD support for the Macronix MX25R3235F SPI NOR chip from Macronix. +The chip has 4MB of total capacity, divided into a total of 64 sectors, +each 64KB sized. The chip also supports 4KB large sectors. +Additionally, it supports dual and quad read modes. + +Signed-off-by: David Bauer +--- + drivers/mtd/spi-nor/spi-nor.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -1096,6 +1096,8 @@ static const struct flash_info spi_nor_i + { "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) }, + { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, + { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, ++ { "mx25r3235f", INFO(0xc22816, 0, 64 * 1024, 64, ++ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "mx25u12835f", INFO(0xc22538, 0, 64 * 1024, 256, + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, diff --git a/target/linux/ipq40xx/patches-4.19/710-net-add-qualcomm-essedma-ethernet-driver.patch b/target/linux/ipq40xx/patches-4.19/710-net-add-qualcomm-essedma-ethernet-driver.patch index 8344b25eaed3c3c71ed28d0813c260ab6af5cb6b..0dbf680473acf63b48fed96b76573e15004e26f6 100644 --- a/target/linux/ipq40xx/patches-4.19/710-net-add-qualcomm-essedma-ethernet-driver.patch +++ b/target/linux/ipq40xx/patches-4.19/710-net-add-qualcomm-essedma-ethernet-driver.patch @@ -1523,7 +1523,7 @@ Signed-off-by: Christian Lamparter + int res; + + if (skb->protocol == htons(ETH_P_IPV6)) { -+ ++ dev_err(&adapter->pdev->dev, "\n"); + res = -EINVAL; + goto no_protocol_err; + } diff --git a/target/linux/ipq806x/patches-4.14/105-mtd-nor-add-mx25l25635f.patch b/target/linux/ipq806x/patches-4.14/105-mtd-nor-add-mx25l25635f.patch index 0986d99074b95f2177c1ef58136858c62f271da6..2bd18ffa193e6fe912ce8ea027b99677a39c266f 100644 --- a/target/linux/ipq806x/patches-4.14/105-mtd-nor-add-mx25l25635f.patch +++ b/target/linux/ipq806x/patches-4.14/105-mtd-nor-add-mx25l25635f.patch @@ -11,7 +11,7 @@ the ubi volume created by the other. --- --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1031,7 +1031,7 @@ static const struct flash_info spi_nor_i +@@ -1036,7 +1036,7 @@ static const struct flash_info spi_nor_i { "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) }, { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, diff --git a/target/linux/kirkwood/patches-4.14/101-iconnect.patch b/target/linux/kirkwood/patches-4.14/101-iconnect.patch index ab47b5a72459a47faee1ecac86fe9f7af3c9fef9..d2310b80ab8bcac5d1ff4e02c0523b06d2d77b0c 100644 --- a/target/linux/kirkwood/patches-4.14/101-iconnect.patch +++ b/target/linux/kirkwood/patches-4.14/101-iconnect.patch @@ -30,15 +30,15 @@ partition@100000 { - label = "zImage"; - reg = <0x100000 0x300000>; +- }; +- +- partition@540000 { +- label = "initrd"; +- reg = <0x540000 0x300000>; + label = "second stage u-boot"; + reg = <0x100000 0x200000>; }; -- partition@540000 { -- label = "initrd"; -- reg = <0x540000 0x300000>; -- }; -- - partition@980000 { - label = "boot"; - reg = <0x980000 0x1f400000>; diff --git a/target/linux/kirkwood/patches-4.14/109-pogoplug_v4.patch b/target/linux/kirkwood/patches-4.14/109-pogoplug_v4.patch index b4e53cd65904ec24e6170c107e703630eaebb44d..cc72ffb234bda17b4f39715f5861f775faa63ef2 100644 --- a/target/linux/kirkwood/patches-4.14/109-pogoplug_v4.patch +++ b/target/linux/kirkwood/patches-4.14/109-pogoplug_v4.patch @@ -38,16 +38,16 @@ - partition@500000 { - label = "uImage2"; - reg = <0x00500000 0x300000>; +- }; +- +- partition@800000 { +- label = "failsafe"; +- reg = <0x00800000 0x800000>; + partition@1c0000 { + label = "uboot_env"; + reg = <0x001c0000 0x40000>; }; -- partition@800000 { -- label = "failsafe"; -- reg = <0x00800000 0x800000>; -- }; -- - partition@1000000 { - label = "root"; - reg = <0x01000000 0x7000000>; diff --git a/target/linux/kirkwood/patches-4.19/101-iconnect.patch b/target/linux/kirkwood/patches-4.19/101-iconnect.patch index ab47b5a72459a47faee1ecac86fe9f7af3c9fef9..d2310b80ab8bcac5d1ff4e02c0523b06d2d77b0c 100644 --- a/target/linux/kirkwood/patches-4.19/101-iconnect.patch +++ b/target/linux/kirkwood/patches-4.19/101-iconnect.patch @@ -30,15 +30,15 @@ partition@100000 { - label = "zImage"; - reg = <0x100000 0x300000>; +- }; +- +- partition@540000 { +- label = "initrd"; +- reg = <0x540000 0x300000>; + label = "second stage u-boot"; + reg = <0x100000 0x200000>; }; -- partition@540000 { -- label = "initrd"; -- reg = <0x540000 0x300000>; -- }; -- - partition@980000 { - label = "boot"; - reg = <0x980000 0x1f400000>; diff --git a/target/linux/kirkwood/patches-4.19/109-pogoplug_v4.patch b/target/linux/kirkwood/patches-4.19/109-pogoplug_v4.patch index b54768290eb16922901f860286a2dfd4ed776a8b..26b6314277171b3182fa424cfd69d992480ae789 100644 --- a/target/linux/kirkwood/patches-4.19/109-pogoplug_v4.patch +++ b/target/linux/kirkwood/patches-4.19/109-pogoplug_v4.patch @@ -38,16 +38,16 @@ - partition@500000 { - label = "uImage2"; - reg = <0x00500000 0x300000>; +- }; +- +- partition@800000 { +- label = "failsafe"; +- reg = <0x00800000 0x800000>; + partition@1c0000 { + label = "uboot_env"; + reg = <0x001c0000 0x40000>; }; -- partition@800000 { -- label = "failsafe"; -- reg = <0x00800000 0x800000>; -- }; -- - partition@1000000 { - label = "root"; - reg = <0x01000000 0x7000000>; diff --git a/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch b/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch index a569dff7d60ddb4422dbd70e69b219d560f22bd6..2aa77f1a303970f6a211c63656f314f2dd40a2a3 100644 --- a/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/807-usb-support-layerscape.patch @@ -346,7 +346,7 @@ Signed-off-by: Zhao Chenhui return 0; err4: -@@ -1073,6 +1225,8 @@ static void dwc3_get_properties(struct d +@@ -1076,6 +1228,8 @@ static void dwc3_get_properties(struct d &hird_threshold); dwc->usb3_lpm_capable = device_property_read_bool(dev, "snps,usb3_lpm_capable"); @@ -355,7 +355,7 @@ Signed-off-by: Zhao Chenhui dwc->disable_scramble_quirk = device_property_read_bool(dev, "snps,disable_scramble_quirk"); -@@ -1105,8 +1259,16 @@ static void dwc3_get_properties(struct d +@@ -1108,8 +1262,16 @@ static void dwc3_get_properties(struct d dwc->dis_tx_ipgap_linecheck_quirk = device_property_read_bool(dev, "snps,dis-tx-ipgap-linecheck-quirk"); @@ -372,7 +372,7 @@ Signed-off-by: Zhao Chenhui device_property_read_u8(dev, "snps,tx_de_emphasis", &tx_de_emphasis); device_property_read_string(dev, "snps,hsphy_interface", -@@ -1117,6 +1279,9 @@ static void dwc3_get_properties(struct d +@@ -1120,6 +1282,9 @@ static void dwc3_get_properties(struct d dwc->dis_metastability_quirk = device_property_read_bool(dev, "snps,dis_metastability_quirk"); @@ -382,7 +382,7 @@ Signed-off-by: Zhao Chenhui dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; -@@ -1368,12 +1533,14 @@ static int dwc3_resume_common(struct dwc +@@ -1371,12 +1536,14 @@ static int dwc3_resume_common(struct dwc switch (dwc->dr_mode) { case USB_DR_MODE_PERIPHERAL: diff --git a/target/linux/layerscape/patches-4.14/810-kvm-support-layerscape.patch b/target/linux/layerscape/patches-4.14/810-kvm-support-layerscape.patch index 470aa683fabe5994025ba5d1d978ce83f453ca0b..5c8cd44182dde31f1cb25c85537de62c2fb68a38 100644 --- a/target/linux/layerscape/patches-4.14/810-kvm-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/810-kvm-support-layerscape.patch @@ -158,7 +158,7 @@ Signed-off-by: Signed-off-by: Biwen Li if (kvm_is_device_pfn(pfn)) { mem_type = PAGE_S2_DEVICE; flags |= KVM_S2PTE_FLAG_IS_IOMAP; -@@ -1918,6 +1961,9 @@ int kvm_arch_prepare_memory_region(struc +@@ -1919,6 +1962,9 @@ int kvm_arch_prepare_memory_region(struc gpa_t gpa = mem->guest_phys_addr + (vm_start - mem->userspace_addr); phys_addr_t pa; @@ -168,7 +168,7 @@ Signed-off-by: Signed-off-by: Biwen Li pa = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT; pa += vm_start - vma->vm_start; -@@ -1928,9 +1974,13 @@ int kvm_arch_prepare_memory_region(struc +@@ -1929,9 +1975,13 @@ int kvm_arch_prepare_memory_region(struc goto out; } diff --git a/target/linux/layerscape/patches-4.14/812-flexspi-support-layerscape.patch b/target/linux/layerscape/patches-4.14/812-flexspi-support-layerscape.patch index fa1cdf075acd17f8299973df89b44595554506a1..e3561016838bbff83f81259de60fe79e068fc941 100644 --- a/target/linux/layerscape/patches-4.14/812-flexspi-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/812-flexspi-support-layerscape.patch @@ -1512,7 +1512,7 @@ Signed-off-by: Yogesh Gaur case SNOR_MFR_MICRON: /* Some Micron need WREN command; all will accept it */ need_wren = true; -@@ -1039,7 +1040,7 @@ static const struct flash_info spi_nor_i +@@ -1044,7 +1045,7 @@ static const struct flash_info spi_nor_i { "mx66l1g45g", INFO(0xc2201b, 0, 64 * 1024, 2048, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, { "mx66l1g55g", INFO(0xc2261b, 0, 64 * 1024, 2048, SPI_NOR_QUAD_READ) }, @@ -1521,7 +1521,7 @@ Signed-off-by: Yogesh Gaur { "n25q016a", INFO(0x20bb15, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_QUAD_READ) }, { "n25q032", INFO(0x20ba16, 0, 64 * 1024, 64, SPI_NOR_QUAD_READ) }, { "n25q032a", INFO(0x20bb16, 0, 64 * 1024, 64, SPI_NOR_QUAD_READ) }, -@@ -1054,6 +1055,12 @@ static const struct flash_info spi_nor_i +@@ -1059,6 +1060,12 @@ static const struct flash_info spi_nor_i { "n25q00", INFO(0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) }, { "n25q00a", INFO(0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) }, @@ -1534,7 +1534,7 @@ Signed-off-by: Yogesh Gaur /* PMC */ { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K_PMC) }, { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K_PMC) }, -@@ -2435,6 +2442,7 @@ static int spi_nor_init_params(struct sp +@@ -2439,6 +2446,7 @@ static int spi_nor_init_params(struct sp params->quad_enable = macronix_quad_enable; break; @@ -1542,7 +1542,7 @@ Signed-off-by: Yogesh Gaur case SNOR_MFR_MICRON: break; -@@ -2753,7 +2761,8 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2757,7 +2765,8 @@ int spi_nor_scan(struct spi_nor *nor, co mtd->_read = spi_nor_read; /* NOR protection support for STmicro/Micron chips and similar */ diff --git a/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch b/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch index 216bef0c3fd2dad622fbcb1609bc4e779c1b95a0..6cfc43423a72b6a2cb5c342aa32cd14c0305a7a9 100644 --- a/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/816-pcie-support-layerscape.patch @@ -5618,7 +5618,7 @@ Signed-off-by: Yangbo Lu static void quirk_no_pm_reset(struct pci_dev *dev) { /* -@@ -4884,3 +4891,11 @@ static void quirk_no_ats(struct pci_dev +@@ -4918,3 +4925,11 @@ static void quirk_no_ats(struct pci_dev DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_no_ats); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x6900, quirk_no_ats); #endif /* CONFIG_PCI_ATS */ diff --git a/target/linux/layerscape/patches-4.14/817-platform-security-support-layerscape.patch b/target/linux/layerscape/patches-4.14/817-platform-security-support-layerscape.patch index a9728cc05b01c20853d31cc703c9f013c9e34dd6..55e7209ce37e5633da1a61b21a4f4d669d73fc9d 100644 --- a/target/linux/layerscape/patches-4.14/817-platform-security-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/817-platform-security-support-layerscape.patch @@ -124,7 +124,7 @@ Signed-off-by: Biwen Li L: keyrings@vger.kernel.org --- a/drivers/tee/optee/Kconfig +++ b/drivers/tee/optee/Kconfig -@@ -5,3 +5,11 @@ config OPTEE +@@ -6,3 +6,11 @@ config OPTEE help This implements the OP-TEE Trusted Execution Environment (TEE) driver. diff --git a/target/linux/layerscape/patches-4.14/818-qspi-support-layerscape.patch b/target/linux/layerscape/patches-4.14/818-qspi-support-layerscape.patch index 744245499f9b2c2a9d379c979f269b98efb19ada..1546e4b6a77d519c0c5637229aa4e079e122498f 100644 --- a/target/linux/layerscape/patches-4.14/818-qspi-support-layerscape.patch +++ b/target/linux/layerscape/patches-4.14/818-qspi-support-layerscape.patch @@ -718,7 +718,7 @@ Signed-off-by: Yogesh Gaur --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1154,6 +1154,11 @@ static const struct flash_info spi_nor_i +@@ -1159,6 +1159,11 @@ static const struct flash_info spi_nor_i { "w25x40", INFO(0xef3013, 0, 64 * 1024, 8, SECT_4K) }, { "w25x80", INFO(0xef3014, 0, 64 * 1024, 16, SECT_4K) }, { "w25x16", INFO(0xef3015, 0, 64 * 1024, 32, SECT_4K) }, diff --git a/target/linux/mpc85xx/patches-4.14/102-powerpc-add-cmdline-override.patch b/target/linux/mpc85xx/patches-4.14/102-powerpc-add-cmdline-override.patch index 69dd1305d74ef4e0d264073619626969af21b4ed..087798e3d813ed3c878348de6dae64add7e51106 100644 --- a/target/linux/mpc85xx/patches-4.14/102-powerpc-add-cmdline-override.patch +++ b/target/linux/mpc85xx/patches-4.14/102-powerpc-add-cmdline-override.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -836,6 +836,14 @@ config CMDLINE_FORCE +@@ -837,6 +837,14 @@ config CMDLINE_FORCE This is useful if you cannot or don't want to change the command-line options your boot loader passes to the kernel. diff --git a/target/linux/mpc85xx/patches-4.19/102-powerpc-add-cmdline-override.patch b/target/linux/mpc85xx/patches-4.19/102-powerpc-add-cmdline-override.patch index a99555f949bb4c9f5565c704cbb04c932d677dd8..7bdbd79538418aa3f0e73236f48049d9d01071bb 100644 --- a/target/linux/mpc85xx/patches-4.19/102-powerpc-add-cmdline-override.patch +++ b/target/linux/mpc85xx/patches-4.19/102-powerpc-add-cmdline-override.patch @@ -1,6 +1,6 @@ --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -809,6 +809,14 @@ config CMDLINE_FORCE +@@ -810,6 +810,14 @@ config CMDLINE_FORCE This is useful if you cannot or don't want to change the command-line options your boot loader passes to the kernel. diff --git a/target/linux/mvebu/patches-4.19/300-mvneta-tx-queue-workaround.patch b/target/linux/mvebu/patches-4.19/300-mvneta-tx-queue-workaround.patch index c27b5d9478ec1a7b1b1e2baea128753efd243014..4a5ea3614494de1a1d94da1c27818c4a332af034 100644 --- a/target/linux/mvebu/patches-4.19/300-mvneta-tx-queue-workaround.patch +++ b/target/linux/mvebu/patches-4.19/300-mvneta-tx-queue-workaround.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -4257,6 +4257,15 @@ static int mvneta_ethtool_set_eee(struct +@@ -4272,6 +4272,15 @@ static int mvneta_ethtool_set_eee(struct return phylink_ethtool_set_eee(pp->phylink, eee); } @@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau static const struct net_device_ops mvneta_netdev_ops = { .ndo_open = mvneta_open, .ndo_stop = mvneta_stop, -@@ -4267,6 +4276,7 @@ static const struct net_device_ops mvnet +@@ -4282,6 +4291,7 @@ static const struct net_device_ops mvnet .ndo_fix_features = mvneta_fix_features, .ndo_get_stats64 = mvneta_get_stats64, .ndo_do_ioctl = mvneta_ioctl, diff --git a/target/linux/mvebu/patches-4.19/531-net-mvneta-Add-support-for-2500Mbps-SGMII.patch b/target/linux/mvebu/patches-4.19/531-net-mvneta-Add-support-for-2500Mbps-SGMII.patch index 0368ba9509ee3d70b5b53ece40b1974c1a60d9d1..a5553a3e96c8da372e6e36b21ad057836e6351c5 100644 --- a/target/linux/mvebu/patches-4.19/531-net-mvneta-Add-support-for-2500Mbps-SGMII.patch +++ b/target/linux/mvebu/patches-4.19/531-net-mvneta-Add-support-for-2500Mbps-SGMII.patch @@ -32,7 +32,7 @@ Signed-off-by: David S. Miller #define MVNETA_MIB_COUNTERS_BASE 0x3000 #define MVNETA_MIB_LATE_COLLISION 0x7c #define MVNETA_DA_FILT_SPEC_MCAST 0x3400 -@@ -3344,6 +3346,7 @@ static void mvneta_validate(struct net_d +@@ -3359,6 +3361,7 @@ static void mvneta_validate(struct net_d if (state->interface != PHY_INTERFACE_MODE_NA && state->interface != PHY_INTERFACE_MODE_QSGMII && state->interface != PHY_INTERFACE_MODE_SGMII && @@ -40,7 +40,7 @@ Signed-off-by: David S. Miller !phy_interface_mode_is_8023z(state->interface) && !phy_interface_mode_is_rgmii(state->interface)) { bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); -@@ -3356,9 +3359,15 @@ static void mvneta_validate(struct net_d +@@ -3371,9 +3374,15 @@ static void mvneta_validate(struct net_d /* Asymmetric pause is unsupported */ phylink_set(mask, Pause); @@ -59,7 +59,7 @@ Signed-off-by: David S. Miller if (!phy_interface_mode_is_8023z(state->interface)) { /* 10M and 100M are only supported in non-802.3z mode */ -@@ -3419,12 +3428,14 @@ static void mvneta_mac_config(struct net +@@ -3434,12 +3443,14 @@ static void mvneta_mac_config(struct net struct mvneta_port *pp = netdev_priv(ndev); u32 new_ctrl0, gmac_ctrl0 = mvreg_read(pp, MVNETA_GMAC_CTRL_0); u32 new_ctrl2, gmac_ctrl2 = mvreg_read(pp, MVNETA_GMAC_CTRL_2); @@ -74,7 +74,7 @@ Signed-off-by: David S. Miller new_clk = gmac_clk & ~MVNETA_GMAC_1MS_CLOCK_ENABLE; new_an = gmac_an & ~(MVNETA_GMAC_INBAND_AN_ENABLE | MVNETA_GMAC_INBAND_RESTART_AN | -@@ -3457,7 +3468,7 @@ static void mvneta_mac_config(struct net +@@ -3472,7 +3483,7 @@ static void mvneta_mac_config(struct net if (state->duplex) new_an |= MVNETA_GMAC_CONFIG_FULL_DUPLEX; @@ -83,7 +83,7 @@ Signed-off-by: David S. Miller new_an |= MVNETA_GMAC_CONFIG_GMII_SPEED; else if (state->speed == SPEED_100) new_an |= MVNETA_GMAC_CONFIG_MII_SPEED; -@@ -3496,10 +3507,18 @@ static void mvneta_mac_config(struct net +@@ -3511,10 +3522,18 @@ static void mvneta_mac_config(struct net MVNETA_GMAC_FORCE_LINK_DOWN); } diff --git a/target/linux/mvebu/patches-4.19/532-net-mvneta-correct-typo.patch b/target/linux/mvebu/patches-4.19/532-net-mvneta-correct-typo.patch index bff7621fa4446d6ceb45b5ec7f276af161f2d88f..b6e16c54a45f242be9673c6ff4fee4e2421b94c1 100644 --- a/target/linux/mvebu/patches-4.19/532-net-mvneta-correct-typo.patch +++ b/target/linux/mvebu/patches-4.19/532-net-mvneta-correct-typo.patch @@ -13,7 +13,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -493,7 +493,7 @@ struct mvneta_port { +@@ -495,7 +495,7 @@ struct mvneta_port { #if defined(__LITTLE_ENDIAN) struct mvneta_tx_desc { u32 command; /* Options used by HW for packet transmitting.*/ @@ -22,7 +22,7 @@ Signed-off-by: David S. Miller u16 data_size; /* Data size of transmitted packet in bytes */ u32 buf_phys_addr; /* Physical addr of transmitted buffer */ u32 reserved2; /* hw_cmd - (for future use, PMT) */ -@@ -518,7 +518,7 @@ struct mvneta_rx_desc { +@@ -520,7 +520,7 @@ struct mvneta_rx_desc { #else struct mvneta_tx_desc { u16 data_size; /* Data size of transmitted packet in bytes */ diff --git a/target/linux/mvebu/patches-4.19/533-net-mvneta-Dont-advertise-2.5G-modes.patch b/target/linux/mvebu/patches-4.19/533-net-mvneta-Dont-advertise-2.5G-modes.patch index 31292a638e9b4b674f0113188e207e88ce9f0627..01b101283cdd81caed3952a7466679f54952f65b 100644 --- a/target/linux/mvebu/patches-4.19/533-net-mvneta-Dont-advertise-2.5G-modes.patch +++ b/target/linux/mvebu/patches-4.19/533-net-mvneta-Dont-advertise-2.5G-modes.patch @@ -27,7 +27,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -3346,7 +3346,6 @@ static void mvneta_validate(struct net_d +@@ -3361,7 +3361,6 @@ static void mvneta_validate(struct net_d if (state->interface != PHY_INTERFACE_MODE_NA && state->interface != PHY_INTERFACE_MODE_QSGMII && state->interface != PHY_INTERFACE_MODE_SGMII && @@ -35,7 +35,7 @@ Signed-off-by: David S. Miller !phy_interface_mode_is_8023z(state->interface) && !phy_interface_mode_is_rgmii(state->interface)) { bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); -@@ -3360,14 +3359,9 @@ static void mvneta_validate(struct net_d +@@ -3375,14 +3374,9 @@ static void mvneta_validate(struct net_d /* Asymmetric pause is unsupported */ phylink_set(mask, Pause); diff --git a/target/linux/mvebu/patches-4.19/534-net-mvneta-remove-redundant-check-for.patch b/target/linux/mvebu/patches-4.19/534-net-mvneta-remove-redundant-check-for.patch index 005ea6e51e4e3f820c5f007211cd9206b03c60bd..fd774e08398c0aebe5ed18172350b61a3b54e925 100644 --- a/target/linux/mvebu/patches-4.19/534-net-mvneta-remove-redundant-check-for.patch +++ b/target/linux/mvebu/patches-4.19/534-net-mvneta-remove-redundant-check-for.patch @@ -18,7 +18,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -4253,8 +4253,7 @@ static int mvneta_ethtool_set_eee(struct +@@ -4268,8 +4268,7 @@ static int mvneta_ethtool_set_eee(struct /* The Armada 37x documents do not give limits for this other than * it being an 8-bit register. */ diff --git a/target/linux/mvebu/patches-4.19/535-net-marvell-neta-add-comphy-support.patch b/target/linux/mvebu/patches-4.19/535-net-marvell-neta-add-comphy-support.patch index 257cfdec4ae3b81964cd57dfd36dfed0a559d841..272beb6950f71364b2a859d27afeccb16aeac943 100644 --- a/target/linux/mvebu/patches-4.19/535-net-marvell-neta-add-comphy-support.patch +++ b/target/linux/mvebu/patches-4.19/535-net-marvell-neta-add-comphy-support.patch @@ -23,7 +23,7 @@ Signed-off-by: David S. Miller #include #include #include -@@ -436,6 +437,7 @@ struct mvneta_port { +@@ -438,6 +439,7 @@ struct mvneta_port { struct device_node *dn; unsigned int tx_csum_limit; struct phylink *phylink; @@ -31,7 +31,7 @@ Signed-off-by: David S. Miller struct mvneta_bm *bm_priv; struct mvneta_bm_pool *pool_long; -@@ -3153,6 +3155,8 @@ static void mvneta_start_dev(struct mvne +@@ -3168,6 +3170,8 @@ static void mvneta_start_dev(struct mvne { int cpu; @@ -40,7 +40,7 @@ Signed-off-by: David S. Miller mvneta_max_rx_size_set(pp, pp->pkt_size); mvneta_txq_max_tx_size_set(pp, pp->pkt_size); -@@ -3215,6 +3219,8 @@ static void mvneta_stop_dev(struct mvnet +@@ -3230,6 +3234,8 @@ static void mvneta_stop_dev(struct mvnet mvneta_tx_reset(pp); mvneta_rx_reset(pp); @@ -49,7 +49,7 @@ Signed-off-by: David S. Miller } static void mvneta_percpu_enable(void *arg) -@@ -3340,6 +3346,7 @@ static int mvneta_set_mac_addr(struct ne +@@ -3355,6 +3361,7 @@ static int mvneta_set_mac_addr(struct ne static void mvneta_validate(struct net_device *ndev, unsigned long *supported, struct phylink_link_state *state) { @@ -57,7 +57,7 @@ Signed-off-by: David S. Miller __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; /* We only support QSGMII, SGMII, 802.3z and RGMII modes */ -@@ -3360,8 +3367,13 @@ static void mvneta_validate(struct net_d +@@ -3375,8 +3382,13 @@ static void mvneta_validate(struct net_d phylink_set(mask, Pause); /* Half-duplex at speeds higher than 100Mbit is unsupported */ @@ -73,7 +73,7 @@ Signed-off-by: David S. Miller if (!phy_interface_mode_is_8023z(state->interface)) { /* 10M and 100M are only supported in non-802.3z mode */ -@@ -3375,6 +3387,11 @@ static void mvneta_validate(struct net_d +@@ -3390,6 +3402,11 @@ static void mvneta_validate(struct net_d __ETHTOOL_LINK_MODE_MASK_NBITS); bitmap_and(state->advertising, state->advertising, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); @@ -85,7 +85,7 @@ Signed-off-by: David S. Miller } static int mvneta_mac_link_state(struct net_device *ndev, -@@ -3386,7 +3403,9 @@ static int mvneta_mac_link_state(struct +@@ -3401,7 +3418,9 @@ static int mvneta_mac_link_state(struct gmac_stat = mvreg_read(pp, MVNETA_GMAC_STATUS); if (gmac_stat & MVNETA_GMAC_SPEED_1000) @@ -96,7 +96,7 @@ Signed-off-by: David S. Miller else if (gmac_stat & MVNETA_GMAC_SPEED_100) state->speed = SPEED_100; else -@@ -3501,12 +3520,20 @@ static void mvneta_mac_config(struct net +@@ -3516,12 +3535,20 @@ static void mvneta_mac_config(struct net MVNETA_GMAC_FORCE_LINK_DOWN); } @@ -117,7 +117,7 @@ Signed-off-by: David S. Miller if (new_ctrl0 != gmac_ctrl0) mvreg_write(pp, MVNETA_GMAC_CTRL_0, new_ctrl0); if (new_ctrl2 != gmac_ctrl2) -@@ -4419,7 +4446,7 @@ static int mvneta_port_power_up(struct m +@@ -4434,7 +4461,7 @@ static int mvneta_port_power_up(struct m if (phy_mode == PHY_INTERFACE_MODE_QSGMII) mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_QSGMII_SERDES_PROTO); else if (phy_mode == PHY_INTERFACE_MODE_SGMII || @@ -126,7 +126,7 @@ Signed-off-by: David S. Miller mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); else if (!phy_interface_mode_is_rgmii(phy_mode)) return -EINVAL; -@@ -4436,6 +4463,7 @@ static int mvneta_probe(struct platform_ +@@ -4451,6 +4478,7 @@ static int mvneta_probe(struct platform_ struct mvneta_port *pp; struct net_device *dev; struct phylink *phylink; @@ -134,7 +134,7 @@ Signed-off-by: David S. Miller const char *dt_mac_addr; char hw_mac_addr[ETH_ALEN]; const char *mac_from; -@@ -4461,6 +4489,14 @@ static int mvneta_probe(struct platform_ +@@ -4476,6 +4504,14 @@ static int mvneta_probe(struct platform_ goto err_free_irq; } @@ -149,7 +149,7 @@ Signed-off-by: David S. Miller phylink = phylink_create(dev, pdev->dev.fwnode, phy_mode, &mvneta_phylink_ops); if (IS_ERR(phylink)) { -@@ -4477,6 +4513,7 @@ static int mvneta_probe(struct platform_ +@@ -4492,6 +4528,7 @@ static int mvneta_probe(struct platform_ pp = netdev_priv(dev); spin_lock_init(&pp->lock); pp->phylink = phylink; diff --git a/target/linux/mvebu/patches-4.19/536-net-marvell-neta-disable-comphy-when-setting-mode.patch b/target/linux/mvebu/patches-4.19/536-net-marvell-neta-disable-comphy-when-setting-mode.patch index 9abb00c50d1192cab177068d41ba0845440e0221..bac9a55cf0d63333a52a7fd5f3e5e16a624f0ba7 100644 --- a/target/linux/mvebu/patches-4.19/536-net-marvell-neta-disable-comphy-when-setting-mode.patch +++ b/target/linux/mvebu/patches-4.19/536-net-marvell-neta-disable-comphy-when-setting-mode.patch @@ -28,7 +28,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -3151,11 +3151,26 @@ static int mvneta_setup_txqs(struct mvne +@@ -3166,11 +3166,26 @@ static int mvneta_setup_txqs(struct mvne return 0; } @@ -56,7 +56,7 @@ Signed-off-by: David S. Miller mvneta_max_rx_size_set(pp, pp->pkt_size); mvneta_txq_max_tx_size_set(pp, pp->pkt_size); -@@ -3527,12 +3542,15 @@ static void mvneta_mac_config(struct net +@@ -3542,12 +3557,15 @@ static void mvneta_mac_config(struct net if (state->speed == SPEED_2500) new_ctrl4 |= MVNETA_GMAC4_SHORT_PREAMBLE_ENABLE; diff --git a/target/linux/mvebu/patches-4.19/537-net-mvneta-add-2500baset-support.patch b/target/linux/mvebu/patches-4.19/537-net-mvneta-add-2500baset-support.patch index 6629547eef318a82bd86586d7b049e0e1785924c..9186ceb0da4acae4571c78f9da484d9bcad64798 100644 --- a/target/linux/mvebu/patches-4.19/537-net-mvneta-add-2500baset-support.patch +++ b/target/linux/mvebu/patches-4.19/537-net-mvneta-add-2500baset-support.patch @@ -24,7 +24,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c -@@ -3387,6 +3387,7 @@ static void mvneta_validate(struct net_d +@@ -3402,6 +3402,7 @@ static void mvneta_validate(struct net_d phylink_set(mask, 1000baseX_Full); } if (pp->comphy || state->interface == PHY_INTERFACE_MODE_2500BASEX) { diff --git a/target/linux/pistachio/patches-4.14/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/pistachio/patches-4.14/401-mtd-nor-support-mtd-name-from-device-tree.patch index f35b3901e0f355650cea1306b3d09068c5bb22c0..065a0b77bcd931766a53c76dffcf2621304c47d7 100644 --- a/target/linux/pistachio/patches-4.14/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/pistachio/patches-4.14/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -2667,6 +2667,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2671,6 +2671,7 @@ int spi_nor_scan(struct spi_nor *nor, co struct device *dev = nor->dev; struct mtd_info *mtd = &nor->mtd; struct device_node *np = spi_nor_get_flash_node(nor); @@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma int ret; int i; -@@ -2742,7 +2743,12 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2746,7 +2747,12 @@ int spi_nor_scan(struct spi_nor *nor, co spi_nor_wait_till_ready(nor); } diff --git a/target/linux/ramips/patches-4.14/0031-uvc-add-iPassion-iP2970-support.patch b/target/linux/ramips/patches-4.14/0031-uvc-add-iPassion-iP2970-support.patch index 0b305a8105d7ed721f11871eef717acf73be81ba..7ed1a616f617e5f1fb67b3d1173bd73129096423 100644 --- a/target/linux/ramips/patches-4.14/0031-uvc-add-iPassion-iP2970-support.patch +++ b/target/linux/ramips/patches-4.14/0031-uvc-add-iPassion-iP2970-support.patch @@ -13,7 +13,7 @@ Signed-off-by: John Crispin --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c -@@ -2737,6 +2737,18 @@ static const struct usb_device_id uvc_id +@@ -2749,6 +2749,18 @@ static const struct usb_device_id uvc_id .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, .driver_info = UVC_QUIRK_FORCE_Y8 }, diff --git a/target/linux/ramips/patches-4.14/0053-mtd-spi-nor-add-w25q256-3b-mode-switch.patch b/target/linux/ramips/patches-4.14/0053-mtd-spi-nor-add-w25q256-3b-mode-switch.patch index dee65a839426e336e608d1d5796cc9b575545796..aa2fb60a2b8dbd21351a988f89cd35354e725bde 100644 --- a/target/linux/ramips/patches-4.14/0053-mtd-spi-nor-add-w25q256-3b-mode-switch.patch +++ b/target/linux/ramips/patches-4.14/0053-mtd-spi-nor-add-w25q256-3b-mode-switch.patch @@ -116,7 +116,7 @@ Signed-off-by: Felix Fietkau spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK); return ret; -@@ -1177,7 +1229,7 @@ static const struct flash_info spi_nor_i +@@ -1182,7 +1234,7 @@ static const struct flash_info spi_nor_i { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, @@ -125,7 +125,7 @@ Signed-off-by: Felix Fietkau { "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024, SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) }, -@@ -1241,6 +1293,9 @@ static int spi_nor_read(struct mtd_info +@@ -1245,6 +1297,9 @@ static int spi_nor_read(struct mtd_info if (ret) return ret; @@ -135,7 +135,7 @@ Signed-off-by: Felix Fietkau while (len) { loff_t addr = from; -@@ -1265,6 +1320,18 @@ static int spi_nor_read(struct mtd_info +@@ -1269,6 +1324,18 @@ static int spi_nor_read(struct mtd_info ret = 0; read_err: @@ -154,7 +154,7 @@ Signed-off-by: Felix Fietkau spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ); return ret; } -@@ -1366,6 +1433,10 @@ static int spi_nor_write(struct mtd_info +@@ -1370,6 +1437,10 @@ static int spi_nor_write(struct mtd_info if (ret) return ret; @@ -165,7 +165,7 @@ Signed-off-by: Felix Fietkau for (i = 0; i < len; ) { ssize_t written; loff_t addr = to + i; -@@ -1406,6 +1477,7 @@ static int spi_nor_write(struct mtd_info +@@ -1410,6 +1481,7 @@ static int spi_nor_write(struct mtd_info } write_err: @@ -173,7 +173,7 @@ Signed-off-by: Felix Fietkau spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE); return ret; } -@@ -2822,8 +2894,10 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2826,8 +2898,10 @@ int spi_nor_scan(struct spi_nor *nor, co } else if (mtd->size > 0x1000000) { /* enable 4-byte addressing if the device exceeds 16MiB */ nor->addr_width = 4; diff --git a/target/linux/ramips/patches-4.14/0054-mtd-spi-nor-w25q256-respect-default-mode.patch b/target/linux/ramips/patches-4.14/0054-mtd-spi-nor-w25q256-respect-default-mode.patch index 9ea2a11354d09bb6891b78beb490dd1ecc54e29a..a68693798978cfa67f4f82beedbb9c3d8477f0f7 100644 --- a/target/linux/ramips/patches-4.14/0054-mtd-spi-nor-w25q256-respect-default-mode.patch +++ b/target/linux/ramips/patches-4.14/0054-mtd-spi-nor-w25q256-respect-default-mode.patch @@ -33,7 +33,7 @@ /* * Write status register 1 byte * Returns negative if error occurred. -@@ -2894,9 +2903,16 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2898,9 +2907,16 @@ int spi_nor_scan(struct spi_nor *nor, co } else if (mtd->size > 0x1000000) { /* enable 4-byte addressing if the device exceeds 16MiB */ nor->addr_width = 4; diff --git a/target/linux/ramips/patches-4.14/302-spi-nor-add-gd25q512.patch b/target/linux/ramips/patches-4.14/302-spi-nor-add-gd25q512.patch index e21fd7c2bc415d595a8457053015982a3264249d..0a3a65d70a76e02309d2d7d4d61a99d103f12eb9 100644 --- a/target/linux/ramips/patches-4.14/302-spi-nor-add-gd25q512.patch +++ b/target/linux/ramips/patches-4.14/302-spi-nor-add-gd25q512.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1061,6 +1061,11 @@ static const struct flash_info spi_nor_i +@@ -1066,6 +1066,11 @@ static const struct flash_info spi_nor_i SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, diff --git a/target/linux/ramips/patches-4.14/304-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch b/target/linux/ramips/patches-4.14/304-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch index 831350546dcd5d0cf2adba4928ea673043a7c6c2..8b59a106e1b215b951de3516c15de10b8a9b2474 100644 --- a/target/linux/ramips/patches-4.14/304-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch +++ b/target/linux/ramips/patches-4.14/304-spi-nor-enable-4B-opcodes-for-mx25l25635f.patch @@ -10,7 +10,7 @@ For reference see: --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1098,6 +1098,7 @@ static const struct flash_info spi_nor_i +@@ -1103,6 +1103,7 @@ static const struct flash_info spi_nor_i { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, @@ -18,7 +18,7 @@ For reference see: { "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) }, { "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) }, { "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, -@@ -1271,11 +1272,12 @@ static const struct flash_info spi_nor_i +@@ -1275,11 +1276,12 @@ static const struct flash_info spi_nor_i { }, }; @@ -33,7 +33,7 @@ For reference see: tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN); if (tmp < 0) { -@@ -1286,10 +1288,16 @@ static const struct flash_info *spi_nor_ +@@ -1290,10 +1292,16 @@ static const struct flash_info *spi_nor_ for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) { info = &spi_nor_ids[tmp]; if (info->id_len) { @@ -52,7 +52,7 @@ For reference see: dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n", id[0], id[1], id[2]); return ERR_PTR(-ENODEV); -@@ -2769,7 +2777,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2773,7 +2781,7 @@ int spi_nor_scan(struct spi_nor *nor, co info = spi_nor_match_id(name); /* Try to auto-detect if chip name wasn't specified or not found */ if (!info) @@ -61,7 +61,7 @@ For reference see: if (IS_ERR_OR_NULL(info)) return -ENOENT; -@@ -2780,7 +2788,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -2784,7 +2792,7 @@ int spi_nor_scan(struct spi_nor *nor, co if (name && info->id_len) { const struct flash_info *jinfo; diff --git a/target/linux/sunxi/patches-4.19/010-v5.3-drivers-ata-ahci_sunxi-Increased-SATA-AHCI-DMA-TX-RX.patch b/target/linux/sunxi/patches-4.19/010-v5.3-drivers-ata-ahci_sunxi-Increased-SATA-AHCI-DMA-TX-RX.patch new file mode 100644 index 0000000000000000000000000000000000000000..74e51c094c90f2520dce7bb53f630b2ad8c6a389 --- /dev/null +++ b/target/linux/sunxi/patches-4.19/010-v5.3-drivers-ata-ahci_sunxi-Increased-SATA-AHCI-DMA-TX-RX.patch @@ -0,0 +1,94 @@ +From 120357ea176e420d313cf8cf2ff35fbe233d3bab Mon Sep 17 00:00:00 2001 +From: Uenal Mutlu +Date: Mon, 13 May 2019 16:24:10 +0200 +Subject: [PATCH] drivers: ata: ahci_sunxi: Increased SATA/AHCI DMA TX/RX FIFOs + +Increasing the SATA/AHCI DMA TX/RX FIFOs (P0DMACR.TXTS and .RXTS, ie. +TX_TRANSACTION_SIZE and RX_TRANSACTION_SIZE) from default 0x0 each +to 0x3 each, gives a write performance boost of 120 MiB/s to 132 MiB/s +from lame 36 MiB/s to 45 MiB/s previously. +Read performance is above 200 MiB/s. +[tested on SSD using dd bs=4K/8K/12K/16K/20K/24K/32K: peak-perf at 12K] + +Tested on the SBCs Banana Pi R1 (aka Lamobo R1) and Banana Pi M1 which +are based on the Allwinner A20 32bit-SoC (ARMv7-a / arm-linux-gnueabihf). +These devices are RaspberryPi-like small devices. + +This problem of slow SATA write-speed with these small devices lasts +for about 7 years now (beginning with the A10 SoC). Many commentators +throughout the years wrongly assumed the slow write speed was a +hardware limitation. This patch finally solves the problem, which +in fact was just a hard-to-find software problem due to lack of +SATA/AHCI documentation by the SoC-maker Allwinner Technology. + +Lists of the affected sunxi and other boards and SoCs with SATA using +the ahci_sunxi driver: + $ grep -i -e "^&ahci" arch/arm/boot/dts/sun*dts + and http://linux-sunxi.org/SATA#Devices_with_SATA_ports + See also http://linux-sunxi.org/Category:Devices_with_SATA_port + +Tested-by: Chen-Yu Tsai +Acked-by: Maxime Ripard +Reviewed-by: Hans de Goede +Signed-off-by: Uenal Mutlu +Signed-off-by: Jens Axboe +--- + drivers/ata/ahci_sunxi.c | 47 ++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 45 insertions(+), 2 deletions(-) + +--- a/drivers/ata/ahci_sunxi.c ++++ b/drivers/ata/ahci_sunxi.c +@@ -157,8 +157,51 @@ static void ahci_sunxi_start_engine(stru + void __iomem *port_mmio = ahci_port_base(ap); + struct ahci_host_priv *hpriv = ap->host->private_data; + +- /* Setup DMA before DMA start */ +- sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ff00, 0x00004400); ++ /* Setup DMA before DMA start ++ * ++ * NOTE: A similar SoC with SATA/AHCI by Texas Instruments documents ++ * this Vendor Specific Port (P0DMACR, aka PxDMACR) in its ++ * User's Guide document (TMS320C674x/OMAP-L1x Processor ++ * Serial ATA (SATA) Controller, Literature Number: SPRUGJ8C, ++ * March 2011, Chapter 4.33 Port DMA Control Register (P0DMACR), ++ * p.68, https://www.ti.com/lit/ug/sprugj8c/sprugj8c.pdf) ++ * as equivalent to the following struct: ++ * ++ * struct AHCI_P0DMACR_t ++ * { ++ * unsigned TXTS : 4; ++ * unsigned RXTS : 4; ++ * unsigned TXABL : 4; ++ * unsigned RXABL : 4; ++ * unsigned Reserved : 16; ++ * }; ++ * ++ * TXTS: Transmit Transaction Size (TX_TRANSACTION_SIZE). ++ * This field defines the DMA transaction size in DWORDs for ++ * transmit (system bus read, device write) operation. [...] ++ * ++ * RXTS: Receive Transaction Size (RX_TRANSACTION_SIZE). ++ * This field defines the Port DMA transaction size in DWORDs ++ * for receive (system bus write, device read) operation. [...] ++ * ++ * TXABL: Transmit Burst Limit. ++ * This field allows software to limit the VBUSP master read ++ * burst size. [...] ++ * ++ * RXABL: Receive Burst Limit. ++ * Allows software to limit the VBUSP master write burst ++ * size. [...] ++ * ++ * Reserved: Reserved. ++ * ++ * ++ * NOTE: According to the above document, the following alternative ++ * to the code below could perhaps be a better option ++ * (or preparation) for possible further improvements later: ++ * sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ffff, ++ * 0x00000033); ++ */ ++ sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ffff, 0x00004433); + + /* Start DMA */ + sunxi_setbits(port_mmio + PORT_CMD, PORT_CMD_START);