generic: 6.6: manually refresh hack patches

Refresh hack patches for kernel 6.6.

Signed-off-by: Weijie Gao <hackpascal@gmail.com>
This commit is contained in:
Weijie Gao 2024-01-04 02:02:53 +08:00 committed by Robert Marko
parent 5b6bca812d
commit d9bc5c93de
19 changed files with 247 additions and 286 deletions

View File

@ -102,7 +102,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
endif # MODULES
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -988,6 +988,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
@@ -997,6 +997,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
static const char vermagic[] = VERMAGIC_STRING;
@ -110,15 +110,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
int try_to_force_load(struct module *mod, const char *reason)
{
#ifdef CONFIG_MODULE_FORCE_LOAD
@@ -999,6 +1000,7 @@ int try_to_force_load(struct module *mod
@@ -1008,6 +1009,7 @@ int try_to_force_load(struct module *mod
return -ENOEXEC;
#endif
}
+#endif
static char *get_modinfo(const struct load_info *info, const char *tag);
static char *get_next_modinfo(const struct load_info *info, const char *tag,
@@ -1958,9 +1960,11 @@ static int setup_load_info(struct load_i
/* Parse tag=value strings from .modinfo section */
char *module_next_tag_pair(char *string, unsigned long *secsize)
@@ -2075,9 +2077,11 @@ static void module_augment_kernel_taints
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
{
@ -131,14 +131,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic = NULL;
@@ -1981,6 +1985,7 @@ static int check_modinfo(struct module *
mod->name);
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
@@ -2091,6 +2095,7 @@ static int check_modinfo(struct module *
info->name, modmagic, vermagic);
return -ENOEXEC;
}
+#endif
check_modinfo_retpoline(mod, info);
err = check_modinfo_livepatch(mod, info);
if (err)
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1785,7 +1785,9 @@ static void read_symbols(const char *mod
@ -150,8 +150,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+#endif
}
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
@@ -1948,8 +1950,10 @@ static void add_header(struct buffer *b,
check_sec_ref(mod, &info);
@@ -1944,8 +1946,10 @@ static void add_header(struct buffer *b,
buf_printf(b, "BUILD_SALT;\n");
buf_printf(b, "BUILD_LTO_INFO;\n");
buf_printf(b, "\n");

View File

@ -11,12 +11,12 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -38,6 +38,9 @@ typedef struct {
__u8 b[16];
} guid_t;
typedef uint16_t __u16;
typedef unsigned char __u8;
+#ifdef __APPLE__
+#define uuid_t compat_uuid_t
+#endif
/* backwards compatibility, don't use in new code */
/* UUID types for backward compatibility, don't use in new code */
typedef struct {
__u8 b[16];

View File

@ -74,8 +74,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
struct page;
struct kmem_cache;
@@ -51,7 +55,9 @@ typedef __s8 s8;
#define __force
#define __user
#endif
#define __must_check
+#ifndef __cold
#define __cold
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/tools/arch/x86/include/asm/orc_types.h
+++ b/tools/arch/x86/include/asm/orc_types.h
@@ -40,7 +40,6 @@
#define ORC_REG_MAX 15
#define ORC_TYPE_REGS_PARTIAL 4
#ifndef __ASSEMBLY__
-#include <asm/byteorder.h>
@ -123,13 +123,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned sp_reg:4;
unsigned bp_reg:4;
unsigned type:2;
unsigned end:1;
unsigned type:3;
unsigned signal:1;
-#elif defined(__BIG_ENDIAN_BITFIELD)
+#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned bp_reg:4;
unsigned sp_reg:4;
unsigned unused:5;
unsigned unused:4;
--- a/tools/arch/x86/lib/insn.c
+++ b/tools/arch/x86/lib/insn.c
@@ -15,7 +15,11 @@
@ -199,15 +199,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
unsigned long __rb_parent_color;
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -4,7 +4,7 @@ include ../scripts/Makefile.arch
@@ -40,7 +40,7 @@ include ../scripts/Makefile.arch
OBJTOOL_CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED)
# always use the host compiler
AR = $(HOSTAR)
-CC = $(HOSTCC)
+CC = $(HOSTCC) $(HOST_EXTRACFLAGS)
LD = $(HOSTLD)
# Always want host compilation.
-HOST_OVERRIDES := CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)"
+HOST_OVERRIDES := CC="$(HOSTCC) $(HOST_EXTRACFLAGS)" LD="$(HOSTLD)" AR="$(HOSTAR)"
ifeq ($(srctree),)
AWK = awk
MKDIR = mkdir
@@ -43,6 +43,7 @@ BUILD_ORC := n
ifeq ($(SRCARCH),x86)
@ -252,8 +252,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
}
+#endif
#define NEGATIVE_RELOC ((void *)-1L)
static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn)
{
--- a/tools/objtool/include/objtool/objtool.h
+++ b/tools/objtool/include/objtool/objtool.h
@@ -12,7 +12,9 @@
@ -268,10 +268,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
bool clean;
--- a/tools/objtool/orc_dump.c
+++ b/tools/objtool/orc_dump.c
@@ -5,10 +5,10 @@
@@ -4,10 +4,10 @@
*/
#include <unistd.h>
#include <linux/objtool.h>
-#include <asm/orc_types.h>
#include <objtool/objtool.h>
#include <objtool/warn.h>
@ -285,7 +285,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
@@ -7,11 +7,11 @@
#include <string.h>
#include <linux/objtool.h>
#include <linux/objtool_types.h>
-#include <asm/orc_types.h>
#include <objtool/check.h>

View File

@ -13,7 +13,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -124,6 +124,7 @@ config ARM
select HAVE_VIRT_CPU_ACCOUNTING_GEN
select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
select IRQ_FORCED_THREADING
select LOCK_MM_AND_FIND_VMA
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION

View File

@ -27,8 +27,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+#define SYMTAB_DISCARD_GPL
+#endif
+
/* Align . to a 8 byte boundary equals to maximum function alignment. */
#define ALIGN_FUNCTION() . = ALIGN(8)
/* Align . function alignment. */
#define ALIGN_FUNCTION() . = ALIGN(CONFIG_FUNCTION_ALIGNMENT)
@@ -511,14 +521,14 @@
/* Kernel symbol table: Normal symbols */ \
@ -64,12 +64,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ SYMTAB_DISCARD_GPL \
*(.discard) \
*(.discard.*) \
*(.modinfo) \
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -72,6 +72,12 @@ struct kernel_symbol {
#else
*(.export_symbol) \
--- a/include/linux/export-internal.h
+++ b/include/linux/export-internal.h
@@ -23,6 +23,12 @@
#define __KSYM_REF(sym) ".long " #sym
#endif
+#ifdef MODULE
+#define __EXPORT_SUFFIX(sym)
@ -80,39 +80,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/*
* For every exported symbol, do the following:
*
@@ -87,7 +93,7 @@ struct kernel_symbol {
extern typeof(sym) sym; \
extern const char __kstrtab_##sym[]; \
extern const char __kstrtabns_##sym[]; \
- asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1 \n" \
+ asm(" .section \"__ksymtab_strings" __EXPORT_SUFFIX(sym) "\",\"aMS\",%progbits,1 \n" \
"__kstrtab_" #sym ": \n" \
" .asciz \"" #sym "\" \n" \
"__kstrtabns_" #sym ": \n" \
--- a/include/asm-generic/export.h
+++ b/include/asm-generic/export.h
@@ -31,6 +31,12 @@
#endif
.endm
+#ifdef MODULE
+#define __EXPORT_SUFFIX(name)
+#else
+#define __EXPORT_SUFFIX(name) + #name
+#endif
+
/*
* note on .section use: we specify progbits since usage of the "M" (SHF_MERGE)
* section flag requires it. Use '%progbits' instead of '@progbits' since the
@@ -44,7 +50,7 @@
__ksymtab_\name:
__put \val, __kstrtab_\name
.previous
- .section __ksymtab_strings,"aMS",%progbits,1
+ .section __ksymtab_strings __EXPORT_SUFFIX(name),"aMS",%progbits,1
__kstrtab_\name:
.asciz "\name"
.previous
@@ -35,7 +41,7 @@
* former apparently works on all arches according to the binutils source.
*/
#define __KSYMTAB(name, sym, sec, ns) \
- asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1" "\n" \
+ asm(" .section \"__ksymtab_strings" __EXPORT_SUFFIX(sym) "\",\"aMS\",%progbits,1" "\n" \
"__kstrtab_" #name ":" "\n" \
" .asciz \"" #name "\"" "\n" \
"__kstrtabns_" #name ":" "\n" \
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -388,7 +388,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa

View File

@ -35,7 +35,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
select CRYPTO_ALGAPI
@@ -75,7 +75,7 @@ config CRYPTO_AEAD2
select CRYPTO_RNG2
select CRYPTO_ALGAPI2
config CRYPTO_SKCIPHER
- tristate
@ -44,7 +44,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
select CRYPTO_ALGAPI
@@ -85,7 +85,7 @@ config CRYPTO_SKCIPHER2
select CRYPTO_RNG2
select CRYPTO_ALGAPI2
config CRYPTO_HASH
- tristate
@ -136,7 +136,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
config SND_SEQ_DEVICE
tristate
@@ -27,7 +27,7 @@ config SND_RAWMIDI
select SND_SEQ_DEVICE if SND_SEQUENCER != n
The device contains 16 substreams corresponding to UMP groups.
config SND_COMPRESS_OFFLOAD
- tristate

View File

@ -14,20 +14,27 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/base/regmap/Kconfig
+++ b/drivers/base/regmap/Kconfig
@@ -4,10 +4,9 @@
@@ -4,8 +4,7 @@
# subsystems should select the appropriate symbols.
config REGMAP
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SOUNDWIRE_MBQ || REGMAP_SCCB || REGMAP_I3C || REGMAP_SPI_AVMM || REGMAP_MDIO)
- bool
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SOUNDWIRE_MBQ || REGMAP_SCCB || REGMAP_I3C || REGMAP_SPI_AVMM || REGMAP_MDIO || REGMAP_FSI)
+ tristate
select IRQ_DOMAIN if REGMAP_IRQ
select MDIO_BUS if REGMAP_MDIO
- bool
+ tristate
help
@@ -19,7 +18,7 @@ config REGMAP
config REGCACHE_COMPRESSED
select LZO_COMPRESS
@@ -15,53 +14,67 @@ config REGCACHE_COMPRESSED
bool
config REGMAP_KUNIT
tristate "KUnit tests for regmap"
- depends on KUNIT && REGMAP
+ depends on KUNIT
default KUNIT_ALL_TESTS
select REGMAP_RAM
@@ -34,60 +33,76 @@ config REGMAP_BUILD
normally enabled.
config REGMAP_AC97
+ select REGMAP
@ -70,6 +77,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ select REGMAP
bool
config REGMAP_RAM
+ select REGMAP
tristate
config REGMAP_SOUNDWIRE
+ select REGMAP
tristate
@ -94,27 +105,28 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ select REGMAP
tristate
depends on SPI
config REGMAP_FSI
+ select REGMAP
tristate
depends on FSI
--- a/drivers/base/regmap/Makefile
+++ b/drivers/base/regmap/Makefile
@@ -2,10 +2,14 @@
@@ -2,9 +2,11 @@
# For include/trace/define_trace.h to include trace.h
CFLAGS_regmap.o := -I$(src)
-obj-$(CONFIG_REGMAP) += regmap.o regcache.o
-obj-$(CONFIG_REGMAP) += regcache-rbtree.o regcache-flat.o
-obj-$(CONFIG_REGCACHE_COMPRESSED) += regcache-lzo.o
-obj-$(CONFIG_REGMAP) += regcache-rbtree.o regcache-flat.o regcache-maple.o
-obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o
+regmap-core-objs = regmap.o regcache.o regcache-rbtree.o regcache-flat.o
+regmap-core-objs = regmap.o regcache.o regcache-rbtree.o regcache-flat.o regcache-maple.o
+ifdef CONFIG_DEBUG_FS
+regmap-core-objs += regmap-debugfs.o
+endif
+ifdef CONFIG_REGCACHE_COMPRESSED
+regmap-core-objs += regcache-lzo.o
+endif
+obj-$(CONFIG_REGMAP) += regmap-core.o
obj-$(CONFIG_REGMAP_KUNIT) += regmap-kunit.o
obj-$(CONFIG_REGMAP_AC97) += regmap-ac97.o
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o
obj-$(CONFIG_REGMAP_SLIMBUS) += regmap-slimbus.o
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -9,6 +9,7 @@

View File

@ -14,39 +14,41 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -142,13 +142,13 @@ config CRYPTO_MANAGER
@@ -148,15 +148,15 @@ config CRYPTO_MANAGER
cbc(aes).
config CRYPTO_MANAGER2
- def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y)
- select CRYPTO_AEAD2
- select CRYPTO_HASH2
- select CRYPTO_SKCIPHER2
- select CRYPTO_AKCIPHER2
- select CRYPTO_KPP2
- select CRYPTO_ACOMP2
- select CRYPTO_AEAD2
- select CRYPTO_AKCIPHER2
- select CRYPTO_SIG2
- select CRYPTO_HASH2
- select CRYPTO_KPP2
- select CRYPTO_RNG2
- select CRYPTO_SKCIPHER2
+ def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y && !CRYPTO_MANAGER_DISABLE_TESTS)
+ select CRYPTO_AEAD2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_HASH2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_SKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_AKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_KPP2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_ACOMP2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_AEAD2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_AKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_SIG2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_HASH2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_KPP2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_RNG2 if !CRYPTO_MANAGER_DISABLE_TESTS
+ select CRYPTO_SKCIPHER2 if !CRYPTO_MANAGER_DISABLE_TESTS
config CRYPTO_USER
tristate "Userspace cryptographic algorithm configuration"
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
@@ -211,8 +211,12 @@ static int cryptomgr_schedule_test(struc
type = alg->cra_flags;
@@ -204,6 +204,10 @@ static int cryptomgr_schedule_test(struc
memcpy(param->alg, alg->cra_name, sizeof(param->alg));
param->type = alg->cra_flags;
/* Do not test internal algorithms. */
+#ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS
+ type |= CRYPTO_ALG_TESTED;
+#else
if (type & CRYPTO_ALG_INTERNAL)
type |= CRYPTO_ALG_TESTED;
+ param->type |= CRYPTO_ALG_TESTED;
+#endif
param->type = type;
+
thread = kthread_run(cryptomgr_test, param, "cryptomgr_test");
if (IS_ERR(thread))
goto err_free_param;

View File

@ -14,11 +14,11 @@ from backports.
--- a/lib/crypto/Kconfig
+++ b/lib/crypto/Kconfig
@@ -9,7 +9,7 @@ config CRYPTO_LIB_AES
tristate
select CRYPTO_LIB_UTILS
config CRYPTO_LIB_ARC4
- tristate
+ tristate "ARC4 cipher library"
config CRYPTO_ARCH_HAVE_LIB_BLAKE2S
bool
config CRYPTO_LIB_GF128MUL
tristate

View File

@ -16,8 +16,8 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
mutex_unlock(&mtd_table_mutex);
- if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL)) {
+ if (of_find_property(mtd_get_of_node(mtd), "linux,rootfs", NULL) ||
- if (of_property_read_bool(mtd_get_of_node(mtd), "linux,rootfs")) {
+ if (of_property_read_bool(mtd_get_of_node(mtd), "linux,rootfs") ||
+ (IS_ENABLED(CONFIG_MTD_ROOTFS_ROOT_DEV) && !strcmp(mtd->name, "rootfs") && ROOT_DEV == 0)) {
if (IS_BUILTIN(CONFIG_MTD)) {
pr_info("mtd: setting mtd%d (%s) as root device\n", mtd->index, mtd->name);

View File

@ -19,11 +19,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1730,6 +1730,7 @@ enum netdev_priv_flags {
/* was IFF_LIVE_RENAME_OK */
@@ -1707,6 +1707,7 @@ enum netdev_priv_flags {
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
IFF_CHANGE_PROTO_DOWN = BIT_ULL(32),
+ IFF_NO_IP_ALIGN = BIT_ULL(33),
IFF_SEE_ALL_HWTSTAMP_REQUESTS = BIT_ULL(33),
+ IFF_NO_IP_ALIGN = BIT_ULL(34),
};
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN

View File

@ -15,16 +15,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
--- a/drivers/net/phy/aquantia/aquantia_main.c
+++ b/drivers/net/phy/aquantia/aquantia_main.c
@@ -27,6 +27,8 @@
#define PHY_ID_AQR113 0x31c31c40
#define PHY_ID_AQR113C 0x31c31c12
#define PHY_ID_AQR813 0x31c31cb2
+#define PHY_ID_AQR112 0x03a1b662
+#define PHY_ID_AQR412 0x03a1b712
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
@@ -99,6 +101,29 @@
@@ -101,6 +101,29 @@
#define AQR107_OP_IN_PROG_SLEEP 1000
#define AQR107_OP_IN_PROG_TIMEOUT 100000
@ -54,7 +45,7 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
struct aqr107_hw_stat {
const char *name;
int reg;
@@ -230,6 +255,51 @@ static int aqr_config_aneg(struct phy_de
@@ -232,6 +255,51 @@ static int aqr_config_aneg(struct phy_de
return genphy_c45_check_and_restart_aneg(phydev, changed);
}
@ -106,43 +97,21 @@ Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
static int aqr_config_intr(struct phy_device *phydev)
{
bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED;
@@ -860,6 +930,30 @@ static struct phy_driver aqr_driver[] =
.get_stats = aqr107_get_stats,
.link_change_notify = aqr107_link_change_notify,
},
+{
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR112),
+ .name = "Aquantia AQR112",
+ .probe = aqr107_probe,
+ .config_aneg = aqr_config_aneg_set_prot,
+ .config_intr = aqr_config_intr,
+ .handle_interrupt = aqr_handle_interrupt,
+ .read_status = aqr107_read_status,
+ .get_sset_count = aqr107_get_sset_count,
+ .get_strings = aqr107_get_strings,
+ .get_stats = aqr107_get_stats,
+},
+{
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR412),
+ .name = "Aquantia AQR412",
+ .probe = aqr107_probe,
+ .config_aneg = aqr_config_aneg_set_prot,
+ .config_intr = aqr_config_intr,
+ .handle_interrupt = aqr_handle_interrupt,
+ .read_status = aqr107_read_status,
+ .get_sset_count = aqr107_get_sset_count,
+ .get_strings = aqr107_get_strings,
+ .get_stats = aqr107_get_stats,
+},
};
module_phy_driver(aqr_driver);
@@ -877,6 +971,8 @@ static struct mdio_device_id __maybe_unu
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112) },
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR412) },
{ }
};
@@ -809,7 +877,7 @@ static struct phy_driver aqr_driver[] =
PHY_ID_MATCH_MODEL(PHY_ID_AQR112),
.name = "Aquantia AQR112",
.probe = aqr107_probe,
- .config_aneg = aqr_config_aneg,
+ .config_aneg = aqr_config_aneg_set_prot,
.config_intr = aqr_config_intr,
.handle_interrupt = aqr_handle_interrupt,
.get_tunable = aqr107_get_tunable,
@@ -827,7 +895,7 @@ static struct phy_driver aqr_driver[] =
PHY_ID_MATCH_MODEL(PHY_ID_AQR412),
.name = "Aquantia AQR412",
.probe = aqr107_probe,
- .config_aneg = aqr_config_aneg,
+ .config_aneg = aqr_config_aneg_set_prot,
.config_intr = aqr_config_intr,
.handle_interrupt = aqr_handle_interrupt,
.get_tunable = aqr107_get_tunable,

View File

@ -13,17 +13,17 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/net/phy/aquantia/aquantia_main.c
+++ b/drivers/net/phy/aquantia/aquantia_main.c
@@ -29,6 +29,8 @@
#define PHY_ID_AQR113 0x31c31c40
#define PHY_ID_AQR113C 0x31c31c12
#define PHY_ID_AQR813 0x31c31cb2
#define PHY_ID_AQR112 0x03a1b662
#define PHY_ID_AQR412 0x03a1b712
+#define PHY_ID_AQR112C 0x03a1b790
+#define PHY_ID_AQR112R 0x31c31d12
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
@@ -960,6 +962,30 @@ static struct phy_driver aqr_driver[] =
.get_strings = aqr107_get_strings,
@@ -898,6 +900,30 @@ static struct phy_driver aqr_driver[] =
.get_stats = aqr107_get_stats,
.link_change_notify = aqr107_link_change_notify,
},
+{
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR112C),
@ -52,10 +52,10 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
};
module_phy_driver(aqr_driver);
@@ -979,6 +1005,8 @@ static struct mdio_device_id __maybe_unu
@@ -917,6 +943,8 @@ static struct mdio_device_id __maybe_unu
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR813) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR112) },
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR412) },
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112C) },
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR112R) },
{ }

