Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
db5e542439
@ -295,6 +295,7 @@ menu "Target Images"
|
||||
comment "Image Options"
|
||||
|
||||
source "target/linux/*/image/Config.in"
|
||||
source "target/linux/*/*/image/Config.in"
|
||||
|
||||
config TARGET_KERNEL_PARTSIZE
|
||||
int "Kernel partition size (in MiB)"
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.15 = .94
|
||||
LINUX_KERNEL_HASH-5.15.94 = da9270dbe64ddf1db13c70470957ff6796eb996d867bb4aed7d14a70e1c65a72
|
||||
LINUX_VERSION-5.15 = .96
|
||||
LINUX_KERNEL_HASH-5.15.96 = 348d974c143fdef8517ec703fdaa24bade12a49047848be92cb9e3253b19ef98
|
||||
|
||||
@ -122,14 +122,14 @@ define Package/grub2/install
|
||||
-O i386-pc \
|
||||
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
||||
-o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \
|
||||
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial vga
|
||||
at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot search serial test vga
|
||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||
-d $(PKG_BUILD_DIR)/grub-core \
|
||||
-p /boot/grub \
|
||||
-O i386-pc \
|
||||
-c ./files/grub-early.cfg \
|
||||
-o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \
|
||||
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial vga
|
||||
at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot search serial test vga
|
||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||
-d $(PKG_BUILD_DIR)/grub-core \
|
||||
-p /boot/grub \
|
||||
@ -154,7 +154,7 @@ define Package/grub2-efi/install
|
||||
-O $(CONFIG_ARCH)-efi \
|
||||
-c $(PKG_BUILD_DIR)/grub-early.cfg \
|
||||
-o $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_x86_64),x64,ia32).efi \
|
||||
at_keyboard boot chain configfile fat linux ls part_gpt reboot serial efi_gop efi_uga
|
||||
at_keyboard boot chain configfile fat linux ls part_gpt reboot serial test efi_gop efi_uga
|
||||
$(STAGING_DIR_HOST)/bin/grub-mkimage \
|
||||
-d $(PKG_BUILD_DIR)/grub-core \
|
||||
-p /boot/grub \
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=kexec-tools
|
||||
PKG_VERSION:=2.0.21
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=2.0.26
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/utils/kernel/kexec
|
||||
PKG_HASH:=e113142dee891638ad96e0f72cf9277b244477619470b30c41999d312e8e8702
|
||||
PKG_HASH:=7fe36a064101cd5c515e41b2be393dce3ca88adce59d6ee668e0af7c0c4570cd
|
||||
|
||||
PKG_CONFIG_DEPENDS := CONFIG_KEXEC_ZLIB CONFIG_KEXEC_LZMA
|
||||
|
||||
|
||||
@ -1,52 +0,0 @@
|
||||
From 9817ec81968a5eec7863902833fb77680544eae4 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Egorenkov <egorenar-dev@posteo.net>
|
||||
Date: Mon, 12 Apr 2021 13:18:05 +0200
|
||||
Subject: [PATCH 1/1] arm: do not copy magic 4 bytes of appended DTB in zImage
|
||||
|
||||
If the passed zImage happens to have a DTB appended, then the magic 4 bytes
|
||||
of the DTB are copied together with the kernel image. This leads to
|
||||
failed kexec boots because the decompressor finds the aforementioned
|
||||
DTB magic and falsely tries to replace the DTB passed in the register r2
|
||||
with the non-existent appended one.
|
||||
|
||||
Signed-off-by: Alexander Egorenkov <egorenar-dev@posteo.net>
|
||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||
---
|
||||
kexec/arch/arm/kexec-zImage-arm.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/kexec/arch/arm/kexec-zImage-arm.c
|
||||
+++ b/kexec/arch/arm/kexec-zImage-arm.c
|
||||
@@ -382,6 +382,7 @@ int zImage_arm_load(int argc, char **arg
|
||||
unsigned int atag_offset = 0x1000; /* 4k offset from memory start */
|
||||
unsigned int extra_size = 0x8000; /* TEXT_OFFSET */
|
||||
const struct zimage_tag *tag;
|
||||
+ size_t kernel_buf_size;
|
||||
size_t kernel_mem_size;
|
||||
const char *command_line;
|
||||
char *modified_cmdline = NULL;
|
||||
@@ -538,6 +539,15 @@ int zImage_arm_load(int argc, char **arg
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Save the length of the compressed kernel image w/o the appended DTB.
|
||||
+ * This will be required later on when the kernel image contained
|
||||
+ * in the zImage will be loaded into a kernel memory segment.
|
||||
+ * And we want to load ONLY the compressed kernel image from the zImage
|
||||
+ * and discard the appended DTB.
|
||||
+ */
|
||||
+ kernel_buf_size = len;
|
||||
+
|
||||
+ /*
|
||||
* Always extend the zImage by four bytes to ensure that an appended
|
||||
* DTB image always sees an initialised value after _edata.
|
||||
*/
|
||||
@@ -759,7 +769,7 @@ int zImage_arm_load(int argc, char **arg
|
||||
add_segment(info, dtb_buf, dtb_length, dtb_offset, dtb_length);
|
||||
}
|
||||
|
||||
- add_segment(info, buf, len, kernel_base, kernel_mem_size);
|
||||
+ add_segment(info, buf, kernel_buf_size, kernel_base, kernel_mem_size);
|
||||
|
||||
info->entry = (void*)kernel_base;
|
||||
|
||||
@ -13,6 +13,7 @@ touch /etc/config/ubootenv
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
buffalo,ls220de|\
|
||||
buffalo,ls421de)
|
||||
ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x10000"
|
||||
;;
|
||||
|
||||
@ -68,3 +68,13 @@ define Package/mt7922bt-firmware/install
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
$(eval $(call BuildPackage,mt7922bt-firmware))
|
||||
|
||||
Package/mt7986-wo-firmware = $(call Package/firmware-default,MT7986 offload firmware)
|
||||
define Package/mt7986-wo-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
|
||||
$(INSTALL_DATA) \
|
||||
$(PKG_BUILD_DIR)/mediatek/mt7986_wo_0.bin \
|
||||
$(PKG_BUILD_DIR)/mediatek/mt7986_wo_1.bin \
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
$(eval $(call BuildPackage,mt7986-wo-firmware))
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=hwmon-gsc
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/hwmon-gsc
|
||||
SUBMENU:=Hardware Monitoring Support
|
||||
DEPENDS:=@TARGET_imx +kmod-hwmon-core +kmod-i2c-core
|
||||
TITLE:=Driver for the Gateworks System Controller
|
||||
AUTOLOAD:=$(call AutoLoad,60,gsc)
|
||||
FILES:=$(PKG_BUILD_DIR)/gsc.ko
|
||||
endef
|
||||
|
||||
define KernelPackage/hwmon-gsc/description
|
||||
Kernel module for the Gateworks System Controller chips.
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(KERNEL_MAKE) \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
EXTRA_CFLAGS="$(BUILDFLAGS)" \
|
||||
modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,hwmon-gsc))
|
||||
@ -1 +0,0 @@
|
||||
obj-m := gsc.o
|
||||
@ -1,308 +0,0 @@
|
||||
/*
|
||||
* A hwmon driver for the Gateworks System Controller
|
||||
* Copyright (C) 2009 Gateworks Corporation
|
||||
*
|
||||
* Author: Chris Lang <clang@gateworks.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License,
|
||||
* as published by the Free Software Foundation - version 2.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define DRV_VERSION "0.2"
|
||||
|
||||
enum chips { gsp };
|
||||
|
||||
/* AD7418 registers */
|
||||
#define GSP_REG_TEMP_IN 0x00
|
||||
#define GSP_REG_VIN 0x02
|
||||
#define GSP_REG_3P3 0x05
|
||||
#define GSP_REG_BAT 0x08
|
||||
#define GSP_REG_5P0 0x0b
|
||||
#define GSP_REG_CORE 0x0e
|
||||
#define GSP_REG_CPU1 0x11
|
||||
#define GSP_REG_CPU2 0x14
|
||||
#define GSP_REG_DRAM 0x17
|
||||
#define GSP_REG_EXT_BAT 0x1a
|
||||
#define GSP_REG_IO1 0x1d
|
||||
#define GSP_REG_IO2 0x20
|
||||
#define GSP_REG_PCIE 0x23
|
||||
#define GSP_REG_CURRENT 0x26
|
||||
#define GSP_FAN_0 0x2C
|
||||
#define GSP_FAN_1 0x2E
|
||||
#define GSP_FAN_2 0x30
|
||||
#define GSP_FAN_3 0x32
|
||||
#define GSP_FAN_4 0x34
|
||||
#define GSP_FAN_5 0x36
|
||||
|
||||
struct gsp_sensor_info {
|
||||
const char* name;
|
||||
int reg;
|
||||
};
|
||||
|
||||
static const struct gsp_sensor_info gsp_sensors[] = {
|
||||
{"temp", GSP_REG_TEMP_IN},
|
||||
{"vin", GSP_REG_VIN},
|
||||
{"3p3", GSP_REG_3P3},
|
||||
{"bat", GSP_REG_BAT},
|
||||
{"5p0", GSP_REG_5P0},
|
||||
{"core", GSP_REG_CORE},
|
||||
{"cpu1", GSP_REG_CPU1},
|
||||
{"cpu2", GSP_REG_CPU2},
|
||||
{"dram", GSP_REG_DRAM},
|
||||
{"ext_bat", GSP_REG_EXT_BAT},
|
||||
{"io1", GSP_REG_IO1},
|
||||
{"io2", GSP_REG_IO2},
|
||||
{"pci2", GSP_REG_PCIE},
|
||||
{"current", GSP_REG_CURRENT},
|
||||
{"fan_point0", GSP_FAN_0},
|
||||
{"fan_point1", GSP_FAN_1},
|
||||
{"fan_point2", GSP_FAN_2},
|
||||
{"fan_point3", GSP_FAN_3},
|
||||
{"fan_point4", GSP_FAN_4},
|
||||
{"fan_point5", GSP_FAN_5},
|
||||
};
|
||||
|
||||
struct gsp_data {
|
||||
struct device *hwmon_dev;
|
||||
struct attribute_group attrs;
|
||||
enum chips type;
|
||||
};
|
||||
|
||||
static int gsp_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id);
|
||||
static int gsp_remove(struct i2c_client *client);
|
||||
|
||||
static const struct i2c_device_id gsp_id[] = {
|
||||
{ "gsp", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, gsp_id);
|
||||
|
||||
static struct i2c_driver gsp_driver = {
|
||||
.driver = {
|
||||
.name = "gsp",
|
||||
},
|
||||
.probe = gsp_probe,
|
||||
.remove = gsp_remove,
|
||||
.id_table = gsp_id,
|
||||
};
|
||||
|
||||
/* All registers are word-sized, except for the configuration registers.
|
||||
* AD7418 uses a high-byte first convention. Do NOT use those functions to
|
||||
* access the configuration registers CONF and CONF2, as they are byte-sized.
|
||||
*/
|
||||
static inline int gsp_read(struct i2c_client *client, u8 reg)
|
||||
{
|
||||
unsigned int adc = 0;
|
||||
if (reg == GSP_REG_TEMP_IN || reg > GSP_REG_CURRENT)
|
||||
{
|
||||
adc |= i2c_smbus_read_byte_data(client, reg);
|
||||
adc |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
|
||||
return adc;
|
||||
}
|
||||
else
|
||||
{
|
||||
adc |= i2c_smbus_read_byte_data(client, reg);
|
||||
adc |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
|
||||
adc |= i2c_smbus_read_byte_data(client, reg + 2) << 16;
|
||||
return adc;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int gsp_write(struct i2c_client *client, u8 reg, u16 value)
|
||||
{
|
||||
i2c_smbus_write_byte_data(client, reg, value & 0xff);
|
||||
i2c_smbus_write_byte_data(client, reg + 1, ((value >> 8) & 0xff));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static ssize_t show_adc(struct device *dev, struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
return sprintf(buf, "%d\n", gsp_read(client, gsp_sensors[attr->index].reg));
|
||||
}
|
||||
|
||||
static ssize_t show_label(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
{
|
||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
|
||||
return sprintf(buf, "%s\n", gsp_sensors[attr->index].name);
|
||||
}
|
||||
|
||||
static ssize_t store_fan(struct device *dev,
|
||||
struct device_attribute *devattr, const char *buf, size_t count)
|
||||
{
|
||||
u16 val;
|
||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
val = simple_strtoul(buf, NULL, 10);
|
||||
gsp_write(client, gsp_sensors[attr->index].reg, val);
|
||||
return count;
|
||||
}
|
||||
|
||||
static SENSOR_DEVICE_ATTR(temp0_input, S_IRUGO, show_adc, NULL, 0);
|
||||
static SENSOR_DEVICE_ATTR(temp0_label, S_IRUGO, show_label, NULL, 0);
|
||||
|
||||
static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, show_adc, NULL, 1);
|
||||
static SENSOR_DEVICE_ATTR(in0_label, S_IRUGO, show_label, NULL, 1);
|
||||
static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_adc, NULL, 2);
|
||||
static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_label, NULL, 2);
|
||||
static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_adc, NULL, 3);
|
||||
static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_label, NULL, 3);
|
||||
static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_adc, NULL, 4);
|
||||
static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_label, NULL, 4);
|
||||
static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_adc, NULL, 5);
|
||||
static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_label, NULL, 5);
|
||||
static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_adc, NULL, 6);
|
||||
static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_label, NULL, 6);
|
||||
static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_adc, NULL, 7);
|
||||
static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_label, NULL, 7);
|
||||
static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_adc, NULL, 8);
|
||||
static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_label, NULL, 8);
|
||||
static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_adc, NULL, 9);
|
||||
static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_label, NULL, 9);
|
||||
static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_adc, NULL, 10);
|
||||
static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 10);
|
||||
static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_adc, NULL, 11);
|
||||
static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_label, NULL, 11);
|
||||
static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_adc, NULL, 12);
|
||||
static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_label, NULL, 12);
|
||||
static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_adc, NULL, 13);
|
||||
static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_label, NULL, 13);
|
||||
|
||||
static SENSOR_DEVICE_ATTR(fan0_point0, S_IRUGO | S_IWUSR, show_adc, store_fan, 14);
|
||||
static SENSOR_DEVICE_ATTR(fan0_point1, S_IRUGO | S_IWUSR, show_adc, store_fan, 15);
|
||||
static SENSOR_DEVICE_ATTR(fan0_point2, S_IRUGO | S_IWUSR, show_adc, store_fan, 16);
|
||||
static SENSOR_DEVICE_ATTR(fan0_point3, S_IRUGO | S_IWUSR, show_adc, store_fan, 17);
|
||||
static SENSOR_DEVICE_ATTR(fan0_point4, S_IRUGO | S_IWUSR, show_adc, store_fan, 18);
|
||||
static SENSOR_DEVICE_ATTR(fan0_point5, S_IRUGO | S_IWUSR, show_adc, store_fan, 19);
|
||||
|
||||
static struct attribute *gsp_attributes[] = {
|
||||
&sensor_dev_attr_temp0_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in0_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in1_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in2_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in3_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in4_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in5_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in6_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in7_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in8_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in9_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in10_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in11_input.dev_attr.attr,
|
||||
&sensor_dev_attr_in12_input.dev_attr.attr,
|
||||
|
||||
&sensor_dev_attr_temp0_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in0_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in1_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in2_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in3_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in4_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in5_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in6_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in7_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in8_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in9_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in10_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in11_label.dev_attr.attr,
|
||||
&sensor_dev_attr_in12_label.dev_attr.attr,
|
||||
|
||||
&sensor_dev_attr_fan0_point0.dev_attr.attr,
|
||||
&sensor_dev_attr_fan0_point1.dev_attr.attr,
|
||||
&sensor_dev_attr_fan0_point2.dev_attr.attr,
|
||||
&sensor_dev_attr_fan0_point3.dev_attr.attr,
|
||||
&sensor_dev_attr_fan0_point4.dev_attr.attr,
|
||||
&sensor_dev_attr_fan0_point5.dev_attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
static int gsp_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
struct gsp_data *data;
|
||||
int err;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
|
||||
I2C_FUNC_SMBUS_WORD_DATA)) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!(data = kzalloc(sizeof(struct gsp_data), GFP_KERNEL))) {
|
||||
err = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
i2c_set_clientdata(client, data);
|
||||
|
||||
data->type = id->driver_data;
|
||||
|
||||
switch (data->type) {
|
||||
case 0:
|
||||
data->attrs.attrs = gsp_attributes;
|
||||
break;
|
||||
}
|
||||
|
||||
dev_info(&client->dev, "%s chip found\n", client->name);
|
||||
|
||||
/* Register sysfs hooks */
|
||||
if ((err = sysfs_create_group(&client->dev.kobj, &data->attrs)))
|
||||
goto exit_free;
|
||||
|
||||
data->hwmon_dev = hwmon_device_register(&client->dev);
|
||||
if (IS_ERR(data->hwmon_dev)) {
|
||||
err = PTR_ERR(data->hwmon_dev);
|
||||
goto exit_remove;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
exit_remove:
|
||||
sysfs_remove_group(&client->dev.kobj, &data->attrs);
|
||||
exit_free:
|
||||
kfree(data);
|
||||
exit:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int gsp_remove(struct i2c_client *client)
|
||||
{
|
||||
struct gsp_data *data = i2c_get_clientdata(client);
|
||||
hwmon_device_unregister(data->hwmon_dev);
|
||||
sysfs_remove_group(&client->dev.kobj, &data->attrs);
|
||||
kfree(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init gsp_init(void)
|
||||
{
|
||||
return i2c_add_driver(&gsp_driver);
|
||||
}
|
||||
|
||||
static void __exit gsp_exit(void)
|
||||
{
|
||||
i2c_del_driver(&gsp_driver);
|
||||
}
|
||||
|
||||
module_init(gsp_init);
|
||||
module_exit(gsp_exit);
|
||||
|
||||
MODULE_AUTHOR("Chris Lang <clang@gateworks.com>");
|
||||
MODULE_DESCRIPTION("GSC HWMON driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
@ -108,6 +108,25 @@ endef
|
||||
$(eval $(call KernelPackage,hwmon-drivetemp))
|
||||
|
||||
|
||||
define KernelPackage/hwmon-gsc
|
||||
TITLE:=Gateworks System Controller support
|
||||
KCONFIG:=CONFIG_MFD_GATEWORKS_GSC \
|
||||
CONFIG_SENSORS_GSC
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/mfd/gateworks-gsc.ko \
|
||||
$(LINUX_DIR)/drivers/hwmon/gsc-hwmon.ko
|
||||
AUTOLOAD:=$(call AutoLoad,20,gsc-hwmon,1)
|
||||
$(call AddDepends/hwmon,+kmod-i2c-core)
|
||||
endef
|
||||
|
||||
define KernelPackage/hwmon-gsc/description
|
||||
Kernel module for Gateworks System Controller with temperature sensor,
|
||||
ADCs, and FAN controller
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,hwmon-gsc))
|
||||
|
||||
|
||||
define KernelPackage/hwmon-gpiofan
|
||||
TITLE:=Generic GPIO FAN support
|
||||
KCONFIG:=CONFIG_SENSORS_GPIO_FAN
|
||||
|
||||
@ -115,6 +115,23 @@ endef
|
||||
$(eval $(call KernelPackage,ledtrig-pattern))
|
||||
|
||||
|
||||
define KernelPackage/ledtrig-tty
|
||||
SUBMENU:=$(LEDS_MENU)
|
||||
TITLE:=LED Trigger for TTY devices
|
||||
DEPENDS:=@LINUX_5_15
|
||||
KCONFIG:=CONFIG_LEDS_TRIGGER_TTY
|
||||
FILES:=$(LED_TRIGGER_DIR)/ledtrig-tty.ko
|
||||
AUTOLOAD:=$(call AutoLoad,50,ledtrig-tty)
|
||||
endef
|
||||
|
||||
define KernelPackage/ledtrig-tty/description
|
||||
This allows LEDs to be controlled by activity on ttys which includes
|
||||
serial devices like '/dev/ttyS0'.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,ledtrig-tty))
|
||||
|
||||
|
||||
define KernelPackage/leds-apu
|
||||
SUBMENU:=$(LEDS_MENU)
|
||||
TITLE:=PC Engines APU1 LED support
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -3,40 +3,92 @@ Date: Thu, 16 Feb 2023 11:07:30 +0100
|
||||
Subject: [PATCH] wifi: mac80211: use mesh header cache to speed up mesh
|
||||
forwarding
|
||||
|
||||
Use it to look up the next hop address + sta pointer + key and call
|
||||
__ieee80211_mesh_xmit_fast to queue the tx frame.
|
||||
|
||||
Significantly reduces mesh forwarding path CPU usage and enables the
|
||||
use of iTXQ.
|
||||
direct use of iTXQ.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -2731,6 +2731,7 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
struct ieee80211_hdr hdr = {
|
||||
.frame_control = cpu_to_le16(fc)
|
||||
};
|
||||
+ struct mhdr_cache_entry *entry = NULL;
|
||||
struct ieee80211_hdr *fwd_hdr;
|
||||
struct ieee80211s_hdr *mesh_hdr;
|
||||
struct ieee80211_tx_info *info;
|
||||
@@ -2788,7 +2789,12 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
return RX_DROP_MONITOR;
|
||||
@@ -2720,6 +2720,65 @@ ieee80211_deliver_skb(struct ieee80211_r
|
||||
}
|
||||
}
|
||||
|
||||
- if (mesh_hdr->flags & MESH_FLAGS_AE) {
|
||||
+ if ((mesh_hdr->flags & MESH_FLAGS_AE) == MESH_FLAGS_AE_A5_A6)
|
||||
+ entry = mesh_get_cached_hdr(sdata, mesh_hdr->eaddr1);
|
||||
+ else if (!(mesh_hdr->flags & MESH_FLAGS_AE))
|
||||
+ entry = mesh_get_cached_hdr(sdata, eth->h_dest);
|
||||
+#ifdef CPTCFG_MAC80211_MESH
|
||||
+static bool
|
||||
+ieee80211_rx_mesh_fast_forward(struct ieee80211_sub_if_data *sdata,
|
||||
+ struct sk_buff *skb, int hdrlen)
|
||||
+{
|
||||
+ struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
|
||||
+ struct ieee80211_mesh_fast_tx *entry = NULL;
|
||||
+ struct ieee80211s_hdr *mesh_hdr;
|
||||
+ struct tid_ampdu_tx *tid_tx;
|
||||
+ struct sta_info *sta;
|
||||
+ struct ethhdr eth;
|
||||
+ u8 tid;
|
||||
+
|
||||
+ if (!entry && (mesh_hdr->flags & MESH_FLAGS_AE)) {
|
||||
struct mesh_path *mppath;
|
||||
char *proxied_addr;
|
||||
bool update = false;
|
||||
@@ -2862,11 +2868,23 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
+ mesh_hdr = (struct ieee80211s_hdr *)(skb->data + sizeof(eth));
|
||||
+ if ((mesh_hdr->flags & MESH_FLAGS_AE) == MESH_FLAGS_AE_A5_A6)
|
||||
+ entry = mesh_fast_tx_get(sdata, mesh_hdr->eaddr1);
|
||||
+ else if (!(mesh_hdr->flags & MESH_FLAGS_AE))
|
||||
+ entry = mesh_fast_tx_get(sdata, skb->data);
|
||||
+ if (!entry)
|
||||
+ return false;
|
||||
+
|
||||
+ sta = rcu_dereference(entry->mpath->next_hop);
|
||||
+ if (!sta)
|
||||
+ return false;
|
||||
+
|
||||
+ if (skb_linearize(skb))
|
||||
+ return false;
|
||||
+
|
||||
+ tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||
+ tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
|
||||
+ if (tid_tx) {
|
||||
+ if (!test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state))
|
||||
+ return false;
|
||||
+
|
||||
+ if (tid_tx->timeout)
|
||||
+ tid_tx->last_tx = jiffies;
|
||||
+ }
|
||||
+
|
||||
+ ieee80211_aggr_check(sdata, sta, skb);
|
||||
+
|
||||
+ if (ieee80211_get_8023_tunnel_proto(skb->data + hdrlen,
|
||||
+ &skb->protocol))
|
||||
+ hdrlen += ETH_ALEN;
|
||||
+ else
|
||||
+ skb->protocol = htons(skb->len - hdrlen);
|
||||
+ skb_set_network_header(skb, hdrlen + 2);
|
||||
+
|
||||
+ skb->dev = sdata->dev;
|
||||
+ memcpy(ð, skb->data, ETH_HLEN - 2);
|
||||
+ skb_pull(skb, sizeof(eth));
|
||||
+ __ieee80211_xmit_fast(sdata, sta, &entry->fast_tx, skb, tid_tx,
|
||||
+ eth.h_dest, eth.h_source);
|
||||
+ IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast);
|
||||
+ IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static ieee80211_rx_result
|
||||
ieee80211_rx_mesh_data(struct ieee80211_sub_if_data *sdata, struct sta_info *sta,
|
||||
struct sk_buff *skb)
|
||||
@@ -2824,6 +2883,10 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
|
||||
skb_set_queue_mapping(skb, ieee802_1d_to_ac[skb->priority]);
|
||||
|
||||
+ if (!multicast &&
|
||||
+ ieee80211_rx_mesh_fast_forward(sdata, skb, mesh_hdrlen))
|
||||
+ return RX_QUEUED;
|
||||
+
|
||||
ieee80211_fill_mesh_addresses(&hdr, &hdr.frame_control,
|
||||
eth->h_dest, eth->h_source);
|
||||
hdrlen = ieee80211_hdrlen(hdr.frame_control);
|
||||
@@ -2862,6 +2925,7 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
||||
info->control.vif = &sdata->vif;
|
||||
info->control.jiffies = jiffies;
|
||||
@ -44,23 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (multicast) {
|
||||
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast);
|
||||
memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
|
||||
/* update power mode indication when forwarding */
|
||||
ieee80211_mps_set_frame_flags(sdata, NULL, fwd_hdr);
|
||||
+ } else if (entry) {
|
||||
+ struct ieee80211_hdr *ehdr = (struct ieee80211_hdr *)entry->hdr;
|
||||
+
|
||||
+ ether_addr_copy(fwd_hdr->addr1, ehdr->addr1);
|
||||
+ ether_addr_copy(fwd_hdr->addr2, sdata->vif.addr);
|
||||
+ IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast);
|
||||
+ IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
|
||||
+ qos[0] = fwd_skb->priority;
|
||||
+ qos[1] = ieee80211_get_qos_ctl(ehdr)[1];
|
||||
+ __ieee80211_mesh_xmit_fast(sdata, entry, fwd_skb);
|
||||
+ return RX_QUEUED;
|
||||
} else if (!mesh_nexthop_lookup(sdata, fwd_skb)) {
|
||||
/* mesh power mode flags updated in mesh_nexthop_lookup */
|
||||
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast);
|
||||
@@ -2883,7 +2901,6 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
@@ -2883,7 +2947,6 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
}
|
||||
|
||||
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
|
||||
@ -68,3 +104,29 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ieee80211_add_pending_skb(local, fwd_skb);
|
||||
|
||||
rx_accept:
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2018,6 +2018,8 @@ void __ieee80211_xmit_fast(struct ieee80
|
||||
struct ieee80211_fast_tx *fast_tx,
|
||||
struct sk_buff *skb, bool ampdu,
|
||||
const u8 *da, const u8 *sa);
|
||||
+void ieee80211_aggr_check(struct ieee80211_sub_if_data *sdata,
|
||||
+ struct sta_info *sta, struct sk_buff *skb);
|
||||
|
||||
/* HT */
|
||||
void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -1191,10 +1191,8 @@ static bool ieee80211_tx_prep_agg(struct
|
||||
return queued;
|
||||
}
|
||||
|
||||
-static void
|
||||
-ieee80211_aggr_check(struct ieee80211_sub_if_data *sdata,
|
||||
- struct sta_info *sta,
|
||||
- struct sk_buff *skb)
|
||||
+void ieee80211_aggr_check(struct ieee80211_sub_if_data *sdata,
|
||||
+ struct sta_info *sta, struct sk_buff *skb)
|
||||
{
|
||||
struct rate_control_ref *ref = sdata->local->rate_ctrl;
|
||||
u16 tid;
|
||||
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -2847,6 +2847,9 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
@@ -2904,6 +2904,9 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
|
||||
if (skb_cow_head(fwd_skb, hdrlen - sizeof(struct ethhdr)))
|
||||
return RX_DROP_UNUSABLE;
|
||||
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
fwd_hdr = skb_push(fwd_skb, hdrlen - sizeof(struct ethhdr));
|
||||
@@ -2861,7 +2864,7 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
@@ -2918,7 +2921,7 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
hdrlen += ETH_ALEN;
|
||||
else
|
||||
fwd_skb->protocol = htons(fwd_skb->len - hdrlen);
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Sun, 26 Feb 2023 20:30:20 +0100
|
||||
Subject: [PATCH] wifi: mac80211: fix mesh path discovery based on unicast
|
||||
packets
|
||||
|
||||
If a packet has reached its intended destination, it was bumped to the code
|
||||
that accepts it, without first checking if a mesh_path needs to be created
|
||||
based on the discovered source.
|
||||
Fix this by moving the destination address check further down
|
||||
|
||||
Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -2824,17 +2824,6 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
mesh_rmc_check(sdata, eth->h_source, mesh_hdr))
|
||||
return RX_DROP_MONITOR;
|
||||
|
||||
- /* Frame has reached destination. Don't forward */
|
||||
- if (ether_addr_equal(sdata->vif.addr, eth->h_dest))
|
||||
- goto rx_accept;
|
||||
-
|
||||
- if (!ifmsh->mshcfg.dot11MeshForwarding) {
|
||||
- if (is_multicast_ether_addr(eth->h_dest))
|
||||
- goto rx_accept;
|
||||
-
|
||||
- return RX_DROP_MONITOR;
|
||||
- }
|
||||
-
|
||||
/* forward packet */
|
||||
if (sdata->crypto_tx_tailroom_needed_cnt)
|
||||
tailroom = IEEE80211_ENCRYPT_TAILROOM;
|
||||
@@ -2881,6 +2870,17 @@ ieee80211_rx_mesh_data(struct ieee80211_
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
+ /* Frame has reached destination. Don't forward */
|
||||
+ if (ether_addr_equal(sdata->vif.addr, eth->h_dest))
|
||||
+ goto rx_accept;
|
||||
+
|
||||
+ if (!ifmsh->mshcfg.dot11MeshForwarding) {
|
||||
+ if (is_multicast_ether_addr(eth->h_dest))
|
||||
+ goto rx_accept;
|
||||
+
|
||||
+ return RX_DROP_MONITOR;
|
||||
+ }
|
||||
+
|
||||
skb_set_queue_mapping(skb, ieee802_1d_to_ac[skb->priority]);
|
||||
|
||||
if (!multicast &&
|
||||
@ -0,0 +1,68 @@
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Wed, 5 Oct 2022 14:54:45 -0700
|
||||
Subject: [PATCH] wifi: mac80211: Add VHT MU-MIMO related flags in
|
||||
ieee80211_bss_conf
|
||||
|
||||
Adding flags for SU Beamformer, SU Beamformee, MU Beamformer and
|
||||
MU Beamformee for VHT. This is utilized to pass MU-MIMO
|
||||
configurations from user space to driver in AP mode.
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1665006886-23874-1-git-send-email-quic_msinada@quicinc.com
|
||||
[fixed indentation, removed redundant !!]
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -653,6 +653,14 @@ struct ieee80211_fils_discovery {
|
||||
* write-protected by sdata_lock and local->mtx so holding either is fine
|
||||
* for read access.
|
||||
* @color_change_color: the bss color that will be used after the change.
|
||||
+ * @vht_su_beamformer: in AP mode, does this BSS support operation as an VHT SU
|
||||
+ * beamformer
|
||||
+ * @vht_su_beamformee: in AP mode, does this BSS support operation as an VHT SU
|
||||
+ * beamformee
|
||||
+ * @vht_mu_beamformer: in AP mode, does this BSS support operation as an VHT MU
|
||||
+ * beamformer
|
||||
+ * @vht_mu_beamformee: in AP mode, does this BSS support operation as an VHT MU
|
||||
+ * beamformee
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
@@ -726,6 +734,11 @@ struct ieee80211_bss_conf {
|
||||
|
||||
bool color_change_active;
|
||||
u8 color_change_color;
|
||||
+
|
||||
+ bool vht_su_beamformer;
|
||||
+ bool vht_su_beamformee;
|
||||
+ bool vht_mu_beamformer;
|
||||
+ bool vht_mu_beamformee;
|
||||
};
|
||||
|
||||
/**
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1251,6 +1251,21 @@ static int ieee80211_start_ap(struct wip
|
||||
prev_beacon_int = link_conf->beacon_int;
|
||||
link_conf->beacon_int = params->beacon_interval;
|
||||
|
||||
+ if (params->vht_cap) {
|
||||
+ link_conf->vht_su_beamformer =
|
||||
+ params->vht_cap->vht_cap_info &
|
||||
+ cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
|
||||
+ link_conf->vht_su_beamformee =
|
||||
+ params->vht_cap->vht_cap_info &
|
||||
+ cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE);
|
||||
+ link_conf->vht_mu_beamformer =
|
||||
+ params->vht_cap->vht_cap_info &
|
||||
+ cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
|
||||
+ link_conf->vht_mu_beamformee =
|
||||
+ params->vht_cap->vht_cap_info &
|
||||
+ cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
|
||||
+ }
|
||||
+
|
||||
if (params->he_cap && params->he_oper) {
|
||||
link_conf->he_support = true;
|
||||
link_conf->htc_trig_based_pkt_ext =
|
||||
@ -0,0 +1,68 @@
|
||||
From: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Date: Wed, 5 Oct 2022 14:54:46 -0700
|
||||
Subject: [PATCH] wifi: mac80211: Add HE MU-MIMO related flags in
|
||||
ieee80211_bss_conf
|
||||
|
||||
Adding flags for SU Beamformer, SU Beamformee, MU Beamformer and Full
|
||||
Bandwidth UL MU-MIMO for HE. This is utilized to pass MU-MIMO
|
||||
configurations from user space to driver in AP mode.
|
||||
|
||||
Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/1665006886-23874-2-git-send-email-quic_msinada@quicinc.com
|
||||
[fixed indentation, removed redundant !!]
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -661,6 +661,15 @@ struct ieee80211_fils_discovery {
|
||||
* beamformer
|
||||
* @vht_mu_beamformee: in AP mode, does this BSS support operation as an VHT MU
|
||||
* beamformee
|
||||
+ * @he_su_beamformer: in AP-mode, does this BSS support operation as an HE SU
|
||||
+ * beamformer
|
||||
+ * @he_su_beamformee: in AP-mode, does this BSS support operation as an HE SU
|
||||
+ * beamformee
|
||||
+ * @he_mu_beamformer: in AP-mode, does this BSS support operation as an HE MU
|
||||
+ * beamformer
|
||||
+ * @he_full_ul_mumimo: does this BSS support the reception (AP) or transmission
|
||||
+ * (non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU
|
||||
+ * bandwidth
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
@@ -739,6 +748,10 @@ struct ieee80211_bss_conf {
|
||||
bool vht_su_beamformee;
|
||||
bool vht_mu_beamformer;
|
||||
bool vht_mu_beamformee;
|
||||
+ bool he_su_beamformer;
|
||||
+ bool he_su_beamformee;
|
||||
+ bool he_mu_beamformer;
|
||||
+ bool he_full_ul_mumimo;
|
||||
};
|
||||
|
||||
/**
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1280,6 +1280,21 @@ static int ieee80211_start_ap(struct wip
|
||||
changed |= BSS_CHANGED_HE_BSS_COLOR;
|
||||
}
|
||||
|
||||
+ if (params->he_cap) {
|
||||
+ link_conf->he_su_beamformer =
|
||||
+ params->he_cap->phy_cap_info[3] &
|
||||
+ IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
|
||||
+ link_conf->he_su_beamformee =
|
||||
+ params->he_cap->phy_cap_info[4] &
|
||||
+ IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE;
|
||||
+ link_conf->he_mu_beamformer =
|
||||
+ params->he_cap->phy_cap_info[4] &
|
||||
+ IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
|
||||
+ link_conf->he_full_ul_mumimo =
|
||||
+ params->he_cap->phy_cap_info[2] &
|
||||
+ IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO;
|
||||
+ }
|
||||
+
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP &&
|
||||
params->mbssid_config.tx_wdev) {
|
||||
err = ieee80211_set_ap_mbssid_options(sdata,
|
||||
@ -0,0 +1,60 @@
|
||||
From: Ryder Lee <ryder.lee@mediatek.com>
|
||||
Date: Sat, 18 Feb 2023 01:50:05 +0800
|
||||
Subject: [PATCH] wifi: mac80211: introduce
|
||||
ieee80211_refresh_tx_agg_session_timer()
|
||||
|
||||
This allows low level drivers to refresh the tx agg session timer, based on
|
||||
querying stats from the firmware usually. Especially for some mt76 devices
|
||||
support .net_fill_forward_path would bypass mac80211, which leads to tx BA
|
||||
session timeout for certain clients.
|
||||
|
||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||
---
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5970,6 +5970,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
unsigned long delay);
|
||||
|
||||
/**
|
||||
+ * ieee80211_refresh_tx_agg_session_timer - Refresh a tx agg session timer.
|
||||
+ * @sta: the station for which to start a BA session
|
||||
+ * @tid: the TID to BA on.
|
||||
+ *
|
||||
+ * This function allows low level driver to refresh tx agg session timer
|
||||
+ * to maintain BA session, the session level will still be managed by the
|
||||
+ * mac80211.
|
||||
+ */
|
||||
+void ieee80211_refresh_tx_agg_session_timer(struct ieee80211_sta *sta,
|
||||
+ u16 tid);
|
||||
+
|
||||
+/**
|
||||
* ieee80211_start_tx_ba_session - Start a tx Block Ack session.
|
||||
* @sta: the station for which to start a BA session
|
||||
* @tid: the TID to BA on.
|
||||
--- a/net/mac80211/agg-tx.c
|
||||
+++ b/net/mac80211/agg-tx.c
|
||||
@@ -552,6 +552,23 @@ void ieee80211_tx_ba_session_handle_star
|
||||
ieee80211_send_addba_with_timeout(sta, tid_tx);
|
||||
}
|
||||
|
||||
+void ieee80211_refresh_tx_agg_session_timer(struct ieee80211_sta *pubsta,
|
||||
+ u16 tid)
|
||||
+{
|
||||
+ struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
|
||||
+ struct tid_ampdu_tx *tid_tx;
|
||||
+
|
||||
+ if (WARN_ON_ONCE(tid >= IEEE80211_NUM_TIDS))
|
||||
+ return;
|
||||
+
|
||||
+ tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
|
||||
+ if (!tid_tx)
|
||||
+ return;
|
||||
+
|
||||
+ tid_tx->last_tx = jiffies;
|
||||
+}
|
||||
+EXPORT_SYMBOL(ieee80211_refresh_tx_agg_session_timer);
|
||||
+
|
||||
/*
|
||||
* After accepting the AddBA Response we activated a timer,
|
||||
* resetting it after each frame that we send.
|
||||
@ -0,0 +1,77 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 2 Mar 2023 13:52:29 +0100
|
||||
Subject: [PATCH] wifi: mac80211: add mesh fast-rx support
|
||||
|
||||
This helps bring down rx CPU usage by avoiding calls to the rx handlers in
|
||||
the slow path. Supports forwarding and local rx, including A-MSDU.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -4572,6 +4572,12 @@ void ieee80211_check_fast_rx(struct sta_
|
||||
}
|
||||
|
||||
break;
|
||||
+ case NL80211_IFTYPE_MESH_POINT:
|
||||
+ fastrx.expected_ds_bits = cpu_to_le16(IEEE80211_FCTL_FROMDS |
|
||||
+ IEEE80211_FCTL_TODS);
|
||||
+ fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
|
||||
+ fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
|
||||
+ break;
|
||||
default:
|
||||
goto clear;
|
||||
}
|
||||
@@ -4780,6 +4786,7 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
struct sk_buff *skb = rx->skb;
|
||||
struct ieee80211_hdr *hdr = (void *)skb->data;
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
+ static ieee80211_rx_result res;
|
||||
int orig_len = skb->len;
|
||||
int hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||
int snap_offs = hdrlen;
|
||||
@@ -4841,7 +4848,8 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
snap_offs += IEEE80211_CCMP_HDR_LEN;
|
||||
}
|
||||
|
||||
- if (!(status->rx_flags & IEEE80211_RX_AMSDU)) {
|
||||
+ if (!ieee80211_vif_is_mesh(&rx->sdata->vif) &&
|
||||
+ !(status->rx_flags & IEEE80211_RX_AMSDU)) {
|
||||
if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
|
||||
return false;
|
||||
|
||||
@@ -4880,13 +4888,29 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
/* do the header conversion - first grab the addresses */
|
||||
ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
|
||||
ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
|
||||
- skb_postpull_rcsum(skb, skb->data + snap_offs,
|
||||
- sizeof(rfc1042_header) + 2);
|
||||
- /* remove the SNAP but leave the ethertype */
|
||||
- skb_pull(skb, snap_offs + sizeof(rfc1042_header));
|
||||
+ if (ieee80211_vif_is_mesh(&rx->sdata->vif)) {
|
||||
+ skb_pull(skb, snap_offs - 2);
|
||||
+ put_unaligned_be16(skb->len - 2, skb->data);
|
||||
+ } else {
|
||||
+ skb_postpull_rcsum(skb, skb->data + snap_offs,
|
||||
+ sizeof(rfc1042_header) + 2);
|
||||
+
|
||||
+ /* remove the SNAP but leave the ethertype */
|
||||
+ skb_pull(skb, snap_offs + sizeof(rfc1042_header));
|
||||
+ }
|
||||
/* push the addresses in front */
|
||||
memcpy(skb_push(skb, sizeof(addrs)), &addrs, sizeof(addrs));
|
||||
|
||||
+ res = ieee80211_rx_mesh_data(rx->sdata, rx->sta, rx->skb);
|
||||
+ switch (res) {
|
||||
+ case RX_QUEUED:
|
||||
+ return true;
|
||||
+ case RX_CONTINUE:
|
||||
+ break;
|
||||
+ default:
|
||||
+ goto drop;
|
||||
+ }
|
||||
+
|
||||
ieee80211_rx_8023(rx, fast_rx, orig_len);
|
||||
|
||||
return true;
|
||||
@ -87,7 +87,7 @@
|
||||
CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump)
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1536,6 +1536,7 @@ struct ieee80211_local {
|
||||
@@ -1535,6 +1535,7 @@ struct ieee80211_local {
|
||||
int dynamic_ps_forced_timeout;
|
||||
|
||||
int user_power_level; /* in dBm, for all interfaces */
|
||||
|
||||
@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2023-02-02
|
||||
PKG_SOURCE_VERSION:=b2360d59747c6fed2b65bc1c3563c10593c83f3e
|
||||
PKG_MIRROR_HASH:=f85f00fa8f549de348a115f92c4f0235e413ed924669aece390c7570882526dd
|
||||
PKG_SOURCE_DATE:=2023-03-01
|
||||
PKG_SOURCE_VERSION:=c32d6d849c43792abd8007e13e468b12d6d6e0b7
|
||||
PKG_MIRROR_HASH:=b7004bc920ba44cef2f7868d94beb2d288ff9d399af624ce5dad972f953723c8
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_USE_NINJA:=0
|
||||
|
||||
@ -12,9 +12,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/fstools.git
|
||||
PKG_MIRROR_HASH:=dbb3d721eb606606c2fc0875067449e5c882d22affaa8dc70367daff7c198152
|
||||
PKG_SOURCE_DATE:=2023-02-15
|
||||
PKG_SOURCE_VERSION:=12155d3881b9bdd44b8682970638dbfd9f55e2cb
|
||||
PKG_MIRROR_HASH:=4ec370a1cdc9fa69131f1403b064d2e05d54ee865411917410d7540454265319
|
||||
PKG_SOURCE_DATE:=2023-02-28
|
||||
PKG_SOURCE_VERSION:=bfe882d5ff4eeebb8f57c8a0f9b9e767a57870d8
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
@ -160,7 +160,6 @@
|
||||
|
||||
phy0: port8@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
ethernet = <ð0>;
|
||||
|
||||
fixed-link {
|
||||
|
||||
@ -99,7 +99,6 @@
|
||||
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
label = "cpu";
|
||||
ethernet = <ð0>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344.dtsi"
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
@ -55,9 +53,3 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344_mikrotik_routerboard.dtsi"
|
||||
#include "ar9344_mikrotik_routerboard-16m-nor.dtsi"
|
||||
|
||||
/ {
|
||||
model = "MikroTik RouterBOARD 911-2Hn/5Hn (Lite2/Lite5)";
|
||||
compatible = "mikrotik,routerboard-911-lite", "qca,ar9344";
|
||||
};
|
||||
|
||||
&leds {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&enable_gpio_20>;
|
||||
|
||||
lan {
|
||||
label = "green:lan";
|
||||
gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
power {
|
||||
label = "green:power";
|
||||
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "green:user";
|
||||
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&pinmux {
|
||||
enable_gpio_20: pinmux_gpio_out_function5 {
|
||||
pinctrl-single,bits = <0x14 0x0 0xff>;
|
||||
};
|
||||
};
|
||||
@ -1,91 +1,27 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344_mikrotik_routerboard.dtsi"
|
||||
#include "ar9344_mikrotik_routerboard-16m-nor.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
compatible = "mikrotik,routerboard-lhg-5nd", "qca,ar9344";
|
||||
model = "MikroTik RouterBOARD LHG 5nD";
|
||||
|
||||
aliases {
|
||||
led-boot = &led_user;
|
||||
led-failsafe = &led_user;
|
||||
led-running = &led_user;
|
||||
led-upgrade = &led_user;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power {
|
||||
label = "blue:power";
|
||||
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
rssilow {
|
||||
label = "green:rssilow";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumlow {
|
||||
label = "green:rssimediumlow";
|
||||
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimedium {
|
||||
label = "green:rssimedium";
|
||||
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumhigh {
|
||||
label = "green:rssimediumhigh";
|
||||
gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssihigh {
|
||||
label = "green:rssihigh";
|
||||
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "white:user";
|
||||
gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
lan {
|
||||
label = "green:lan";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
&leds {
|
||||
power {
|
||||
label = "blue:power";
|
||||
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
phy-handle = <&swphy0>;
|
||||
led_user: user {
|
||||
label = "white:user";
|
||||
gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
gmac-config {
|
||||
device = <&gmac>;
|
||||
switch-phy-swap = <1>;
|
||||
lan {
|
||||
label = "green:lan";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
|
||||
compatible = "syscon", "simple-mfd";
|
||||
};
|
||||
|
||||
@ -1,185 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
compatible = "mikrotik,routerboard-sxt-5n", "qca,ar9344";
|
||||
model = "MikroTik SXT 5N platform";
|
||||
|
||||
aliases {
|
||||
led-boot = &led_user;
|
||||
led-failsafe = &led_user;
|
||||
led-running = &led_user;
|
||||
led-upgrade = &led_user;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power {
|
||||
label = "green:power";
|
||||
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
rssilow {
|
||||
label = "green:rssilow";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumlow {
|
||||
label = "green:rssimediumlow";
|
||||
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimedium {
|
||||
label = "green:rssimedium";
|
||||
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumhigh {
|
||||
label = "green:rssimediumhigh";
|
||||
gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssihigh {
|
||||
label = "green:rssihigh";
|
||||
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "green:user";
|
||||
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
|
||||
gpio_nand_power {
|
||||
gpio-export,name = "sxt5n:power:nand";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
beeper {
|
||||
compatible = "gpio-beeper";
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <40000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "RouterBoot";
|
||||
reg = <0x0 0x20000>;
|
||||
compatible = "mikrotik,routerboot-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "bootloader1";
|
||||
reg = <0x0 0x0>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
hard_config {
|
||||
read-only;
|
||||
};
|
||||
|
||||
bios {
|
||||
size = <0x1000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
soft_config {
|
||||
};
|
||||
|
||||
partition@10000 {
|
||||
label = "bootloader2";
|
||||
reg = <0x10000 0x10000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
status = "okay";
|
||||
|
||||
nand-ecc-mode = "soft";
|
||||
qca,nand-swap-dma;
|
||||
qca,nand-scan-fixup;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "booter";
|
||||
reg = <0x0000000 0x0040000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@40000 {
|
||||
label = "kernel";
|
||||
reg = <0x0040000 0x03c0000>;
|
||||
};
|
||||
|
||||
partition@400000 {
|
||||
label = "ubi";
|
||||
reg = <0x0400000 0x7c00000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-handle = <&swphy0>;
|
||||
|
||||
gmac-config {
|
||||
device = <&gmac>;
|
||||
switch-phy-swap = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
|
||||
compatible = "syscon", "simple-mfd";
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
@ -1,8 +1,114 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344_mikrotik_routerboard-sxt-5n.dtsi"
|
||||
#include "ar9344_mikrotik_routerboard.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "mikrotik,routerboard-sxt-5nd-r2", "qca,ar9344";
|
||||
model = "MikroTik RouterBOARD SXT 5nD r2 (SXT Lite5)";
|
||||
|
||||
gpio-export {
|
||||
compatible = "gpio-export";
|
||||
|
||||
gpio_nand_power {
|
||||
gpio-export,name = "sxt5n:power:nand";
|
||||
gpio-export,output = <0>;
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
beeper {
|
||||
compatible = "gpio-beeper";
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
&leds {
|
||||
power {
|
||||
label = "green:power";
|
||||
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
led_user: user {
|
||||
label = "green:user";
|
||||
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <40000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "RouterBoot";
|
||||
reg = <0x0 0x20000>;
|
||||
compatible = "mikrotik,routerboot-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "bootloader1";
|
||||
reg = <0x0 0x0>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
hard_config {
|
||||
read-only;
|
||||
};
|
||||
|
||||
bios {
|
||||
size = <0x1000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
soft_config {
|
||||
};
|
||||
|
||||
partition@10000 {
|
||||
label = "bootloader2";
|
||||
reg = <0x10000 0x10000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
status = "okay";
|
||||
|
||||
nand-ecc-mode = "soft";
|
||||
qca,nand-swap-dma;
|
||||
qca,nand-scan-fixup;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "booter";
|
||||
reg = <0x0000000 0x0040000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@40000 {
|
||||
label = "kernel";
|
||||
reg = <0x0040000 0x03c0000>;
|
||||
};
|
||||
|
||||
partition@400000 {
|
||||
label = "ubi";
|
||||
reg = <0x0400000 0x7c00000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
78
target/linux/ath79/dts/ar9344_mikrotik_routerboard.dtsi
Normal file
78
target/linux/ath79/dts/ar9344_mikrotik_routerboard.dtsi
Normal file
@ -0,0 +1,78 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "ar9344.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
led-boot = &led_user;
|
||||
led-failsafe = &led_user;
|
||||
led-running = &led_user;
|
||||
led-upgrade = &led_user;
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
leds: leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
rssilow {
|
||||
label = "green:rssilow";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumlow {
|
||||
label = "green:rssimediumlow";
|
||||
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimedium {
|
||||
label = "green:rssimedium";
|
||||
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssimediumhigh {
|
||||
label = "green:rssimediumhigh";
|
||||
gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
rssihigh {
|
||||
label = "green:rssihigh";
|
||||
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-handle = <&swphy0>;
|
||||
|
||||
gmac-config {
|
||||
device = <&gmac>;
|
||||
switch-phy-swap = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
|
||||
compatible = "syscon", "simple-mfd";
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
qca,no-eeprom;
|
||||
};
|
||||
@ -2697,7 +2697,7 @@ define Device/teltonika_rut300
|
||||
DEVICE_VENDOR := Teltonika
|
||||
DEVICE_MODEL := RUT300
|
||||
SUPPORTED_TELTONIKA_DEVICES := teltonika,rut30x
|
||||
DEVICE_PACKAGES := -kmod-ath9k -uboot-envtools -wpad-basic-wolfssl kmod-usb2
|
||||
DEVICE_PACKAGES := -kmod-ath9k -uboot-envtools -wpad-basic-openssl kmod-usb2
|
||||
IMAGE_SIZE := 15552k
|
||||
IMAGES += factory.bin
|
||||
IMAGE/factory.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | \
|
||||
|
||||
@ -9,6 +9,16 @@ define Device/mikrotik_routerboard-493g
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_routerboard-493g
|
||||
|
||||
define Device/mikrotik_routerboard-911-lite
|
||||
$(Device/mikrotik_nor)
|
||||
SOC := ar9344
|
||||
DEVICE_MODEL := RouterBOARD 911 Lite2/Lite5 (2Hn/5Hn)
|
||||
DEVICE_PACKAGES += rssileds
|
||||
IMAGE_SIZE := 16256k
|
||||
SUPPORTED_DEVICES += rb-911-2hn rb-911-5hn
|
||||
endef
|
||||
TARGET_DEVICES += mikrotik_routerboard-911-lite
|
||||
|
||||
define Device/mikrotik_routerboard-912uag-2hpnd
|
||||
$(Device/mikrotik_nand)
|
||||
SOC := ar9342
|
||||
|
||||
@ -6,6 +6,16 @@ board_config_update
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
mikrotik,routerboard-911-lite|\
|
||||
mikrotik,routerboard-lhg-5nd)
|
||||
ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0"
|
||||
ucidef_set_rssimon "wlan0" "200000" "1"
|
||||
ucidef_set_led_rssi "rssilow" "rssilow" "green:rssilow" "wlan0" "1" "100"
|
||||
ucidef_set_led_rssi "rssimediumlow" "rssimediumlow" "green:rssimediumlow" "wlan0" "20" "100"
|
||||
ucidef_set_led_rssi "rssimedium" "rssimedium" "green:rssimedium" "wlan0" "40" "100"
|
||||
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "60" "100"
|
||||
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
||||
;;
|
||||
mikrotik,routerboard-951ui-2nd|\
|
||||
mikrotik,routerboard-952ui-5ac2nd)
|
||||
ucidef_set_led_netdev "port1" "port1" "green:port1" "eth1"
|
||||
@ -19,15 +29,6 @@ mikrotik,routerboard-mapl-2nd|\
|
||||
mikrotik,routerboard-wap-2nd)
|
||||
ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0"
|
||||
;;
|
||||
mikrotik,routerboard-lhg-5nd)
|
||||
ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0"
|
||||
ucidef_set_rssimon "wlan0" "200000" "1"
|
||||
ucidef_set_led_rssi "rssilow" "rssilow" "green:rssilow" "wlan0" "1" "100"
|
||||
ucidef_set_led_rssi "rssimediumlow" "rssimediumlow" "green:rssimediumlow" "wlan0" "20" "100"
|
||||
ucidef_set_led_rssi "rssimedium" "rssimedium" "green:rssimedium" "wlan0" "40" "100"
|
||||
ucidef_set_led_rssi "rssimediumhigh" "rssimediumhigh" "green:rssimediumhigh" "wlan0" "60" "100"
|
||||
ucidef_set_led_rssi "rssihigh" "rssihigh" "green:rssihigh" "wlan0" "80" "100"
|
||||
;;
|
||||
mikrotik,routerboard-map-2nd)
|
||||
ucidef_set_led_netdev "eth_1" "eth_1" "green:eth_1" "eth1"
|
||||
ucidef_set_led_switch "eth_2" "eth_2" "green:eth_2" "switch0" "0x4"
|
||||
|
||||
@ -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-911-lite|\
|
||||
mikrotik,routerboard-912uag-2hpnd|\
|
||||
mikrotik,routerboard-lhg-2nd|\
|
||||
mikrotik,routerboard-lhg-5nd|\
|
||||
@ -52,6 +53,7 @@ ath79_setup_macs()
|
||||
local mac_base="$(cat /sys/firmware/mikrotik/hard_config/mac_base)"
|
||||
|
||||
case "$board" in
|
||||
mikrotik,routerboard-911-lite|\
|
||||
mikrotik,routerboard-912uag-2hpnd|\
|
||||
mikrotik,routerboard-lhg-2nd|\
|
||||
mikrotik,routerboard-lhg-5nd|\
|
||||
|
||||
@ -23,6 +23,7 @@ board=$(board_name)
|
||||
case "$FIRMWARE" in
|
||||
"ath9k-eeprom-ahb-18100000.wmac.bin")
|
||||
case $board in
|
||||
mikrotik,routerboard-911-lite|\
|
||||
mikrotik,routerboard-912uag-2hpnd|\
|
||||
mikrotik,routerboard-lhg-2nd|\
|
||||
mikrotik,routerboard-lhg-5nd|\
|
||||
|
||||
@ -258,7 +258,7 @@ SVN-Revision: 35130
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/ipv6.h>
|
||||
#include <linux/icmpv6.h>
|
||||
@@ -943,10 +944,10 @@ static void tcp_v6_send_response(const s
|
||||
@@ -944,10 +945,10 @@ static void tcp_v6_send_response(const s
|
||||
topt = (__be32 *)(t1 + 1);
|
||||
|
||||
if (tsecr) {
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3554,6 +3554,13 @@ N: bcm113*
|
||||
@@ -3555,6 +3555,13 @@ N: bcm113*
|
||||
N: bcm216*
|
||||
N: kona
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
+...
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3554,6 +3554,13 @@ N: bcm113*
|
||||
@@ -3555,6 +3555,13 @@ N: bcm113*
|
||||
N: bcm216*
|
||||
N: kona
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3562,7 +3562,7 @@ F: Documentation/devicetree/bindings/med
|
||||
@@ -3563,7 +3563,7 @@ F: Documentation/devicetree/bindings/med
|
||||
F: drivers/staging/media/rpivid
|
||||
|
||||
BROADCOM BCM2835 CAMERA DRIVER
|
||||
|
||||
@ -31,7 +31,7 @@ Reported-by: kbuild test robot <lkp@intel.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3566,7 +3566,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
||||
@@ -3567,7 +3567,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/media/platform/bcm2835/
|
||||
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -17529,6 +17529,14 @@ T: git git://linuxtv.org/media_tree.git
|
||||
@@ -17530,6 +17530,14 @@ T: git git://linuxtv.org/media_tree.git
|
||||
F: Documentation/devicetree/bindings/media/i2c/sony,imx412.yaml
|
||||
F: drivers/media/i2c/imx412.c
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3568,6 +3568,15 @@ S: Maintained
|
||||
@@ -3569,6 +3569,15 @@ S: Maintained
|
||||
F: drivers/media/platform/bcm2835/
|
||||
F: Documentation/devicetree/bindings/media/brcm,bcm2835-unicam.yaml
|
||||
|
||||
|
||||
@ -132,7 +132,7 @@ Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
|
||||
+...
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -17543,6 +17543,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
||||
@@ -17544,6 +17544,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://linuxtv.org/media_tree.git
|
||||
|
||||
@ -132,7 +132,7 @@ Signed-off-by: Lee Jackson <info@arducam.com>
|
||||
+...
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -17547,6 +17547,14 @@ F: Documentation/devicetree/bindings/med
|
||||
@@ -17548,6 +17548,14 @@ F: Documentation/devicetree/bindings/med
|
||||
F: Documentation/devicetree/bindings/media/i2c/imx477.yaml
|
||||
F: drivers/media/i2c/imx477.c
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
--- a/drivers/gpu/drm/drm_edid.c
|
||||
+++ b/drivers/gpu/drm/drm_edid.c
|
||||
@@ -5742,13 +5742,13 @@ static const u32 hdmi_colorimetry_val[]
|
||||
@@ -5743,13 +5743,13 @@ static const u32 hdmi_colorimetry_val[]
|
||||
#undef ACE
|
||||
|
||||
/**
|
||||
@ -43,7 +43,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
const struct drm_connector_state *conn_state)
|
||||
{
|
||||
u32 colorimetry_val;
|
||||
@@ -5767,7 +5767,7 @@ drm_hdmi_avi_infoframe_colorspace(struct
|
||||
@@ -5768,7 +5768,7 @@ drm_hdmi_avi_infoframe_colorspace(struct
|
||||
frame->extended_colorimetry = (colorimetry_val >> 2) &
|
||||
EXTENDED_COLORIMETRY_MASK;
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20220227124713.39766-6-noral
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -5980,6 +5980,14 @@ T: git git://anongit.freedesktop.org/drm
|
||||
@@ -5981,6 +5981,14 @@ T: git git://anongit.freedesktop.org/drm
|
||||
F: Documentation/devicetree/bindings/display/multi-inno,mi0283qt.txt
|
||||
F: drivers/gpu/drm/tiny/mi0283qt.c
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -289,6 +289,12 @@ bcm47xx_buttons_linksys_wrt320n_v1[] __i
|
||||
@@ -277,6 +277,12 @@ bcm47xx_buttons_linksys_wrt310nv1[] __in
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -28,9 +28,9 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(5, KEY_WIMAX),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -644,6 +650,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT320N_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt320n_v1);
|
||||
@@ -608,6 +614,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_WRT310NV2:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310n_v2);
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -277,6 +277,12 @@ bcm47xx_buttons_linksys_wrt310nv1[] __in
|
||||
@@ -283,6 +283,12 @@ bcm47xx_buttons_linksys_wrt310n_v2[] __i
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -41,9 +41,9 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(5, KEY_WIMAX),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -608,6 +614,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||
@@ -617,6 +623,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV2:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310n_v2);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_WRT320N_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt320n_v1);
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_asus_rtn12[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
|
||||
BCM47XX_GPIO_KEY(1, KEY_RESTART),
|
||||
@@ -502,6 +508,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -490,6 +496,9 @@ int __init bcm47xx_buttons_register(void
|
||||
int err;
|
||||
|
||||
switch (board) {
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_leds_asus_rtn12[] __initconst = {
|
||||
BCM47XX_GPIO_LED(2, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON),
|
||||
BCM47XX_GPIO_LED(7, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
@@ -571,6 +579,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -563,6 +571,9 @@ void __init bcm47xx_leds_register(void)
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
|
||||
switch (board) {
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_NETGEAR_WGR614_V10, "Netgear WGR614 V10"}, "U12H139T01_NETGEAR"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -398,6 +398,11 @@ bcm47xx_buttons_netgear_r6200_v1[] __ini
|
||||
@@ -410,6 +410,11 @@ bcm47xx_buttons_netgear_r6200_v1[] __ini
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -683,6 +688,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -701,6 +706,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_R6200_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6200_v1);
|
||||
break;
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -403,6 +403,12 @@ bcm47xx_buttons_netgear_r6300_v1[] __ini
|
||||
@@ -415,6 +415,12 @@ bcm47xx_buttons_netgear_r6300_v1[] __ini
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -691,6 +697,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -709,6 +715,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_R6300_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6300_v1);
|
||||
break;
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708, "Linksys WRT54G/GS/GL"}, "0x0708", "42", "0x10"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -448,6 +448,13 @@ bcm47xx_buttons_netgear_wnr3500lv1[] __i
|
||||
@@ -460,6 +460,13 @@ bcm47xx_buttons_netgear_wnr3500lv1[] __i
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -50,7 +50,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wnr834bv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
};
|
||||
@@ -718,6 +725,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -736,6 +743,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
||||
break;
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
break;
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -520,6 +520,14 @@ bcm47xx_leds_netgear_wnr3500lv1[] __init
|
||||
@@ -528,6 +528,14 @@ bcm47xx_leds_netgear_wnr3500lv1[] __init
|
||||
};
|
||||
|
||||
static const struct gpio_led
|
||||
@ -77,7 +77,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_leds_netgear_wnr834bv2[] __initconst = {
|
||||
BCM47XX_GPIO_LED(2, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||
BCM47XX_GPIO_LED(3, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
@@ -780,6 +788,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -791,6 +799,9 @@ void __init bcm47xx_leds_register(void)
|
||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
|
||||
break;
|
||||
@ -0,0 +1,65 @@
|
||||
From fc605b914167de75432c3b5aae239fb191e84a31 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 8 Feb 2023 08:03:01 +0100
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add support for Linksys E2500 V3
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's a BCM5358 based home WiFi router. 16 MiB flash, 64 MiB RAM, BCM5325
|
||||
switch, on-SoC 802.11n radio.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
---
|
||||
arch/mips/bcm47xx/board.c | 1 +
|
||||
arch/mips/bcm47xx/buttons.c | 9 +++++++++
|
||||
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||
3 files changed, 11 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/board.c
|
||||
+++ b/arch/mips/bcm47xx/board.c
|
||||
@@ -130,6 +130,7 @@ struct bcm47xx_board_type_list2 bcm47xx_
|
||||
{{BCM47XX_BOARD_LINKSYS_E1000V21, "Linksys E1000 V2.1"}, "E1000", "2.1"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E1200V2, "Linksys E1200 V2"}, "E1200", "2.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E2000V1, "Linksys E2000 V1"}, "Linksys E2000", "1.0"},
|
||||
+ {{BCM47XX_BOARD_LINKSYS_E2500V3, "Linksys E2500 V3"}, "E2500", "1.0"},
|
||||
/* like WRT610N v2.0 */
|
||||
{{BCM47XX_BOARD_LINKSYS_E3000V1, "Linksys E3000 V1"}, "E300", "1.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E3200V1, "Linksys E3200 V1"}, "E3200", "1.0"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -223,6 +223,12 @@ bcm47xx_buttons_linksys_e2000v1[] __init
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_linksys_e2500v3[] __initconst = {
|
||||
+ BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
|
||||
+ BCM47XX_GPIO_KEY(10, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
bcm47xx_buttons_linksys_e3000v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -617,6 +623,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_E2000V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_E2500V3:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2500v3);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_LINKSYS_E3000V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1);
|
||||
break;
|
||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
@@ -61,6 +61,7 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_LINKSYS_E1000V21,
|
||||
BCM47XX_BOARD_LINKSYS_E1200V2,
|
||||
BCM47XX_BOARD_LINKSYS_E2000V1,
|
||||
+ BCM47XX_BOARD_LINKSYS_E2500V3,
|
||||
BCM47XX_BOARD_LINKSYS_E3000V1,
|
||||
BCM47XX_BOARD_LINKSYS_E3200V1,
|
||||
BCM47XX_BOARD_LINKSYS_E4200V1,
|
||||
@ -0,0 +1,46 @@
|
||||
From d61615c366a489646a1bfe5b33455f916762d5f4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 8 Feb 2023 10:16:37 +0100
|
||||
Subject: [PATCH] net: bgmac: fix BCM5358 support by setting correct flags
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Code blocks handling BCMA_CHIP_ID_BCM5357 and BCMA_CHIP_ID_BCM53572 were
|
||||
incorrectly unified. Chip package values are not unique and cannot be
|
||||
checked independently. They are meaningful only in a context of a given
|
||||
chip.
|
||||
|
||||
Packages BCM5358 and BCM47188 share the same value but then belong to
|
||||
different chips. Code unification resulted in treating BCM5358 as
|
||||
BCM47188 and broke its initialization.
|
||||
|
||||
Link: https://github.com/openwrt/openwrt/issues/8278
|
||||
Fixes: cb1b0f90acfe ("net: ethernet: bgmac: unify code of the same family")
|
||||
Cc: Jon Mason <jdmason@kudzu.us>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Link: https://lore.kernel.org/r/20230208091637.16291-1-zajec5@gmail.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bgmac-bcma.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
|
||||
@@ -240,12 +240,12 @@ static int bgmac_probe(struct bcma_devic
|
||||
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
|
||||
- if (ci->pkg == BCMA_PKG_ID_BCM47188 ||
|
||||
- ci->pkg == BCMA_PKG_ID_BCM47186) {
|
||||
+ if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == BCMA_PKG_ID_BCM47186) ||
|
||||
+ (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == BCMA_PKG_ID_BCM47188)) {
|
||||
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
|
||||
}
|
||||
- if (ci->pkg == BCMA_PKG_ID_BCM5358)
|
||||
+ if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == BCMA_PKG_ID_BCM5358)
|
||||
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_EPHYRMII;
|
||||
break;
|
||||
case BCMA_CHIP_ID_BCM53573:
|
||||
@ -0,0 +1,61 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 27 Feb 2023 07:44:38 +0100
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add support for Huawei B593u-12
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's a BCM5358 based home router. One of very few bcm47xx devices with
|
||||
cellular modems (here: LTE).
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
arch/mips/bcm47xx/board.c | 1 +
|
||||
arch/mips/bcm47xx/leds.c | 8 ++++++++
|
||||
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||
3 files changed, 10 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/board.c
|
||||
+++ b/arch/mips/bcm47xx/board.c
|
||||
@@ -193,6 +193,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||
/* boardtype, boardnum, boardrev */
|
||||
static const
|
||||
struct bcm47xx_board_type_list3 bcm47xx_board_list_board[] __initconst = {
|
||||
+ {{BCM47XX_BOARD_HUAWEI_B593U_12, "Huawei B593u-12"}, "0x053d", "1234", "0x1301"},
|
||||
{{BCM47XX_BOARD_HUAWEI_E970, "Huawei E970"}, "0x048e", "0x5347", "0x11"},
|
||||
{{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"},
|
||||
{{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"},
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -223,6 +223,11 @@ bcm47xx_leds_dlink_dir330[] __initconst
|
||||
/* Huawei */
|
||||
|
||||
static const struct gpio_led
|
||||
+bcm47xx_leds_huawei_b593u_12[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(5, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
bcm47xx_leds_huawei_e970[] __initconst = {
|
||||
BCM47XX_GPIO_LED(0, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
};
|
||||
@@ -672,6 +677,9 @@ void __init bcm47xx_leds_register(void)
|
||||
bcm47xx_set_pdata(bcm47xx_leds_dlink_dir330);
|
||||
break;
|
||||
|
||||
+ case BCM47XX_BOARD_HUAWEI_B593U_12:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_huawei_b593u_12);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_HUAWEI_E970:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_huawei_e970);
|
||||
break;
|
||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
@@ -53,6 +53,7 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_DLINK_DIR130,
|
||||
BCM47XX_BOARD_DLINK_DIR330,
|
||||
|
||||
+ BCM47XX_BOARD_HUAWEI_B593U_12,
|
||||
BCM47XX_BOARD_HUAWEI_E970,
|
||||
|
||||
BCM47XX_BOARD_LINKSYS_E900V1,
|
||||
@ -0,0 +1,76 @@
|
||||
From 327dabbd0111910a7d174b0b812d608d6b67bead Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 8 Aug 2022 23:05:25 +0200
|
||||
Subject: [PATCH] bgmac: fix *initial* chip reset to support BCM5358
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While bringing hardware up we should perform a full reset including the
|
||||
switch bit (BGMAC_BCMA_IOCTL_SW_RESET aka SICF_SWRST). It's what
|
||||
specification says and what reference driver does.
|
||||
|
||||
This seems to be critical for the BCM5358. Without this hardware doesn't
|
||||
get initialized properly and doesn't seem to transmit or receive any
|
||||
packets.
|
||||
|
||||
Originally bgmac was calling bgmac_chip_reset() before setting
|
||||
"has_robosw" property which resulted in expected behaviour. That has
|
||||
changed as a side effect of adding platform device support which
|
||||
regressed BCM5358 support.
|
||||
|
||||
Fixes: f6a95a24957a ("net: ethernet: bgmac: Add platform device support")
|
||||
Cc: Jon Mason <jdmason@kudzu.us>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bgmac.c | 8 ++++++--
|
||||
drivers/net/ethernet/broadcom/bgmac.h | 2 ++
|
||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
||||
@@ -891,13 +891,13 @@ static void bgmac_chip_reset_idm_config(
|
||||
|
||||
if (iost & BGMAC_BCMA_IOST_ATTACHED) {
|
||||
flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
|
||||
- if (!bgmac->has_robosw)
|
||||
+ if (bgmac->in_init || !bgmac->has_robosw)
|
||||
flags |= BGMAC_BCMA_IOCTL_SW_RESET;
|
||||
}
|
||||
bgmac_clk_enable(bgmac, flags);
|
||||
}
|
||||
|
||||
- if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
|
||||
+ if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw))
|
||||
bgmac_idm_write(bgmac, BCMA_IOCTL,
|
||||
bgmac_idm_read(bgmac, BCMA_IOCTL) &
|
||||
~BGMAC_BCMA_IOCTL_SW_RESET);
|
||||
@@ -1502,6 +1502,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
struct net_device *net_dev = bgmac->net_dev;
|
||||
int err;
|
||||
|
||||
+ bgmac->in_init = true;
|
||||
+
|
||||
bgmac_chip_intrs_off(bgmac);
|
||||
|
||||
net_dev->irq = bgmac->irq;
|
||||
@@ -1562,6 +1564,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
bgmac->b53_device = &bgmac_b53_dev;
|
||||
}
|
||||
|
||||
+ bgmac->in_init = false;
|
||||
+
|
||||
err = register_netdev(bgmac->net_dev);
|
||||
if (err) {
|
||||
dev_err(bgmac->dev, "Cannot register net device\n");
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.h
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.h
|
||||
@@ -513,6 +513,8 @@ struct bgmac {
|
||||
int irq;
|
||||
u32 int_mask;
|
||||
|
||||
+ bool in_init;
|
||||
+
|
||||
/* Current MAC state */
|
||||
int mac_speed;
|
||||
int mac_duplex;
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -289,6 +289,12 @@ bcm47xx_buttons_linksys_wrt320n_v1[] __i
|
||||
@@ -277,6 +277,12 @@ bcm47xx_buttons_linksys_wrt310nv1[] __in
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -28,9 +28,9 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(5, KEY_WIMAX),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -644,6 +650,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT320N_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt320n_v1);
|
||||
@@ -608,6 +614,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_WRT310NV2:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310n_v2);
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -277,6 +277,12 @@ bcm47xx_buttons_linksys_wrt310nv1[] __in
|
||||
@@ -283,6 +283,12 @@ bcm47xx_buttons_linksys_wrt310n_v2[] __i
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -41,9 +41,9 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(5, KEY_WIMAX),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -608,6 +614,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||
@@ -617,6 +623,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV2:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310n_v2);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_WRT320N_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt320n_v1);
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_asus_rtn12[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON),
|
||||
BCM47XX_GPIO_KEY(1, KEY_RESTART),
|
||||
@@ -502,6 +508,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -490,6 +496,9 @@ int __init bcm47xx_buttons_register(void
|
||||
int err;
|
||||
|
||||
switch (board) {
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_leds_asus_rtn12[] __initconst = {
|
||||
BCM47XX_GPIO_LED(2, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON),
|
||||
BCM47XX_GPIO_LED(7, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
@@ -571,6 +579,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -563,6 +571,9 @@ void __init bcm47xx_leds_register(void)
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
|
||||
switch (board) {
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_NETGEAR_WGR614_V10, "Netgear WGR614 V10"}, "U12H139T01_NETGEAR"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -398,6 +398,11 @@ bcm47xx_buttons_netgear_r6200_v1[] __ini
|
||||
@@ -410,6 +410,11 @@ bcm47xx_buttons_netgear_r6200_v1[] __ini
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -683,6 +688,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -701,6 +706,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_R6200_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6200_v1);
|
||||
break;
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -403,6 +403,12 @@ bcm47xx_buttons_netgear_r6300_v1[] __ini
|
||||
@@ -415,6 +415,12 @@ bcm47xx_buttons_netgear_r6300_v1[] __ini
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -691,6 +697,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -709,6 +715,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_R6300_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_r6300_v1);
|
||||
break;
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708, "Linksys WRT54G/GS/GL"}, "0x0708", "42", "0x10"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -448,6 +448,13 @@ bcm47xx_buttons_netgear_wnr3500lv1[] __i
|
||||
@@ -460,6 +460,13 @@ bcm47xx_buttons_netgear_wnr3500lv1[] __i
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@ -50,7 +50,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_buttons_netgear_wnr834bv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
};
|
||||
@@ -718,6 +725,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -736,6 +743,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1);
|
||||
break;
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
break;
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -520,6 +520,14 @@ bcm47xx_leds_netgear_wnr3500lv1[] __init
|
||||
@@ -528,6 +528,14 @@ bcm47xx_leds_netgear_wnr3500lv1[] __init
|
||||
};
|
||||
|
||||
static const struct gpio_led
|
||||
@ -77,7 +77,7 @@ Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
bcm47xx_leds_netgear_wnr834bv2[] __initconst = {
|
||||
BCM47XX_GPIO_LED(2, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||
BCM47XX_GPIO_LED(3, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
@@ -780,6 +788,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -791,6 +799,9 @@ void __init bcm47xx_leds_register(void)
|
||||
case BCM47XX_BOARD_NETGEAR_WNR3500L:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1);
|
||||
break;
|
||||
@ -0,0 +1,65 @@
|
||||
From fc605b914167de75432c3b5aae239fb191e84a31 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 8 Feb 2023 08:03:01 +0100
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add support for Linksys E2500 V3
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's a BCM5358 based home WiFi router. 16 MiB flash, 64 MiB RAM, BCM5325
|
||||
switch, on-SoC 802.11n radio.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
---
|
||||
arch/mips/bcm47xx/board.c | 1 +
|
||||
arch/mips/bcm47xx/buttons.c | 9 +++++++++
|
||||
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||
3 files changed, 11 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/board.c
|
||||
+++ b/arch/mips/bcm47xx/board.c
|
||||
@@ -130,6 +130,7 @@ struct bcm47xx_board_type_list2 bcm47xx_
|
||||
{{BCM47XX_BOARD_LINKSYS_E1000V21, "Linksys E1000 V2.1"}, "E1000", "2.1"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E1200V2, "Linksys E1200 V2"}, "E1200", "2.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E2000V1, "Linksys E2000 V1"}, "Linksys E2000", "1.0"},
|
||||
+ {{BCM47XX_BOARD_LINKSYS_E2500V3, "Linksys E2500 V3"}, "E2500", "1.0"},
|
||||
/* like WRT610N v2.0 */
|
||||
{{BCM47XX_BOARD_LINKSYS_E3000V1, "Linksys E3000 V1"}, "E300", "1.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_E3200V1, "Linksys E3200 V1"}, "E3200", "1.0"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -223,6 +223,12 @@ bcm47xx_buttons_linksys_e2000v1[] __init
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_linksys_e2500v3[] __initconst = {
|
||||
+ BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON),
|
||||
+ BCM47XX_GPIO_KEY(10, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
bcm47xx_buttons_linksys_e3000v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -617,6 +623,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_E2000V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1);
|
||||
break;
|
||||
+ case BCM47XX_BOARD_LINKSYS_E2500V3:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2500v3);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_LINKSYS_E3000V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1);
|
||||
break;
|
||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
@@ -61,6 +61,7 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_LINKSYS_E1000V21,
|
||||
BCM47XX_BOARD_LINKSYS_E1200V2,
|
||||
BCM47XX_BOARD_LINKSYS_E2000V1,
|
||||
+ BCM47XX_BOARD_LINKSYS_E2500V3,
|
||||
BCM47XX_BOARD_LINKSYS_E3000V1,
|
||||
BCM47XX_BOARD_LINKSYS_E3200V1,
|
||||
BCM47XX_BOARD_LINKSYS_E4200V1,
|
||||
@ -20,7 +20,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3900,6 +3900,7 @@ L: linux-mtd@lists.infradead.org
|
||||
@@ -3901,6 +3901,7 @@ L: linux-mtd@lists.infradead.org
|
||||
L: bcm-kernel-feedback-list@broadcom.com
|
||||
S: Maintained
|
||||
F: drivers/mtd/nand/raw/brcmnand/
|
||||
|
||||
@ -0,0 +1,61 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 27 Feb 2023 07:44:38 +0100
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add support for Huawei B593u-12
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's a BCM5358 based home router. One of very few bcm47xx devices with
|
||||
cellular modems (here: LTE).
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
arch/mips/bcm47xx/board.c | 1 +
|
||||
arch/mips/bcm47xx/leds.c | 8 ++++++++
|
||||
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 +
|
||||
3 files changed, 10 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/board.c
|
||||
+++ b/arch/mips/bcm47xx/board.c
|
||||
@@ -193,6 +193,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||
/* boardtype, boardnum, boardrev */
|
||||
static const
|
||||
struct bcm47xx_board_type_list3 bcm47xx_board_list_board[] __initconst = {
|
||||
+ {{BCM47XX_BOARD_HUAWEI_B593U_12, "Huawei B593u-12"}, "0x053d", "1234", "0x1301"},
|
||||
{{BCM47XX_BOARD_HUAWEI_E970, "Huawei E970"}, "0x048e", "0x5347", "0x11"},
|
||||
{{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"},
|
||||
{{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"},
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -223,6 +223,11 @@ bcm47xx_leds_dlink_dir330[] __initconst
|
||||
/* Huawei */
|
||||
|
||||
static const struct gpio_led
|
||||
+bcm47xx_leds_huawei_b593u_12[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(5, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
bcm47xx_leds_huawei_e970[] __initconst = {
|
||||
BCM47XX_GPIO_LED(0, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
};
|
||||
@@ -672,6 +677,9 @@ void __init bcm47xx_leds_register(void)
|
||||
bcm47xx_set_pdata(bcm47xx_leds_dlink_dir330);
|
||||
break;
|
||||
|
||||
+ case BCM47XX_BOARD_HUAWEI_B593U_12:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_huawei_b593u_12);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_HUAWEI_E970:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_huawei_e970);
|
||||
break;
|
||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
@@ -53,6 +53,7 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_DLINK_DIR130,
|
||||
BCM47XX_BOARD_DLINK_DIR330,
|
||||
|
||||
+ BCM47XX_BOARD_HUAWEI_B593U_12,
|
||||
BCM47XX_BOARD_HUAWEI_E970,
|
||||
|
||||
BCM47XX_BOARD_LINKSYS_E900V1,
|
||||
@ -0,0 +1,76 @@
|
||||
From 327dabbd0111910a7d174b0b812d608d6b67bead Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 8 Aug 2022 23:05:25 +0200
|
||||
Subject: [PATCH] bgmac: fix *initial* chip reset to support BCM5358
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While bringing hardware up we should perform a full reset including the
|
||||
switch bit (BGMAC_BCMA_IOCTL_SW_RESET aka SICF_SWRST). It's what
|
||||
specification says and what reference driver does.
|
||||
|
||||
This seems to be critical for the BCM5358. Without this hardware doesn't
|
||||
get initialized properly and doesn't seem to transmit or receive any
|
||||
packets.
|
||||
|
||||
Originally bgmac was calling bgmac_chip_reset() before setting
|
||||
"has_robosw" property which resulted in expected behaviour. That has
|
||||
changed as a side effect of adding platform device support which
|
||||
regressed BCM5358 support.
|
||||
|
||||
Fixes: f6a95a24957a ("net: ethernet: bgmac: Add platform device support")
|
||||
Cc: Jon Mason <jdmason@kudzu.us>
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bgmac.c | 8 ++++++--
|
||||
drivers/net/ethernet/broadcom/bgmac.h | 2 ++
|
||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
||||
@@ -891,13 +891,13 @@ static void bgmac_chip_reset_idm_config(
|
||||
|
||||
if (iost & BGMAC_BCMA_IOST_ATTACHED) {
|
||||
flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
|
||||
- if (!bgmac->has_robosw)
|
||||
+ if (bgmac->in_init || !bgmac->has_robosw)
|
||||
flags |= BGMAC_BCMA_IOCTL_SW_RESET;
|
||||
}
|
||||
bgmac_clk_enable(bgmac, flags);
|
||||
}
|
||||
|
||||
- if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
|
||||
+ if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw))
|
||||
bgmac_idm_write(bgmac, BCMA_IOCTL,
|
||||
bgmac_idm_read(bgmac, BCMA_IOCTL) &
|
||||
~BGMAC_BCMA_IOCTL_SW_RESET);
|
||||
@@ -1502,6 +1502,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
struct net_device *net_dev = bgmac->net_dev;
|
||||
int err;
|
||||
|
||||
+ bgmac->in_init = true;
|
||||
+
|
||||
bgmac_chip_intrs_off(bgmac);
|
||||
|
||||
net_dev->irq = bgmac->irq;
|
||||
@@ -1562,6 +1564,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
||||
bgmac->b53_device = &bgmac_b53_dev;
|
||||
}
|
||||
|
||||
+ bgmac->in_init = false;
|
||||
+
|
||||
err = register_netdev(bgmac->net_dev);
|
||||
if (err) {
|
||||
dev_err(bgmac->dev, "Cannot register net device\n");
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.h
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.h
|
||||
@@ -475,6 +475,8 @@ struct bgmac {
|
||||
int irq;
|
||||
u32 int_mask;
|
||||
|
||||
+ bool in_init;
|
||||
+
|
||||
/* Current MAC state */
|
||||
int mac_speed;
|
||||
int mac_duplex;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
+ };
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3572,6 +3572,13 @@ F: Documentation/devicetree/bindings/net
|
||||
@@ -3573,6 +3573,13 @@ F: Documentation/devicetree/bindings/net
|
||||
F: drivers/net/ethernet/broadcom/bcm4908_enet.*
|
||||
F: drivers/net/ethernet/broadcom/unimac.h
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3578,6 +3578,7 @@ M: bcm-kernel-feedback-list@broadcom.com
|
||||
@@ -3579,6 +3579,7 @@ M: bcm-kernel-feedback-list@broadcom.com
|
||||
L: linux-gpio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
|
||||
|
||||
@ -16,6 +16,9 @@ bcm53xx_setup_interfaces()
|
||||
asus,rt-ac88u)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 extsw" "wan"
|
||||
;;
|
||||
dlink,dwl-8610ap)
|
||||
ucidef_set_interface_lan "eth0 eth1" "dhcp"
|
||||
;;
|
||||
linksys,panamera)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 lan5 lan6 lan7 lan8 extsw" "wan"
|
||||
;;
|
||||
|
||||
@ -105,6 +105,22 @@ define Build/seama-nand
|
||||
-i $@.entity
|
||||
endef
|
||||
|
||||
define Build/dwl8610ap-image
|
||||
mkdir -p $@.tmptar
|
||||
# The DWL8610AP pretends to be a Broadcom reference design
|
||||
echo "bcm953012er" > $@.tmptar/board
|
||||
echo "LVL7" > $@.tmptar/model
|
||||
# Something high beyond what D-Link has put out
|
||||
echo "5.0.0.0" > $@.tmptar/version
|
||||
# Create rootfs.bin, this is just a NAND image including everything
|
||||
cp $@ $@.tmptar/rootfs.bin
|
||||
# Hash the rootfs.bin
|
||||
cat $@.tmptar/rootfs.bin | md5sum > $@.tmptar/rootfs.md5
|
||||
cd $@.tmptar && tar -c -f $@.new *
|
||||
rm -rf $@.tmptar
|
||||
mv $@.new $@
|
||||
endef
|
||||
|
||||
DEVICE_VARS += ASUS_PRODUCTID
|
||||
DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR
|
||||
DEVICE_VARS += SIGNATURE
|
||||
@ -250,6 +266,15 @@ define Device/dlink_dir-885l
|
||||
endef
|
||||
TARGET_DEVICES += dlink_dir-885l
|
||||
|
||||
define Device/dlink_dwl-8610ap
|
||||
DEVICE_VENDOR := D-Link
|
||||
DEVICE_MODEL := DWL-8610AP
|
||||
DEVICE_PACKAGES := $(B43)
|
||||
IMAGES := factory.tar
|
||||
IMAGE/factory.tar := append-ubi | trx-nand | dwl8610ap-image
|
||||
endef
|
||||
TARGET_DEVICES += dlink_dwl-8610ap
|
||||
|
||||
define Device/linksys_ea6300-v1
|
||||
DEVICE_VENDOR := Linksys
|
||||
DEVICE_MODEL := EA6300
|
||||
|
||||
@ -400,7 +400,6 @@
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
|
||||
phy-mode = "internal";
|
||||
ethernet = <ðernet>;
|
||||
|
||||
@ -521,7 +521,6 @@
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
|
||||
phy-mode = "internal";
|
||||
ethernet = <ðernet>;
|
||||
|
||||
@ -418,7 +418,6 @@
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
|
||||
phy-mode = "internal";
|
||||
ethernet = <ðernet>;
|
||||
|
||||
@ -515,7 +515,6 @@
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
|
||||
phy-mode = "internal";
|
||||
ethernet = <ðernet>;
|
||||
|
||||
@ -529,7 +529,6 @@
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
label = "cpu";
|
||||
|
||||
phy-mode = "internal";
|
||||
ethernet = <ðernet>;
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Johan Almbladh <johan.almbladh@anyfinetworks.com>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -3430,6 +3430,7 @@ S: Supported
|
||||
@@ -3431,6 +3431,7 @@ S: Supported
|
||||
F: arch/arm64/net/
|
||||
|
||||
BPF JIT for MIPS (32-BIT AND 64-BIT)
|
||||
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue);
|
||||
static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue);
|
||||
|
||||
@@ -1710,9 +1713,6 @@ static int __init_dma_rx_desc_rings(stru
|
||||
@@ -1711,9 +1714,6 @@ static int __init_dma_rx_desc_rings(stru
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/* Setup the chained descriptor addresses */
|
||||
if (priv->mode == STMMAC_CHAIN_MODE) {
|
||||
if (priv->extend_desc)
|
||||
@@ -1818,12 +1818,6 @@ static int __init_dma_tx_desc_rings(stru
|
||||
@@ -1819,12 +1819,6 @@ static int __init_dma_tx_desc_rings(stru
|
||||
tx_q->tx_skbuff[i] = NULL;
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2692,10 +2686,7 @@ static void stmmac_tx_err(struct stmmac_
|
||||
@@ -2693,10 +2687,7 @@ static void stmmac_tx_err(struct stmmac_
|
||||
stmmac_stop_tx_dma(priv, chan);
|
||||
dma_free_tx_skbufs(priv, chan);
|
||||
stmmac_clear_tx_descriptors(priv, chan);
|
||||
@ -62,7 +62,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
tx_q->dma_tx_phy, chan);
|
||||
stmmac_start_tx_dma(priv, chan);
|
||||
@@ -3779,6 +3770,8 @@ static int stmmac_open(struct net_device
|
||||
@@ -3780,6 +3771,8 @@ static int stmmac_open(struct net_device
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
ret = stmmac_hw_setup(dev, true);
|
||||
if (ret < 0) {
|
||||
netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
|
||||
@@ -6422,6 +6415,7 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
@@ -6423,6 +6416,7 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
return;
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_clear_rx_descriptors(priv, queue);
|
||||
|
||||
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
@@ -6483,6 +6477,7 @@ void stmmac_enable_tx_queue(struct stmma
|
||||
@@ -6484,6 +6478,7 @@ void stmmac_enable_tx_queue(struct stmma
|
||||
return;
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_clear_tx_descriptors(priv, queue);
|
||||
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
@@ -7405,6 +7400,25 @@ int stmmac_suspend(struct device *dev)
|
||||
@@ -7406,6 +7401,25 @@ int stmmac_suspend(struct device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||
|
||||
@ -113,7 +113,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
/**
|
||||
* stmmac_reset_queues_param - reset queue parameters
|
||||
* @priv: device pointer
|
||||
@@ -7415,22 +7429,11 @@ static void stmmac_reset_queues_param(st
|
||||
@@ -7416,22 +7430,11 @@ static void stmmac_reset_queues_param(st
|
||||
u32 tx_cnt = priv->plat->tx_queues_to_use;
|
||||
u32 queue;
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
@@ -3831,8 +3831,6 @@ static int stmmac_release(struct net_dev
|
||||
@@ -3832,8 +3832,6 @@ static int stmmac_release(struct net_dev
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
u32 chan;
|
||||
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (device_may_wakeup(priv->device))
|
||||
phylink_speed_down(priv->phylink, false);
|
||||
/* Stop and disconnect the PHY */
|
||||
@@ -3844,6 +3842,8 @@ static int stmmac_release(struct net_dev
|
||||
@@ -3845,6 +3843,8 @@ static int stmmac_release(struct net_dev
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
hrtimer_cancel(&priv->tx_queue[chan].txtimer);
|
||||
|
||||
|
||||
@ -189,7 +189,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (tx_q->dirty_tx != tx_q->cur_tx)
|
||||
return -EBUSY; /* still unfinished work */
|
||||
@@ -1307,7 +1307,7 @@ static void stmmac_display_rx_rings(stru
|
||||
@@ -1308,7 +1308,7 @@ static void stmmac_display_rx_rings(stru
|
||||
|
||||
/* Display RX rings */
|
||||
for (queue = 0; queue < rx_cnt; queue++) {
|
||||
@ -198,7 +198,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
pr_info("\tRX Queue %u rings\n", queue);
|
||||
|
||||
@@ -1320,7 +1320,7 @@ static void stmmac_display_rx_rings(stru
|
||||
@@ -1321,7 +1321,7 @@ static void stmmac_display_rx_rings(stru
|
||||
}
|
||||
|
||||
/* Display RX ring */
|
||||
@ -207,7 +207,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rx_q->dma_rx_phy, desc_size);
|
||||
}
|
||||
}
|
||||
@@ -1334,7 +1334,7 @@ static void stmmac_display_tx_rings(stru
|
||||
@@ -1335,7 +1335,7 @@ static void stmmac_display_tx_rings(stru
|
||||
|
||||
/* Display TX rings */
|
||||
for (queue = 0; queue < tx_cnt; queue++) {
|
||||
@ -216,7 +216,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
pr_info("\tTX Queue %d rings\n", queue);
|
||||
|
||||
@@ -1349,7 +1349,7 @@ static void stmmac_display_tx_rings(stru
|
||||
@@ -1350,7 +1350,7 @@ static void stmmac_display_tx_rings(stru
|
||||
desc_size = sizeof(struct dma_desc);
|
||||
}
|
||||
|
||||
@ -225,7 +225,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
tx_q->dma_tx_phy, desc_size);
|
||||
}
|
||||
}
|
||||
@@ -1390,21 +1390,21 @@ static int stmmac_set_bfsize(int mtu, in
|
||||
@@ -1391,21 +1391,21 @@ static int stmmac_set_bfsize(int mtu, in
|
||||
*/
|
||||
static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -253,7 +253,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1416,12 +1416,12 @@ static void stmmac_clear_rx_descriptors(
|
||||
@@ -1417,12 +1417,12 @@ static void stmmac_clear_rx_descriptors(
|
||||
*/
|
||||
static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -269,7 +269,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -1469,7 +1469,7 @@ static void stmmac_clear_descriptors(str
|
||||
@@ -1470,7 +1470,7 @@ static void stmmac_clear_descriptors(str
|
||||
static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p,
|
||||
int i, gfp_t flags, u32 queue)
|
||||
{
|
||||
@ -278,7 +278,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (!buf->page) {
|
||||
@@ -1494,7 +1494,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
@@ -1495,7 +1495,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;
|
||||
|
||||
stmmac_set_desc_addr(priv, p, buf->addr);
|
||||
@ -287,7 +287,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_init_desc3(priv, p);
|
||||
|
||||
return 0;
|
||||
@@ -1508,7 +1508,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
@@ -1509,7 +1509,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
*/
|
||||
static void stmmac_free_rx_buffer(struct stmmac_priv *priv, u32 queue, int i)
|
||||
{
|
||||
@ -296,7 +296,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (buf->page)
|
||||
@@ -1528,7 +1528,7 @@ static void stmmac_free_rx_buffer(struct
|
||||
@@ -1529,7 +1529,7 @@ static void stmmac_free_rx_buffer(struct
|
||||
*/
|
||||
static void stmmac_free_tx_buffer(struct stmmac_priv *priv, u32 queue, int i)
|
||||
{
|
||||
@ -305,7 +305,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (tx_q->tx_skbuff_dma[i].buf &&
|
||||
tx_q->tx_skbuff_dma[i].buf_type != STMMAC_TXBUF_T_XDP_TX) {
|
||||
@@ -1573,17 +1573,17 @@ static void dma_free_rx_skbufs(struct st
|
||||
@@ -1574,17 +1574,17 @@ static void dma_free_rx_skbufs(struct st
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -326,7 +326,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
int ret;
|
||||
|
||||
@@ -1610,10 +1610,10 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
@@ -1611,10 +1611,10 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
*/
|
||||
static void dma_free_rx_xskbufs(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -339,7 +339,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (!buf->xdp)
|
||||
@@ -1626,10 +1626,10 @@ static void dma_free_rx_xskbufs(struct s
|
||||
@@ -1627,10 +1627,10 @@ static void dma_free_rx_xskbufs(struct s
|
||||
|
||||
static int stmmac_alloc_rx_buffers_zc(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -352,7 +352,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf;
|
||||
dma_addr_t dma_addr;
|
||||
struct dma_desc *p;
|
||||
@@ -1672,7 +1672,7 @@ static struct xsk_buff_pool *stmmac_get_
|
||||
@@ -1673,7 +1673,7 @@ static struct xsk_buff_pool *stmmac_get_
|
||||
*/
|
||||
static int __init_dma_rx_desc_rings(struct stmmac_priv *priv, u32 queue, gfp_t flags)
|
||||
{
|
||||
@ -361,7 +361,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int ret;
|
||||
|
||||
netif_dbg(priv, probe, priv->dev,
|
||||
@@ -1718,11 +1718,11 @@ static int __init_dma_rx_desc_rings(stru
|
||||
@@ -1719,11 +1719,11 @@ static int __init_dma_rx_desc_rings(stru
|
||||
if (priv->extend_desc)
|
||||
stmmac_mode_init(priv, rx_q->dma_erx,
|
||||
rx_q->dma_rx_phy,
|
||||
@ -375,7 +375,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1749,7 +1749,7 @@ static int init_dma_rx_desc_rings(struct
|
||||
@@ -1750,7 +1750,7 @@ static int init_dma_rx_desc_rings(struct
|
||||
|
||||
err_init_rx_buffers:
|
||||
while (queue >= 0) {
|
||||
@ -384,7 +384,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (rx_q->xsk_pool)
|
||||
dma_free_rx_xskbufs(priv, queue);
|
||||
@@ -1778,7 +1778,7 @@ err_init_rx_buffers:
|
||||
@@ -1779,7 +1779,7 @@ err_init_rx_buffers:
|
||||
*/
|
||||
static int __init_dma_tx_desc_rings(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -393,7 +393,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int i;
|
||||
|
||||
netif_dbg(priv, probe, priv->dev,
|
||||
@@ -1790,16 +1790,16 @@ static int __init_dma_tx_desc_rings(stru
|
||||
@@ -1791,16 +1791,16 @@ static int __init_dma_tx_desc_rings(stru
|
||||
if (priv->extend_desc)
|
||||
stmmac_mode_init(priv, tx_q->dma_etx,
|
||||
tx_q->dma_tx_phy,
|
||||
@ -413,7 +413,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -1869,12 +1869,12 @@ static int init_dma_desc_rings(struct ne
|
||||
@@ -1870,12 +1870,12 @@ static int init_dma_desc_rings(struct ne
|
||||
*/
|
||||
static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -428,7 +428,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_free_tx_buffer(priv, queue, i);
|
||||
|
||||
if (tx_q->xsk_pool && tx_q->xsk_frames_done) {
|
||||
@@ -1904,7 +1904,7 @@ static void stmmac_free_tx_skbufs(struct
|
||||
@@ -1905,7 +1905,7 @@ static void stmmac_free_tx_skbufs(struct
|
||||
*/
|
||||
static void __free_dma_rx_desc_resources(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -437,7 +437,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Release the DMA RX socket buffers */
|
||||
if (rx_q->xsk_pool)
|
||||
@@ -1917,11 +1917,11 @@ static void __free_dma_rx_desc_resources
|
||||
@@ -1918,11 +1918,11 @@ static void __free_dma_rx_desc_resources
|
||||
|
||||
/* Free DMA regions of consistent memory previously allocated */
|
||||
if (!priv->extend_desc)
|
||||
@ -451,7 +451,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_extended_desc),
|
||||
rx_q->dma_erx, rx_q->dma_rx_phy);
|
||||
|
||||
@@ -1950,7 +1950,7 @@ static void free_dma_rx_desc_resources(s
|
||||
@@ -1951,7 +1951,7 @@ static void free_dma_rx_desc_resources(s
|
||||
*/
|
||||
static void __free_dma_tx_desc_resources(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -460,7 +460,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
size_t size;
|
||||
void *addr;
|
||||
|
||||
@@ -1968,7 +1968,7 @@ static void __free_dma_tx_desc_resources
|
||||
@@ -1969,7 +1969,7 @@ static void __free_dma_tx_desc_resources
|
||||
addr = tx_q->dma_tx;
|
||||
}
|
||||
|
||||
@ -469,7 +469,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
dma_free_coherent(priv->device, size, addr, tx_q->dma_tx_phy);
|
||||
|
||||
@@ -1997,7 +1997,7 @@ static void free_dma_tx_desc_resources(s
|
||||
@@ -1998,7 +1998,7 @@ static void free_dma_tx_desc_resources(s
|
||||
*/
|
||||
static int __alloc_dma_rx_desc_resources(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -478,7 +478,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[queue];
|
||||
bool xdp_prog = stmmac_xdp_is_enabled(priv);
|
||||
struct page_pool_params pp_params = { 0 };
|
||||
@@ -2009,8 +2009,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2010,8 +2010,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
rx_q->priv_data = priv;
|
||||
|
||||
pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
|
||||
@ -489,7 +489,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
pp_params.order = ilog2(num_pages);
|
||||
pp_params.nid = dev_to_node(priv->device);
|
||||
pp_params.dev = priv->device;
|
||||
@@ -2025,7 +2025,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2026,7 +2026,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -498,7 +498,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(*rx_q->buf_pool),
|
||||
GFP_KERNEL);
|
||||
if (!rx_q->buf_pool)
|
||||
@@ -2033,7 +2033,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2034,7 +2034,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
|
||||
if (priv->extend_desc) {
|
||||
rx_q->dma_erx = dma_alloc_coherent(priv->device,
|
||||
@ -507,7 +507,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_extended_desc),
|
||||
&rx_q->dma_rx_phy,
|
||||
GFP_KERNEL);
|
||||
@@ -2042,7 +2042,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2043,7 +2043,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
|
||||
} else {
|
||||
rx_q->dma_rx = dma_alloc_coherent(priv->device,
|
||||
@ -516,7 +516,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_desc),
|
||||
&rx_q->dma_rx_phy,
|
||||
GFP_KERNEL);
|
||||
@@ -2099,20 +2099,20 @@ err_dma:
|
||||
@@ -2100,20 +2100,20 @@ err_dma:
|
||||
*/
|
||||
static int __alloc_dma_tx_desc_resources(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -540,7 +540,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct sk_buff *),
|
||||
GFP_KERNEL);
|
||||
if (!tx_q->tx_skbuff)
|
||||
@@ -2125,7 +2125,7 @@ static int __alloc_dma_tx_desc_resources
|
||||
@@ -2126,7 +2126,7 @@ static int __alloc_dma_tx_desc_resources
|
||||
else
|
||||
size = sizeof(struct dma_desc);
|
||||
|
||||
@ -549,7 +549,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
addr = dma_alloc_coherent(priv->device, size,
|
||||
&tx_q->dma_tx_phy, GFP_KERNEL);
|
||||
@@ -2369,7 +2369,7 @@ static void stmmac_dma_operation_mode(st
|
||||
@@ -2370,7 +2370,7 @@ static void stmmac_dma_operation_mode(st
|
||||
|
||||
/* configure all channels */
|
||||
for (chan = 0; chan < rx_channels_count; chan++) {
|
||||
@ -558,7 +558,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 buf_size;
|
||||
|
||||
qmode = priv->plat->rx_queues_cfg[chan].mode_to_use;
|
||||
@@ -2384,7 +2384,7 @@ static void stmmac_dma_operation_mode(st
|
||||
@@ -2385,7 +2385,7 @@ static void stmmac_dma_operation_mode(st
|
||||
chan);
|
||||
} else {
|
||||
stmmac_set_dma_bfsize(priv, priv->ioaddr,
|
||||
@ -567,7 +567,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
chan);
|
||||
}
|
||||
}
|
||||
@@ -2400,7 +2400,7 @@ static void stmmac_dma_operation_mode(st
|
||||
@@ -2401,7 +2401,7 @@ static void stmmac_dma_operation_mode(st
|
||||
static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
|
||||
{
|
||||
struct netdev_queue *nq = netdev_get_tx_queue(priv->dev, queue);
|
||||
@ -576,7 +576,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct xsk_buff_pool *pool = tx_q->xsk_pool;
|
||||
unsigned int entry = tx_q->cur_tx;
|
||||
struct dma_desc *tx_desc = NULL;
|
||||
@@ -2475,7 +2475,7 @@ static bool stmmac_xdp_xmit_zc(struct st
|
||||
@@ -2476,7 +2476,7 @@ static bool stmmac_xdp_xmit_zc(struct st
|
||||
|
||||
stmmac_enable_dma_transmission(priv, priv->ioaddr);
|
||||
|
||||
@ -585,7 +585,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
entry = tx_q->cur_tx;
|
||||
}
|
||||
|
||||
@@ -2501,7 +2501,7 @@ static bool stmmac_xdp_xmit_zc(struct st
|
||||
@@ -2502,7 +2502,7 @@ static bool stmmac_xdp_xmit_zc(struct st
|
||||
*/
|
||||
static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue)
|
||||
{
|
||||
@ -594,7 +594,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
unsigned int bytes_compl = 0, pkts_compl = 0;
|
||||
unsigned int entry, xmits = 0, count = 0;
|
||||
|
||||
@@ -2514,7 +2514,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
@@ -2515,7 +2515,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
entry = tx_q->dirty_tx;
|
||||
|
||||
/* Try to clean all TX complete frame in 1 shot */
|
||||
@ -603,7 +603,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct xdp_frame *xdpf;
|
||||
struct sk_buff *skb;
|
||||
struct dma_desc *p;
|
||||
@@ -2614,7 +2614,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
@@ -2615,7 +2615,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
|
||||
stmmac_release_tx_desc(priv, p, priv->mode);
|
||||
|
||||
@ -612,7 +612,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
tx_q->dirty_tx = entry;
|
||||
|
||||
@@ -2679,7 +2679,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
@@ -2680,7 +2680,7 @@ static int stmmac_tx_clean(struct stmmac
|
||||
*/
|
||||
static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)
|
||||
{
|
||||
@ -621,7 +621,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));
|
||||
|
||||
@@ -2746,8 +2746,8 @@ static int stmmac_napi_check(struct stmm
|
||||
@@ -2747,8 +2747,8 @@ static int stmmac_napi_check(struct stmm
|
||||
{
|
||||
int status = stmmac_dma_interrupt_status(priv, priv->ioaddr,
|
||||
&priv->xstats, chan, dir);
|
||||
@ -632,7 +632,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[chan];
|
||||
struct napi_struct *rx_napi;
|
||||
struct napi_struct *tx_napi;
|
||||
@@ -2923,7 +2923,7 @@ static int stmmac_init_dma_engine(struct
|
||||
@@ -2924,7 +2924,7 @@ static int stmmac_init_dma_engine(struct
|
||||
|
||||
/* DMA RX Channel Configuration */
|
||||
for (chan = 0; chan < rx_channels_count; chan++) {
|
||||
@ -641,7 +641,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
rx_q->dma_rx_phy, chan);
|
||||
@@ -2937,7 +2937,7 @@ static int stmmac_init_dma_engine(struct
|
||||
@@ -2938,7 +2938,7 @@ static int stmmac_init_dma_engine(struct
|
||||
|
||||
/* DMA TX Channel Configuration */
|
||||
for (chan = 0; chan < tx_channels_count; chan++) {
|
||||
@ -650,7 +650,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
tx_q->dma_tx_phy, chan);
|
||||
@@ -2952,7 +2952,7 @@ static int stmmac_init_dma_engine(struct
|
||||
@@ -2953,7 +2953,7 @@ static int stmmac_init_dma_engine(struct
|
||||
|
||||
static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -659,7 +659,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
hrtimer_start(&tx_q->txtimer,
|
||||
STMMAC_COAL_TIMER(priv->tx_coal_timer[queue]),
|
||||
@@ -3002,7 +3002,7 @@ static void stmmac_init_coalesce(struct
|
||||
@@ -3003,7 +3003,7 @@ static void stmmac_init_coalesce(struct
|
||||
u32 chan;
|
||||
|
||||
for (chan = 0; chan < tx_channel_count; chan++) {
|
||||
@ -668,7 +668,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
priv->tx_coal_frames[chan] = STMMAC_TX_FRAMES;
|
||||
priv->tx_coal_timer[chan] = STMMAC_COAL_TX_TIMER;
|
||||
@@ -3024,12 +3024,12 @@ static void stmmac_set_rings_length(stru
|
||||
@@ -3025,12 +3025,12 @@ static void stmmac_set_rings_length(stru
|
||||
/* set TX ring length */
|
||||
for (chan = 0; chan < tx_channels_count; chan++)
|
||||
stmmac_set_tx_ring_len(priv, priv->ioaddr,
|
||||
@ -683,7 +683,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3364,7 +3364,7 @@ static int stmmac_hw_setup(struct net_de
|
||||
@@ -3365,7 +3365,7 @@ static int stmmac_hw_setup(struct net_de
|
||||
/* Enable TSO */
|
||||
if (priv->tso) {
|
||||
for (chan = 0; chan < tx_cnt; chan++) {
|
||||
@ -692,7 +692,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* TSO and TBS cannot co-exist */
|
||||
if (tx_q->tbs & STMMAC_TBS_AVAIL)
|
||||
@@ -3386,7 +3386,7 @@ static int stmmac_hw_setup(struct net_de
|
||||
@@ -3387,7 +3387,7 @@ static int stmmac_hw_setup(struct net_de
|
||||
|
||||
/* TBS */
|
||||
for (chan = 0; chan < tx_cnt; chan++) {
|
||||
@ -701,7 +701,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int enable = tx_q->tbs & STMMAC_TBS_AVAIL;
|
||||
|
||||
stmmac_enable_tbs(priv, priv->ioaddr, enable, chan);
|
||||
@@ -3430,7 +3430,7 @@ static void stmmac_free_irq(struct net_d
|
||||
@@ -3431,7 +3431,7 @@ static void stmmac_free_irq(struct net_d
|
||||
for (j = irq_idx - 1; j >= 0; j--) {
|
||||
if (priv->tx_irq[j] > 0) {
|
||||
irq_set_affinity_hint(priv->tx_irq[j], NULL);
|
||||
@ -710,7 +710,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
}
|
||||
irq_idx = priv->plat->rx_queues_to_use;
|
||||
@@ -3439,7 +3439,7 @@ static void stmmac_free_irq(struct net_d
|
||||
@@ -3440,7 +3440,7 @@ static void stmmac_free_irq(struct net_d
|
||||
for (j = irq_idx - 1; j >= 0; j--) {
|
||||
if (priv->rx_irq[j] > 0) {
|
||||
irq_set_affinity_hint(priv->rx_irq[j], NULL);
|
||||
@ -719,7 +719,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3572,7 +3572,7 @@ static int stmmac_request_irq_multi_msi(
|
||||
@@ -3573,7 +3573,7 @@ static int stmmac_request_irq_multi_msi(
|
||||
sprintf(int_name, "%s:%s-%d", dev->name, "rx", i);
|
||||
ret = request_irq(priv->rx_irq[i],
|
||||
stmmac_msi_intr_rx,
|
||||
@ -728,7 +728,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (unlikely(ret < 0)) {
|
||||
netdev_err(priv->dev,
|
||||
"%s: alloc rx-%d MSI %d (error: %d)\n",
|
||||
@@ -3595,7 +3595,7 @@ static int stmmac_request_irq_multi_msi(
|
||||
@@ -3596,7 +3596,7 @@ static int stmmac_request_irq_multi_msi(
|
||||
sprintf(int_name, "%s:%s-%d", dev->name, "tx", i);
|
||||
ret = request_irq(priv->tx_irq[i],
|
||||
stmmac_msi_intr_tx,
|
||||
@ -737,7 +737,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (unlikely(ret < 0)) {
|
||||
netdev_err(priv->dev,
|
||||
"%s: alloc tx-%d MSI %d (error: %d)\n",
|
||||
@@ -3726,21 +3726,21 @@ static int stmmac_open(struct net_device
|
||||
@@ -3727,21 +3727,21 @@ static int stmmac_open(struct net_device
|
||||
bfsize = 0;
|
||||
|
||||
if (bfsize < BUF_SIZE_16KiB)
|
||||
@ -766,7 +766,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int tbs_en = priv->plat->tx_queues_cfg[chan].tbs_en;
|
||||
|
||||
/* Setup per-TXQ tbs flag before TX descriptor alloc */
|
||||
@@ -3798,7 +3798,7 @@ irq_error:
|
||||
@@ -3799,7 +3799,7 @@ irq_error:
|
||||
phylink_stop(priv->phylink);
|
||||
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
@ -775,7 +775,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_hw_teardown(dev);
|
||||
init_error:
|
||||
@@ -3840,7 +3840,7 @@ static int stmmac_release(struct net_dev
|
||||
@@ -3841,7 +3841,7 @@ static int stmmac_release(struct net_dev
|
||||
stmmac_disable_all_queues(priv);
|
||||
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
@ -784,7 +784,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
netif_tx_disable(dev);
|
||||
|
||||
@@ -3904,7 +3904,7 @@ static bool stmmac_vlan_insert(struct st
|
||||
@@ -3905,7 +3905,7 @@ static bool stmmac_vlan_insert(struct st
|
||||
return false;
|
||||
|
||||
stmmac_set_tx_owner(priv, p);
|
||||
@ -793,7 +793,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -3922,7 +3922,7 @@ static bool stmmac_vlan_insert(struct st
|
||||
@@ -3923,7 +3923,7 @@ static bool stmmac_vlan_insert(struct st
|
||||
static void stmmac_tso_allocator(struct stmmac_priv *priv, dma_addr_t des,
|
||||
int total_len, bool last_segment, u32 queue)
|
||||
{
|
||||
@ -802,7 +802,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *desc;
|
||||
u32 buff_size;
|
||||
int tmp_len;
|
||||
@@ -3933,7 +3933,7 @@ static void stmmac_tso_allocator(struct
|
||||
@@ -3934,7 +3934,7 @@ static void stmmac_tso_allocator(struct
|
||||
dma_addr_t curr_addr;
|
||||
|
||||
tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,
|
||||
@ -811,7 +811,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
|
||||
|
||||
if (tx_q->tbs & STMMAC_TBS_AVAIL)
|
||||
@@ -3961,7 +3961,7 @@ static void stmmac_tso_allocator(struct
|
||||
@@ -3962,7 +3962,7 @@ static void stmmac_tso_allocator(struct
|
||||
|
||||
static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue)
|
||||
{
|
||||
@ -820,7 +820,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int desc_size;
|
||||
|
||||
if (likely(priv->extend_desc))
|
||||
@@ -4023,7 +4023,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
@@ -4024,7 +4024,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
dma_addr_t des;
|
||||
int i;
|
||||
|
||||
@ -829,7 +829,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
first_tx = tx_q->cur_tx;
|
||||
|
||||
/* Compute header lengths */
|
||||
@@ -4063,7 +4063,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
@@ -4064,7 +4064,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
stmmac_set_mss(priv, mss_desc, mss);
|
||||
tx_q->mss = mss;
|
||||
tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,
|
||||
@ -838,7 +838,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
|
||||
}
|
||||
|
||||
@@ -4175,7 +4175,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
@@ -4176,7 +4176,7 @@ static netdev_tx_t stmmac_tso_xmit(struc
|
||||
* ndo_start_xmit will fill this descriptor the next time it's
|
||||
* called and stmmac_tx_clean may clean up to this descriptor.
|
||||
*/
|
||||
@ -847,7 +847,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
|
||||
netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
|
||||
@@ -4263,7 +4263,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
@@ -4264,7 +4264,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
int entry, first_tx;
|
||||
dma_addr_t des;
|
||||
|
||||
@ -856,7 +856,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
first_tx = tx_q->cur_tx;
|
||||
|
||||
if (priv->tx_path_in_lpi_mode && priv->eee_sw_timer_en)
|
||||
@@ -4326,7 +4326,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
@@ -4327,7 +4327,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
int len = skb_frag_size(frag);
|
||||
bool last_segment = (i == (nfrags - 1));
|
||||
|
||||
@ -865,7 +865,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
WARN_ON(tx_q->tx_skbuff[entry]);
|
||||
|
||||
if (likely(priv->extend_desc))
|
||||
@@ -4397,7 +4397,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
@@ -4398,7 +4398,7 @@ static netdev_tx_t stmmac_xmit(struct sk
|
||||
* ndo_start_xmit will fill this descriptor the next time it's
|
||||
* called and stmmac_tx_clean may clean up to this descriptor.
|
||||
*/
|
||||
@ -874,7 +874,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
tx_q->cur_tx = entry;
|
||||
|
||||
if (netif_msg_pktdata(priv)) {
|
||||
@@ -4512,7 +4512,7 @@ static void stmmac_rx_vlan(struct net_de
|
||||
@@ -4513,7 +4513,7 @@ static void stmmac_rx_vlan(struct net_de
|
||||
*/
|
||||
static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -883,7 +883,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int dirty = stmmac_rx_dirty(priv, queue);
|
||||
unsigned int entry = rx_q->dirty_rx;
|
||||
|
||||
@@ -4562,7 +4562,7 @@ static inline void stmmac_rx_refill(stru
|
||||
@@ -4563,7 +4563,7 @@ static inline void stmmac_rx_refill(stru
|
||||
dma_wmb();
|
||||
stmmac_set_rx_owner(priv, p, use_rx_wd);
|
||||
|
||||
@ -892,7 +892,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
rx_q->dirty_rx = entry;
|
||||
rx_q->rx_tail_addr = rx_q->dma_rx_phy +
|
||||
@@ -4590,12 +4590,12 @@ static unsigned int stmmac_rx_buf1_len(s
|
||||
@@ -4591,12 +4591,12 @@ static unsigned int stmmac_rx_buf1_len(s
|
||||
|
||||
/* First descriptor, not last descriptor and not split header */
|
||||
if (status & rx_not_ls)
|
||||
@ -907,7 +907,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static unsigned int stmmac_rx_buf2_len(struct stmmac_priv *priv,
|
||||
@@ -4611,7 +4611,7 @@ static unsigned int stmmac_rx_buf2_len(s
|
||||
@@ -4612,7 +4612,7 @@ static unsigned int stmmac_rx_buf2_len(s
|
||||
|
||||
/* Not last descriptor */
|
||||
if (status & rx_not_ls)
|
||||
@ -916,7 +916,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
plen = stmmac_get_rx_frame_len(priv, p, coe);
|
||||
|
||||
@@ -4622,7 +4622,7 @@ static unsigned int stmmac_rx_buf2_len(s
|
||||
@@ -4623,7 +4623,7 @@ static unsigned int stmmac_rx_buf2_len(s
|
||||
static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,
|
||||
struct xdp_frame *xdpf, bool dma_map)
|
||||
{
|
||||
@ -925,7 +925,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
unsigned int entry = tx_q->cur_tx;
|
||||
struct dma_desc *tx_desc;
|
||||
dma_addr_t dma_addr;
|
||||
@@ -4685,7 +4685,7 @@ static int stmmac_xdp_xmit_xdpf(struct s
|
||||
@@ -4686,7 +4686,7 @@ static int stmmac_xdp_xmit_xdpf(struct s
|
||||
|
||||
stmmac_enable_dma_transmission(priv, priv->ioaddr);
|
||||
|
||||
@ -934,7 +934,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
tx_q->cur_tx = entry;
|
||||
|
||||
return STMMAC_XDP_TX;
|
||||
@@ -4859,7 +4859,7 @@ static void stmmac_dispatch_skb_zc(struc
|
||||
@@ -4860,7 +4860,7 @@ static void stmmac_dispatch_skb_zc(struc
|
||||
|
||||
static bool stmmac_rx_refill_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
|
||||
{
|
||||
@ -943,7 +943,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
unsigned int entry = rx_q->dirty_rx;
|
||||
struct dma_desc *rx_desc = NULL;
|
||||
bool ret = true;
|
||||
@@ -4902,7 +4902,7 @@ static bool stmmac_rx_refill_zc(struct s
|
||||
@@ -4903,7 +4903,7 @@ static bool stmmac_rx_refill_zc(struct s
|
||||
dma_wmb();
|
||||
stmmac_set_rx_owner(priv, rx_desc, use_rx_wd);
|
||||
|
||||
@ -952,7 +952,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
if (rx_desc) {
|
||||
@@ -4917,7 +4917,7 @@ static bool stmmac_rx_refill_zc(struct s
|
||||
@@ -4918,7 +4918,7 @@ static bool stmmac_rx_refill_zc(struct s
|
||||
|
||||
static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
|
||||
{
|
||||
@ -961,7 +961,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
unsigned int count = 0, error = 0, len = 0;
|
||||
int dirty = stmmac_rx_dirty(priv, queue);
|
||||
unsigned int next_entry = rx_q->cur_rx;
|
||||
@@ -4939,7 +4939,7 @@ static int stmmac_rx_zc(struct stmmac_pr
|
||||
@@ -4940,7 +4940,7 @@ static int stmmac_rx_zc(struct stmmac_pr
|
||||
desc_size = sizeof(struct dma_desc);
|
||||
}
|
||||
|
||||
@ -970,7 +970,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rx_q->dma_rx_phy, desc_size);
|
||||
}
|
||||
while (count < limit) {
|
||||
@@ -4986,7 +4986,7 @@ read_again:
|
||||
@@ -4987,7 +4987,7 @@ read_again:
|
||||
|
||||
/* Prefetch the next RX descriptor */
|
||||
rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,
|
||||
@ -979,7 +979,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
next_entry = rx_q->cur_rx;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -5107,7 +5107,7 @@ read_again:
|
||||
@@ -5108,7 +5108,7 @@ read_again:
|
||||
*/
|
||||
static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
|
||||
{
|
||||
@ -988,7 +988,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[queue];
|
||||
unsigned int count = 0, error = 0, len = 0;
|
||||
int status = 0, coe = priv->hw->rx_csum;
|
||||
@@ -5120,7 +5120,7 @@ static int stmmac_rx(struct stmmac_priv
|
||||
@@ -5121,7 +5121,7 @@ static int stmmac_rx(struct stmmac_priv
|
||||
int buf_sz;
|
||||
|
||||
dma_dir = page_pool_get_dma_dir(rx_q->page_pool);
|
||||
@ -997,7 +997,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (netif_msg_rx_status(priv)) {
|
||||
void *rx_head;
|
||||
@@ -5134,7 +5134,7 @@ static int stmmac_rx(struct stmmac_priv
|
||||
@@ -5135,7 +5135,7 @@ static int stmmac_rx(struct stmmac_priv
|
||||
desc_size = sizeof(struct dma_desc);
|
||||
}
|
||||
|
||||
@ -1006,7 +1006,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rx_q->dma_rx_phy, desc_size);
|
||||
}
|
||||
while (count < limit) {
|
||||
@@ -5178,7 +5178,7 @@ read_again:
|
||||
@@ -5179,7 +5179,7 @@ read_again:
|
||||
break;
|
||||
|
||||
rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,
|
||||
@ -1015,7 +1015,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
next_entry = rx_q->cur_rx;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -5312,7 +5312,7 @@ read_again:
|
||||
@@ -5313,7 +5313,7 @@ read_again:
|
||||
buf1_len, dma_dir);
|
||||
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
|
||||
buf->page, buf->page_offset, buf1_len,
|
||||
@ -1024,7 +1024,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Data payload appended into SKB */
|
||||
page_pool_release_page(rx_q->page_pool, buf->page);
|
||||
@@ -5324,7 +5324,7 @@ read_again:
|
||||
@@ -5325,7 +5325,7 @@ read_again:
|
||||
buf2_len, dma_dir);
|
||||
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
|
||||
buf->sec_page, 0, buf2_len,
|
||||
@ -1033,7 +1033,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Data payload appended into SKB */
|
||||
page_pool_release_page(rx_q->page_pool, buf->sec_page);
|
||||
@@ -5766,11 +5766,13 @@ static irqreturn_t stmmac_safety_interru
|
||||
@@ -5767,11 +5767,13 @@ static irqreturn_t stmmac_safety_interru
|
||||
static irqreturn_t stmmac_msi_intr_tx(int irq, void *data)
|
||||
{
|
||||
struct stmmac_tx_queue *tx_q = (struct stmmac_tx_queue *)data;
|
||||
@ -1048,7 +1048,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (unlikely(!data)) {
|
||||
netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__);
|
||||
@@ -5810,10 +5812,12 @@ static irqreturn_t stmmac_msi_intr_tx(in
|
||||
@@ -5811,10 +5813,12 @@ static irqreturn_t stmmac_msi_intr_tx(in
|
||||
static irqreturn_t stmmac_msi_intr_rx(int irq, void *data)
|
||||
{
|
||||
struct stmmac_rx_queue *rx_q = (struct stmmac_rx_queue *)data;
|
||||
@ -1062,7 +1062,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (unlikely(!data)) {
|
||||
netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__);
|
||||
@@ -5844,10 +5848,10 @@ static void stmmac_poll_controller(struc
|
||||
@@ -5845,10 +5849,10 @@ static void stmmac_poll_controller(struc
|
||||
|
||||
if (priv->plat->multi_msi_en) {
|
||||
for (i = 0; i < priv->plat->rx_queues_to_use; i++)
|
||||
@ -1075,7 +1075,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
} else {
|
||||
disable_irq(dev->irq);
|
||||
stmmac_interrupt(dev->irq, dev);
|
||||
@@ -6028,34 +6032,34 @@ static int stmmac_rings_status_show(stru
|
||||
@@ -6029,34 +6033,34 @@ static int stmmac_rings_status_show(stru
|
||||
return 0;
|
||||
|
||||
for (queue = 0; queue < rx_count; queue++) {
|
||||
@ -1116,7 +1116,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6396,7 +6400,7 @@ void stmmac_disable_rx_queue(struct stmm
|
||||
@@ -6397,7 +6401,7 @@ void stmmac_disable_rx_queue(struct stmm
|
||||
|
||||
void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -1125,7 +1125,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[queue];
|
||||
unsigned long flags;
|
||||
u32 buf_size;
|
||||
@@ -6433,7 +6437,7 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
@@ -6434,7 +6438,7 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
rx_q->queue_index);
|
||||
} else {
|
||||
stmmac_set_dma_bfsize(priv, priv->ioaddr,
|
||||
@ -1134,7 +1134,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rx_q->queue_index);
|
||||
}
|
||||
|
||||
@@ -6459,7 +6463,7 @@ void stmmac_disable_tx_queue(struct stmm
|
||||
@@ -6460,7 +6464,7 @@ void stmmac_disable_tx_queue(struct stmm
|
||||
|
||||
void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -1143,7 +1143,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[queue];
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
@@ -6509,7 +6513,7 @@ void stmmac_xdp_release(struct net_devic
|
||||
@@ -6510,7 +6514,7 @@ void stmmac_xdp_release(struct net_devic
|
||||
stmmac_disable_all_queues(priv);
|
||||
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
@ -1152,7 +1152,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Free the IRQ lines */
|
||||
stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);
|
||||
@@ -6568,7 +6572,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
@@ -6569,7 +6573,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
|
||||
/* DMA RX Channel Configuration */
|
||||
for (chan = 0; chan < rx_cnt; chan++) {
|
||||
@ -1161,7 +1161,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
rx_q->dma_rx_phy, chan);
|
||||
@@ -6586,7 +6590,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
@@ -6587,7 +6591,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
rx_q->queue_index);
|
||||
} else {
|
||||
stmmac_set_dma_bfsize(priv, priv->ioaddr,
|
||||
@ -1170,7 +1170,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
rx_q->queue_index);
|
||||
}
|
||||
|
||||
@@ -6595,7 +6599,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
@@ -6596,7 +6600,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
|
||||
/* DMA TX Channel Configuration */
|
||||
for (chan = 0; chan < tx_cnt; chan++) {
|
||||
@ -1179,7 +1179,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
tx_q->dma_tx_phy, chan);
|
||||
@@ -6628,7 +6632,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
@@ -6629,7 +6633,7 @@ int stmmac_xdp_open(struct net_device *d
|
||||
|
||||
irq_error:
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
@ -1188,7 +1188,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_hw_teardown(dev);
|
||||
init_error:
|
||||
@@ -6655,8 +6659,8 @@ int stmmac_xsk_wakeup(struct net_device
|
||||
@@ -6656,8 +6660,8 @@ int stmmac_xsk_wakeup(struct net_device
|
||||
queue >= priv->plat->tx_queues_to_use)
|
||||
return -EINVAL;
|
||||
|
||||
@ -1199,7 +1199,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
ch = &priv->channel[queue];
|
||||
|
||||
if (!rx_q->xsk_pool && !tx_q->xsk_pool)
|
||||
@@ -6912,8 +6916,8 @@ int stmmac_reinit_ringparam(struct net_d
|
||||
@@ -6913,8 +6917,8 @@ int stmmac_reinit_ringparam(struct net_d
|
||||
if (netif_running(dev))
|
||||
stmmac_release(dev);
|
||||
|
||||
@ -1210,7 +1210,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (netif_running(dev))
|
||||
ret = stmmac_open(dev);
|
||||
@@ -7351,7 +7355,7 @@ int stmmac_suspend(struct device *dev)
|
||||
@@ -7352,7 +7356,7 @@ int stmmac_suspend(struct device *dev)
|
||||
stmmac_disable_all_queues(priv);
|
||||
|
||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||
@ -1219,7 +1219,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (priv->eee_enabled) {
|
||||
priv->tx_path_in_lpi_mode = false;
|
||||
@@ -7402,7 +7406,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||
@@ -7403,7 +7407,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||
|
||||
static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
@ -1228,7 +1228,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
rx_q->cur_rx = 0;
|
||||
rx_q->dirty_rx = 0;
|
||||
@@ -7410,7 +7414,7 @@ static void stmmac_reset_rx_queue(struct
|
||||
@@ -7411,7 +7415,7 @@ static void stmmac_reset_rx_queue(struct
|
||||
|
||||
static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
{
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
@@ -1298,7 +1298,8 @@ static int stmmac_phy_setup(struct stmma
|
||||
@@ -1299,7 +1299,8 @@ static int stmmac_phy_setup(struct stmma
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
u32 rx_cnt = priv->plat->rx_queues_to_use;
|
||||
unsigned int desc_size;
|
||||
@@ -1307,7 +1308,7 @@ static void stmmac_display_rx_rings(stru
|
||||
@@ -1308,7 +1309,7 @@ static void stmmac_display_rx_rings(stru
|
||||
|
||||
/* Display RX rings */
|
||||
for (queue = 0; queue < rx_cnt; queue++) {
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
pr_info("\tRX Queue %u rings\n", queue);
|
||||
|
||||
@@ -1320,12 +1321,13 @@ static void stmmac_display_rx_rings(stru
|
||||
@@ -1321,12 +1322,13 @@ static void stmmac_display_rx_rings(stru
|
||||
}
|
||||
|
||||
/* Display RX ring */
|
||||
@ -52,7 +52,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
u32 tx_cnt = priv->plat->tx_queues_to_use;
|
||||
unsigned int desc_size;
|
||||
@@ -1334,7 +1336,7 @@ static void stmmac_display_tx_rings(stru
|
||||
@@ -1335,7 +1337,7 @@ static void stmmac_display_tx_rings(stru
|
||||
|
||||
/* Display TX rings */
|
||||
for (queue = 0; queue < tx_cnt; queue++) {
|
||||
@ -61,7 +61,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
pr_info("\tTX Queue %d rings\n", queue);
|
||||
|
||||
@@ -1349,18 +1351,19 @@ static void stmmac_display_tx_rings(stru
|
||||
@@ -1350,18 +1352,19 @@ static void stmmac_display_tx_rings(stru
|
||||
desc_size = sizeof(struct dma_desc);
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static int stmmac_set_bfsize(int mtu, int bufsize)
|
||||
@@ -1384,44 +1387,50 @@ static int stmmac_set_bfsize(int mtu, in
|
||||
@@ -1385,44 +1388,50 @@ static int stmmac_set_bfsize(int mtu, in
|
||||
/**
|
||||
* stmmac_clear_rx_descriptors - clear RX descriptors
|
||||
* @priv: driver private structure
|
||||
@ -147,7 +147,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -1438,10 +1447,12 @@ static void stmmac_clear_tx_descriptors(
|
||||
@@ -1439,10 +1448,12 @@ static void stmmac_clear_tx_descriptors(
|
||||
/**
|
||||
* stmmac_clear_descriptors - clear descriptors
|
||||
* @priv: driver private structure
|
||||
@ -161,7 +161,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
u32 rx_queue_cnt = priv->plat->rx_queues_to_use;
|
||||
u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
|
||||
@@ -1449,16 +1460,17 @@ static void stmmac_clear_descriptors(str
|
||||
@@ -1450,16 +1461,17 @@ static void stmmac_clear_descriptors(str
|
||||
|
||||
/* Clear the RX descriptors */
|
||||
for (queue = 0; queue < rx_queue_cnt; queue++)
|
||||
@ -181,7 +181,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
* @p: descriptor pointer
|
||||
* @i: descriptor index
|
||||
* @flags: gfp flag
|
||||
@@ -1466,10 +1478,12 @@ static void stmmac_clear_descriptors(str
|
||||
@@ -1467,10 +1479,12 @@ static void stmmac_clear_descriptors(str
|
||||
* Description: this function is called to allocate a receive buffer, perform
|
||||
* the DMA mapping and init the descriptor.
|
||||
*/
|
||||
@ -196,7 +196,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (!buf->page) {
|
||||
@@ -1494,7 +1508,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
@@ -1495,7 +1509,7 @@ static int stmmac_init_rx_buffers(struct
|
||||
buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;
|
||||
|
||||
stmmac_set_desc_addr(priv, p, buf->addr);
|
||||
@ -205,7 +205,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_init_desc3(priv, p);
|
||||
|
||||
return 0;
|
||||
@@ -1503,12 +1517,13 @@ static int stmmac_init_rx_buffers(struct
|
||||
@@ -1504,12 +1518,13 @@ static int stmmac_init_rx_buffers(struct
|
||||
/**
|
||||
* stmmac_free_rx_buffer - free RX dma buffers
|
||||
* @priv: private structure
|
||||
@ -222,7 +222,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (buf->page)
|
||||
@@ -1523,12 +1538,15 @@ static void stmmac_free_rx_buffer(struct
|
||||
@@ -1524,12 +1539,15 @@ static void stmmac_free_rx_buffer(struct
|
||||
/**
|
||||
* stmmac_free_tx_buffer - free RX dma buffers
|
||||
* @priv: private structure
|
||||
@ -240,7 +240,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (tx_q->tx_skbuff_dma[i].buf &&
|
||||
tx_q->tx_skbuff_dma[i].buf_type != STMMAC_TXBUF_T_XDP_TX) {
|
||||
@@ -1567,23 +1585,28 @@ static void stmmac_free_tx_buffer(struct
|
||||
@@ -1568,23 +1586,28 @@ static void stmmac_free_tx_buffer(struct
|
||||
/**
|
||||
* dma_free_rx_skbufs - free RX dma buffers
|
||||
* @priv: private structure
|
||||
@ -276,7 +276,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
int ret;
|
||||
|
||||
@@ -1592,7 +1615,7 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
@@ -1593,7 +1616,7 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
else
|
||||
p = rx_q->dma_rx + i;
|
||||
|
||||
@ -285,7 +285,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
queue);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1606,14 +1629,17 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
@@ -1607,14 +1630,17 @@ static int stmmac_alloc_rx_buffers(struc
|
||||
/**
|
||||
* dma_free_rx_xskbufs - free RX dma buffers from XSK pool
|
||||
* @priv: private structure
|
||||
@ -306,7 +306,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
||||
|
||||
if (!buf->xdp)
|
||||
@@ -1624,12 +1650,14 @@ static void dma_free_rx_xskbufs(struct s
|
||||
@@ -1625,12 +1651,14 @@ static void dma_free_rx_xskbufs(struct s
|
||||
}
|
||||
}
|
||||
|
||||
@ -324,7 +324,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_rx_buffer *buf;
|
||||
dma_addr_t dma_addr;
|
||||
struct dma_desc *p;
|
||||
@@ -1664,22 +1692,25 @@ static struct xsk_buff_pool *stmmac_get_
|
||||
@@ -1665,22 +1693,25 @@ static struct xsk_buff_pool *stmmac_get_
|
||||
/**
|
||||
* __init_dma_rx_desc_rings - init the RX descriptor ring (per queue)
|
||||
* @priv: driver private structure
|
||||
@ -353,7 +353,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
xdp_rxq_info_unreg_mem_model(&rx_q->xdp_rxq);
|
||||
|
||||
@@ -1706,9 +1737,9 @@ static int __init_dma_rx_desc_rings(stru
|
||||
@@ -1707,9 +1738,9 @@ static int __init_dma_rx_desc_rings(stru
|
||||
/* RX XDP ZC buffer pool may not be populated, e.g.
|
||||
* xdpsock TX-only.
|
||||
*/
|
||||
@ -365,7 +365,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ret < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -1718,17 +1749,19 @@ static int __init_dma_rx_desc_rings(stru
|
||||
@@ -1719,17 +1750,19 @@ static int __init_dma_rx_desc_rings(stru
|
||||
if (priv->extend_desc)
|
||||
stmmac_mode_init(priv, rx_q->dma_erx,
|
||||
rx_q->dma_rx_phy,
|
||||
@ -388,7 +388,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
u32 rx_count = priv->plat->rx_queues_to_use;
|
||||
@@ -1740,7 +1773,7 @@ static int init_dma_rx_desc_rings(struct
|
||||
@@ -1741,7 +1774,7 @@ static int init_dma_rx_desc_rings(struct
|
||||
"SKB addresses:\nskb\t\tskb data\tdma data\n");
|
||||
|
||||
for (queue = 0; queue < rx_count; queue++) {
|
||||
@ -397,7 +397,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ret)
|
||||
goto err_init_rx_buffers;
|
||||
}
|
||||
@@ -1749,12 +1782,12 @@ static int init_dma_rx_desc_rings(struct
|
||||
@@ -1750,12 +1783,12 @@ static int init_dma_rx_desc_rings(struct
|
||||
|
||||
err_init_rx_buffers:
|
||||
while (queue >= 0) {
|
||||
@ -413,7 +413,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
rx_q->buf_alloc_num = 0;
|
||||
rx_q->xsk_pool = NULL;
|
||||
@@ -1771,14 +1804,17 @@ err_init_rx_buffers:
|
||||
@@ -1772,14 +1805,17 @@ err_init_rx_buffers:
|
||||
/**
|
||||
* __init_dma_tx_desc_rings - init the TX descriptor ring (per queue)
|
||||
* @priv: driver private structure
|
||||
@ -434,7 +434,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
int i;
|
||||
|
||||
netif_dbg(priv, probe, priv->dev,
|
||||
@@ -1790,16 +1826,16 @@ static int __init_dma_tx_desc_rings(stru
|
||||
@@ -1791,16 +1827,16 @@ static int __init_dma_tx_desc_rings(stru
|
||||
if (priv->extend_desc)
|
||||
stmmac_mode_init(priv, tx_q->dma_etx,
|
||||
tx_q->dma_tx_phy,
|
||||
@ -454,7 +454,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct dma_desc *p;
|
||||
|
||||
if (priv->extend_desc)
|
||||
@@ -1821,7 +1857,8 @@ static int __init_dma_tx_desc_rings(stru
|
||||
@@ -1822,7 +1858,8 @@ static int __init_dma_tx_desc_rings(stru
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -464,7 +464,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
u32 tx_queue_cnt;
|
||||
@@ -1830,7 +1867,7 @@ static int init_dma_tx_desc_rings(struct
|
||||
@@ -1831,7 +1868,7 @@ static int init_dma_tx_desc_rings(struct
|
||||
tx_queue_cnt = priv->plat->tx_queues_to_use;
|
||||
|
||||
for (queue = 0; queue < tx_queue_cnt; queue++)
|
||||
@ -473,7 +473,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1838,26 +1875,29 @@ static int init_dma_tx_desc_rings(struct
|
||||
@@ -1839,26 +1876,29 @@ static int init_dma_tx_desc_rings(struct
|
||||
/**
|
||||
* init_dma_desc_rings - init the RX/TX descriptor rings
|
||||
* @dev: net device structure
|
||||
@ -508,7 +508,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1865,17 +1905,20 @@ static int init_dma_desc_rings(struct ne
|
||||
@@ -1866,17 +1906,20 @@ static int init_dma_desc_rings(struct ne
|
||||
/**
|
||||
* dma_free_tx_skbufs - free TX dma buffers
|
||||
* @priv: private structure
|
||||
@ -533,7 +533,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (tx_q->xsk_pool && tx_q->xsk_frames_done) {
|
||||
xsk_tx_completed(tx_q->xsk_pool, tx_q->xsk_frames_done);
|
||||
@@ -1894,34 +1937,37 @@ static void stmmac_free_tx_skbufs(struct
|
||||
@@ -1895,34 +1938,37 @@ static void stmmac_free_tx_skbufs(struct
|
||||
u32 queue;
|
||||
|
||||
for (queue = 0; queue < tx_queue_cnt; queue++)
|
||||
@ -578,7 +578,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_extended_desc),
|
||||
rx_q->dma_erx, rx_q->dma_rx_phy);
|
||||
|
||||
@@ -1933,29 +1979,33 @@ static void __free_dma_rx_desc_resources
|
||||
@@ -1934,29 +1980,33 @@ static void __free_dma_rx_desc_resources
|
||||
page_pool_destroy(rx_q->page_pool);
|
||||
}
|
||||
|
||||
@ -617,7 +617,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (priv->extend_desc) {
|
||||
size = sizeof(struct dma_extended_desc);
|
||||
@@ -1968,7 +2018,7 @@ static void __free_dma_tx_desc_resources
|
||||
@@ -1969,7 +2019,7 @@ static void __free_dma_tx_desc_resources
|
||||
addr = tx_q->dma_tx;
|
||||
}
|
||||
|
||||
@ -626,7 +626,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
dma_free_coherent(priv->device, size, addr, tx_q->dma_tx_phy);
|
||||
|
||||
@@ -1976,28 +2026,32 @@ static void __free_dma_tx_desc_resources
|
||||
@@ -1977,28 +2027,32 @@ static void __free_dma_tx_desc_resources
|
||||
kfree(tx_q->tx_skbuff);
|
||||
}
|
||||
|
||||
@ -663,7 +663,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
struct stmmac_channel *ch = &priv->channel[queue];
|
||||
bool xdp_prog = stmmac_xdp_is_enabled(priv);
|
||||
struct page_pool_params pp_params = { 0 };
|
||||
@@ -2009,8 +2063,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2010,8 +2064,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
rx_q->priv_data = priv;
|
||||
|
||||
pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
|
||||
@ -674,7 +674,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
pp_params.order = ilog2(num_pages);
|
||||
pp_params.nid = dev_to_node(priv->device);
|
||||
pp_params.dev = priv->device;
|
||||
@@ -2025,7 +2079,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2026,7 +2080,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -683,7 +683,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(*rx_q->buf_pool),
|
||||
GFP_KERNEL);
|
||||
if (!rx_q->buf_pool)
|
||||
@@ -2033,7 +2087,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2034,7 +2088,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
|
||||
if (priv->extend_desc) {
|
||||
rx_q->dma_erx = dma_alloc_coherent(priv->device,
|
||||
@ -692,7 +692,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_extended_desc),
|
||||
&rx_q->dma_rx_phy,
|
||||
GFP_KERNEL);
|
||||
@@ -2042,7 +2096,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2043,7 +2097,7 @@ static int __alloc_dma_rx_desc_resources
|
||||
|
||||
} else {
|
||||
rx_q->dma_rx = dma_alloc_coherent(priv->device,
|
||||
@ -701,7 +701,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct dma_desc),
|
||||
&rx_q->dma_rx_phy,
|
||||
GFP_KERNEL);
|
||||
@@ -2067,7 +2121,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
@@ -2068,7 +2122,8 @@ static int __alloc_dma_rx_desc_resources
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -711,7 +711,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
u32 rx_count = priv->plat->rx_queues_to_use;
|
||||
u32 queue;
|
||||
@@ -2075,7 +2130,7 @@ static int alloc_dma_rx_desc_resources(s
|
||||
@@ -2076,7 +2131,7 @@ static int alloc_dma_rx_desc_resources(s
|
||||
|
||||
/* RX queues buffers and DMA */
|
||||
for (queue = 0; queue < rx_count; queue++) {
|
||||
@ -720,7 +720,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ret)
|
||||
goto err_dma;
|
||||
}
|
||||
@@ -2083,7 +2138,7 @@ static int alloc_dma_rx_desc_resources(s
|
||||
@@ -2084,7 +2139,7 @@ static int alloc_dma_rx_desc_resources(s
|
||||
return 0;
|
||||
|
||||
err_dma:
|
||||
@ -729,7 +729,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2091,28 +2146,31 @@ err_dma:
|
||||
@@ -2092,28 +2147,31 @@ err_dma:
|
||||
/**
|
||||
* __alloc_dma_tx_desc_resources - alloc TX resources (per queue).
|
||||
* @priv: private structure
|
||||
@ -765,7 +765,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
sizeof(struct sk_buff *),
|
||||
GFP_KERNEL);
|
||||
if (!tx_q->tx_skbuff)
|
||||
@@ -2125,7 +2183,7 @@ static int __alloc_dma_tx_desc_resources
|
||||
@@ -2126,7 +2184,7 @@ static int __alloc_dma_tx_desc_resources
|
||||
else
|
||||
size = sizeof(struct dma_desc);
|
||||
|
||||
@ -774,7 +774,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
addr = dma_alloc_coherent(priv->device, size,
|
||||
&tx_q->dma_tx_phy, GFP_KERNEL);
|
||||
@@ -2142,7 +2200,8 @@ static int __alloc_dma_tx_desc_resources
|
||||
@@ -2143,7 +2201,8 @@ static int __alloc_dma_tx_desc_resources
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -784,7 +784,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
{
|
||||
u32 tx_count = priv->plat->tx_queues_to_use;
|
||||
u32 queue;
|
||||
@@ -2150,7 +2209,7 @@ static int alloc_dma_tx_desc_resources(s
|
||||
@@ -2151,7 +2210,7 @@ static int alloc_dma_tx_desc_resources(s
|
||||
|
||||
/* TX queues buffers and DMA */
|
||||
for (queue = 0; queue < tx_count; queue++) {
|
||||
@ -793,7 +793,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ret)
|
||||
goto err_dma;
|
||||
}
|
||||
@@ -2158,27 +2217,29 @@ static int alloc_dma_tx_desc_resources(s
|
||||
@@ -2159,27 +2218,29 @@ static int alloc_dma_tx_desc_resources(s
|
||||
return 0;
|
||||
|
||||
err_dma:
|
||||
@ -827,7 +827,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2186,16 +2247,18 @@ static int alloc_dma_desc_resources(stru
|
||||
@@ -2187,16 +2248,18 @@ static int alloc_dma_desc_resources(stru
|
||||
/**
|
||||
* free_dma_desc_resources - free dma desc resources
|
||||
* @priv: private structure
|
||||
@ -849,7 +849,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2684,8 +2747,8 @@ static void stmmac_tx_err(struct stmmac_
|
||||
@@ -2685,8 +2748,8 @@ static void stmmac_tx_err(struct stmmac_
|
||||
netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));
|
||||
|
||||
stmmac_stop_tx_dma(priv, chan);
|
||||
@ -860,7 +860,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac_reset_tx_queue(priv, chan);
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
tx_q->dma_tx_phy, chan);
|
||||
@@ -3682,19 +3745,93 @@ static int stmmac_request_irq(struct net
|
||||
@@ -3683,19 +3746,93 @@ static int stmmac_request_irq(struct net
|
||||
}
|
||||
|
||||
/**
|
||||
@ -957,7 +957,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
u32 chan;
|
||||
int ret;
|
||||
|
||||
@@ -3721,45 +3858,10 @@ static int stmmac_open(struct net_device
|
||||
@@ -3722,45 +3859,10 @@ static int stmmac_open(struct net_device
|
||||
memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats));
|
||||
priv->xstats.threshold = tc;
|
||||
|
||||
@ -1005,7 +1005,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
if (priv->plat->serdes_powerup) {
|
||||
ret = priv->plat->serdes_powerup(dev, priv->plat->bsp_priv);
|
||||
@@ -3802,14 +3904,28 @@ irq_error:
|
||||
@@ -3803,14 +3905,28 @@ irq_error:
|
||||
|
||||
stmmac_hw_teardown(dev);
|
||||
init_error:
|
||||
@ -1036,7 +1036,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static void stmmac_fpe_stop_wq(struct stmmac_priv *priv)
|
||||
{
|
||||
set_bit(__FPE_REMOVING, &priv->fpe_task_state);
|
||||
@@ -3856,7 +3972,7 @@ static int stmmac_release(struct net_dev
|
||||
@@ -3857,7 +3973,7 @@ static int stmmac_release(struct net_dev
|
||||
stmmac_stop_all_dma(priv);
|
||||
|
||||
/* Release and free the Rx/Tx resources */
|
||||
@ -1045,7 +1045,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Disable the MAC Rx/Tx */
|
||||
stmmac_mac_set(priv, priv->ioaddr, false);
|
||||
@@ -6395,7 +6511,7 @@ void stmmac_disable_rx_queue(struct stmm
|
||||
@@ -6396,7 +6512,7 @@ void stmmac_disable_rx_queue(struct stmm
|
||||
spin_unlock_irqrestore(&ch->lock, flags);
|
||||
|
||||
stmmac_stop_rx_dma(priv, queue);
|
||||
@ -1054,7 +1054,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
@@ -6406,21 +6522,21 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
@@ -6407,21 +6523,21 @@ void stmmac_enable_rx_queue(struct stmma
|
||||
u32 buf_size;
|
||||
int ret;
|
||||
|
||||
@ -1080,7 +1080,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
rx_q->dma_rx_phy, rx_q->queue_index);
|
||||
@@ -6458,7 +6574,7 @@ void stmmac_disable_tx_queue(struct stmm
|
||||
@@ -6459,7 +6575,7 @@ void stmmac_disable_tx_queue(struct stmm
|
||||
spin_unlock_irqrestore(&ch->lock, flags);
|
||||
|
||||
stmmac_stop_tx_dma(priv, queue);
|
||||
@ -1089,7 +1089,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue)
|
||||
@@ -6468,21 +6584,21 @@ void stmmac_enable_tx_queue(struct stmma
|
||||
@@ -6469,21 +6585,21 @@ void stmmac_enable_tx_queue(struct stmma
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
@ -1115,7 +1115,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||
tx_q->dma_tx_phy, tx_q->queue_index);
|
||||
@@ -6522,7 +6638,7 @@ void stmmac_xdp_release(struct net_devic
|
||||
@@ -6523,7 +6639,7 @@ void stmmac_xdp_release(struct net_devic
|
||||
stmmac_stop_all_dma(priv);
|
||||
|
||||
/* Release and free the Rx/Tx resources */
|
||||
@ -1124,7 +1124,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Disable the MAC Rx/Tx */
|
||||
stmmac_mac_set(priv, priv->ioaddr, false);
|
||||
@@ -6547,14 +6663,14 @@ int stmmac_xdp_open(struct net_device *d
|
||||
@@ -6548,14 +6664,14 @@ int stmmac_xdp_open(struct net_device *d
|
||||
u32 chan;
|
||||
int ret;
|
||||
|
||||
@ -1141,7 +1141,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (ret < 0) {
|
||||
netdev_err(dev, "%s: DMA descriptors initialization failed\n",
|
||||
__func__);
|
||||
@@ -6636,7 +6752,7 @@ irq_error:
|
||||
@@ -6637,7 +6753,7 @@ irq_error:
|
||||
|
||||
stmmac_hw_teardown(dev);
|
||||
init_error:
|
||||
@ -1150,7 +1150,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
dma_desc_error:
|
||||
return ret;
|
||||
}
|
||||
@@ -7497,7 +7613,7 @@ int stmmac_resume(struct device *dev)
|
||||
@@ -7498,7 +7614,7 @@ int stmmac_resume(struct device *dev)
|
||||
stmmac_reset_queues_param(priv);
|
||||
|
||||
stmmac_free_tx_skbufs(priv);
|
||||
|
||||
@ -19,7 +19,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
||||
@@ -5624,18 +5624,15 @@ static int stmmac_change_mtu(struct net_
|
||||
@@ -5625,18 +5625,15 @@ static int stmmac_change_mtu(struct net_
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
int txfifosz = priv->plat->tx_fifo_size;
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
if (stmmac_xdp_is_enabled(priv) && new_mtu > ETH_DATA_LEN) {
|
||||
netdev_dbg(priv->dev, "Jumbo frames not supported for XDP\n");
|
||||
return -EINVAL;
|
||||
@@ -5647,8 +5644,29 @@ static int stmmac_change_mtu(struct net_
|
||||
@@ -5648,8 +5645,29 @@ static int stmmac_change_mtu(struct net_
|
||||
if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
@ -206,7 +206,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1139,9 +1141,33 @@ struct nvmem_device *devm_nvmem_device_g
|
||||
@@ -1142,9 +1144,33 @@ struct nvmem_device *devm_nvmem_device_g
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_nvmem_device_get);
|
||||
|
||||
@ -240,7 +240,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
struct nvmem_cell *cell = ERR_PTR(-ENOENT);
|
||||
struct nvmem_cell_lookup *lookup;
|
||||
struct nvmem_device *nvmem;
|
||||
@@ -1166,11 +1192,15 @@ nvmem_cell_get_from_lookup(struct device
|
||||
@@ -1169,11 +1195,15 @@ nvmem_cell_get_from_lookup(struct device
|
||||
break;
|
||||
}
|
||||
|
||||
@ -259,7 +259,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1181,10 +1211,10 @@ nvmem_cell_get_from_lookup(struct device
|
||||
@@ -1184,10 +1214,10 @@ nvmem_cell_get_from_lookup(struct device
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_OF)
|
||||
@ -273,7 +273,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
mutex_lock(&nvmem_mutex);
|
||||
list_for_each_entry(iter, &nvmem->cells, node) {
|
||||
@@ -1214,6 +1244,7 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
@@ -1217,6 +1247,7 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
{
|
||||
struct device_node *cell_np, *nvmem_np;
|
||||
struct nvmem_device *nvmem;
|
||||
@ -281,7 +281,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
struct nvmem_cell *cell;
|
||||
int index = 0;
|
||||
|
||||
@@ -1234,12 +1265,16 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
@@ -1237,12 +1268,16 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
if (IS_ERR(nvmem))
|
||||
return ERR_CAST(nvmem);
|
||||
|
||||
@ -300,7 +300,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
return cell;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_nvmem_cell_get);
|
||||
@@ -1345,13 +1380,17 @@ EXPORT_SYMBOL(devm_nvmem_cell_put);
|
||||
@@ -1348,13 +1383,17 @@ EXPORT_SYMBOL(devm_nvmem_cell_put);
|
||||
*/
|
||||
void nvmem_cell_put(struct nvmem_cell *cell)
|
||||
{
|
||||
@ -320,7 +320,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
{
|
||||
u8 *p, *b;
|
||||
int i, extra, bit_offset = cell->bit_offset;
|
||||
@@ -1385,8 +1424,8 @@ static void nvmem_shift_read_buffer_in_p
|
||||
@@ -1388,8 +1427,8 @@ static void nvmem_shift_read_buffer_in_p
|
||||
}
|
||||
|
||||
static int __nvmem_cell_read(struct nvmem_device *nvmem,
|
||||
@ -331,7 +331,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -1417,18 +1456,18 @@ static int __nvmem_cell_read(struct nvme
|
||||
@@ -1420,18 +1459,18 @@ static int __nvmem_cell_read(struct nvme
|
||||
*/
|
||||
void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len)
|
||||
{
|
||||
@ -353,7 +353,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
if (rc) {
|
||||
kfree(buf);
|
||||
return ERR_PTR(rc);
|
||||
@@ -1438,7 +1477,7 @@ void *nvmem_cell_read(struct nvmem_cell
|
||||
@@ -1441,7 +1480,7 @@ void *nvmem_cell_read(struct nvmem_cell
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmem_cell_read);
|
||||
|
||||
@ -362,7 +362,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
u8 *_buf, int len)
|
||||
{
|
||||
struct nvmem_device *nvmem = cell->nvmem;
|
||||
@@ -1491,16 +1530,7 @@ err:
|
||||
@@ -1494,16 +1533,7 @@ err:
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
@ -380,7 +380,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
{
|
||||
struct nvmem_device *nvmem = cell->nvmem;
|
||||
int rc;
|
||||
@@ -1526,6 +1556,21 @@ int nvmem_cell_write(struct nvmem_cell *
|
||||
@@ -1529,6 +1559,21 @@ int nvmem_cell_write(struct nvmem_cell *
|
||||
|
||||
return len;
|
||||
}
|
||||
@ -402,7 +402,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
EXPORT_SYMBOL_GPL(nvmem_cell_write);
|
||||
|
||||
static int nvmem_cell_read_common(struct device *dev, const char *cell_id,
|
||||
@@ -1628,7 +1673,7 @@ static const void *nvmem_cell_read_varia
|
||||
@@ -1631,7 +1676,7 @@ static const void *nvmem_cell_read_varia
|
||||
if (IS_ERR(cell))
|
||||
return cell;
|
||||
|
||||
@ -411,7 +411,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
buf = nvmem_cell_read(cell, len);
|
||||
nvmem_cell_put(cell);
|
||||
if (IS_ERR(buf))
|
||||
@@ -1724,18 +1769,18 @@ EXPORT_SYMBOL_GPL(nvmem_cell_read_variab
|
||||
@@ -1727,18 +1772,18 @@ EXPORT_SYMBOL_GPL(nvmem_cell_read_variab
|
||||
ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem,
|
||||
struct nvmem_cell_info *info, void *buf)
|
||||
{
|
||||
@ -433,7 +433,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -1755,17 +1800,17 @@ EXPORT_SYMBOL_GPL(nvmem_device_cell_read
|
||||
@@ -1758,17 +1803,17 @@ EXPORT_SYMBOL_GPL(nvmem_device_cell_read
|
||||
int nvmem_device_cell_write(struct nvmem_device *nvmem,
|
||||
struct nvmem_cell_info *info, void *buf)
|
||||
{
|
||||
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
struct gpio_desc *wp_gpio;
|
||||
void *priv;
|
||||
};
|
||||
@@ -797,6 +798,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
@@ -799,6 +800,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
nvmem->type = config->type;
|
||||
nvmem->reg_read = config->reg_read;
|
||||
nvmem->reg_write = config->reg_write;
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
nvmem->keepout = config->keepout;
|
||||
nvmem->nkeepout = config->nkeepout;
|
||||
if (config->of_node)
|
||||
@@ -1438,6 +1440,13 @@ static int __nvmem_cell_read(struct nvme
|
||||
@@ -1441,6 +1443,13 @@ static int __nvmem_cell_read(struct nvme
|
||||
if (cell->bit_offset || cell->nbits)
|
||||
nvmem_shift_read_buffer_in_place(cell, buf);
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -940,28 +940,6 @@ struct nvmem_device *devm_nvmem_register
|
||||
@@ -943,28 +943,6 @@ struct nvmem_device *devm_nvmem_register
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_nvmem_register);
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -902,9 +902,9 @@ void nvmem_unregister(struct nvmem_devic
|
||||
@@ -905,9 +905,9 @@ void nvmem_unregister(struct nvmem_devic
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmem_unregister);
|
||||
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -921,20 +921,16 @@ static void devm_nvmem_release(struct de
|
||||
@@ -924,20 +924,16 @@ static void devm_nvmem_release(struct de
|
||||
struct nvmem_device *devm_nvmem_register(struct device *dev,
|
||||
const struct nvmem_config *config)
|
||||
{
|
||||
|
||||
@ -18,7 +18,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -898,7 +898,8 @@ static void nvmem_device_release(struct
|
||||
@@ -901,7 +901,8 @@ static void nvmem_device_release(struct
|
||||
*/
|
||||
void nvmem_unregister(struct nvmem_device *nvmem)
|
||||
{
|
||||
|
||||
@ -19,7 +19,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -17953,6 +17953,11 @@ L: netdev@vger.kernel.org
|
||||
@@ -17954,6 +17954,11 @@ L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/dlink/sundance.c
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -12353,6 +12353,14 @@ S: Supported
|
||||
@@ -12354,6 +12354,14 @@ S: Supported
|
||||
F: Documentation/devicetree/bindings/mtd/atmel-nand.txt
|
||||
F: drivers/mtd/nand/raw/atmel/*
|
||||
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
From 5544e90c81261e82e02bbf7c6015a4b9c8c825ef Mon Sep 17 00:00:00 2001
|
||||
From: Gaosheng Cui <cuigaosheng1@huawei.com>
|
||||
Date: Fri, 16 Sep 2022 13:20:50 +0100
|
||||
Subject: [PATCH] nvmem: core: add error handling for dev_set_name
|
||||
|
||||
The type of return value of dev_set_name is int, which may return
|
||||
wrong result, so we add error handling for it to reclaim memory
|
||||
of nvmem resource, and return early when an error occurs.
|
||||
|
||||
Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20220916122100.170016-4-srinivas.kandagatla@linaro.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -809,18 +809,24 @@ struct nvmem_device *nvmem_register(cons
|
||||
|
||||
switch (config->id) {
|
||||
case NVMEM_DEVID_NONE:
|
||||
- dev_set_name(&nvmem->dev, "%s", config->name);
|
||||
+ rval = dev_set_name(&nvmem->dev, "%s", config->name);
|
||||
break;
|
||||
case NVMEM_DEVID_AUTO:
|
||||
- dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
|
||||
+ rval = dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
|
||||
break;
|
||||
default:
|
||||
- dev_set_name(&nvmem->dev, "%s%d",
|
||||
+ rval = dev_set_name(&nvmem->dev, "%s%d",
|
||||
config->name ? : "nvmem",
|
||||
config->name ? config->id : nvmem->id);
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (rval) {
|
||||
+ ida_free(&nvmem_ida, nvmem->id);
|
||||
+ kfree(nvmem);
|
||||
+ return ERR_PTR(rval);
|
||||
+ }
|
||||
+
|
||||
nvmem->read_only = device_property_present(config->dev, "read-only") ||
|
||||
config->read_only || !nvmem->reg_write;
|
||||
|
||||
@ -21,7 +21,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -1240,16 +1240,21 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
@@ -1237,16 +1237,21 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
if (!cell_np)
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
};
|
||||
|
||||
static DEFINE_MUTEX(nvmem_mutex);
|
||||
@@ -1125,7 +1126,8 @@ struct nvmem_device *devm_nvmem_device_g
|
||||
@@ -1122,7 +1123,8 @@ struct nvmem_device *devm_nvmem_device_g
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_nvmem_device_get);
|
||||
|
||||
@ -57,7 +57,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
{
|
||||
struct nvmem_cell *cell;
|
||||
const char *name = NULL;
|
||||
@@ -1144,6 +1146,7 @@ static struct nvmem_cell *nvmem_create_c
|
||||
@@ -1141,6 +1143,7 @@ static struct nvmem_cell *nvmem_create_c
|
||||
|
||||
cell->id = name;
|
||||
cell->entry = entry;
|
||||
@ -65,7 +65,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
return cell;
|
||||
}
|
||||
@@ -1182,7 +1185,7 @@ nvmem_cell_get_from_lookup(struct device
|
||||
@@ -1179,7 +1182,7 @@ nvmem_cell_get_from_lookup(struct device
|
||||
__nvmem_device_put(nvmem);
|
||||
cell = ERR_PTR(-ENOENT);
|
||||
} else {
|
||||
@ -74,7 +74,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
if (IS_ERR(cell))
|
||||
__nvmem_device_put(nvmem);
|
||||
}
|
||||
@@ -1230,15 +1233,27 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
@@ -1227,15 +1230,27 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
struct nvmem_device *nvmem;
|
||||
struct nvmem_cell_entry *cell_entry;
|
||||
struct nvmem_cell *cell;
|
||||
@ -105,7 +105,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
nvmem_np = of_get_parent(cell_np);
|
||||
if (!nvmem_np) {
|
||||
@@ -1260,7 +1275,7 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
@@ -1257,7 +1272,7 @@ struct nvmem_cell *of_nvmem_cell_get(str
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
if (IS_ERR(cell))
|
||||
__nvmem_device_put(nvmem);
|
||||
|
||||
@@ -1413,8 +1428,8 @@ static void nvmem_shift_read_buffer_in_p
|
||||
@@ -1410,8 +1425,8 @@ static void nvmem_shift_read_buffer_in_p
|
||||
}
|
||||
|
||||
static int __nvmem_cell_read(struct nvmem_device *nvmem,
|
||||
@ -125,7 +125,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -1428,7 +1443,7 @@ static int __nvmem_cell_read(struct nvme
|
||||
@@ -1425,7 +1440,7 @@ static int __nvmem_cell_read(struct nvme
|
||||
nvmem_shift_read_buffer_in_place(cell, buf);
|
||||
|
||||
if (nvmem->cell_post_process) {
|
||||
@ -134,7 +134,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
cell->offset, buf, cell->bytes);
|
||||
if (rc)
|
||||
return rc;
|
||||
@@ -1463,7 +1478,7 @@ void *nvmem_cell_read(struct nvmem_cell
|
||||
@@ -1460,7 +1475,7 @@ void *nvmem_cell_read(struct nvmem_cell
|
||||
if (!buf)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
@ -143,7 +143,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
if (rc) {
|
||||
kfree(buf);
|
||||
return ERR_PTR(rc);
|
||||
@@ -1776,7 +1791,7 @@ ssize_t nvmem_device_cell_read(struct nv
|
||||
@@ -1773,7 +1788,7 @@ ssize_t nvmem_device_cell_read(struct nv
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
From a621c4fdc7e1ef6b9aabe083d57bf6a637fdaf76 Mon Sep 17 00:00:00 2001
|
||||
From: Kuniyuki Iwashima <kuniyu@amazon.com>
|
||||
Date: Mon, 27 Feb 2023 13:15:48 -0800
|
||||
Subject: [PATCH] net: Remove WARN_ON_ONCE(sk->sk_forward_alloc) from
|
||||
sk_stream_kill_queues().
|
||||
|
||||
commit 62ec33b44e0f7168ff2886520fec6fb62d03b5a3 upstream.
|
||||
|
||||
Christoph Paasch reported that commit b5fc29233d28 ("inet6: Remove
|
||||
inet6_destroy_sock() in sk->sk_prot->destroy().") started triggering
|
||||
WARN_ON_ONCE(sk->sk_forward_alloc) in sk_stream_kill_queues(). [0 - 2]
|
||||
Also, we can reproduce it by a program in [3].
|
||||
|
||||
In the commit, we delay freeing ipv6_pinfo.pktoptions from sk->destroy()
|
||||
to sk->sk_destruct(), so sk->sk_forward_alloc is no longer zero in
|
||||
inet_csk_destroy_sock().
|
||||
|
||||
The same check has been in inet_sock_destruct() from at least v2.6,
|
||||
we can just remove the WARN_ON_ONCE(). However, among the users of
|
||||
sk_stream_kill_queues(), only CAIF is not calling inet_sock_destruct().
|
||||
Thus, we add the same WARN_ON_ONCE() to caif_sock_destructor().
|
||||
|
||||
[0]: https://lore.kernel.org/netdev/39725AB4-88F1-41B3-B07F-949C5CAEFF4F@icloud.com/
|
||||
[1]: https://github.com/multipath-tcp/mptcp_net-next/issues/341
|
||||
[2]:
|
||||
WARNING: CPU: 0 PID: 3232 at net/core/stream.c:212 sk_stream_kill_queues+0x2f9/0x3e0
|
||||
Modules linked in:
|
||||
CPU: 0 PID: 3232 Comm: syz-executor.0 Not tainted 6.2.0-rc5ab24eb4698afbe147b424149c529e2a43ec24eb5 #2
|
||||
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
|
||||
RIP: 0010:sk_stream_kill_queues+0x2f9/0x3e0
|
||||
Code: 03 0f b6 04 02 84 c0 74 08 3c 03 0f 8e ec 00 00 00 8b ab 08 01 00 00 e9 60 ff ff ff e8 d0 5f b6 fe 0f 0b eb 97 e8 c7 5f b6 fe <0f> 0b eb a0 e8 be 5f b6 fe 0f 0b e9 6a fe ff ff e8 02 07 e3 fe e9
|
||||
RSP: 0018:ffff88810570fc68 EFLAGS: 00010293
|
||||
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
|
||||
RDX: ffff888101f38f40 RSI: ffffffff8285e529 RDI: 0000000000000005
|
||||
RBP: 0000000000000ce0 R08: 0000000000000005 R09: 0000000000000000
|
||||
R10: 0000000000000ce0 R11: 0000000000000001 R12: ffff8881009e9488
|
||||
R13: ffffffff84af2cc0 R14: 0000000000000000 R15: ffff8881009e9458
|
||||
FS: 00007f7fdfbd5800(0000) GS:ffff88811b600000(0000) knlGS:0000000000000000
|
||||
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
|
||||
CR2: 0000001b32923000 CR3: 00000001062fc006 CR4: 0000000000170ef0
|
||||
Call Trace:
|
||||
<TASK>
|
||||
inet_csk_destroy_sock+0x1a1/0x320
|
||||
__tcp_close+0xab6/0xe90
|
||||
tcp_close+0x30/0xc0
|
||||
inet_release+0xe9/0x1f0
|
||||
inet6_release+0x4c/0x70
|
||||
__sock_release+0xd2/0x280
|
||||
sock_close+0x15/0x20
|
||||
__fput+0x252/0xa20
|
||||
task_work_run+0x169/0x250
|
||||
exit_to_user_mode_prepare+0x113/0x120
|
||||
syscall_exit_to_user_mode+0x1d/0x40
|
||||
do_syscall_64+0x48/0x90
|
||||
entry_SYSCALL_64_after_hwframe+0x72/0xdc
|
||||
RIP: 0033:0x7f7fdf7ae28d
|
||||
Code: c1 20 00 00 75 10 b8 03 00 00 00 0f 05 48 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 ee fb ff ff 48 89 04 24 b8 03 00 00 00 0f 05 <48> 8b 3c 24 48 89 c2 e8 37 fc ff ff 48 89 d0 48 83 c4 08 48 3d 01
|
||||
RSP: 002b:00000000007dfbb0 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
|
||||
RAX: 0000000000000000 RBX: 0000000000000004 RCX: 00007f7fdf7ae28d
|
||||
RDX: 0000000000000000 RSI: ffffffffffffffff RDI: 0000000000000003
|
||||
RBP: 0000000000000000 R08: 000000007f338e0f R09: 0000000000000e0f
|
||||
R10: 000000007f338e13 R11: 0000000000000293 R12: 00007f7fdefff000
|
||||
R13: 00007f7fdefffcd8 R14: 00007f7fdefffce0 R15: 00007f7fdefffcd8
|
||||
</TASK>
|
||||
|
||||
[3]: https://lore.kernel.org/netdev/20230208004245.83497-1-kuniyu@amazon.com/
|
||||
|
||||
Fixes: b5fc29233d28 ("inet6: Remove inet6_destroy_sock() in sk->sk_prot->destroy().")
|
||||
Reported-by: syzbot <syzkaller@googlegroups.com>
|
||||
Reported-by: Christoph Paasch <christophpaasch@icloud.com>
|
||||
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
net/caif/caif_socket.c | 1 +
|
||||
net/core/stream.c | 1 -
|
||||
2 files changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/net/caif/caif_socket.c
|
||||
+++ b/net/caif/caif_socket.c
|
||||
@@ -1020,6 +1020,7 @@ static void caif_sock_destructor(struct
|
||||
return;
|
||||
}
|
||||
sk_stream_kill_queues(&cf_sk->sk);
|
||||
+ WARN_ON(sk->sk_forward_alloc);
|
||||
caif_free_client(&cf_sk->layer);
|
||||
}
|
||||
|
||||
--- a/net/core/stream.c
|
||||
+++ b/net/core/stream.c
|
||||
@@ -209,7 +209,6 @@ void sk_stream_kill_queues(struct sock *
|
||||
sk_mem_reclaim(sk);
|
||||
|
||||
WARN_ON(sk->sk_wmem_queued);
|
||||
- WARN_ON(sk->sk_forward_alloc);
|
||||
|
||||
/* It is _impossible_ for the backlog to contain anything
|
||||
* when we get here. All user references to this socket
|
||||
@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -2352,6 +2352,13 @@ config UNUSED_KSYMS_WHITELIST
|
||||
@@ -2356,6 +2356,13 @@ config UNUSED_KSYMS_WHITELIST
|
||||
one per line. The path can be absolute, or relative to the kernel
|
||||
source tree.
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ Subject: [PATCH] Kconfig: add tristate for OID and ASNI string
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -2384,7 +2384,7 @@ config PADATA
|
||||
@@ -2388,7 +2388,7 @@ config PADATA
|
||||
bool
|
||||
|
||||
config ASN1
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/dsa/tag_mtk.c
|
||||
+++ b/net/dsa/tag_mtk.c
|
||||
@@ -25,6 +25,14 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
@@ -25,6 +25,13 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
u8 xmit_tpid;
|
||||
u8 *mtk_tag;
|
||||
|
||||
@ -21,8 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ * corrupted. With tags enabled, we need to make sure that packets are
|
||||
+ * at least 68 bytes (including FCS and tag).
|
||||
+ */
|
||||
+ if (__skb_put_padto(skb, ETH_ZLEN + MTK_HDR_LEN, false))
|
||||
+ return NULL;
|
||||
+ eth_skb_pad(skb);
|
||||
+
|
||||
/* Build the special tag after the MAC Source Address. If VLAN header
|
||||
* is present, it's required that VLAN header and special tag is
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1443,6 +1443,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
||||
@@ -1447,6 +1447,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW
|
||||
the unaligned access emulation.
|
||||
see arch/parisc/kernel/unaligned.c for reference
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/dsa/tag_mtk.c
|
||||
+++ b/net/dsa/tag_mtk.c
|
||||
@@ -25,6 +25,14 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
@@ -25,6 +25,13 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
u8 xmit_tpid;
|
||||
u8 *mtk_tag;
|
||||
|
||||
@ -21,8 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ * corrupted. With tags enabled, we need to make sure that packets are
|
||||
+ * at least 68 bytes (including FCS and tag).
|
||||
+ */
|
||||
+ if (__skb_put_padto(skb, ETH_ZLEN + MTK_HDR_LEN, false))
|
||||
+ return NULL;
|
||||
+ eth_skb_pad(skb);
|
||||
+
|
||||
/* Build the special tag after the MAC Source Address. If VLAN header
|
||||
* is present, it's required that VLAN header and special tag is
|
||||
|
||||
@ -9,9 +9,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/dsa/tag_mtk.c
|
||||
+++ b/net/dsa/tag_mtk.c
|
||||
@@ -33,6 +33,8 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
if (__skb_put_padto(skb, ETH_ZLEN + MTK_HDR_LEN, false))
|
||||
return NULL;
|
||||
@@ -32,6 +32,8 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
*/
|
||||
eth_skb_pad(skb);
|
||||
|
||||
+ skb_set_queue_mapping(skb, dp->index);
|
||||
+
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1810,6 +1810,15 @@ config EMBEDDED
|
||||
@@ -1814,6 +1814,15 @@ config EMBEDDED
|
||||
an embedded system so certain expert options are available
|
||||
for configuration.
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user