ath79: switch to kernel 5.10

This commit is contained in:
coolsnowwolf 2021-07-15 14:39:10 +08:00
parent 90659c4876
commit b8a2a9b17e
40 changed files with 1407 additions and 80 deletions

View File

@ -8,7 +8,7 @@ SUBTARGETS:=generic mikrotik nand tiny
FEATURES:=ramdisk squashfs usbgadget
KERNEL_PATCHVER:=5.4
KERNEL_PATCHVER:=5.10
KERNEL_TESTING_PATCHVER:=5.10
include $(INCLUDE_DIR)/target.mk

View File

@ -72,6 +72,7 @@ CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_74X164=y
CONFIG_GPIO_ATH79=y
CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_LATCH is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_HARDWARE_WATCHPOINTS=y
CONFIG_HAS_DMA=y

View File

@ -90,6 +90,7 @@ CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_74X164=y
CONFIG_GPIO_ATH79=y
CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_LATCH is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_HARDWARE_WATCHPOINTS=y
CONFIG_HAS_DMA=y
@ -172,6 +173,7 @@ CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
# CONFIG_MTD_NAND_RB91X is not set
CONFIG_MTD_PARSER_CYBERTAN=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_SPI_NOR=y

View File

@ -57,7 +57,7 @@
gpio: gpio@18040000 {
compatible = "qca,ar7100-gpio";
reg = <0x18040000 0x30>;
reg = <0x18040000 0x28>;
interrupts = <2>;
ngpios = <16>;

View File

@ -110,7 +110,7 @@
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";

View File

@ -50,7 +50,7 @@
gpio: gpio@18040000 {
compatible = "qca,ar7240-gpio",
"qca,ar7100-gpio";
reg = <0x18040000 0x30>;
reg = <0x18040000 0x28>;
interrupts = <2>;
ngpios = <18>;

View File

@ -77,7 +77,7 @@
gpio: gpio@18040000 {
compatible = "qca,ar9132-gpio",
"qca,ar7100-gpio";
reg = <0x18040000 0x30>;
reg = <0x18040000 0x28>;
interrupts = <2>;
ngpios = <22>;

View File

@ -49,7 +49,7 @@
gpio: gpio@18040000 {
compatible = "qca,ar7100-gpio";
reg = <0x18040000 0x34>;
reg = <0x18040000 0x28>;
interrupts = <2>;
ngpios = <30>;

View File

@ -0,0 +1,193 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "ar9331.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
model = "Teltonika RUT230 v1";
compatible = "teltonika,rut230-v1", "qca,ar9331";
aliases {
label-mac-device = &wmac;
led-boot = &led_ss0;
led-failsafe = &led_ss0;
led-upgrade = &led_ss0;
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
debounce-interval = <60>;
};
input {
label = "input";
linux,code = <BTN_0>;
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
sim-tray {
label = "sim-tray";
linux,code = <BTN_1>;
gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&switch_led_disable_pins>;
led_ss0: signal-strength-0 {
label = "green:signal-strength-0";
gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
};
signal-strength-1 {
label = "green:signal-strength-1";
gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
};
signal-strength-2 {
label = "green:signal-strength-2";
gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
};
signal-strength-3 {
label = "green:signal-strength-3";
gpios = <&gpio 26 GPIO_ACTIVE_HIGH>;
};
signal-strength-4 {
label = "green:signal-strength4";
gpios = <&gpio 27 GPIO_ACTIVE_HIGH>;
};
2g {
label = "green:2g";
gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
};
3g {
label = "green:3g";
gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
};
lan {
label = "green:lan";
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
/* GPIO 13 - ACTIVE HIGH for hwrev 0 */
};
wan {
label = "green:wan";
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
/* GPIO 14 - ACTIVE HIGH for hwrev 0 */
};
/* 4G LED - GPIO21 ACTIVE_HIGH for RUT240 */
};
reg_usb_vbus: reg_usb_vbus {
compatible = "regulator-fixed";
regulator-name = "usb_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpio 19 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
};
&eth0 {
status = "okay";
mtd-mac-address = <&config 0x0>;
};
&eth1 {
status = "okay";
mtd-mac-address = <&config 0x0>;
mtd-mac-address-increment = <1>;
};
&spi {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <30000000>;
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 {
compatible = "tplink,firmware";
label = "firmware";
reg = <0x40000 0xf30000>;
};
partition@f70000 {
label = "event-log";
reg = <0xf70000 0x90000>;
read-only;
};
};
};
};
&usb {
dr_mode = "host";
vbus-supply = <&reg_usb_vbus>;
status = "okay";
};
&gpio {
modem-power {
gpio-hog;
output-low;
gpios = <18 GPIO_ACTIVE_HIGH>;
line-name = "modem-power";
};
};
&usb_phy {
status = "okay";
};
&wmac {
status = "okay";
mtd-cal-data = <&art 0x1000>;
mtd-mac-address = <&config 0x0>;
mtd-mac-address-increment = <2>;
};

View File

@ -0,0 +1,218 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "ar9344.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "mikrotik,routerboard-912uag-2hpnd", "qca,ar9342";
model = "MikroTik RouterBOARD 912UAG-2HPnD";
aliases {
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
gpio_latch: gpio_latch {
compatible = "gpio-latch";
gpio-controller;
#gpio-cells = <2>;
gpios = <&gpio 0 GPIO_ACTIVE_HIGH>,
<&gpio 1 GPIO_ACTIVE_HIGH>,
<&gpio 2 GPIO_ACTIVE_HIGH>,
<&gpio 3 GPIO_ACTIVE_HIGH>,
<0>, /* Not connected */
<&gpio 13 GPIO_ACTIVE_HIGH>,
<&gpio 14 GPIO_ACTIVE_HIGH>,
<&gpio 15 GPIO_ACTIVE_HIGH>,
<&gpio 11 GPIO_ACTIVE_LOW>; /* Latch Enable */
};
nand_gpio {
compatible = "mikrotik,rb91x-nand";
gpios = <&gpio_latch 3 GPIO_ACTIVE_HIGH>, /* Read */
<&gpio 4 GPIO_ACTIVE_HIGH>, /* Ready (RDY) */
<&gpio_latch 5 GPIO_ACTIVE_LOW>, /* Chip Enable (nCE) */
<&gpio_latch 6 GPIO_ACTIVE_HIGH>, /* Command Latch Enable (CLE) */
<&gpio_latch 7 GPIO_ACTIVE_HIGH>, /* Address Latch Enable (ALE) */
<&gpio 12 GPIO_ACTIVE_LOW>, /* Read/Write Enable (nRW) */
<&gpio_latch 8 GPIO_ACTIVE_LOW>; /* Latch Enable (nLE) */
partitions {
compatible = "fixed-partitions";
#size-cells = <1>;
partition@0 {
label = "booter";
reg = <0x0 0x0040000>;
read-only;
};
partition@40000 {
label = "kernel";
reg = <0x0040000 0x03c0000>;
};
partition@400000 {
label = "ubi";
reg = <0x0400000 0x7c00000>;
};
};
};
leds {
compatible = "gpio-leds";
led_power: power {
label = "green:power";
gpios = <&gpio_latch 1 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
user {
label = "green:user";
gpios = <&gpio_latch 2 GPIO_ACTIVE_HIGH>;
};
led1 {
label = "green:led1";
gpios = <&ssr 0 GPIO_ACTIVE_HIGH>;
};
led2 {
label = "green:led2";
gpios = <&ssr 1 GPIO_ACTIVE_HIGH>;
};
led3 {
label = "green:led3";
gpios = <&ssr 2 GPIO_ACTIVE_HIGH>;
};
led4 {
label = "green:led4";
gpios = <&ssr 3 GPIO_ACTIVE_HIGH>;
};
led5 {
label = "green:led5";
gpios = <&ssr 4 GPIO_ACTIVE_HIGH>;
};
};
gpio-export {
compatible = "gpio-export";
beeper {
gpio-export,name = "beeper";
gpio-export,output = <1>; /* Must be 1 to avoid EMI induced clicking noise */
gpios = <&ssr 5 GPIO_ACTIVE_HIGH>;
};
usb_power {
gpio-export,name = "power-usb";
gpio-export,output = <1>;
gpios = <&ssr 6 GPIO_ACTIVE_HIGH>;
};
pcie_power {
gpio-export,name = "power-pcie";
gpio-export,output = <0>;
gpios = <&ssr 7 GPIO_ACTIVE_HIGH>;
};
};
};
&spi {
status = "okay";
compatible = "qca,ar7100-spi";
cs-gpios = <0>, <&gpio_latch 0 GPIO_ACTIVE_LOW>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
partitions {
compatible = "mikrotik,routerboot-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "routerboot";
reg = <0x0 0x0>;
read-only;
};
hard_config: hard_config {
read-only;
};
bios {
size = <0x1000>;
read-only;
};
soft_config {
};
};
};
ssr: ssr@1 {
compatible = "fairchild,74hc595";
gpio-controller;
#gpio-cells = <2>;
registers-number = <1>;
reg = <1>;
spi-max-frequency = <50000000>;
};
};
&mdio0 {
status = "okay";
phy-mask = <0>;
phy0: ethernet-phy@0 {
reg = <0>;
};
};
&eth0 {
status = "okay";
phy-mode = "rgmii-id";
phy-handle = <&phy0>;
pll-data = <0x02000000 0x00000101 0x00001313>;
gmac-config {
device = <&gmac>;
rgmii-gmac0 = <1>;
rgmii-enabled = <1>;
rxd-delay = <1>;
txd-delay = <1>;
};
};
&wmac {
status = "okay";
qca,no-eeprom;
};
&pcie {
status = "okay";
};
&usb {
status = "okay";
};
&usb_phy {
status = "okay";
};

View File

@ -0,0 +1,34 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "ar9342_ubnt_xw.dtsi"
/ {
compatible = "ubnt,powerbeam-m-xw", "ubnt,xw", "qca,ar9342";
model = "Ubiquiti PowerBeam M (XW)";
};
&mdio0 {
status = "okay";
phy-mask = <4>;
phy4: ethernet-phy@4 {
reg = <4>;
};
};
&eth0 {
status = "okay";
/* default for ar934x, except for 1000M and 10M */
pll-data = <0x02000000 0x00000101 0x00001313>;
phy-mode = "rgmii-id";
phy-handle = <&phy4>;
gmac-config {
device = <&gmac>;
rxd-delay = <3>;
rxdv-delay = <3>;
};
};

View File

@ -72,7 +72,7 @@
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";

View File

@ -78,7 +78,7 @@
gpio: gpio@18040000 {
compatible = "qca,ar9340-gpio";
reg = <0x18040000 0x2c>;
reg = <0x18040000 0x28>;
interrupts = <2>;
ngpios = <23>;

View File

@ -133,7 +133,7 @@
reg = <0x100000 0x100000>;
};
kernel: partition@200000 {
partition@200000 {
label = "kernel";
reg = <0x200000 0x400000>;
};
@ -160,16 +160,6 @@
reg = <0x6d00000 0x100000>;
read-only;
};
kfs: partition@kfs {
label = "kfs";
reg = <0x200000 0x2400000>;
};
kfs2: partition@kfs2 {
label = "kfs2";
reg = <0x2600000 0x2400000>;
};
};
};

View File

@ -69,7 +69,7 @@
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";

View File

@ -40,7 +40,7 @@
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";

View File

@ -0,0 +1,154 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "qca956x.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "tplink,tl-wr941hp-v1", "qca,tp9343";
model = "TP-Link TL-WR941HP v1";
aliases {
label-mac-device = &wmac;
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
leds {
compatible = "gpio-leds";
re {
label = "blue:re";
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
};
wifi {
label = "blue:wifi";
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};
led_power: power {
label = "blue:power";
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
default-state = "on";
};
wan_blue {
label = "blue:wan";
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
};
wan_red {
label = "red:wan";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
lan {
label = "blue:lan";
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
};
wps {
label = "blue:wps";
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
};
};
keys {
compatible = "gpio-keys";
re {
label = "range extender button";
linux,code = <BTN_0>;
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
wifi {
label = "wifi button";
linux,code = <KEY_RFKILL>;
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
reset {
label = "reset button";
linux,code = <KEY_RESTART>;
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
wps {
label = "wps button";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
};
&spi {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
uboot: partition@0 {
label = "u-boot";
reg = <0x0 0x020000>;
read-only;
};
partition@20000 {
compatible = "tplink,firmware";
label = "firmware";
reg = <0x020000 0x730000>;
};
config: partition@750000 {
label = "config";
reg = <0x750000 0x0a0000>;
read-only;
};
art: partition@7f0000 {
label = "art";
reg = <0x7f0000 0x010000>;
read-only;
};
};
};
};
&eth0 {
status = "okay";
phy-handle = <&swphy0>;
mtd-mac-address = <&config 0x8>;
mtd-mac-address-increment = <1>;
};
&eth1 {
status = "okay";
mtd-mac-address = <&config 0x8>;
};
&wmac {
status = "okay";
mtd-cal-data = <&art 0x1000>;
mtd-mac-address = <&config 0x8>;
};

View File

@ -0,0 +1,203 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* GPIO latch driver
*
* Copyright (C) 2014 Gabor Juhos <juhosg@openwrt.org>
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h>
#include <linux/platform_device.h>
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#define GPIO_LATCH_DRIVER_NAME "gpio-latch"
#define GPIO_LATCH_LINES 9
struct gpio_latch_chip {
struct gpio_chip gc;
struct mutex mutex;
struct mutex latch_mutex;
bool latch_enabled;
int le_gpio;
bool le_active_low;
struct gpio_desc *gpios[GPIO_LATCH_LINES];
};
static inline struct gpio_latch_chip *to_gpio_latch_chip(struct gpio_chip *gc)
{
return container_of(gc, struct gpio_latch_chip, gc);
}
static void gpio_latch_lock(struct gpio_latch_chip *glc, bool enable)
{
mutex_lock(&glc->mutex);
if (enable)
glc->latch_enabled = true;
if (glc->latch_enabled)
mutex_lock(&glc->latch_mutex);
}
static void gpio_latch_unlock(struct gpio_latch_chip *glc, bool disable)
{
if (glc->latch_enabled)
mutex_unlock(&glc->latch_mutex);
if (disable)
glc->latch_enabled = true;
mutex_unlock(&glc->mutex);
}
static int
gpio_latch_get(struct gpio_chip *gc, unsigned offset)
{
struct gpio_latch_chip *glc = to_gpio_latch_chip(gc);
int ret;
gpio_latch_lock(glc, false);
ret = gpiod_get_value(glc->gpios[offset]);
gpio_latch_unlock(glc, false);
return ret;
}
static void
gpio_latch_set(struct gpio_chip *gc, unsigned offset, int value)
{
struct gpio_latch_chip *glc = to_gpio_latch_chip(gc);
bool enable_latch = false;
bool disable_latch = false;
if (offset == glc->le_gpio) {
enable_latch = value ^ glc->le_active_low;
disable_latch = !enable_latch;
}
gpio_latch_lock(glc, enable_latch);
gpiod_set_raw_value(glc->gpios[offset], value);
gpio_latch_unlock(glc, disable_latch);
}
static int
gpio_latch_direction_output(struct gpio_chip *gc, unsigned offset, int value)
{
struct gpio_latch_chip *glc = to_gpio_latch_chip(gc);
bool enable_latch = false;
bool disable_latch = false;
int ret;
if (offset == glc->le_gpio) {
enable_latch = value ^ glc->le_active_low;
disable_latch = !enable_latch;
}
gpio_latch_lock(glc, enable_latch);
ret = gpiod_direction_output_raw(glc->gpios[offset], value);
gpio_latch_unlock(glc, disable_latch);
return ret;
}
static int gpio_latch_probe(struct platform_device *pdev)
{
struct gpio_latch_chip *glc;
struct gpio_chip *gc;
struct device *dev = &pdev->dev;
struct device_node *of_node = dev->of_node;
int i, n;
glc = devm_kzalloc(dev, sizeof(*glc), GFP_KERNEL);
if (!glc)
return -ENOMEM;
mutex_init(&glc->mutex);
mutex_init(&glc->latch_mutex);
n = gpiod_count(dev, NULL);
if (n <= 0) {
dev_err(dev, "failed to get gpios: %d\n", n);
return n;
} else if (n != GPIO_LATCH_LINES) {
dev_err(dev, "expected %d gpios\n", GPIO_LATCH_LINES);
return -EINVAL;
}
for (i = 0; i < n; i++) {
glc->gpios[i] = devm_gpiod_get_index_optional(dev, NULL, i,
GPIOD_OUT_LOW);
if (IS_ERR(glc->gpios[i])) {
dev_err(dev, "failed to get gpio %d: %d\n", i,
PTR_ERR(glc->gpios[i]));
return PTR_ERR(glc->gpios[i]);
}
}
glc->le_gpio = 8;
glc->le_active_low = gpiod_is_active_low(glc->gpios[glc->le_gpio]);
if (!glc->gpios[glc->le_gpio]) {
dev_err(dev, "missing required latch-enable gpio %d\n",
glc->le_gpio);
return -EINVAL;
}
gc = &glc->gc;
gc->label = GPIO_LATCH_DRIVER_NAME;
gc->can_sleep = true;
gc->base = -1;
gc->ngpio = GPIO_LATCH_LINES;
gc->get = gpio_latch_get;
gc->set = gpio_latch_set;
gc->direction_output = gpio_latch_direction_output;
gc->of_node = of_node;
platform_set_drvdata(pdev, glc);
i = gpiochip_add(&glc->gc);
if (i) {
dev_err(dev, "gpiochip_add() failed: %d\n", i);
return i;
}
return 0;
}
static int gpio_latch_remove(struct platform_device *pdev)
{
struct gpio_latch_chip *glc = platform_get_drvdata(pdev);
gpiochip_remove(&glc->gc);
return 0;
}
static const struct of_device_id gpio_latch_match[] = {
{ .compatible = GPIO_LATCH_DRIVER_NAME },
{},
};
MODULE_DEVICE_TABLE(of, gpio_latch_match);
static struct platform_driver gpio_latch_driver = {
.probe = gpio_latch_probe,
.remove = gpio_latch_remove,
.driver = {
.name = GPIO_LATCH_DRIVER_NAME,
.owner = THIS_MODULE,
.of_match_table = gpio_latch_match,
},
};
module_platform_driver(gpio_latch_driver);
MODULE_DESCRIPTION("GPIO latch driver");
MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
MODULE_AUTHOR("Denis Kalashnikov <denis281089@gmail.com>");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:" GPIO_LATCH_DRIVER_NAME);

View File

@ -1273,7 +1273,6 @@ static int ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc)
* Writing a subpage separately is not supported, because
* the controller only does ECC on full-page accesses.
*/
nand->options = NAND_NO_SUBPAGE_WRITE;
nand->ecc.size = 512;
nand->ecc.bytes = 7;
@ -1332,6 +1331,9 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand)
if (ret)
return ret;
if (mtd->writesize == 2048)
nand->options |= NAND_NO_SUBPAGE_WRITE;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) {
#else

View File

@ -0,0 +1,375 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* MikroTik RB91x NAND flash driver
*
* Main part is copied from original driver written by Gabor Juhos.
*
* Copyright (C) 2013-2014 Gabor Juhos <juhosg@openwrt.org>
*/
/*
* WARNING: to speed up NAND reading/writing we are working with SoC GPIO
* controller registers directly -- not through standard GPIO API.
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mtd/rawnand.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/platform_device.h>
#include <linux/gpio/consumer.h>
#include <linux/version.h>
#include <linux/of_platform.h>
#include <asm/mach-ath79/ar71xx_regs.h>
/* Bit masks for NAND data lines in ath79 gpio 32-bit register */
#define RB91X_NAND_NRW_BIT BIT(12)
#define RB91X_NAND_DATA_BITS (BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) \
| BIT(13) | BIT(14) | BIT(15))
#define RB91X_NAND_LOW_DATA_MASK 0x1f
#define RB91X_NAND_HIGH_DATA_MASK 0xe0
#define RB91X_NAND_HIGH_DATA_SHIFT 8
enum rb91x_nand_gpios {
RB91X_NAND_READ,/* Read */
RB91X_NAND_RDY, /* NAND Ready */
RB91X_NAND_NCE, /* Chip Enable. Active low */
RB91X_NAND_CLE, /* Command Latch Enable */
RB91X_NAND_ALE, /* Address Latch Enable */
RB91X_NAND_NRW, /* Read/Write. Active low */
RB91X_NAND_NLE, /* Latch Enable. Active low */
RB91X_NAND_GPIOS,
};
struct rb91x_nand_drvdata {
struct nand_chip chip;
struct device *dev;
struct gpio_desc **gpio;
void __iomem *ath79_gpio_base;
};
static inline void rb91x_nand_latch_lock(struct rb91x_nand_drvdata *drvdata,
int lock)
{
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_NLE], lock);
}
static int rb91x_ooblayout_ecc(struct mtd_info *mtd, int section,
struct mtd_oob_region *oobregion)
{
switch (section) {
case 0:
oobregion->offset = 8;
oobregion->length = 3;
return 0;
case 1:
oobregion->offset = 13;
oobregion->length = 3;
return 0;
default:
return -ERANGE;
}
}
static int rb91x_ooblayout_free(struct mtd_info *mtd, int section,
struct mtd_oob_region *oobregion)
{
switch (section) {
case 0:
oobregion->offset = 0;
oobregion->length = 4;
return 0;
case 1:
oobregion->offset = 4;
oobregion->length = 1;
return 0;
case 2:
oobregion->offset = 6;
oobregion->length = 2;
return 0;
case 3:
oobregion->offset = 11;
oobregion->length = 2;
return 0;
default:
return -ERANGE;
}
}
static const struct mtd_ooblayout_ops rb91x_nand_ecclayout_ops = {
.ecc = rb91x_ooblayout_ecc,
.free = rb91x_ooblayout_free,
};
static void rb91x_nand_write(struct rb91x_nand_drvdata *drvdata,
const u8 *buf,
unsigned len)
{
void __iomem *base = drvdata->ath79_gpio_base;
u32 oe_reg;
u32 out_reg;
u32 out;
unsigned i;
rb91x_nand_latch_lock(drvdata, 1);
oe_reg = __raw_readl(base + AR71XX_GPIO_REG_OE);
out_reg = __raw_readl(base + AR71XX_GPIO_REG_OUT);
/* Set data lines to output mode */
__raw_writel(oe_reg & ~(RB91X_NAND_DATA_BITS | RB91X_NAND_NRW_BIT),
base + AR71XX_GPIO_REG_OE);
out = out_reg & ~(RB91X_NAND_DATA_BITS | RB91X_NAND_NRW_BIT);
for (i = 0; i != len; i++) {
u32 data;
data = (buf[i] & RB91X_NAND_HIGH_DATA_MASK) <<
RB91X_NAND_HIGH_DATA_SHIFT;
data |= buf[i] & RB91X_NAND_LOW_DATA_MASK;
data |= out;
__raw_writel(data, base + AR71XX_GPIO_REG_OUT);
/* Deactivate WE line */
data |= RB91X_NAND_NRW_BIT;
__raw_writel(data, base + AR71XX_GPIO_REG_OUT);
/* Flush write */
__raw_readl(base + AR71XX_GPIO_REG_OUT);
}
/* Restore registers */
__raw_writel(out_reg, base + AR71XX_GPIO_REG_OUT);
__raw_writel(oe_reg, base + AR71XX_GPIO_REG_OE);
/* Flush write */
__raw_readl(base + AR71XX_GPIO_REG_OUT);
rb91x_nand_latch_lock(drvdata, 0);
}
static void rb91x_nand_read(struct rb91x_nand_drvdata *drvdata,
u8 *read_buf,
unsigned len)
{
void __iomem *base = drvdata->ath79_gpio_base;
u32 oe_reg;
u32 out_reg;
unsigned i;
/* Enable read mode */
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_READ], 1);
rb91x_nand_latch_lock(drvdata, 1);
/* Save registers */
oe_reg = __raw_readl(base + AR71XX_GPIO_REG_OE);
out_reg = __raw_readl(base + AR71XX_GPIO_REG_OUT);
/* Set data lines to input mode */
__raw_writel(oe_reg | RB91X_NAND_DATA_BITS,
base + AR71XX_GPIO_REG_OE);
for (i = 0; i < len; i++) {
u32 in;
u8 data;
/* Activate RE line */
__raw_writel(RB91X_NAND_NRW_BIT, base + AR71XX_GPIO_REG_CLEAR);
/* Flush write */
__raw_readl(base + AR71XX_GPIO_REG_CLEAR);
/* Read input lines */
in = __raw_readl(base + AR71XX_GPIO_REG_IN);
/* Deactivate RE line */
__raw_writel(RB91X_NAND_NRW_BIT, base + AR71XX_GPIO_REG_SET);
data = (in & RB91X_NAND_LOW_DATA_MASK);
data |= (in >> RB91X_NAND_HIGH_DATA_SHIFT) &
RB91X_NAND_HIGH_DATA_MASK;
read_buf[i] = data;
}
/* Restore registers */
__raw_writel(out_reg, base + AR71XX_GPIO_REG_OUT);
__raw_writel(oe_reg, base + AR71XX_GPIO_REG_OE);
/* Flush write */
__raw_readl(base + AR71XX_GPIO_REG_OUT);
rb91x_nand_latch_lock(drvdata, 0);
/* Disable read mode */
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_READ], 0);
}
static int rb91x_nand_dev_ready(struct nand_chip *chip)
{
struct rb91x_nand_drvdata *drvdata = (struct rb91x_nand_drvdata *)(chip->priv);
return gpiod_get_value_cansleep(drvdata->gpio[RB91X_NAND_RDY]);
}
static void rb91x_nand_cmd_ctrl(struct nand_chip *chip, int cmd,
unsigned int ctrl)
{
struct rb91x_nand_drvdata *drvdata = chip->priv;
if (ctrl & NAND_CTRL_CHANGE) {
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_CLE],
(ctrl & NAND_CLE) ? 1 : 0);
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_ALE],
(ctrl & NAND_ALE) ? 1 : 0);
gpiod_set_value_cansleep(drvdata->gpio[RB91X_NAND_NCE],
(ctrl & NAND_NCE) ? 1 : 0);
}
if (cmd != NAND_CMD_NONE) {
u8 t = cmd;
rb91x_nand_write(drvdata, &t, 1);
}
}
static u8 rb91x_nand_read_byte(struct nand_chip *chip)
{
u8 data = 0xff;
rb91x_nand_read(chip->priv, &data, 1);
return data;
}
static void rb91x_nand_read_buf(struct nand_chip *chip, u8 *buf, int len)
{
rb91x_nand_read(chip->priv, buf, len);
}
static void rb91x_nand_write_buf(struct nand_chip *chip, const u8 *buf, int len)
{
rb91x_nand_write(chip->priv, buf, len);
}
static void rb91x_nand_release(struct rb91x_nand_drvdata *drvdata)
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)
mtd_device_unregister(nand_to_mtd(&drvdata->chip));
nand_cleanup(&drvdata->chip);
#else
nand_release(&drvdata->chip);
#endif
}
static int rb91x_nand_probe(struct platform_device *pdev)
{
struct rb91x_nand_drvdata *drvdata;
struct mtd_info *mtd;
int r;
struct device *dev = &pdev->dev;
struct gpio_descs *gpios;
drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
if (!drvdata)
return -ENOMEM;
platform_set_drvdata(pdev, drvdata);
gpios = gpiod_get_array(dev, NULL, GPIOD_OUT_LOW);
if (IS_ERR(gpios)) {
dev_err(dev, "failed to get gpios: %d\n", (int)gpios);
return -EINVAL;
}
if (gpios->ndescs != RB91X_NAND_GPIOS) {
dev_err(dev, "expected %d gpios\n", RB91X_NAND_GPIOS);
return -EINVAL;
}
drvdata->gpio = gpios->desc;
gpiod_direction_input(drvdata->gpio[RB91X_NAND_RDY]);
drvdata->ath79_gpio_base = ioremap(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE);
drvdata->dev = dev;
drvdata->chip.priv = drvdata;
drvdata->chip.legacy.cmd_ctrl = rb91x_nand_cmd_ctrl;
drvdata->chip.legacy.dev_ready = rb91x_nand_dev_ready;
drvdata->chip.legacy.read_byte = rb91x_nand_read_byte;
drvdata->chip.legacy.write_buf = rb91x_nand_write_buf;
drvdata->chip.legacy.read_buf = rb91x_nand_read_buf;
drvdata->chip.legacy.chip_delay = 25;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
drvdata->chip.ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
drvdata->chip.ecc.algo = NAND_ECC_ALGO_HAMMING;
#else
drvdata->chip.ecc.mode = NAND_ECC_SOFT;
drvdata->chip.ecc.algo = NAND_ECC_HAMMING;
#endif
drvdata->chip.options = NAND_NO_SUBPAGE_WRITE;
r = nand_scan(&drvdata->chip, 1);
if (r) {
dev_err(dev, "nand_scan() failed: %d\n", r);
return r;
}
mtd = nand_to_mtd(&drvdata->chip);
mtd->dev.parent = dev;
mtd_set_of_node(mtd, dev->of_node);
mtd->owner = THIS_MODULE;
if (mtd->writesize == 512)
mtd_set_ooblayout(mtd, &rb91x_nand_ecclayout_ops);
r = mtd_device_register(mtd, NULL, 0);
if (r) {
dev_err(dev, "mtd_device_register() failed: %d\n",
r);
goto err_release_nand;
}
return 0;
err_release_nand:
rb91x_nand_release(drvdata);
return r;
}
static int rb91x_nand_remove(struct platform_device *pdev)
{
struct rb91x_nand_drvdata *drvdata = platform_get_drvdata(pdev);
rb91x_nand_release(drvdata);
return 0;
}
static const struct of_device_id rb91x_nand_match[] = {
{ .compatible = "mikrotik,rb91x-nand" },
{},
};
MODULE_DEVICE_TABLE(of, rb91x_nand_match);
static struct platform_driver rb91x_nand_driver = {
.probe = rb91x_nand_probe,
.remove = rb91x_nand_remove,
.driver = {
.name = "rb91x-nand",
.owner = THIS_MODULE,
.of_match_table = rb91x_nand_match,
},
};
module_platform_driver(rb91x_nand_driver);
MODULE_DESCRIPTION("MikrotTik RB91x NAND flash driver");
MODULE_VERSION(DRV_VERSION);
MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
MODULE_AUTHOR("Denis Kalashnikov <denis281089@gmail.com>");
MODULE_LICENSE("GPL v2");

View File

@ -279,6 +279,10 @@ qihoo,c301)
samsung,wam250)
ucidef_set_led_netdev "lan" "LAN" "white:lan" "eth0"
;;
teltonika,rut230-v1)
ucidef_set_led_netdev "wan" "WAN" "green:wan" "eth1"
ucidef_set_led_switch "lan" "LAN" "green:lan" "switch0" "0x04"
;;
tplink,archer-a7-v5|\
tplink,archer-c7-v4|\
tplink,archer-c7-v5)
@ -381,6 +385,10 @@ tplink,tl-wr842n-v2)
ucidef_set_led_switch "lan3" "LAN3" "green:lan3" "switch0" "0x10"
ucidef_set_led_switch "lan4" "LAN4" "green:lan4" "switch0" "0x02"
;;
tplink,tl-wr941hp-v1)
ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth1" "link tx rx"
ucidef_set_led_switch "lan" "LAN" "blue:lan" "switch0" "0x1e"
;;
trendnet,tew-823dru)
ucidef_set_led_netdev "wan" "WAN" "green:planet" "eth0"
;;
@ -404,6 +412,7 @@ ubnt,nanostation-loco-m-xw|\
ubnt,nanostation-m|\
ubnt,nanostation-m-xw|\
ubnt,picostation-m|\
ubnt,powerbeam-m-xw|\
ubnt,powerbridge-m|\
ubnt,rocket-m)
ucidef_set_rssimon "wlan0" "200000" "1"

View File

@ -86,6 +86,7 @@ ath79_setup_interfaces()
ubnt,picostation-m|\
ubnt,powerbeam-5ac-500|\
ubnt,powerbeam-5ac-gen2|\
ubnt,powerbeam-m-xw|\
ubnt,powerbridge-m|\
ubnt,rocket-5ac-lite|\
ubnt,rocket-m|\
@ -400,7 +401,8 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \
"0@eth0" "2:lan:3" "3:lan:2" "4:lan:1" "5:lan:4"
;;
tplink,tl-wr842n-v2)
tplink,tl-wr842n-v2|\
tplink,tl-wr941hp-v1)
ucidef_set_interface_wan "eth1"
ucidef_add_switch "switch0" \
"0@eth0" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"

View File

@ -1,6 +1,6 @@
BOARDNAME:=Generic
DEFAULT_PACKAGES += -ddns-scripts_aliyun -ddns-scripts_dnspod wpad-openssl
DEFAULT_PACKAGES += wpad-basic-wolfssl
define Target/Description
Build firmware images for generic Atheros AR71xx/AR913x/AR934x based boards.

View File

@ -91,7 +91,7 @@ define Device/Default
COMPILE :=
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | \
append-rootfs | pad-rootfs | append-metadata | check-size
append-rootfs | pad-rootfs | check-size | append-metadata
endef
include $(SUBTARGET).mk

View File

@ -9,7 +9,7 @@ define Device/mikrotik_nor
$(Device/mikrotik)
IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
endef
define Device/mikrotik_nand

View File

@ -32,10 +32,8 @@ define Device/netgear_generic
KERNEL := kernel-bin | append-dtb | lzma -d20 | uImage lzma
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma -d20 | uImage lzma
IMAGES += factory.img
IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | netgear-squashfs | \
append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/factory.img := $$(IMAGE/default) | netgear-dni | \
check-size
IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | \
netgear-squashfs | append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
IMAGE/factory.img := $$(IMAGE/default) | netgear-dni | check-size
endef

View File

@ -22,8 +22,7 @@ define Device/tplink-v2
TPLINK_HVERSION := 3
KERNEL := kernel-bin | append-dtb | lzma
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | tplink-v2-header
IMAGE/sysupgrade.bin := tplink-v2-image -s | append-metadata | \
check-size
IMAGE/sysupgrade.bin := tplink-v2-image -s | check-size | append-metadata
endef
define Device/tplink-nolzma
@ -74,7 +73,7 @@ define Device/tplink-safeloader
KERNEL := kernel-bin | append-dtb | lzma | tplink-v1-header -O
KERNEL_INITRAMFS := $$(KERNEL)
IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade | \
append-metadata | check-size
check-size | append-metadata
IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
endef

View File

@ -576,6 +576,18 @@ define Device/tplink_tl-wdr4900-v2
endef
TARGET_DEVICES += tplink_tl-wdr4900-v2
define Device/tplink_tl-wdr7500-v3
$(Device/tplink-8mlzma)
SOC := qca9558
DEVICE_MODEL := TL-WDR7500
DEVICE_VARIANT := v3
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct \
ath10k-firmware-qca988x-ct
TPLINK_HWID := 0x75000003
SUPPORTED_DEVICES += archer-c7
endef
TARGET_DEVICES += tplink_tl-wdr7500-v3
define Device/tplink_tl-wdr6500-v2
$(Device/tplink-8mlzma)
SOC := qca9561
@ -591,18 +603,6 @@ define Device/tplink_tl-wdr6500-v2
endef
TARGET_DEVICES += tplink_tl-wdr6500-v2
define Device/tplink_tl-wdr7500-v3
$(Device/tplink-8mlzma)
SOC := qca9558
DEVICE_MODEL := TL-WDR7500
DEVICE_VARIANT := v3
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct \
ath10k-firmware-qca988x-ct
TPLINK_HWID := 0x75000003
SUPPORTED_DEVICES += archer-c7
endef
TARGET_DEVICES += tplink_tl-wdr7500-v3
define Device/tplink_tl-wpa8630-v1
$(Device/tplink-8mlzma)
SOC := qca9563
@ -719,7 +719,7 @@ define Device/tplink_tl-wr2543-v1
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport
TPLINK_HWID := 0x25430001
IMAGE/sysupgrade.bin := tplink-v1-image sysupgrade -v 3.13.99 | \
append-metadata | check-size
check-size | append-metadata
IMAGE/factory.bin := tplink-v1-image factory -v 3.13.99
SUPPORTED_DEVICES += tl-wr2543n
endef
@ -825,6 +825,16 @@ define Device/tplink_tl-wr902ac-v1
endef
TARGET_DEVICES += tplink_tl-wr902ac-v1
define Device/tplink_tl-wr941hp-v1
$(Device/tplink-safeloader)
SOC := tp9343
DEVICE_MODEL := TL-WR941HP
DEVICE_VARIANT := v1
TPLINK_BOARD_ID := TL-WR941HP-V1
IMAGE_SIZE := 7360k
endef
TARGET_DEVICES += tplink_tl-wr941hp-v1
define Device/tplink_wbs210-v1
$(Device/tplink-safeloader-okli)
SOC := ar9344

View File

@ -128,7 +128,7 @@ define Device/ubnt-unifi-jffs2
KERNEL := kernel-bin | append-dtb | lzma | uImage lzma | jffs2 kernel0
IMAGES := sysupgrade.bin factory.bin
IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs |\
pad-rootfs | append-metadata | check-size
pad-rootfs | check-size | append-metadata
IMAGE/factory.bin := $$(IMAGE/sysupgrade.bin) | mkubntimage2
endef
@ -328,6 +328,14 @@ define Device/ubnt_powerbeam-5ac-gen2
endef
TARGET_DEVICES += ubnt_powerbeam-5ac-gen2
define Device/ubnt_powerbeam-m-xw
$(Device/ubnt-xw)
DEVICE_MODEL := PowerBeam M
DEVICE_PACKAGES += rssileds
SUPPORTED_DEVICES += loco-m-xw
endef
TARGET_DEVICES += ubnt_powerbeam-m-xw
define Device/ubnt_powerbridge-m
$(Device/ubnt-xm)
SOC := ar7241
@ -365,7 +373,7 @@ define Device/ubnt_routerstation_common
IMAGE/factory.bin := append-rootfs | pad-rootfs | mkubntimage | \
check-size
IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | \
append-metadata | check-size
check-size | append-metadata
KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE)
KERNEL_INITRAMFS := kernel-bin | append-dtb
endef

View File

@ -142,11 +142,20 @@ define Build/teltonika-fw-fake-checksum
# 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"; \
offs="$$(stat -c%s $@) - $(1)"; \
dd if=$@ bs=1 count=16 skip=76 |\
dd of=$@ bs=1 count=16 seek=$$offs conv=notrunc
endef
define Build/teltonika-v1-header
$(STAGING_DIR_HOST)/bin/mktplinkfw \
-c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \
-E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
-m $(TPLINK_HEADER_VERSION) -N "$(VERSION_DIST)" -V "RUT2xx " \
-k $@ -o $@.new $(1)
@mv $@.new $@
endef
define Build/wrgg-pad-rootfs
$(STAGING_DIR_HOST)/bin/padjffs2 $(IMAGE_ROOTFS) -c 64 >>$@
endef
@ -163,7 +172,7 @@ define Device/seama
# - 36 bytes of META data (4-bytes aligned)
IMAGE/default := append-kernel | pad-offset $$$$(BLOCKSIZE) 64 | append-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | seama | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
IMAGE/factory.bin := $$(IMAGE/default) | pad-rootfs -x 64 | seama | \
seama-seal | check-size
SEAMA_SIGNATURE :=
@ -327,7 +336,7 @@ define Device/avm
KERNEL_INITRAMFS := $$(KERNEL)
IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | \
append-squashfs-fakeroot-be | pad-to 256 | append-rootfs | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
DEVICE_PACKAGES := fritz-tffs
endef
@ -768,7 +777,7 @@ define Device/dlink_dap-2xxx
IMAGE/factory.img := append-kernel | pad-offset 6144k 160 | \
append-rootfs | wrgg-pad-rootfs | mkwrggimg | check-size
IMAGE/sysupgrade.bin := append-kernel | mkwrggimg | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | append-metadata | check-size
pad-to $$$$(BLOCKSIZE) | append-rootfs | check-size | append-metadata
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
KERNEL_INITRAMFS := $$(KERNEL) | mkwrggimg
endef
@ -820,7 +829,7 @@ define Device/dlink_dap-2695-a1
IMAGE/factory.img := $$(IMAGE/default) | append-rootfs | wrgg-pad-rootfs | \
mkwrggimg | check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | mkwrggimg | append-rootfs | \
wrgg-pad-rootfs | append-metadata | check-size
wrgg-pad-rootfs | check-size | append-metadata
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
KERNEL_INITRAMFS := $$(KERNEL) | mkwrggimg
DAP_SIGNATURE := wapac02_dkbs_dap2695
@ -882,7 +891,7 @@ define Device/dlink_dir-825-b1
DEVICE_VARIANT := B1
IMAGE_SIZE := 6208k
IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
DEVICE_PACKAGES := kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport \
kmod-leds-reset kmod-owl-loader
SUPPORTED_DEVICES += dir-825-b1
@ -903,8 +912,7 @@ define Device/dlink_dir-825-c1
pad-rootfs
IMAGE/factory.bin := $$(IMAGE/default) | pad-offset $$$$(IMAGE_SIZE) 26 | \
append-string 00DB120AR9344-RT-101214-00 | check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
endef
TARGET_DEVICES += dlink_dir-825-c1
@ -921,8 +929,7 @@ define Device/dlink_dir-835-a1
pad-rootfs
IMAGE/factory.bin := $$(IMAGE/default) | pad-offset $$$$(IMAGE_SIZE) 26 | \
append-string 00DB120AR9344-RT-101214-00 | check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
endef
TARGET_DEVICES += dlink_dir-835-a1
@ -941,7 +948,7 @@ define Device/dlink_dir-842-c
IMAGE/default := append-kernel | uImage lzma | \
pad-offset $$$$(BLOCKSIZE) 64 | append-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | seama | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
IMAGE/factory.bin := $$(IMAGE/default) | pad-rootfs -x 64 | seama | \
seama-seal | check-size
IMAGE_SIZE := 15680k
@ -1354,7 +1361,7 @@ define Device/jjplus_ja76pf2
IMAGE/kernel.bin := append-kernel
IMAGE/rootfs.bin := append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | combined-image | \
append-metadata | check-size
check-size | append-metadata
KERNEL := kernel-bin | append-dtb | lzma | pad-to $$(BLOCKSIZE)
KERNEL_INITRAMFS := kernel-bin | append-dtb
IMAGE_SIZE := 16000k
@ -1421,7 +1428,7 @@ define Device/nec_wx1200cr
DEVICE_VENDOR := NEC
IMAGE/default := append-kernel | pad-offset $$$$(BLOCKSIZE) 64 | append-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | seama | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9888-ct
endef
@ -1473,10 +1480,8 @@ define Device/netgear_ex6400_ex7300
IMAGE_SIZE := 15552k
IMAGE/default := append-kernel | pad-offset $$$$(BLOCKSIZE) 64 | \
netgear-rootfs | pad-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/factory.img := $$(IMAGE/default) | netgear-dni | \
check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
IMAGE/factory.img := $$(IMAGE/default) | netgear-dni | check-size
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca99x0-ct
endef
@ -1859,7 +1864,7 @@ define Device/phicomm_k2t
DEVICE_MODEL := K2T
IMAGE_SIZE := 15744k
IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | \
append-metadata | check-size
check-size | append-metadata
DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k-ct-smallbuffers ath10k-firmware-qca9888-ct
endef
TARGET_DEVICES += phicomm_k2t
@ -2192,6 +2197,28 @@ define Device/telco_t1
endef
TARGET_DEVICES += telco_t1
define Device/teltonika_rut230-v1
SOC := ar9331
DEVICE_VENDOR := Teltonika
DEVICE_MODEL := RUT230
DEVICE_VARIANT := v1
DEVICE_PACKAGES := kmod-usb-chipidea2 kmod-usb-acm kmod-usb-net-qmi-wwan \
uqmi -uboot-envtools
IMAGE_SIZE := 15552k
TPLINK_HWID := 0x32200002
TPLINK_HWREV := 0x1
TPLINK_HEADER_VERSION := 1
KERNEL := kernel-bin | append-dtb | lzma | teltonika-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 | pad-extra 64 | teltonika-fw-fake-checksum 54 | check-size
IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) |\
append-rootfs | pad-rootfs | append-metadata |\
check-size
endef
TARGET_DEVICES += teltonika_rut230-v1
define Device/teltonika_rut955
SOC := ar9344
DEVICE_VENDOR := Teltonika
@ -2206,11 +2233,10 @@ define Device/teltonika_rut955
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 |\
pad-rootfs | teltonika-fw-fake-checksum 20 | append-string master |\
append-md5sum-bin | check-size
IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) |\
append-rootfs | pad-rootfs | append-metadata |\
check-size
append-rootfs | pad-rootfs | check-size | append-metadata
endef
TARGET_DEVICES += teltonika_rut955
@ -2233,8 +2259,7 @@ define Device/trendnet_tew-823dru
pad-rootfs
IMAGE/factory.bin := $$(IMAGE/default) | pad-offset $$$$(IMAGE_SIZE) 26 | \
append-string 00AP135AR9558-RT-131129-00 | check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
endef
TARGET_DEVICES += trendnet_tew-823dru

View File

@ -9,6 +9,15 @@ define Device/mikrotik_routerboard-493g
endef
TARGET_DEVICES += mikrotik_routerboard-493g
define Device/mikrotik_routerboard-912uag-2hpnd
$(Device/mikrotik_nand)
SOC := ar9342
DEVICE_MODEL := RouterBOARD 912UAG-2HPnD
DEVICE_PACKAGES += kmod-usb-ehci kmod-usb2
SUPPORTED_DEVICES += rb-912uag-2hpnd
endef
TARGET_DEVICES += mikrotik_routerboard-912uag-2hpnd
define Device/mikrotik_routerboard-921gs-5hpacd-15s
$(Device/mikrotik_nand)
SOC := qca9558

View File

@ -70,10 +70,9 @@ define Device/arris_sbr-ac1750
PAGESIZE := 2048
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip
KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none
IMAGES += kernel1.bin rootfs1.bin factory-kfs.bin
IMAGES += kernel1.bin rootfs1.bin
IMAGE/kernel1.bin := append-kernel | check-size $$$$(KERNEL_SIZE)
IMAGE/rootfs1.bin := append-ubi | check-size
IMAGE/factory-kfs.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | check-size $$$$(IMAGE_SIZE)
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
UBINIZE_OPTS := -E 5
endef
@ -205,8 +204,7 @@ define Device/netgear_ath79_nand
IMAGES := sysupgrade.bin factory.img
IMAGE/factory.img := append-kernel | append-ubi | netgear-dni | \
check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | \
check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | check-size | append-metadata
UBINIZE_OPTS := -E 5
endef

View File

@ -21,8 +21,7 @@ define Device/dlink_dir-615-e4
FACTORY_IMAGE_SIZE := 3456k
IMAGES += factory.bin
IMAGE/default := append-kernel | append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin := $$(IMAGE/default) | append-metadata | \
check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
IMAGE/factory.bin := $$(IMAGE/default) | \
check-size $$$$(FACTORY_IMAGE_SIZE) | pad-to $$$$(FACTORY_IMAGE_SIZE) | \
append-string "AP99-AR7240-RT-091105-05"

View File

@ -14,6 +14,7 @@ ath79_setup_interfaces()
ucidef_add_switch "switch1" \
"0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"
;;
mikrotik,routerboard-912uag-2hpnd|\
mikrotik,routerboard-921gs-5hpacd-15s|\
mikrotik,routerboard-lhg-2nd|\
mikrotik,routerboard-sxt-5nd-r2|\
@ -36,6 +37,7 @@ ath79_setup_macs()
local mac_base="$(cat /sys/firmware/mikrotik/hard_config/mac_base)"
case "$board" in
mikrotik,routerboard-912uag-2hpnd|\
mikrotik,routerboard-921gs-5hpacd-15s|\
mikrotik,routerboard-lhg-2nd|\
mikrotik,routerboard-sxt-5nd-r2|\

View File

@ -23,6 +23,7 @@ board=$(board_name)
case "$FIRMWARE" in
"ath9k-eeprom-ahb-18100000.wmac.bin")
case $board in
mikrotik,routerboard-912uag-2hpnd|\
mikrotik,routerboard-lhg-2nd|\
mikrotik,routerboard-sxt-5nd-r2|\
mikrotik,routerboard-wapr-2nd)

View File

@ -32,6 +32,7 @@ platform_do_upgrade() {
case "$board" in
mikrotik,routerboard-493g|\
mikrotik,routerboard-912uag-2hpnd|\
mikrotik,routerboard-921gs-5hpacd-15s|\
mikrotik,routerboard-922uags-5hpacd|\
mikrotik,routerboard-sxt-5nd-r2)

View File

@ -15,6 +15,7 @@ CONFIG_MTD_NAND_AR934X=y
CONFIG_MTD_NAND_CORE=y
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_RB4XX=y
CONFIG_MTD_NAND_RB91X=y
CONFIG_MTD_RAW_NAND=y
CONFIG_MTD_ROUTERBOOT_PARTS=y
CONFIG_MTD_SPI_NAND=y

View File

@ -2,7 +2,7 @@ BOARDNAME := Generic devices with NAND flash
FEATURES += nand
DEFAULT_PACKAGES += wpad-openssl
DEFAULT_PACKAGES += wpad-basic-wolfssl
define Target/Description
Firmware for boards using Qualcomm Atheros, MIPS-based SoCs

View File

@ -0,0 +1,49 @@
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -341,6 +341,13 @@ config GPIO_IXP4XX
IXP4xx series of chips.
If unsure, say N.
+
+config GPIO_LATCH
+ tristate "MikroTik RouterBOARD GPIO latch support"
+ depends on ATH79
+ help
+ GPIO driver for latch on some MikroTik RouterBOARDs.
+
config GPIO_LOGICVC
tristate "Xylon LogiCVC GPIO support"
depends on MFD_SYSCON && OF
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -72,6 +72,7 @@ obj-$(CONFIG_GPIO_IT87) += gpio-it87.o
obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4xx.o
obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o
obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
+obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o
obj-$(CONFIG_GPIO_LOGICVC) += gpio-logicvc.o
obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o
obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o
--- a/drivers/mtd/nand/raw/Kconfig
+++ b/drivers/mtd/nand/raw/Kconfig
@@ -571,4 +571,10 @@ config MTD_NAND_RB4XX
Enables support for the NAND flash chip on Mikrotik Routerboard
RB4xx series.
+config MTD_NAND_RB91X
+ tristate "MikroTik RB91x NAND driver support"
+ depends on ATH79 && MTD_RAW_NAND
+ help
+ Enables support for the NAND flash chip on MikroTik RB91x series.
+
endif # MTD_RAW_NAND
--- a/drivers/mtd/nand/raw/Makefile
+++ b/drivers/mtd/nand/raw/Makefile
@@ -60,6 +60,7 @@ obj-$(CONFIG_MTD_NAND_CADENCE) += caden
obj-$(CONFIG_MTD_NAND_ARASAN) += arasan-nand-controller.o
obj-$(CONFIG_MTD_NAND_AR934X) += ar934x_nand.o
obj-$(CONFIG_MTD_NAND_RB4XX) += nand_rb4xx.o
+obj-$(CONFIG_MTD_NAND_RB91X) += rb91x_nand.o
nand-objs := nand_base.o nand_legacy.o nand_bbt.o nand_timings.o nand_ids.o
nand-objs += nand_onfi.o

View File

@ -0,0 +1,44 @@
--- a/drivers/mtd/nand/raw/Kconfig
+++ b/drivers/mtd/nand/raw/Kconfig
@@ -559,4 +559,8 @@ config MTD_NAND_RB4XX
Enables support for the NAND flash chip on Mikrotik Routerboard
RB4xx series.
+config MTD_NAND_RB91X
+ tristate "MikroTik RB91x NAND driver support"
+ depends on ATH79 && MTD_RAW_NAND
+
endif # MTD_RAW_NAND
--- a/drivers/mtd/nand/raw/Makefile
+++ b/drivers/mtd/nand/raw/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_MTD_NAND_STM32_FMC2) += stm
obj-$(CONFIG_MTD_NAND_MESON) += meson_nand.o
obj-$(CONFIG_MTD_NAND_AR934X) += ar934x_nand.o
obj-$(CONFIG_MTD_NAND_RB4XX) += nand_rb4xx.o
+obj-$(CONFIG_MTD_NAND_RB91X) += rb91x_nand.o
nand-objs := nand_base.o nand_legacy.o nand_bbt.o nand_timings.o nand_ids.o
nand-objs += nand_onfi.o
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -130,6 +130,10 @@ config GPIO_ATH79
Select this option to enable GPIO driver for
Atheros AR71XX/AR724X/AR913X SoC devices.
+config GPIO_LATCH
+ tristate "MikroTik RouterBOARD GPIO latch support"
+ depends on ATH79
+
config GPIO_RASPBERRYPI_EXP
tristate "Raspberry Pi 3 GPIO Expander"
default RASPBERRYPI_FIRMWARE
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -67,6 +67,7 @@ obj-$(CONFIG_GPIO_IT87) += gpio-it87.o
obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4xx.o
obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o
obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
+obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o
obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o
obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o
obj-$(CONFIG_GPIO_LP3943) += gpio-lp3943.o