View File

@ -13,7 +13,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/net/pcs/pcs-mtk-lynxi.c
+++ b/drivers/net/pcs/pcs-mtk-lynxi.c
@@ -114,14 +114,23 @@ static void mtk_pcs_lynxi_get_state(stru
@@ -92,14 +92,23 @@ static void mtk_pcs_lynxi_get_state(struct
struct phylink_link_state *state)
{
struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
@ -30,24 +30,35 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ state->an_complete = !!(bmsr & BMSR_ANEGCOMPLETE);
+ state->speed = SPEED_2500;
+ state->duplex = DUPLEX_FULL;
+
+ return;
+ }
- phylink_mii_c22_pcs_decode_state(state, FIELD_GET(SGMII_BMSR, bm),
- FIELD_GET(SGMII_LPA, adv));
+ return;
+ }
+
+ regmap_read(mpcs->regmap, SGMSYS_PCS_ADVERTISE, &adv);
+ phylink_mii_c22_pcs_decode_state(state, bmsr, FIELD_GET(SGMII_LPA, adv));
}
static void mtk_sgmii_reset(struct mtk_pcs_lynxi *mpcs)
@@ -163,7 +172,8 @@ static int mtk_pcs_lynxi_config(struct p
if (neg_mode & PHYLINK_PCS_NEG_INBAND)
sgm_mode |= SGMII_REMOTE_FAULT_DIS;
@@ -109,7 +118,7 @@ static int mtk_pcs_lynxi_config(struct p
{
struct mtk_pcs_lynxi *mpcs = pcs_to_mtk_pcs_lynxi(pcs);
bool mode_changed = false, changed;
- unsigned int rgc3, sgm_mode, bmcr;
+ unsigned int rgc3, sgm_mode, bmcr = 0;
int advertise, link_timer;
- if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
+ if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED &&
+ interface != PHY_INTERFACE_MODE_2500BASEX) {
advertise = phylink_mii_c22_pcs_encode_advertisement(interface,
@@ -132,9 +141,8 @@ static int mtk_pcs_lynxi_config(struct p
if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
if (interface == PHY_INTERFACE_MODE_SGMII)
sgm_mode |= SGMII_SPEED_DUPLEX_AN;
bmcr = BMCR_ANENABLE;
- bmcr = BMCR_ANENABLE;
- } else {
- bmcr = 0;
+ if (interface != PHY_INTERFACE_MODE_2500BASEX)
+ bmcr = BMCR_ANENABLE;
}
if (mpcs->interface != interface) {

View File

@ -36,7 +36,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
+
+ if (ret)
+ return ret;
+
+
+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_LEDSEL, led_data);
+
+ return 0;

View File

@ -30,7 +30,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
+#include <linux/of.h>
#include <linux/phy.h>
#include <linux/polynomial.h>
#include <linux/netdevice.h>
#include <linux/property.h>
@@ -33,6 +34,7 @@
#define PHY_MIISTAT 0x18 /* MII state */
#define PHY_IMASK 0x19 /* interrupt mask */
@ -52,9 +52,9 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
+/* LED */
+#define VSPEC1_LED(x) (0x1 + x)
+
/* SGMII */
#define VSPEC1_SGMII_CTRL 0x08
#define VSPEC1_SGMII_CTRL_ANEN BIT(12) /* Aneg enable */
#define PHY_PMA_MGBT_POLARITY 0x82
#define PHY_MDI_MDI_X_MASK GENMASK(1, 0)
#define PHY_MDI_MDI_X_NORMAL 0x3
@@ -241,6 +248,35 @@ out:
return ret;
}
@ -102,4 +102,4 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
+ return gpy_led_write(phydev);
}
static bool gpy_has_broken_mdint(struct phy_device *phydev)
static int gpy_probe(struct phy_device *phydev)

View File

@ -27,8 +27,8 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -409,6 +409,9 @@ static const struct sfp_quirk sfp_quirks
SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex,
sfp_fixup_ignore_tx_fault),
// FS 2.5G Base-T
SFP_QUIRK_M("FS", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
+ // OEM SFP-GE-T is 1000Base-T module
+ SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),

View File

@ -6,18 +6,18 @@ Subject: [PATCH 30/36] GPIO: add named gpio exports
Signed-off-by: John Crispin <blogic@openwrt.org>
--- a/drivers/gpio/gpiolib-of.c
+++ b/drivers/gpio/gpiolib-of.c
@@ -19,6 +19,8 @@
#include <linux/pinctrl/pinctrl.h>
#include <linux/slab.h>
@@ -21,6 +21,8 @@
#include <linux/gpio/consumer.h>
#include <linux/gpio/machine.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
#include "gpiolib.h"
#include "gpiolib-of.h"
@@ -1030,3 +1032,100 @@ void of_gpio_dev_init(struct gpio_chip *
else
gc->of_node = gdev->dev.of_node;
@@ -1111,3 +1113,74 @@ void of_gpiochip_remove(struct gpio_chip
{
of_node_put(dev_of_node(&chip->gpiodev->dev));
}
+
+#ifdef CONFIG_GPIO_SYSFS
@ -44,57 +44,31 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
+ of_property_read_string(cnp, "gpio-export,name", &name);
+
+ if (!name)
+ max_gpio = of_gpio_count(cnp);
+ max_gpio = of_gpio_named_count(cnp, "gpios");
+
+ for (i = 0; i < max_gpio; i++) {
+ struct gpio_desc *desc;
+ unsigned flags = 0;
+ enum of_gpio_flags of_flags;
+
+ gpio = of_get_gpio_flags(cnp, i, &of_flags);
+ if (!gpio_is_valid(gpio))
+ return gpio;
+ desc = of_get_named_gpiod_flags(cnp, "gpios", i, &of_flags);
+ if (IS_ERR(desc))
+ return PTR_ERR(desc);
+ gpio = desc_to_gpio(desc);
+
+ if (of_flags & OF_GPIO_ACTIVE_LOW)
+ flags |= GPIOF_ACTIVE_LOW;
+
+ if (!of_property_read_u32(cnp, "gpio-export,output", &val)) {
+ if (of_flags & OF_GPIO_SINGLE_ENDED) {
+ /*
+ * As gpiod_direction_output_raw() is used, we
+ * need to emulate open drain or open source here.
+ */
+ if (of_flags & OF_GPIO_OPEN_DRAIN) {
+ flags |= GPIOF_OPEN_DRAIN;
+ flags |= val ? GPIOF_IN : GPIOF_OUT_INIT_LOW;
+ } else {
+ flags |= GPIOF_OPEN_SOURCE;
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_IN;
+ }
+ } else {
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
+ }
+ } else {
+ if (!of_property_read_u32(cnp, "gpio-export,output", &val))
+ flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
+ else
+ flags |= GPIOF_IN;
+ }
+
+ if (devm_gpio_request_one(&pdev->dev, gpio, flags, name ? name : of_node_full_name(np)))
+ continue;
+
+ /*
+ * When emulating open-source or open-drain functionalities by not
+ * actively driving the line (setting mode to input) we still need to
+ * set the IS_OUT flag or otherwise we won't be able to set the line
+ * value anymore.
+ */
+ if ((flags & GPIOF_IN) &&
+ ((flags & GPIOF_OPEN_DRAIN) || (flags & GPIOF_OPEN_SOURCE))) {
+ desc = gpio_to_desc(gpio);
+ set_bit(FLAG_IS_OUT, &desc->flags);
+ }
+
+ dmc = of_property_read_bool(cnp, "gpio-export,direction_may_change");
+ gpio_export_with_name(gpio, dmc, name);
+ gpio_export_with_name(gpio_to_desc(gpio), dmc, name);
+ nb++;
+ }
+ }
@ -116,36 +90,24 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
+module_platform_driver(gpio_export_driver);
+
+#endif
--- a/include/asm-generic/gpio.h
+++ b/include/asm-generic/gpio.h
@@ -125,6 +125,12 @@ static inline int gpio_export(unsigned g
return gpiod_export(gpio_to_desc(gpio), direction_may_change);
}
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
+static inline int gpio_export_with_name(unsigned gpio, bool direction_may_change, const char *name)
+{
+ return __gpiod_export(gpio_to_desc(gpio), direction_may_change, name);
+}
+
static inline int gpio_export_link(struct device *dev, const char *name,
unsigned gpio)
{
--- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h
@@ -715,6 +715,7 @@ static inline struct gpio_desc *acpi_get
@@ -644,7 +644,10 @@ static inline struct gpio_desc *acpi_get
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
+int _gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
+int gpio_export_with_name(struct gpio_desc *desc, bool direction_may_change,
+ const char *name);
int gpiod_export_link(struct device *dev, const char *name,
struct gpio_desc *desc);
@@ -722,6 +723,13 @@ void gpiod_unexport(struct gpio_desc *de
void gpiod_unexport(struct gpio_desc *desc);
@@ -653,12 +656,26 @@ void gpiod_unexport(struct gpio_desc *de
#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
#include <asm/errno.h>
+static inline int _gpiod_export(struct gpio_desc *desc,
+static inline int __gpiod_export(struct gpio_desc *desc,
+ bool direction_may_change,
+ const char *name)
+{
@ -154,10 +116,23 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
+
static inline int gpiod_export(struct gpio_desc *desc,
bool direction_may_change)
{
return -ENOSYS;
}
+static inline int gpio_export_with_name(struct gpio_desc *desc,
+ bool direction_may_change,
+ const char *name)
+{
+ return -ENOSYS;
+}
+
static inline int gpiod_export_link(struct device *dev, const char *name,
struct gpio_desc *desc)
{
--- a/drivers/gpio/gpiolib-sysfs.c
+++ b/drivers/gpio/gpiolib-sysfs.c
@@ -547,7 +547,7 @@ static struct class gpio_class = {
@@ -557,7 +557,7 @@ static struct class gpio_class = {
*
* Returns zero on success, else an error.
*/
@ -166,7 +141,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
{
struct gpio_chip *chip;
struct gpio_device *gdev;
@@ -609,6 +609,8 @@ int gpiod_export(struct gpio_desc *desc,
@@ -619,6 +619,8 @@ int gpiod_export(struct gpio_desc *desc,
offset = gpio_chip_hwgpio(desc);
if (chip->names && chip->names[offset])
ioname = chip->names[offset];
@ -175,7 +150,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
dev = device_create_with_groups(&gpio_class, &gdev->dev,
MKDEV(0, 0), data, gpio_groups,
@@ -630,6 +632,12 @@ err_unlock:
@@ -640,8 +642,21 @@ int gpiod_export(struct gpio_desc *desc,
gpiod_dbg(desc, "%s: status %d\n", __func__, status);
return status;
}
@ -187,4 +162,13 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
+}
EXPORT_SYMBOL_GPL(gpiod_export);
+int gpio_export_with_name(struct gpio_desc *desc, bool direction_may_change,
+ const char *name)
+{
+ return __gpiod_export(desc, direction_may_change, name);
+}
+EXPORT_SYMBOL_GPL(gpio_export_with_name);
+
static int match_export(struct device *dev, const void *desc)
{
struct gpiod_data *data = dev_get_drvdata(dev);

View File

@ -28,13 +28,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
help
--- a/net/core/Makefile
+++ b/net/core/Makefile
@@ -11,11 +11,12 @@ obj-$(CONFIG_SYSCTL) += sysctl_net_core.
@@ -11,12 +11,13 @@ obj-$(CONFIG_SYSCTL) += sysctl_net_core.
obj-y += dev.o dev_addr_lists.o dst.o netevent.o \
neighbour.o rtnetlink.o utils.o link_watch.o filter.o \
- sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \
+ dev_ioctl.o tso.o sock_reuseport.o \
fib_notifier.o xdp.o flow_offload.o gro.o
+ dev_ioctl.o tso.o sock_reuseport.o \
fib_notifier.o xdp.o flow_offload.o gro.o \
netdev-genl.o netdev-genl-gen.o gso.o
obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o
@ -44,15 +45,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
obj-$(CONFIG_PROC_FS) += net-procfs.o
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -115,6 +115,7 @@
#include <linux/memcontrol.h>
#include <linux/prefetch.h>
#include <linux/compat.h>
@@ -117,6 +117,7 @@
#include <linux/mroute.h>
#include <linux/mroute6.h>
#include <linux/icmpv6.h>
+#include <linux/cookie.h>
#include <linux/uaccess.h>
@@ -146,6 +147,7 @@
@@ -149,6 +150,7 @@
static DEFINE_MUTEX(proto_list_mutex);
static LIST_HEAD(proto_list);
@ -60,26 +61,29 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static void sock_def_write_space_wfree(struct sock *sk);
static void sock_def_write_space(struct sock *sk);
@@ -585,6 +587,18 @@ discard_and_relse:
@@ -588,6 +590,21 @@ int __sk_receive_skb(struct sock *sk, str
}
EXPORT_SYMBOL(__sk_receive_skb);
+u64 __sock_gen_cookie(struct sock *sk)
+{
+ while (1) {
+ u64 res = atomic64_read(&sk->sk_cookie);
+ u64 res = atomic64_read(&sk->sk_cookie);
+
+ if (res)
+ return res;
+ res = gen_cookie_next(&sock_cookie);
+ atomic64_cmpxchg(&sk->sk_cookie, 0, res);
+ if (!res) {
+ u64 new = gen_cookie_next(&sock_cookie);
+
+ atomic64_cmpxchg(&sk->sk_cookie, res, new);
+
+ /* Another thread might have changed sk_cookie before us. */
+ res = atomic64_read(&sk->sk_cookie);
+ }
+ return res;
+}
+
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
u32));
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
@@ -2188,9 +2202,11 @@ static void __sk_free(struct sock *sk)
@@ -2238,9 +2255,11 @@ static void __sk_free(struct sock *sk)
if (likely(sk->sk_net_refcnt))
sock_inuse_add(sock_net(sk), -1);
@ -101,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include <linux/inet_diag.h>
#include <linux/sock_diag.h>
@@ -21,20 +20,6 @@ static int (*inet_rcv_compat)(struct sk_
@@ -21,23 +20,6 @@ static int (*inet_rcv_compat)(struct sk_
static DEFINE_MUTEX(sock_diag_table_mutex);
static struct workqueue_struct *broadcast_wq;
@ -109,14 +113,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
-
-u64 __sock_gen_cookie(struct sock *sk)
-{
- while (1) {
- u64 res = atomic64_read(&sk->sk_cookie);
- u64 res = atomic64_read(&sk->sk_cookie);
-
- if (res)
- return res;
- res = gen_cookie_next(&sock_cookie);
- atomic64_cmpxchg(&sk->sk_cookie, 0, res);
- if (!res) {
- u64 new = gen_cookie_next(&sock_cookie);
-
- atomic64_cmpxchg(&sk->sk_cookie, res, new);
-
- /* Another thread might have changed sk_cookie before us. */
- res = atomic64_read(&sk->sk_cookie);
- }
- return res;
-}
-
int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie)