Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
@@ -48,6 +48,8 @@ endef
|
||||
# 1: destination file
|
||||
define FeedSourcesAppendAPK
|
||||
( \
|
||||
echo '# This file is auto-generated and build-specific, any changes will be intentionally lost in sysupgrade.'; \
|
||||
echo '# Add your custom feeds to /etc/apk/repositories.d/customfeeds.list'; \
|
||||
echo '%U/targets/%S/packages/packages.adb'; \
|
||||
$(strip $(if $(CONFIG_PER_FEED_REPO), \
|
||||
echo '%U/packages/%A/base/packages.adb'; \
|
||||
|
||||
@@ -224,8 +224,10 @@ build_list_of_backup_overlay_files() {
|
||||
-e '\,^/etc/board.json$,d' \
|
||||
-e '\,^/etc/luci-uploads/\.placeholder,d' \
|
||||
-e '\,/[^/]*-opkg$,d' \
|
||||
-e '\,/[^/]*\.apk-new$,d' \
|
||||
-e '\,^/etc/urandom.seed$,d' \
|
||||
-e '\,^/etc/apk/world$,d' \
|
||||
-e '\,^/etc/apk/repositories\.d/distfeeds\.list$,d' \
|
||||
-e "\,^$INSTALLED_PACKAGES$,d" \
|
||||
-e '\,^/usr/lib/opkg/.*,d' \
|
||||
-e '\,^/lib/apk/.*,d' \
|
||||
|
||||
@@ -82,7 +82,7 @@ MAKE_FLAGS += \
|
||||
ARCH="sandbox" \
|
||||
TARGET_CFLAGS="$(TARGET_CFLAGS)" \
|
||||
TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \
|
||||
PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
|
||||
PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR_HOST)" \
|
||||
NO_PYTHON=1 \
|
||||
V=$(if $(findstring c,$(OPENWRT_VERBOSE)),1,)
|
||||
|
||||
|
||||
@@ -120,6 +120,10 @@ dell,apl27-0b1)
|
||||
domywifi,dw33d)
|
||||
ubootenv_add_uci_config "/dev/mtd4" "0x0" "0x10000" "0x10000"
|
||||
;;
|
||||
extreme-networks,ws-ap3805i)
|
||||
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x1000" "0x4000" "1"
|
||||
ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x1000" "0x4000" "1"
|
||||
;;
|
||||
glinet,gl-ar150)
|
||||
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x8000" "0x10000"
|
||||
;;
|
||||
|
||||
@@ -111,6 +111,7 @@ konka,komi-a31)
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
buffalo,wsr-3000ax4p|\
|
||||
buffalo,wsr-6000ax8|\
|
||||
mercusys,mr80x-v3|\
|
||||
mercusys,mr85x|\
|
||||
|
||||
@@ -97,7 +97,7 @@ define Package/mt7986-wo-firmware/install
|
||||
endef
|
||||
$(eval $(call BuildPackage,mt7986-wo-firmware))
|
||||
|
||||
Package/mt7987-2p5g-phy-firmware = $(call Package/firmware-default,MT7987 built-in 2.5G Ethernet PHY firmware,,LICENCE.mediatek)
|
||||
Package/mt7987-2p5g-phy-firmware = $(call Package/firmware-default,MT7987 built-in 2.5G Ethernet PHY firmware,+LINUX_6_18:kmod-phy-mediatek-2p5g,LICENCE.mediatek)
|
||||
define Package/mt7987-2p5g-phy-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7987
|
||||
$(INSTALL_DATA) \
|
||||
@@ -107,7 +107,7 @@ define Package/mt7987-2p5g-phy-firmware/install
|
||||
endef
|
||||
$(eval $(call BuildPackage,mt7987-2p5g-phy-firmware))
|
||||
|
||||
Package/mt7988-2p5g-phy-firmware = $(call Package/firmware-default,MT7988 built-in 2.5G Ethernet PHY firmware,,LICENCE.mediatek)
|
||||
Package/mt7988-2p5g-phy-firmware = $(call Package/firmware-default,MT7988 built-in 2.5G Ethernet PHY firmware,+LINUX_6_18:kmod-phy-mediatek-2p5g,LICENCE.mediatek)
|
||||
define Package/mt7988-2p5g-phy-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek/mt7988
|
||||
$(INSTALL_DATA) \
|
||||
|
||||
@@ -513,15 +513,8 @@ static int gpio_keys_button_probe(struct platform_device *pdev,
|
||||
GPIOD_IN);
|
||||
if (IS_ERR(bdata->gpiod)) {
|
||||
/* or the legacy (button->gpio is good) way? */
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(6,18,0)
|
||||
error = devm_gpio_request_one(dev,
|
||||
button->gpio, GPIOF_IN | (
|
||||
button->active_low ? GPIOF_ACTIVE_LOW :
|
||||
0), desc);
|
||||
#else
|
||||
error = devm_gpio_request_one(dev,
|
||||
button->gpio, GPIOF_IN, desc);
|
||||
#endif
|
||||
if (error) {
|
||||
dev_err_probe(dev, error,
|
||||
"unable to claim gpio %d",
|
||||
@@ -530,10 +523,8 @@ static int gpio_keys_button_probe(struct platform_device *pdev,
|
||||
}
|
||||
|
||||
bdata->gpiod = gpio_to_desc(button->gpio);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,18,0)
|
||||
if (button->active_low ^ gpiod_is_active_low(bdata->gpiod))
|
||||
gpiod_toggle_active_low(bdata->gpiod);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
/* Device-tree */
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -313,7 +313,7 @@ drv_dsl_cpe_api.ko: $(drv_dsl_cpe_api_SO
|
||||
@echo "# drv_dsl_cpe_api: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo "$(subst .ko,,$@)-y := $(drv_dsl_cpe_api_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(PKGFIX_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
+ @echo "ccflags-y := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(PKGFIX_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
@@ -1837,7 +1837,7 @@ static int ltq_atm_probe(struct platform_device *pdev)
|
||||
|
||||
ifx_atm_version(ops, ver_str);
|
||||
printk(KERN_INFO "%s", ver_str);
|
||||
platform_set_drvdata(pdev, ops);
|
||||
platform_set_drvdata(pdev, (void *)ops);
|
||||
printk("ifxmips_atm: ATM init succeed\n");
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1798,7 +1798,7 @@ static int gcm_aes_decrypt(struct aead_request *req)
|
||||
|
||||
//crypt and hash
|
||||
while ((nbytes = dec_bytes = walk.nbytes) && (walk.nbytes >= AES_BLOCK_SIZE)) {
|
||||
u8 *temp;
|
||||
const u8 *temp;
|
||||
dec_bytes -= (nbytes % AES_BLOCK_SIZE);
|
||||
temp = walk.src.virt.addr;
|
||||
while (dec_bytes) {
|
||||
|
||||
@@ -80,7 +80,7 @@ extern char debug_level;
|
||||
/*
|
||||
* \brief SHA1 private structure
|
||||
*/
|
||||
struct sha1_ctx {
|
||||
struct ltq_sha1_ctx {
|
||||
int started;
|
||||
u64 count;
|
||||
u32 hash[5];
|
||||
@@ -96,7 +96,7 @@ extern int disable_deudma;
|
||||
* \param state current state
|
||||
* \param in 64-byte block of input
|
||||
*/
|
||||
static void sha1_transform1 (struct sha1_ctx *sctx, u32 *state, const u32 *in)
|
||||
static void sha1_transform1 (struct ltq_sha1_ctx *sctx, u32 *state, const u32 *in)
|
||||
{
|
||||
int i = 0;
|
||||
volatile struct deu_hash_t *hashs = (struct deu_hash_t *) HASH_START;
|
||||
@@ -147,24 +147,24 @@ static void sha1_transform1 (struct sha1_ctx *sctx, u32 *state, const u32 *in)
|
||||
*/
|
||||
static int sha1_init1(struct shash_desc *desc)
|
||||
{
|
||||
struct sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
struct ltq_sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
|
||||
sctx->started = 0;
|
||||
sctx->count = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! \fn static void sha1_update(struct crypto_tfm *tfm, const u8 *data, unsigned int len)
|
||||
/*! \fn static void ltq_sha1_update(struct crypto_tfm *tfm, const u8 *data, unsigned int len)
|
||||
* \ingroup IFX_SHA1_FUNCTIONS
|
||||
* \brief on-the-fly sha1 computation
|
||||
* \param tfm linux crypto algo transform
|
||||
* \param data input data
|
||||
* \param len size of input data
|
||||
*/
|
||||
static int sha1_update(struct shash_desc * desc, const u8 *data,
|
||||
static int ltq_sha1_update(struct shash_desc * desc, const u8 *data,
|
||||
unsigned int len)
|
||||
{
|
||||
struct sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
struct ltq_sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
unsigned int i, j;
|
||||
|
||||
j = (sctx->count >> 3) & 0x3f;
|
||||
@@ -186,15 +186,15 @@ static int sha1_update(struct shash_desc * desc, const u8 *data,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! \fn static void sha1_final(struct crypto_tfm *tfm, u8 *out)
|
||||
/*! \fn static void ltq_sha1_final(struct crypto_tfm *tfm, u8 *out)
|
||||
* \ingroup IFX_SHA1_FUNCTIONS
|
||||
* \brief compute final sha1 value
|
||||
* \param tfm linux crypto algo transform
|
||||
* \param out final md5 output value
|
||||
*/
|
||||
static int sha1_final(struct shash_desc *desc, u8 *out)
|
||||
static int ltq_sha1_final(struct shash_desc *desc, u8 *out)
|
||||
{
|
||||
struct sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
struct ltq_sha1_ctx *sctx = shash_desc_ctx(desc);
|
||||
u32 index, padlen;
|
||||
u64 t;
|
||||
u8 bits[8] = { 0, };
|
||||
@@ -222,10 +222,10 @@ static int sha1_final(struct shash_desc *desc, u8 *out)
|
||||
/* Pad out to 56 mod 64 */
|
||||
index = (sctx->count >> 3) & 0x3f;
|
||||
padlen = (index < 56) ? (56 - index) : ((64 + 56) - index);
|
||||
sha1_update (desc, padding, padlen);
|
||||
ltq_sha1_update (desc, padding, padlen);
|
||||
|
||||
/* Append length */
|
||||
sha1_update (desc, bits, sizeof bits);
|
||||
ltq_sha1_update (desc, bits, sizeof bits);
|
||||
|
||||
memcpy(out, sctx->hash, SHA1_DIGEST_SIZE);
|
||||
|
||||
@@ -241,9 +241,9 @@ static int sha1_final(struct shash_desc *desc, u8 *out)
|
||||
static struct shash_alg ifxdeu_sha1_alg = {
|
||||
.digestsize = SHA1_DIGEST_SIZE,
|
||||
.init = sha1_init1,
|
||||
.update = sha1_update,
|
||||
.final = sha1_final,
|
||||
.descsize = sizeof(struct sha1_ctx),
|
||||
.update = ltq_sha1_update,
|
||||
.final = ltq_sha1_final,
|
||||
.descsize = sizeof(struct ltq_sha1_ctx),
|
||||
.statesize = sizeof(struct sha1_state),
|
||||
.base = {
|
||||
.cra_name = "sha1",
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -640,7 +640,7 @@ drv_ifxos.ko$(EXEEXT): $(drv_ifxos_SOURC
|
||||
@echo "# drv_ifxos: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo "$(subst .ko,,$@)-y := $(drv_ifxos_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_ifxos_CFLAGS) $(DSL_DRIVER_INCL_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
+ @echo "ccflags-y := -DHAVE_CONFIG_H $(drv_ifxos_CFLAGS) $(DSL_DRIVER_INCL_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
|
||||
# Kernel Makefile exports LDFLAGS, which might pull-in wrong settings
|
||||
LDFLAGS= \
|
||||
@@ -0,0 +1,87 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:54:21 +0800
|
||||
Subject: [PATCH] adapt to the 6.18 kernel timer API
|
||||
|
||||
Fix build error on the 6.18 kernel:
|
||||
|
||||
drv_tapi_linux.c: In function 'TAPI_SetTime_Timer':
|
||||
drv_tapi_linux.c:3449:4: error: implicit declaration of function 'del_timer_sync' [-Wimplicit-function-declaration]
|
||||
3449 | del_timer_sync(&(Timer->Timer_List));
|
||||
| ^~~~~~~~~~~~~~
|
||||
drv_tapi_linux.c: In function 'TAPI_timer_call_back':
|
||||
drv_tapi_linux.c:3552:21: error: implicit declaration of function 'from_timer'; did you mean 'mod_timer'? [-Wimplicit-function-declaration]
|
||||
3552 | Timer_ID Timer = from_timer(Timer, t, Timer_List);
|
||||
| ^~~~~~~~~~
|
||||
| mod_timer
|
||||
drv_tapi_linux.c:3552:42: error: 'Timer_List' undeclared (first use in this function); did you mean 'timer_list'?
|
||||
3552 | Timer_ID Timer = from_timer(Timer, t, Timer_List);
|
||||
| ^~~~~~~~~~
|
||||
| timer_list
|
||||
drv_tapi_linux.c: In function 'TAPI_Stop_Timer':
|
||||
drv_tapi_linux.c:3481:4: error: implicit declaration of function 'del_timer_sync' [-Wimplicit-function-declaration]
|
||||
3481 | del_timer_sync(&(Timer->Timer_List));
|
||||
| ^~~~~~~~~~~~~~
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
---
|
||||
src/drv_tapi_linux.c | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/src/drv_tapi_linux.c
|
||||
+++ b/src/drv_tapi_linux.c
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/version.h>
|
||||
#endif
|
||||
#ifdef MODULE
|
||||
#include <linux/module.h>
|
||||
@@ -3446,7 +3447,11 @@ IFX_boolean_t TAPI_SetTime_Timer(Timer_I
|
||||
/* prevent restart of driver */
|
||||
Timer->bPeriodical = IFX_FALSE;
|
||||
/* remove driver from list */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6,16,0)
|
||||
del_timer_sync(&(Timer->Timer_List));
|
||||
+#else
|
||||
+ timer_delete_sync(&(Timer->Timer_List));
|
||||
+#endif
|
||||
|
||||
Timer->bPeriodical = bPeriodically;
|
||||
|
||||
@@ -3473,7 +3478,11 @@ IFX_boolean_t TAPI_Stop_Timer(Timer_ID T
|
||||
/* prevent restart of driver */
|
||||
Timer->bPeriodical = IFX_FALSE;
|
||||
/* remove driver from list */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6,16,0)
|
||||
del_timer_sync(&(Timer->Timer_List));
|
||||
+#else
|
||||
+ timer_delete_sync(&(Timer->Timer_List));
|
||||
+#endif
|
||||
return (IFX_TRUE);
|
||||
}
|
||||
|
||||
@@ -3526,7 +3535,11 @@ static IFX_void_t TAPI_tqueue (struct wo
|
||||
if (Timer->bPeriodical)
|
||||
{
|
||||
/* remove driver from list */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6,16,0)
|
||||
del_timer_sync(&(Timer->Timer_List));
|
||||
+#else
|
||||
+ timer_delete_sync(&(Timer->Timer_List));
|
||||
+#endif
|
||||
/* start new timer, then call function to gain precision */
|
||||
Timer->Timer_List.expires = jiffies + Timer->Periodical_Time;
|
||||
add_timer(&(Timer->Timer_List));
|
||||
@@ -3548,8 +3561,10 @@ static IFX_void_t TAPI_timer_call_back (
|
||||
{
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)
|
||||
Timer_ID Timer = (Timer_ID) arg;
|
||||
-#else
|
||||
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(6,16,0)
|
||||
Timer_ID Timer = from_timer(Timer, t, Timer_List);
|
||||
+#else
|
||||
+ Timer_ID Timer = timer_container_of(Timer, t, Timer_List);
|
||||
#endif
|
||||
/* do the operation in process context,
|
||||
not in interrupt context */
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -161,7 +161,7 @@ drv_tapi.ko: $(drv_tapi_SOURCES) $(EXTRA
|
||||
@echo "# drv_tapi: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo "$(subst .ko,,$@)-y := $(drv_tapi_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_tapi_CFLAGS) $(INCLUDES)" >> $(PWD)/Kbuild
|
||||
+ @echo "ccflags-y := -DHAVE_CONFIG_H $(drv_tapi_CFLAGS) $(INCLUDES)" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -377,7 +377,7 @@ drv_mei_cpe.ko: $(drv_mei_cpe_SOURCES)
|
||||
@echo -e "# drv_mei_cpe: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo -e "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo -e "$(subst .ko,,$@)-y := $(drv_mei_cpe_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo -e "EXTRA_CFLAGS := $(drv_mei_cpe_CFLAGS) -I@abs_srcdir@ -I@abs_srcdir@/auto_header $(IFXOS_INCLUDE_PATH)" >> $(PWD)/Kbuild
|
||||
+ @echo -e "ccflags-y := $(drv_mei_cpe_CFLAGS) -I@abs_srcdir@ -I@abs_srcdir@/auto_header $(IFXOS_INCLUDE_PATH)" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -348,7 +348,7 @@ drv_dsl_cpe_api.ko: $(drv_dsl_cpe_api_SO
|
||||
@echo -e "# drv_dsl_cpe_api: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo -e "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo -e "$(subst .ko,,$@)-y := $(drv_dsl_cpe_api_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo -e "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/$(VRX_HEADER_DIR) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
+ @echo -e "ccflags-y := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/$(VRX_HEADER_DIR) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -353,7 +353,7 @@ drv_mei_cpe.ko: $(drv_mei_cpe_SOURCES)
|
||||
@echo -e "# drv_mei_cpe: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo -e "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo -e "$(subst .ko,,$@)-y := $(drv_mei_cpe_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo -e "EXTRA_CFLAGS := $(drv_mei_cpe_CFLAGS) -I@abs_srcdir@ -I@abs_srcdir@/auto_header $(IFXOS_INCLUDE_PATH)" >> $(PWD)/Kbuild
|
||||
+ @echo -e "ccflags-y := $(drv_mei_cpe_CFLAGS) -I@abs_srcdir@ -I@abs_srcdir@/auto_header $(IFXOS_INCLUDE_PATH)" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -308,7 +308,7 @@ drv_dsl_cpe_api.ko: $(drv_dsl_cpe_api_SO
|
||||
@echo -e "# drv_dsl_cpe_api: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo -e "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo -e "$(subst .ko,,$@)-y := $(drv_dsl_cpe_api_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo -e "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
+ @echo -e "ccflags-y := -DHAVE_CONFIG_H $(drv_dsl_cpe_api_CFLAGS) $(DSL_DRIVER_INCL_PATH) $(IFXOS_INCLUDE_PATH) -I@abs_srcdir@/include -I$(PWD)/include" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Tue, 14 Apr 2026 07:59:03 +0800
|
||||
Subject: [PATCH] convert Makefile EXTRA_CFLAGS to ccflags-y
|
||||
|
||||
EXTRA_CFLAGS was removed since Linux 6.15 kernel.
|
||||
|
||||
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
||||
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -245,7 +245,7 @@ drv_vmmc.ko: $(drv_vmmc_SOURCES) $(EXTRA
|
||||
@echo "# drv_vmmc: Generated to build Linux 2.6.x kernel object" > $(PWD)/Kbuild
|
||||
@echo "obj-m := $(subst .ko,.o,$@)" >> $(PWD)/Kbuild
|
||||
@echo "$(subst .ko,,$@)-y := $(drv_vmmc_OBJS)" >> $(PWD)/Kbuild
|
||||
- @echo "EXTRA_CFLAGS := -DHAVE_CONFIG_H $(drv_vmmc_CFLAGS) $(PKGFIX_CFLAGS) $(INCLUDES)" >> $(PWD)/Kbuild
|
||||
+ @echo "ccflags-y := -DHAVE_CONFIG_H $(drv_vmmc_CFLAGS) $(PKGFIX_CFLAGS) $(INCLUDES)" >> $(PWD)/Kbuild
|
||||
$(MAKE) ARCH=@KERNEL_ARCH@ -C @KERNEL_BUILD_PATH@ O=@KERNEL_BUILD_PATH@ M=$(PWD) modules
|
||||
|
||||
clean-generic:
|
||||
@@ -122,30 +122,27 @@ static int gca230718_probe(struct i2c_client *client)
|
||||
|
||||
i2c_set_clientdata(client, priv);
|
||||
|
||||
struct device_node *ledNode;
|
||||
for_each_child_of_node(client->dev.of_node, ledNode) {
|
||||
device_for_each_child_node_scoped(client->dev, ledNode) {
|
||||
const char *lname = fwnode_get_name(ledNode);
|
||||
u32 regValue = 0;
|
||||
if (of_property_read_u32(ledNode, "reg", ®Value))
|
||||
pr_info("Missing entry \"reg\" in node %s\n",
|
||||
ledNode->name);
|
||||
if (fwnode_property_read_u32(ledNode, "reg", ®Value))
|
||||
pr_info("Missing entry \"reg\" in node %s\n", lname);
|
||||
else if (regValue >= GCA230718_MAX_LEDS)
|
||||
pr_info("Invalid entry \"reg\" in node %s (%u)\n",
|
||||
ledNode->name, regValue);
|
||||
lname, regValue);
|
||||
else {
|
||||
struct led_classdev *ledClassDev =
|
||||
&(priv->leds[regValue].ledClassDev);
|
||||
struct led_init_data init_data = {};
|
||||
|
||||
priv->leds[regValue].client = client;
|
||||
init_data.fwnode = of_fwnode_handle(ledNode);
|
||||
init_data.fwnode = fwnode_handle_get(ledNode);
|
||||
|
||||
pr_info("Creating LED for node %s: reg=%u\n",
|
||||
ledNode->name, regValue);
|
||||
lname, regValue);
|
||||
|
||||
ledClassDev->name =
|
||||
of_get_property(ledNode, "label", NULL);
|
||||
if (!ledClassDev->name)
|
||||
ledClassDev->name = ledNode->name;
|
||||
ledClassDev->name = lname;
|
||||
fwnode_property_read_string(ledNode, "label", &ledClassDev->name);
|
||||
|
||||
ledClassDev->brightness = LED_OFF;
|
||||
ledClassDev->max_brightness = LED_FULL;
|
||||
|
||||
@@ -106,7 +106,6 @@ static int ws2812b_probe(struct spi_device *spi)
|
||||
struct device *dev = &spi->dev;
|
||||
int cur_led = 0;
|
||||
struct ws2812b_priv *priv;
|
||||
struct fwnode_handle *led_node;
|
||||
int num_leds, i, cnt, ret;
|
||||
|
||||
num_leds = device_get_child_node_count(dev);
|
||||
@@ -131,9 +130,9 @@ static int ws2812b_probe(struct spi_device *spi)
|
||||
priv->num_leds = num_leds;
|
||||
priv->spi = spi;
|
||||
|
||||
device_for_each_child_node(dev, led_node) {
|
||||
device_for_each_child_node_scoped(dev, led_node) {
|
||||
struct led_init_data init_data = {
|
||||
.fwnode = led_node,
|
||||
.fwnode = fwnode_handle_get(led_node),
|
||||
};
|
||||
/* WS2812B LEDs usually come with GRB color */
|
||||
u32 color_idx[WS2812B_NUM_COLORS] = {
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=libbpf
|
||||
PKG_VERSION:=1.6.2
|
||||
PKG_VERSION:=1.7.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/libbpf/libbpf
|
||||
PKG_MIRROR_HASH:=9620f45b4fc0ee5e0f43502634fe48fbcb34ab49d2553b7275fa92f7e02d3dc7
|
||||
PKG_MIRROR_HASH:=30fbb65adcb4ce7e5eac797edbb81ede5e00969f8eb6a871b9e7913eda4e8ba4
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=v$(PKG_VERSION)
|
||||
PKG_ABI_VERSION:=$(firstword $(subst .,$(space),$(PKG_VERSION)))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/src/libbpf.h
|
||||
+++ b/src/libbpf.h
|
||||
@@ -1332,9 +1332,10 @@ struct bpf_tc_opts {
|
||||
@@ -1396,9 +1396,10 @@ struct bpf_tc_opts {
|
||||
__u32 prog_id;
|
||||
__u32 handle;
|
||||
__u32 priority;
|
||||
@@ -14,7 +14,7 @@
|
||||
LIBBPF_API int bpf_tc_hook_destroy(struct bpf_tc_hook *hook);
|
||||
--- a/src/netlink.c
|
||||
+++ b/src/netlink.c
|
||||
@@ -687,6 +687,8 @@ static int __get_tc_info(void *cookie, s
|
||||
@@ -689,6 +689,8 @@ static int __get_tc_info(void *cookie, s
|
||||
OPTS_SET(info->opts, prog_id, libbpf_nla_getattr_u32(tbb[TCA_BPF_ID]));
|
||||
OPTS_SET(info->opts, handle, tc->tcm_handle);
|
||||
OPTS_SET(info->opts, priority, TC_H_MAJ(tc->tcm_info) >> 16);
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
info->processed = true;
|
||||
return unicast ? NL_NEXT : NL_DONE;
|
||||
@@ -731,7 +733,7 @@ static int tc_add_fd_and_name(struct lib
|
||||
@@ -733,7 +735,7 @@ static int tc_add_fd_and_name(struct lib
|
||||
|
||||
int bpf_tc_attach(const struct bpf_tc_hook *hook, struct bpf_tc_opts *opts)
|
||||
{
|
||||
@@ -32,7 +32,7 @@
|
||||
int ret, ifindex, attach_point, prog_fd;
|
||||
struct bpf_cb_ctx info = {};
|
||||
struct libbpf_nla_req req;
|
||||
@@ -751,6 +753,7 @@ int bpf_tc_attach(const struct bpf_tc_ho
|
||||
@@ -753,6 +755,7 @@ int bpf_tc_attach(const struct bpf_tc_ho
|
||||
prog_fd = OPTS_GET(opts, prog_fd, 0);
|
||||
prog_id = OPTS_GET(opts, prog_id, 0);
|
||||
flags = OPTS_GET(opts, flags, 0);
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
if (ifindex <= 0 || !prog_fd || prog_id)
|
||||
return libbpf_err(-EINVAL);
|
||||
@@ -790,6 +793,11 @@ int bpf_tc_attach(const struct bpf_tc_ho
|
||||
@@ -792,6 +795,11 @@ int bpf_tc_attach(const struct bpf_tc_ho
|
||||
ret = nlattr_add(&req, TCA_BPF_FLAGS, &bpf_flags, sizeof(bpf_flags));
|
||||
if (ret < 0)
|
||||
return libbpf_err(ret);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=xdp-tools
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=1.5.8
|
||||
PKG_HASH:=e7b9717074c511fef34aab6e22b16af55fb33307505a5785d25a82b542e596ae
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=1.6.3
|
||||
PKG_HASH:=78da363ff7dcf1a586f47800f16d644022bd33f3844864061a44616fce854fd8
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/xdp-project/xdp-tools/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
From: Nick Hainke <vincent@systemli.org>
|
||||
Subject: [PATCH] params: avoid linux/if_ether.h in header to fix musl build
|
||||
|
||||
On musl-based toolchains (e.g. MIPS), including <linux/if_ether.h>
|
||||
from params.h triggers a chain through net/ethernet.h ->
|
||||
netinet/if_ether.h which also defines struct ethhdr, causing a
|
||||
redefinition conflict with the direct <linux/if_ether.h> include in
|
||||
params.c.
|
||||
|
||||
params.h only uses ETH_ALEN from that header, so define it directly
|
||||
to avoid the conflict.
|
||||
|
||||
Signed-off-by: Nick Hainke <vincent@systemli.org>
|
||||
---
|
||||
lib/util/params.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/lib/util/params.h
|
||||
+++ b/lib/util/params.h
|
||||
@@ -8,7 +8,9 @@
|
||||
#include <stdlib.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
-#include <linux/if_ether.h>
|
||||
+#ifndef ETH_ALEN
|
||||
+#define ETH_ALEN 6
|
||||
+#endif
|
||||
#include <bpf/libbpf.h>
|
||||
|
||||
enum option_type {
|
||||
-64
@@ -1,64 +0,0 @@
|
||||
From a90c30902e6dc4d220738248dd7785e51bb19904 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Hainke <vincent@systemli.org>
|
||||
Date: Tue, 10 Feb 2026 19:59:42 +0100
|
||||
Subject: [PATCH] xdp: avoid stddef.h and size_t in BPF headers
|
||||
|
||||
Remove <stddef.h> includes that break BPF builds on some toolchains.
|
||||
Replace size_t in xdp_sample_shared.h with unsigned long long to keep
|
||||
structs usable without stddef definitions.
|
||||
|
||||
Signed-off-by: Nick Hainke <vincent@systemli.org>
|
||||
---
|
||||
headers/xdp/parsing_helpers.h | 1 -
|
||||
headers/xdp/xdp_sample_common.bpf.h | 1 -
|
||||
headers/xdp/xdp_sample_shared.h | 16 +++++++---------
|
||||
3 files changed, 7 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/headers/xdp/parsing_helpers.h
|
||||
+++ b/headers/xdp/parsing_helpers.h
|
||||
@@ -15,7 +15,6 @@
|
||||
#ifndef __PARSING_HELPERS_H
|
||||
#define __PARSING_HELPERS_H
|
||||
|
||||
-#include <stddef.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <linux/ip.h>
|
||||
--- a/headers/xdp/xdp_sample_common.bpf.h
|
||||
+++ b/headers/xdp/xdp_sample_common.bpf.h
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "xdp_sample.bpf.h"
|
||||
|
||||
#include <bpf/vmlinux.h>
|
||||
-#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
#include <bpf/bpf_core_read.h>
|
||||
--- a/headers/xdp/xdp_sample_shared.h
|
||||
+++ b/headers/xdp/xdp_sample_shared.h
|
||||
@@ -2,18 +2,16 @@
|
||||
#ifndef _XDP_SAMPLE_SHARED_H
|
||||
#define _XDP_SAMPLE_SHARED_H
|
||||
|
||||
-#include <stddef.h>
|
||||
-
|
||||
struct datarec {
|
||||
- size_t processed;
|
||||
- size_t dropped;
|
||||
- size_t issue;
|
||||
+ unsigned long long processed;
|
||||
+ unsigned long long dropped;
|
||||
+ unsigned long long issue;
|
||||
union {
|
||||
- size_t xdp_pass;
|
||||
- size_t info;
|
||||
+ unsigned long long xdp_pass;
|
||||
+ unsigned long long info;
|
||||
};
|
||||
- size_t xdp_drop;
|
||||
- size_t xdp_redirect;
|
||||
+ unsigned long long xdp_drop;
|
||||
+ unsigned long long xdp_redirect;
|
||||
} __attribute__((aligned(64)));
|
||||
|
||||
#endif
|
||||
@@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mtd-utils
|
||||
PKG_VERSION:=2.3.0
|
||||
PKG_VERSION:=2.3.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:=https://infraroot.at/pub/mtd/
|
||||
PKG_HASH:=2db102908b232406ccb20719c0f43b61196aef4534493419fbf98a273c598c10
|
||||
PKG_HASH:=03d9dc58ad10ea3549d9528f6b17a44d8944e18e96c0f31474f9f977078b83dc
|
||||
|
||||
PKG_INSTALL:=1
|
||||
|
||||
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
From 8a83b306db64d6f60186d4396b0b770163b85b6e Mon Sep 17 00:00:00 2001
|
||||
From: Ross Burton <ross.burton@arm.com>
|
||||
Date: Wed, 26 Feb 2025 18:24:00 +0000
|
||||
Subject: ubifs-utils: link libmissing.a in case execinfo.h isn't present
|
||||
|
||||
On musl execinfo.h doesn't exist, but ubifs-utils uses backtrace() when
|
||||
reporting errors. This results in build failures under musl.
|
||||
|
||||
Handily, libmissing.a already exists with a stub implementation of
|
||||
backtrace().
|
||||
|
||||
Guard the execinfo.h include and if it isn't available instead include
|
||||
libmissing.h, and link to libmissing.a to provide backtrace() if needed.
|
||||
|
||||
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/Makemodule.am | 4 ++--
|
||||
ubifs-utils/common/defs.h | 5 ++++-
|
||||
2 files changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/ubifs-utils/Makemodule.am
|
||||
+++ b/ubifs-utils/Makemodule.am
|
||||
@@ -72,7 +72,7 @@ mkfs_ubifs_SOURCES = \
|
||||
ubifs-utils/mkfs.ubifs/mkfs.ubifs.c
|
||||
|
||||
mkfs_ubifs_LDADD = libmtd.a libubi.a $(ZLIB_LIBS) $(LZO_LIBS) $(ZSTD_LIBS) $(UUID_LIBS) $(LIBSELINUX_LIBS) $(OPENSSL_LIBS) \
|
||||
- $(DUMP_STACK_LD) $(ASAN_LIBS) -lm -lpthread
|
||||
+ $(DUMP_STACK_LD) $(ASAN_LIBS) -lm -lpthread libmissing.a
|
||||
mkfs_ubifs_CPPFLAGS = $(AM_CPPFLAGS) $(ZLIB_CFLAGS) $(LZO_CFLAGS) $(ZSTD_CFLAGS) $(UUID_CFLAGS) $(LIBSELINUX_CFLAGS) \
|
||||
-I$(top_srcdir)/ubi-utils/include -I$(top_srcdir)/ubifs-utils/common -I $(top_srcdir)/ubifs-utils/libubifs
|
||||
|
||||
@@ -90,7 +90,7 @@ fsck_ubifs_SOURCES = \
|
||||
ubifs-utils/fsck.ubifs/handle_disconnected.c
|
||||
|
||||
fsck_ubifs_LDADD = libmtd.a libubi.a $(ZLIB_LIBS) $(LZO_LIBS) $(ZSTD_LIBS) $(UUID_LIBS) $(LIBSELINUX_LIBS) $(OPENSSL_LIBS) \
|
||||
- $(DUMP_STACK_LD) $(ASAN_LIBS) -lm -lpthread
|
||||
+ $(DUMP_STACK_LD) $(ASAN_LIBS) -lm -lpthread libmissing.a
|
||||
fsck_ubifs_CPPFLAGS = $(AM_CPPFLAGS) $(ZLIB_CFLAGS) $(LZO_CFLAGS) $(ZSTD_CFLAGS) $(UUID_CFLAGS) $(LIBSELINUX_CFLAGS) \
|
||||
-I$(top_srcdir)/ubi-utils/include -I$(top_srcdir)/ubifs-utils/common -I $(top_srcdir)/ubifs-utils/libubifs \
|
||||
-I$(top_srcdir)/ubifs-utils/fsck.ubifs
|
||||
--- a/ubifs-utils/common/defs.h
|
||||
+++ b/ubifs-utils/common/defs.h
|
||||
@@ -13,8 +13,11 @@
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <assert.h>
|
||||
+#if HAVE_EXECINFO_H
|
||||
#include <execinfo.h>
|
||||
-
|
||||
+#else
|
||||
+#include "libmissing.h"
|
||||
+#endif
|
||||
#include "ubifs.h"
|
||||
|
||||
/* common.h requires the PROGRAM_NAME macro */
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
From 2669111e3c60b8e146c174db5d2e7e9991f3dd87 Mon Sep 17 00:00:00 2001
|
||||
From: AntonMoryakov <ant.v.moryakov@gmail.com>
|
||||
Date: Thu, 24 Apr 2025 21:19:22 +0300
|
||||
Subject: ubifs-utils: common: fix memory leak in devtable.c
|
||||
|
||||
Report of the static analyzer:
|
||||
Dynamic memory, referenced by 'line', is allocated at devtable.c:356
|
||||
by calling function 'getline' and lost at devtable.c:388.
|
||||
(line: while (getline(&line, &len, f) != -1) {)
|
||||
|
||||
Correct explained:
|
||||
Now line is freed in any exit scenario via out_close which eliminates this error.
|
||||
|
||||
Triggers found by static analyzer Svace.
|
||||
|
||||
Signed-off-by: Anton Moryakov <ant.v.moryakov@gmail.co
|
||||
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/common/devtable.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/ubifs-utils/common/devtable.c
|
||||
+++ b/ubifs-utils/common/devtable.c
|
||||
@@ -392,6 +392,7 @@ int parse_devtable(const char *tbl_file)
|
||||
|
||||
out_close:
|
||||
fclose(f);
|
||||
+ free(line);
|
||||
free_devtable_info();
|
||||
return -1;
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
From ac0ab65ebcd7b11739986b81343457469fbb43b0 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 22 Mar 2025 21:01:32 -0700
|
||||
Subject: Improve check for GCC compiler version
|
||||
|
||||
When using unreleased compiler has version like
|
||||
15.0.1 and that test fails because __GNUC_MINOR__ < 1
|
||||
becomes true, therefore check for full version string
|
||||
which is more rubust.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/common/atomic.h | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/ubifs-utils/common/atomic.h
|
||||
+++ b/ubifs-utils/common/atomic.h
|
||||
@@ -2,8 +2,12 @@
|
||||
#ifndef __ATOMIC_H__
|
||||
#define __ATOMIC_H__
|
||||
|
||||
+#define GCC_VERSION (__GNUC__ * 10000 \
|
||||
+ + __GNUC_MINOR__ * 100 \
|
||||
+ + __GNUC_PATCHLEVEL__)
|
||||
+
|
||||
/* Check GCC version, just to be safe */
|
||||
-#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC_MINOR__ < 1)
|
||||
+#if GCC_VERSION < 40100
|
||||
# error atomic.h works only with GCC newer than version 4.1
|
||||
#endif /* GNUC >= 4.1 */
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
From 12bc9ad824bd8f18a5ec9c7154ad2374cf8c7ae3 Mon Sep 17 00:00:00 2001
|
||||
From: Fabio Estevam <festevam@gmail.com>
|
||||
Date: Wed, 19 Feb 2025 10:02:41 -0300
|
||||
Subject: ubifs-utils: ubifs.h: Include <fcntl.h>
|
||||
|
||||
Include the <fcntl.h> header file to fix the following error
|
||||
when building with musl:
|
||||
|
||||
| In file included from ../git/ubifs-utils/common/compr.c:42:
|
||||
| ../git/ubifs-utils/libubifs/ubifs.h:313:9: error: unknown type name 'loff_t'; did you mean 'off_t'?
|
||||
| 313 | loff_t ui_size;
|
||||
| | ^~~~~~
|
||||
| | off_t
|
||||
| ../git/ubifs-utils/libubifs/ubifs.h:1341:9: error: unknown type name 'loff_t'; did you mean 'off_t'?
|
||||
| 1341 | loff_t i_size;
|
||||
| | ^~~~~~
|
||||
| | off_t
|
||||
| ../git/ubifs-utils/libubifs/ubifs.h:1342:9: error: unknown type name 'loff_t'; did you mean 'off_t'?
|
||||
| 1342 | loff_t d_size;
|
||||
| | ^~~~~~
|
||||
| | off_t
|
||||
| ../git/ubifs-utils/libubifs/ubifs.h:1899:44: error: unknown type name 'loff_t'; did you mean 'off_t'?
|
||||
| 1899 | int deletion, loff_t new_size);
|
||||
| | ^~~~~~
|
||||
| | off_t
|
||||
| make: *** [Makefile:4878: ubifs-utils/common/mkfs_ubifs-compr.o] Error 1
|
||||
|
||||
Signed-off-by: Fabio Estevam <festevam@gmail.com>
|
||||
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
Reviewed-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/libubifs/ubifs.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/ubifs-utils/libubifs/ubifs.h
|
||||
+++ b/ubifs-utils/libubifs/ubifs.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#ifndef __UBIFS_H__
|
||||
#define __UBIFS_H__
|
||||
|
||||
+#include <fcntl.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "linux_types.h"
|
||||
@@ -1,33 +0,0 @@
|
||||
From 173f9714c8da1d685bfa951d43b9310d16bbab3c Mon Sep 17 00:00:00 2001
|
||||
From: Fabio Estevam <festevam@gmail.com>
|
||||
Date: Wed, 19 Feb 2025 10:02:42 -0300
|
||||
Subject: ubifs-utils: journal: Include <sys/stat.h>
|
||||
|
||||
Include the <sys/stat.h> header file to fix the following error
|
||||
when building with musl:
|
||||
|
||||
| ../git/ubifs-utils/libubifs/journal.c: In function 'ubifs_get_dent_type':
|
||||
| ../git/ubifs-utils/libubifs/journal.c:414:24: error: 'S_IFMT' undeclared (first use in this function)
|
||||
| 414 | switch (mode & S_IFMT) {
|
||||
| | ^~~~~~
|
||||
| ../git/ubifs-utils/libubifs/journal.c:414:24: note: each undeclared identifier is reported only once for each function it appears in
|
||||
| ../git/ubifs-utils/libubifs/journal.c:415:14: error: 'S_IFREG' undeclared (first use in this function)
|
||||
| 415 | case S_IFREG:
|
||||
|
||||
Signed-off-by: Fabio Estevam <festevam@gmail.com>
|
||||
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/libubifs/journal.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/ubifs-utils/libubifs/journal.c
|
||||
+++ b/ubifs-utils/libubifs/journal.c
|
||||
@@ -46,6 +46,7 @@
|
||||
* all the nodes.
|
||||
*/
|
||||
|
||||
+#include <sys/stat.h>
|
||||
#include "bitops.h"
|
||||
#include "kmem.h"
|
||||
#include "ubifs.h"
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
From 77981a2888c711268b0e7f32af6af159c2288e23 Mon Sep 17 00:00:00 2001
|
||||
From: Fabio Estevam <festevam@gmail.com>
|
||||
Date: Wed, 19 Feb 2025 10:02:44 -0300
|
||||
Subject: ubifs-utils: extract_files: Include <linux/limits.h>
|
||||
|
||||
Include <linux/limits.h> to fix the following build error when building
|
||||
with musl:
|
||||
|
||||
| ../git/ubifs-utils/fsck.ubifs/extract_files.c: In function 'parse_ino_node':
|
||||
| ../git/ubifs-utils/fsck.ubifs/extract_files.c:144:47: error: 'XATTR_LIST_MAX' undeclared (first use in this function)
|
||||
| 144 | if (ino_node->xnms + ino_node->xcnt > XATTR_LIST_MAX) {
|
||||
| | ^~~~~~~~~~~~~~
|
||||
| ../git/ubifs-utils/fsck.ubifs/extract_files.c:144:47: note: each undeclared identifier is reported only once for each function it appears in
|
||||
| make: *** [Makefile:4374: ubifs-utils/fsck.ubifs/fsck_ubifs-extract_files.o] Error 1
|
||||
|
||||
Signed-off-by: Fabio Estevam <festevam@gmail.com>
|
||||
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
||||
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
|
||||
---
|
||||
ubifs-utils/fsck.ubifs/extract_files.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/ubifs-utils/fsck.ubifs/extract_files.c
|
||||
+++ b/ubifs-utils/fsck.ubifs/extract_files.c
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
+#include <linux/limits.h>
|
||||
+
|
||||
#include "linux_err.h"
|
||||
#include "bitops.h"
|
||||
#include "kmem.h"
|
||||
@@ -20,7 +20,7 @@ https://patchwork.ozlabs.org/project/linux-mtd/patch/20250220112554.2150046-1-m.
|
||||
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -64,7 +64,6 @@ include tests/jittertest/Makemodule.am
|
||||
@@ -67,7 +67,6 @@ include tests/jittertest/Makemodule.am
|
||||
include tests/checkfs/Makemodule.am
|
||||
include tests/fs-tests/Makemodule.am
|
||||
include tests/mtd-tests/Makemodule.am
|
||||
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
From 4ae0604a0673e11e2075b178387151fcad5111b5 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 7 Apr 2026 08:48:04 +0200
|
||||
Subject: [PATCH] net: airoha: Add dma_rmb() and READ_ONCE() in
|
||||
airoha_qdma_rx_process()
|
||||
|
||||
Add missing dma_rmb() in airoha_qdma_rx_process routine to make sure the
|
||||
DMA read operations are completed when the NIC reports the processing on
|
||||
the current descriptor is done. Moreover, add missing READ_ONCE() in
|
||||
airoha_qdma_rx_process() for DMA descriptor control fields in order to
|
||||
avoid any compiler reordering.
|
||||
|
||||
Fixes: 23020f0493270 ("net: airoha: Introduce ethernet support for EN7581 SoC")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260407-airoha_qdma_rx_process-fix-reordering-v3-1-91c36e9da31f@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 16 ++++++++++------
|
||||
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -584,7 +584,7 @@ static int airoha_qdma_fill_rx_queue(str
|
||||
static int airoha_qdma_get_gdm_port(struct airoha_eth *eth,
|
||||
struct airoha_qdma_desc *desc)
|
||||
{
|
||||
- u32 port, sport, msg1 = le32_to_cpu(desc->msg1);
|
||||
+ u32 port, sport, msg1 = le32_to_cpu(READ_ONCE(desc->msg1));
|
||||
|
||||
sport = FIELD_GET(QDMA_ETH_RXMSG_SPORT_MASK, msg1);
|
||||
switch (sport) {
|
||||
@@ -612,21 +612,24 @@ static int airoha_qdma_rx_process(struct
|
||||
while (done < budget) {
|
||||
struct airoha_queue_entry *e = &q->entry[q->tail];
|
||||
struct airoha_qdma_desc *desc = &q->desc[q->tail];
|
||||
- u32 hash, reason, msg1 = le32_to_cpu(desc->msg1);
|
||||
- struct page *page = virt_to_head_page(e->buf);
|
||||
- u32 desc_ctrl = le32_to_cpu(desc->ctrl);
|
||||
+ u32 hash, reason, msg1, desc_ctrl;
|
||||
struct airoha_gdm_port *port;
|
||||
int data_len, len, p;
|
||||
+ struct page *page;
|
||||
|
||||
+ desc_ctrl = le32_to_cpu(READ_ONCE(desc->ctrl));
|
||||
if (!(desc_ctrl & QDMA_DESC_DONE_MASK))
|
||||
break;
|
||||
|
||||
+ dma_rmb();
|
||||
+
|
||||
q->tail = (q->tail + 1) % q->ndesc;
|
||||
q->queued--;
|
||||
|
||||
dma_sync_single_for_cpu(eth->dev, e->dma_addr,
|
||||
SKB_WITH_OVERHEAD(q->buf_size), dir);
|
||||
|
||||
+ page = virt_to_head_page(e->buf);
|
||||
len = FIELD_GET(QDMA_DESC_LEN_MASK, desc_ctrl);
|
||||
data_len = q->skb ? q->buf_size
|
||||
: SKB_WITH_OVERHEAD(q->buf_size);
|
||||
@@ -670,8 +673,8 @@ static int airoha_qdma_rx_process(struct
|
||||
* DMA descriptor. Report DSA tag to the DSA stack
|
||||
* via skb dst info.
|
||||
*/
|
||||
- u32 sptag = FIELD_GET(QDMA_ETH_RXMSG_SPTAG,
|
||||
- le32_to_cpu(desc->msg0));
|
||||
+ u32 msg0 = le32_to_cpu(READ_ONCE(desc->msg0));
|
||||
+ u32 sptag = FIELD_GET(QDMA_ETH_RXMSG_SPTAG, msg0);
|
||||
|
||||
if (sptag < ARRAY_SIZE(port->dsa_meta) &&
|
||||
port->dsa_meta[sptag])
|
||||
@@ -679,6 +682,7 @@ static int airoha_qdma_rx_process(struct
|
||||
&port->dsa_meta[sptag]->dst);
|
||||
}
|
||||
|
||||
+ msg1 = le32_to_cpu(READ_ONCE(desc->msg1));
|
||||
hash = FIELD_GET(AIROHA_RXD4_FOE_ENTRY, msg1);
|
||||
if (hash != AIROHA_RXD4_FOE_ENTRY)
|
||||
skb_set_hash(q->skb, jhash_1word(hash, 0),
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
From b9d8b856689d2b968495d79fe653d87fcb8ad98c Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 10:43:26 +0200
|
||||
Subject: [PATCH] net: airoha: Add missing PPE configurations in
|
||||
airoha_ppe_hw_init()
|
||||
|
||||
Add the following PPE configuration in airoha_ppe_hw_init routine:
|
||||
- 6RD hw offloading is currently not supported by Netfilter flowtable.
|
||||
Disable explicitly PPE 6RD offloading in order to prevent PPE to learn
|
||||
6RD flows and eventually interrupt the traffic.
|
||||
- Add missing PPE bind rate configuration for L3 and L2 traffic.
|
||||
PPE bind rate configuration specifies the pps threshold to move a PPE
|
||||
entry state from UNBIND to BIND. Without this configuration this value
|
||||
is random.
|
||||
- Set ageing thresholds to the values used in the vendor SDK in order to
|
||||
improve connection stability under load and avoid packet loss caused by
|
||||
fast aging.
|
||||
|
||||
Fixes: 00a7678310fe3 ("net: airoha: Introduce flowtable offload support")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha_ppe_hw_init-missing-bits-v1-1-06ac670819e3@kernel.org
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_ppe.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_ppe.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_ppe.c
|
||||
@@ -125,13 +125,13 @@ static void airoha_ppe_hw_init(struct ai
|
||||
airoha_fe_rmw(eth, REG_PPE_BND_AGE0(i),
|
||||
PPE_BIND_AGE0_DELTA_NON_L4 |
|
||||
PPE_BIND_AGE0_DELTA_UDP,
|
||||
- FIELD_PREP(PPE_BIND_AGE0_DELTA_NON_L4, 1) |
|
||||
- FIELD_PREP(PPE_BIND_AGE0_DELTA_UDP, 12));
|
||||
+ FIELD_PREP(PPE_BIND_AGE0_DELTA_NON_L4, 60) |
|
||||
+ FIELD_PREP(PPE_BIND_AGE0_DELTA_UDP, 60));
|
||||
airoha_fe_rmw(eth, REG_PPE_BND_AGE1(i),
|
||||
PPE_BIND_AGE1_DELTA_TCP_FIN |
|
||||
PPE_BIND_AGE1_DELTA_TCP,
|
||||
FIELD_PREP(PPE_BIND_AGE1_DELTA_TCP_FIN, 1) |
|
||||
- FIELD_PREP(PPE_BIND_AGE1_DELTA_TCP, 7));
|
||||
+ FIELD_PREP(PPE_BIND_AGE1_DELTA_TCP, 60));
|
||||
|
||||
airoha_fe_rmw(eth, REG_PPE_TB_HASH_CFG(i),
|
||||
PPE_SRAM_TABLE_EN_MASK |
|
||||
@@ -159,7 +159,15 @@ static void airoha_ppe_hw_init(struct ai
|
||||
FIELD_PREP(PPE_DRAM_TB_NUM_ENTRY_MASK,
|
||||
dram_num_entries));
|
||||
|
||||
+ airoha_fe_rmw(eth, REG_PPE_BIND_RATE(i),
|
||||
+ PPE_BIND_RATE_L2B_BIND_MASK |
|
||||
+ PPE_BIND_RATE_BIND_MASK,
|
||||
+ FIELD_PREP(PPE_BIND_RATE_L2B_BIND_MASK, 0x1e) |
|
||||
+ FIELD_PREP(PPE_BIND_RATE_BIND_MASK, 0x1e));
|
||||
+
|
||||
airoha_fe_wr(eth, REG_PPE_HASH_SEED(i), PPE_HASH_SEED);
|
||||
+ airoha_fe_clear(eth, REG_PPE_PPE_FLOW_CFG(i),
|
||||
+ PPE_FLOW_CFG_IP6_6RD_MASK);
|
||||
|
||||
for (p = 0; p < ARRAY_SIZE(eth->ports); p++) {
|
||||
struct airoha_gdm_port *port = eth->ports[p];
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 656121b155030086b01cfce9bd31b0c925ee6860 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Wed, 8 Apr 2026 20:26:56 +0200
|
||||
Subject: [PATCH] net: airoha: Add missing RX_CPU_IDX() configuration in
|
||||
airoha_qdma_cleanup_rx_queue()
|
||||
|
||||
When the descriptor index written in REG_RX_CPU_IDX() is equal to the one
|
||||
stored in REG_RX_DMA_IDX(), the hw will stop since the QDMA RX ring is
|
||||
empty.
|
||||
Add missing REG_RX_CPU_IDX() configuration in airoha_qdma_cleanup_rx_queue
|
||||
routine during QDMA RX ring cleanup.
|
||||
|
||||
Fixes: 514aac359987 ("net: airoha: Add missing cleanup bits in airoha_qdma_cleanup_rx_queue()")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260408-airoha-cpu-idx-airoha_qdma_cleanup_rx_queue-v1-1-8efa64844308@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -824,6 +824,11 @@ static void airoha_qdma_cleanup_rx_queue
|
||||
}
|
||||
|
||||
q->head = q->tail;
|
||||
+ /* Set RX_DMA_IDX to RX_CPU_IDX to notify the hw the QDMA RX ring is
|
||||
+ * empty.
|
||||
+ */
|
||||
+ airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), RX_RING_CPU_IDX_MASK,
|
||||
+ FIELD_PREP(RX_RING_CPU_IDX_MASK, q->head));
|
||||
airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK,
|
||||
FIELD_PREP(RX_RING_DMA_IDX_MASK, q->tail));
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
From 02f72964395911e7a09bb2ea2fe6f79eda4ea2c2 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Wed, 8 Apr 2026 12:20:09 +0200
|
||||
Subject: [PATCH] net: airoha: Fix FE_PSE_BUF_SET configuration if PPE2 is
|
||||
available
|
||||
|
||||
airoha_fe_set routine is used to set specified bits to 1 in the selected
|
||||
register. In the FE_PSE_BUF_SET case this can due to a overestimation of
|
||||
the required buffers for I/O queues since we can miss to set some bits
|
||||
of PSE_ALLRSV_MASK subfield to 0. Fix the issue relying on airoha_fe_rmw
|
||||
routine instead.
|
||||
|
||||
Fixes: 8e38e08f2c560 ("net: airoha: fix PSE memory configuration in airoha_fe_pse_ports_init()")
|
||||
Tested-by: Xuegang Lu <xuegang.lu@airoha.com>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260408-airoha-reg_fe_pse_buf_set-v1-1-0c4fa8f4d1d9@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -293,16 +293,18 @@ static void airoha_fe_pse_ports_init(str
|
||||
[FE_PSE_PORT_GDM4] = 2,
|
||||
[FE_PSE_PORT_CDM5] = 2,
|
||||
};
|
||||
- u32 all_rsv;
|
||||
int q;
|
||||
|
||||
- all_rsv = airoha_fe_get_pse_all_rsv(eth);
|
||||
if (airoha_ppe_is_enabled(eth, 1)) {
|
||||
+ u32 all_rsv;
|
||||
+
|
||||
/* hw misses PPE2 oq rsv */
|
||||
+ all_rsv = airoha_fe_get_pse_all_rsv(eth);
|
||||
all_rsv += PSE_RSV_PAGES *
|
||||
pse_port_num_queues[FE_PSE_PORT_PPE2];
|
||||
+ airoha_fe_rmw(eth, REG_FE_PSE_BUF_SET, PSE_ALLRSV_MASK,
|
||||
+ FIELD_PREP(PSE_ALLRSV_MASK, all_rsv));
|
||||
}
|
||||
- airoha_fe_set(eth, REG_FE_PSE_BUF_SET, all_rsv);
|
||||
|
||||
/* CMD1 */
|
||||
for (q = 0; q < pse_port_num_queues[FE_PSE_PORT_CDM1]; q++)
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 285fa6b1e03cff78ead0383e1b259c44b95faf90 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Thu, 2 Apr 2026 14:57:10 +0200
|
||||
Subject: [PATCH] net: airoha: Fix memory leak in airoha_qdma_rx_process()
|
||||
|
||||
If an error occurs on the subsequents buffers belonging to the
|
||||
non-linear part of the skb (e.g. due to an error in the payload length
|
||||
reported by the NIC or if we consumed all the available fragments for
|
||||
the skb), the page_pool fragment will not be linked to the skb so it will
|
||||
not return to the pool in the airoha_qdma_rx_process() error path. Fix the
|
||||
memory leak partially reverting commit 'd6d2b0e1538d ("net: airoha: Fix
|
||||
page recycling in airoha_qdma_rx_process()")' and always running
|
||||
page_pool_put_full_page routine in the airoha_qdma_rx_process() error
|
||||
path.
|
||||
|
||||
Fixes: d6d2b0e1538d ("net: airoha: Fix page recycling in airoha_qdma_rx_process()")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Reviewed-by: Simon Horman <horms@kernel.org>
|
||||
Link: https://patch.msgid.link/20260402-airoha_qdma_rx_process-mem-leak-fix-v1-1-b5706f402d3c@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -703,9 +703,8 @@ free_frag:
|
||||
if (q->skb) {
|
||||
dev_kfree_skb(q->skb);
|
||||
q->skb = NULL;
|
||||
- } else {
|
||||
- page_pool_put_full_page(q->page_pool, page, true);
|
||||
}
|
||||
+ page_pool_put_full_page(q->page_pool, page, true);
|
||||
}
|
||||
airoha_qdma_fill_rx_queue(q);
|
||||
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
From 1acdfbdb516b32165a8ecd1d5f8c68e4eac64637 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 09:57:29 +0200
|
||||
Subject: [PATCH] net: airoha: Fix VIP configuration for AN7583 SoC
|
||||
|
||||
EN7581 and AN7583 SoCs have different VIP definitions. Introduce
|
||||
get_vip_port callback in airoha_eth_soc_data struct in order to take
|
||||
into account EN7581 and AN7583 VIP register layout and definition
|
||||
differences.
|
||||
Introduce nbq parameter in airoha_gdm_port struct. At the moment nbq
|
||||
is set statically to value previously used in airhoha_set_gdm2_loopback
|
||||
routine and it will be read from device tree in subsequent patches.
|
||||
|
||||
Fixes: e4e5ce823bdd ("net: airoha: Add AN7583 SoC support")
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha-7583-vip-fix-v1-1-c35e02b054bb@kernel.org
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 66 ++++++++++++++++++------
|
||||
drivers/net/ethernet/airoha/airoha_eth.h | 2 +
|
||||
2 files changed, 51 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -107,19 +107,7 @@ static int airoha_set_vip_for_gdm_port(s
|
||||
struct airoha_eth *eth = port->qdma->eth;
|
||||
u32 vip_port;
|
||||
|
||||
- switch (port->id) {
|
||||
- case AIROHA_GDM3_IDX:
|
||||
- /* FIXME: handle XSI_PCIE1_PORT */
|
||||
- vip_port = XSI_PCIE0_VIP_PORT_MASK;
|
||||
- break;
|
||||
- case AIROHA_GDM4_IDX:
|
||||
- /* FIXME: handle XSI_USB_PORT */
|
||||
- vip_port = XSI_ETH_VIP_PORT_MASK;
|
||||
- break;
|
||||
- default:
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
+ vip_port = eth->soc->ops.get_vip_port(port, port->nbq);
|
||||
if (enable) {
|
||||
airoha_fe_set(eth, REG_FE_VIP_PORT_EN, vip_port);
|
||||
airoha_fe_set(eth, REG_FE_IFC_PORT_EN, vip_port);
|
||||
@@ -1738,7 +1726,7 @@ static int airoha_dev_set_macaddr(struct
|
||||
static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
|
||||
{
|
||||
struct airoha_eth *eth = port->qdma->eth;
|
||||
- u32 val, pse_port, chan, nbq;
|
||||
+ u32 val, pse_port, chan;
|
||||
int src_port;
|
||||
|
||||
/* Forward the traffic to the proper GDM port */
|
||||
@@ -1768,9 +1756,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
airoha_fe_clear(eth, REG_FE_VIP_PORT_EN, BIT(AIROHA_GDM2_IDX));
|
||||
airoha_fe_clear(eth, REG_FE_IFC_PORT_EN, BIT(AIROHA_GDM2_IDX));
|
||||
|
||||
- /* XXX: handle XSI_USB_PORT and XSI_PCE1_PORT */
|
||||
- nbq = port->id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
|
||||
- src_port = eth->soc->ops.get_src_port_id(port, nbq);
|
||||
+ src_port = eth->soc->ops.get_src_port_id(port, port->nbq);
|
||||
if (src_port < 0)
|
||||
return src_port;
|
||||
|
||||
@@ -1784,7 +1770,7 @@ static int airhoha_set_gdm2_loopback(str
|
||||
__field_prep(SP_CPORT_MASK(val), FE_PSE_PORT_CDM2));
|
||||
|
||||
if (port->id == AIROHA_GDM4_IDX && airoha_is_7581(eth)) {
|
||||
- u32 mask = FC_ID_OF_SRC_PORT_MASK(nbq);
|
||||
+ u32 mask = FC_ID_OF_SRC_PORT_MASK(port->nbq);
|
||||
|
||||
airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6, mask,
|
||||
__field_prep(mask, AIROHA_GDM2_IDX));
|
||||
@@ -2962,6 +2948,8 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->eth = eth;
|
||||
port->dev = dev;
|
||||
port->id = id;
|
||||
+ /* XXX: Read nbq from DTS */
|
||||
+ port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
|
||||
eth->ports[p] = port;
|
||||
|
||||
return airoha_metadata_dst_alloc(port);
|
||||
@@ -3158,6 +3146,28 @@ static int airoha_en7581_get_src_port_id
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+static u32 airoha_en7581_get_vip_port(struct airoha_gdm_port *port, int nbq)
|
||||
+{
|
||||
+ switch (port->id) {
|
||||
+ case AIROHA_GDM3_IDX:
|
||||
+ if (nbq == 4)
|
||||
+ return XSI_PCIE0_VIP_PORT_MASK;
|
||||
+ if (nbq == 5)
|
||||
+ return XSI_PCIE1_VIP_PORT_MASK;
|
||||
+ break;
|
||||
+ case AIROHA_GDM4_IDX:
|
||||
+ if (!nbq)
|
||||
+ return XSI_ETH_VIP_PORT_MASK;
|
||||
+ if (nbq == 1)
|
||||
+ return XSI_USB_VIP_PORT_MASK;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const char * const an7583_xsi_rsts_names[] = {
|
||||
"xsi-mac",
|
||||
"hsi0-mac",
|
||||
@@ -3187,6 +3197,26 @@ static int airoha_an7583_get_src_port_id
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+static u32 airoha_an7583_get_vip_port(struct airoha_gdm_port *port, int nbq)
|
||||
+{
|
||||
+ switch (port->id) {
|
||||
+ case AIROHA_GDM3_IDX:
|
||||
+ if (!nbq)
|
||||
+ return XSI_ETH_VIP_PORT_MASK;
|
||||
+ break;
|
||||
+ case AIROHA_GDM4_IDX:
|
||||
+ if (!nbq)
|
||||
+ return XSI_PCIE0_VIP_PORT_MASK;
|
||||
+ if (nbq == 1)
|
||||
+ return XSI_USB_VIP_PORT_MASK;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct airoha_eth_soc_data en7581_soc_data = {
|
||||
.version = 0x7581,
|
||||
.xsi_rsts_names = en7581_xsi_rsts_names,
|
||||
@@ -3194,6 +3224,7 @@ static const struct airoha_eth_soc_data
|
||||
.num_ppe = 2,
|
||||
.ops = {
|
||||
.get_src_port_id = airoha_en7581_get_src_port_id,
|
||||
+ .get_vip_port = airoha_en7581_get_vip_port,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3204,6 +3235,7 @@ static const struct airoha_eth_soc_data
|
||||
.num_ppe = 1,
|
||||
.ops = {
|
||||
.get_src_port_id = airoha_an7583_get_src_port_id,
|
||||
+ .get_vip_port = airoha_an7583_get_vip_port,
|
||||
},
|
||||
};
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
@@ -537,6 +537,7 @@ struct airoha_gdm_port {
|
||||
struct airoha_eth *eth;
|
||||
struct net_device *dev;
|
||||
int id;
|
||||
+ int nbq;
|
||||
|
||||
struct airoha_hw_stats stats;
|
||||
|
||||
@@ -577,6 +578,7 @@ struct airoha_eth_soc_data {
|
||||
int num_ppe;
|
||||
struct {
|
||||
int (*get_src_port_id)(struct airoha_gdm_port *port, int nbq);
|
||||
+ u32 (*get_vip_port)(struct airoha_gdm_port *port, int nbq);
|
||||
} ops;
|
||||
};
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
From 360d745a5319f09849a94dee0974c8ead721e392 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 19:13:12 +0200
|
||||
Subject: [PATCH 1/4] net: airoha: Rely on net_device pointer in
|
||||
airoha_dev_setup_tc_block signature
|
||||
|
||||
Remove airoha_gdm_port dependency in airoha_dev_setup_tc_block routine
|
||||
signature and rely on net_device pointer instead. Please note this patch
|
||||
does not introduce any logical change and it is a preliminary patch to
|
||||
support multiple net_devices connected to the GDM3 or GDM4 ports via an
|
||||
external hw arbiter.
|
||||
|
||||
Tested-by: Xuegang Lu <xuegang.lu@airoha.com>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha-multi-serdes-preliminary-patch-v1-1-08d5b670ca8f@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2683,7 +2683,7 @@ static int airoha_dev_setup_tc_block_cb(
|
||||
}
|
||||
}
|
||||
|
||||
-static int airoha_dev_setup_tc_block(struct airoha_gdm_port *port,
|
||||
+static int airoha_dev_setup_tc_block(struct net_device *dev,
|
||||
struct flow_block_offload *f)
|
||||
{
|
||||
flow_setup_cb_t *cb = airoha_dev_setup_tc_block_cb;
|
||||
@@ -2696,12 +2696,12 @@ static int airoha_dev_setup_tc_block(str
|
||||
f->driver_block_list = &block_cb_list;
|
||||
switch (f->command) {
|
||||
case FLOW_BLOCK_BIND:
|
||||
- block_cb = flow_block_cb_lookup(f->block, cb, port->dev);
|
||||
+ block_cb = flow_block_cb_lookup(f->block, cb, dev);
|
||||
if (block_cb) {
|
||||
flow_block_cb_incref(block_cb);
|
||||
return 0;
|
||||
}
|
||||
- block_cb = flow_block_cb_alloc(cb, port->dev, port->dev, NULL);
|
||||
+ block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
|
||||
if (IS_ERR(block_cb))
|
||||
return PTR_ERR(block_cb);
|
||||
|
||||
@@ -2710,7 +2710,7 @@ static int airoha_dev_setup_tc_block(str
|
||||
list_add_tail(&block_cb->driver_list, &block_cb_list);
|
||||
return 0;
|
||||
case FLOW_BLOCK_UNBIND:
|
||||
- block_cb = flow_block_cb_lookup(f->block, cb, port->dev);
|
||||
+ block_cb = flow_block_cb_lookup(f->block, cb, dev);
|
||||
if (!block_cb)
|
||||
return -ENOENT;
|
||||
|
||||
@@ -2809,7 +2809,7 @@ static int airoha_dev_tc_setup(struct ne
|
||||
return airoha_tc_setup_qdisc_htb(port, type_data);
|
||||
case TC_SETUP_BLOCK:
|
||||
case TC_SETUP_FT:
|
||||
- return airoha_dev_setup_tc_block(port, type_data);
|
||||
+ return airoha_dev_setup_tc_block(dev, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
From 8baf4bf72ef94c955ef89d4644f1986603ee8320 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 19:13:13 +0200
|
||||
Subject: [PATCH 2/4] net: airoha: Rely on net_device pointer in HTB callbacks
|
||||
|
||||
Remove airoha_gdm_port dependency in HTB tc callback signatures and rely
|
||||
on net_device pointer instead. Please note this patch does not introduce
|
||||
any logical change and it is a preliminary patch in order to support
|
||||
multiple net_devices connected to the same GDM3 or GDM4 port via an
|
||||
external hw arbiter.
|
||||
|
||||
Tested-by: Xuegang Lu <xuegang.lu@airoha.com>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha-multi-serdes-preliminary-patch-v1-2-08d5b670ca8f@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 45 +++++++++++++-----------
|
||||
1 file changed, 24 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2488,10 +2488,11 @@ static int airoha_qdma_set_trtcm_token_b
|
||||
mode, val);
|
||||
}
|
||||
|
||||
-static int airoha_qdma_set_tx_rate_limit(struct airoha_gdm_port *port,
|
||||
+static int airoha_qdma_set_tx_rate_limit(struct net_device *dev,
|
||||
int channel, u32 rate,
|
||||
u32 bucket_size)
|
||||
{
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
int i, err;
|
||||
|
||||
for (i = 0; i <= TRTCM_PEAK_MODE; i++) {
|
||||
@@ -2511,21 +2512,20 @@ static int airoha_qdma_set_tx_rate_limit
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_tc_htb_alloc_leaf_queue(struct airoha_gdm_port *port,
|
||||
+static int airoha_tc_htb_alloc_leaf_queue(struct net_device *dev,
|
||||
struct tc_htb_qopt_offload *opt)
|
||||
{
|
||||
u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
|
||||
u32 rate = div_u64(opt->rate, 1000) << 3; /* kbps */
|
||||
- struct net_device *dev = port->dev;
|
||||
- int num_tx_queues = dev->real_num_tx_queues;
|
||||
- int err;
|
||||
+ int err, num_tx_queues = dev->real_num_tx_queues;
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
|
||||
if (opt->parent_classid != TC_HTB_CLASSID_ROOT) {
|
||||
NL_SET_ERR_MSG_MOD(opt->extack, "invalid parent classid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- err = airoha_qdma_set_tx_rate_limit(port, channel, rate, opt->quantum);
|
||||
+ err = airoha_qdma_set_tx_rate_limit(dev, channel, rate, opt->quantum);
|
||||
if (err) {
|
||||
NL_SET_ERR_MSG_MOD(opt->extack,
|
||||
"failed configuring htb offload");
|
||||
@@ -2537,7 +2537,7 @@ static int airoha_tc_htb_alloc_leaf_queu
|
||||
|
||||
err = netif_set_real_num_tx_queues(dev, num_tx_queues + 1);
|
||||
if (err) {
|
||||
- airoha_qdma_set_tx_rate_limit(port, channel, 0, opt->quantum);
|
||||
+ airoha_qdma_set_tx_rate_limit(dev, channel, 0, opt->quantum);
|
||||
NL_SET_ERR_MSG_MOD(opt->extack,
|
||||
"failed setting real_num_tx_queues");
|
||||
return err;
|
||||
@@ -2724,44 +2724,47 @@ static int airoha_dev_setup_tc_block(str
|
||||
}
|
||||
}
|
||||
|
||||
-static void airoha_tc_remove_htb_queue(struct airoha_gdm_port *port, int queue)
|
||||
+static void airoha_tc_remove_htb_queue(struct net_device *dev, int queue)
|
||||
{
|
||||
- struct net_device *dev = port->dev;
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
|
||||
netif_set_real_num_tx_queues(dev, dev->real_num_tx_queues - 1);
|
||||
- airoha_qdma_set_tx_rate_limit(port, queue + 1, 0, 0);
|
||||
+ airoha_qdma_set_tx_rate_limit(dev, queue + 1, 0, 0);
|
||||
clear_bit(queue, port->qos_sq_bmap);
|
||||
}
|
||||
|
||||
-static int airoha_tc_htb_delete_leaf_queue(struct airoha_gdm_port *port,
|
||||
+static int airoha_tc_htb_delete_leaf_queue(struct net_device *dev,
|
||||
struct tc_htb_qopt_offload *opt)
|
||||
{
|
||||
u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
|
||||
if (!test_bit(channel, port->qos_sq_bmap)) {
|
||||
NL_SET_ERR_MSG_MOD(opt->extack, "invalid queue id");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- airoha_tc_remove_htb_queue(port, channel);
|
||||
+ airoha_tc_remove_htb_queue(dev, channel);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_tc_htb_destroy(struct airoha_gdm_port *port)
|
||||
+static int airoha_tc_htb_destroy(struct net_device *dev)
|
||||
{
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
int q;
|
||||
|
||||
for_each_set_bit(q, port->qos_sq_bmap, AIROHA_NUM_QOS_CHANNELS)
|
||||
- airoha_tc_remove_htb_queue(port, q);
|
||||
+ airoha_tc_remove_htb_queue(dev, q);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_tc_get_htb_get_leaf_queue(struct airoha_gdm_port *port,
|
||||
+static int airoha_tc_get_htb_get_leaf_queue(struct net_device *dev,
|
||||
struct tc_htb_qopt_offload *opt)
|
||||
{
|
||||
u32 channel = TC_H_MIN(opt->classid) % AIROHA_NUM_QOS_CHANNELS;
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
|
||||
if (!test_bit(channel, port->qos_sq_bmap)) {
|
||||
NL_SET_ERR_MSG_MOD(opt->extack, "invalid queue id");
|
||||
@@ -2773,23 +2776,23 @@ static int airoha_tc_get_htb_get_leaf_qu
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_tc_setup_qdisc_htb(struct airoha_gdm_port *port,
|
||||
+static int airoha_tc_setup_qdisc_htb(struct net_device *dev,
|
||||
struct tc_htb_qopt_offload *opt)
|
||||
{
|
||||
switch (opt->command) {
|
||||
case TC_HTB_CREATE:
|
||||
break;
|
||||
case TC_HTB_DESTROY:
|
||||
- return airoha_tc_htb_destroy(port);
|
||||
+ return airoha_tc_htb_destroy(dev);
|
||||
case TC_HTB_NODE_MODIFY:
|
||||
case TC_HTB_LEAF_ALLOC_QUEUE:
|
||||
- return airoha_tc_htb_alloc_leaf_queue(port, opt);
|
||||
+ return airoha_tc_htb_alloc_leaf_queue(dev, opt);
|
||||
case TC_HTB_LEAF_DEL:
|
||||
case TC_HTB_LEAF_DEL_LAST:
|
||||
case TC_HTB_LEAF_DEL_LAST_FORCE:
|
||||
- return airoha_tc_htb_delete_leaf_queue(port, opt);
|
||||
+ return airoha_tc_htb_delete_leaf_queue(dev, opt);
|
||||
case TC_HTB_LEAF_QUERY_QUEUE:
|
||||
- return airoha_tc_get_htb_get_leaf_queue(port, opt);
|
||||
+ return airoha_tc_get_htb_get_leaf_queue(dev, opt);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -2806,7 +2809,7 @@ static int airoha_dev_tc_setup(struct ne
|
||||
case TC_SETUP_QDISC_ETS:
|
||||
return airoha_tc_setup_qdisc_ets(port, type_data);
|
||||
case TC_SETUP_QDISC_HTB:
|
||||
- return airoha_tc_setup_qdisc_htb(port, type_data);
|
||||
+ return airoha_tc_setup_qdisc_htb(dev, type_data);
|
||||
case TC_SETUP_BLOCK:
|
||||
case TC_SETUP_FT:
|
||||
return airoha_dev_setup_tc_block(dev, type_data);
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
From ae32f80018f0f0f4ebc7a0a70d4092d08a1545e8 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 19:13:14 +0200
|
||||
Subject: [PATCH 3/4] net: airoha: Rely on net_device pointer in ETS callbacks
|
||||
|
||||
Remove airoha_gdm_port dependency in ETS tc callback signatures and rely
|
||||
on net_device pointer instead. Please note this patch does not introduce
|
||||
any logical change and it is a preliminary patch in order to support
|
||||
multiple net_devices connected to the same GDM3 or GDM4 port via an
|
||||
external hw arbiter.
|
||||
|
||||
Tested-by: Xuegang Lu <xuegang.lu@airoha.com>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha-multi-serdes-preliminary-patch-v1-3-08d5b670ca8f@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 30 +++++++++++-------------
|
||||
1 file changed, 14 insertions(+), 16 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -2134,10 +2134,11 @@ airoha_ethtool_get_rmon_stats(struct net
|
||||
} while (u64_stats_fetch_retry(&port->stats.syncp, start));
|
||||
}
|
||||
|
||||
-static int airoha_qdma_set_chan_tx_sched(struct airoha_gdm_port *port,
|
||||
+static int airoha_qdma_set_chan_tx_sched(struct net_device *dev,
|
||||
int channel, enum tx_sched_mode mode,
|
||||
const u16 *weights, u8 n_weights)
|
||||
{
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < AIROHA_NUM_TX_RING; i++)
|
||||
@@ -2169,17 +2170,15 @@ static int airoha_qdma_set_chan_tx_sched
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_qdma_set_tx_prio_sched(struct airoha_gdm_port *port,
|
||||
- int channel)
|
||||
+static int airoha_qdma_set_tx_prio_sched(struct net_device *dev, int channel)
|
||||
{
|
||||
static const u16 w[AIROHA_NUM_QOS_QUEUES] = {};
|
||||
|
||||
- return airoha_qdma_set_chan_tx_sched(port, channel, TC_SCH_SP, w,
|
||||
+ return airoha_qdma_set_chan_tx_sched(dev, channel, TC_SCH_SP, w,
|
||||
ARRAY_SIZE(w));
|
||||
}
|
||||
|
||||
-static int airoha_qdma_set_tx_ets_sched(struct airoha_gdm_port *port,
|
||||
- int channel,
|
||||
+static int airoha_qdma_set_tx_ets_sched(struct net_device *dev, int channel,
|
||||
struct tc_ets_qopt_offload *opt)
|
||||
{
|
||||
struct tc_ets_qopt_offload_replace_params *p = &opt->replace_params;
|
||||
@@ -2220,20 +2219,21 @@ static int airoha_qdma_set_tx_ets_sched(
|
||||
else if (nstrict < AIROHA_NUM_QOS_QUEUES - 1)
|
||||
mode = nstrict + 1;
|
||||
|
||||
- return airoha_qdma_set_chan_tx_sched(port, channel, mode, w,
|
||||
+ return airoha_qdma_set_chan_tx_sched(dev, channel, mode, w,
|
||||
ARRAY_SIZE(w));
|
||||
}
|
||||
|
||||
-static int airoha_qdma_get_tx_ets_stats(struct airoha_gdm_port *port,
|
||||
- int channel,
|
||||
+static int airoha_qdma_get_tx_ets_stats(struct net_device *dev, int channel,
|
||||
struct tc_ets_qopt_offload *opt)
|
||||
{
|
||||
+ struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
u64 cpu_tx_packets = airoha_qdma_rr(port->qdma,
|
||||
REG_CNTR_VAL(channel << 1));
|
||||
u64 fwd_tx_packets = airoha_qdma_rr(port->qdma,
|
||||
REG_CNTR_VAL((channel << 1) + 1));
|
||||
u64 tx_packets = (cpu_tx_packets - port->cpu_tx_packets) +
|
||||
(fwd_tx_packets - port->fwd_tx_packets);
|
||||
+
|
||||
_bstats_update(opt->stats.bstats, 0, tx_packets);
|
||||
|
||||
port->cpu_tx_packets = cpu_tx_packets;
|
||||
@@ -2242,7 +2242,7 @@ static int airoha_qdma_get_tx_ets_stats(
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airoha_tc_setup_qdisc_ets(struct airoha_gdm_port *port,
|
||||
+static int airoha_tc_setup_qdisc_ets(struct net_device *dev,
|
||||
struct tc_ets_qopt_offload *opt)
|
||||
{
|
||||
int channel;
|
||||
@@ -2255,12 +2255,12 @@ static int airoha_tc_setup_qdisc_ets(str
|
||||
|
||||
switch (opt->command) {
|
||||
case TC_ETS_REPLACE:
|
||||
- return airoha_qdma_set_tx_ets_sched(port, channel, opt);
|
||||
+ return airoha_qdma_set_tx_ets_sched(dev, channel, opt);
|
||||
case TC_ETS_DESTROY:
|
||||
/* PRIO is default qdisc scheduler */
|
||||
- return airoha_qdma_set_tx_prio_sched(port, channel);
|
||||
+ return airoha_qdma_set_tx_prio_sched(dev, channel);
|
||||
case TC_ETS_STATS:
|
||||
- return airoha_qdma_get_tx_ets_stats(port, channel, opt);
|
||||
+ return airoha_qdma_get_tx_ets_stats(dev, channel, opt);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -2803,11 +2803,9 @@ static int airoha_tc_setup_qdisc_htb(str
|
||||
static int airoha_dev_tc_setup(struct net_device *dev, enum tc_setup_type type,
|
||||
void *type_data)
|
||||
{
|
||||
- struct airoha_gdm_port *port = netdev_priv(dev);
|
||||
-
|
||||
switch (type) {
|
||||
case TC_SETUP_QDISC_ETS:
|
||||
- return airoha_tc_setup_qdisc_ets(port, type_data);
|
||||
+ return airoha_tc_setup_qdisc_ets(dev, type_data);
|
||||
case TC_SETUP_QDISC_HTB:
|
||||
return airoha_tc_setup_qdisc_htb(dev, type_data);
|
||||
case TC_SETUP_BLOCK:
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From 34e1a98ff2a87cf4b8de3ccebe9d45273f014aeb Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Sun, 12 Apr 2026 11:56:25 +0200
|
||||
Subject: [PATCH 4/4] net: airoha: Remove PCE_MC_EN_MASK bit in REG_FE_PCE_CFG
|
||||
configuration
|
||||
|
||||
PCE_MC_EN_MASK bit in REG_FE_PCE_CFG configuration performed in
|
||||
airoha_fe_init() is used to duplicate multicast packets and send a copy
|
||||
to the CPU when the traffic is offloaded. This is necessary just if
|
||||
it is requested by the user. Disable multicast packets duplication by
|
||||
default.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260412-airoha_fe_init_remove_mc_en_bit-v1-1-7b6a5a25a74d@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -448,9 +448,8 @@ static int airoha_fe_init(struct airoha_
|
||||
FIELD_PREP(PSE_IQ_RES2_P5_MASK, 0x40) |
|
||||
FIELD_PREP(PSE_IQ_RES2_P4_MASK, 0x34));
|
||||
|
||||
- /* enable FE copy engine for MC/KA/DPI */
|
||||
- airoha_fe_wr(eth, REG_FE_PCE_CFG,
|
||||
- PCE_DPI_EN_MASK | PCE_KA_EN_MASK | PCE_MC_EN_MASK);
|
||||
+ /* enable FE copy engine for KA/DPI */
|
||||
+ airoha_fe_wr(eth, REG_FE_PCE_CFG, PCE_DPI_EN_MASK | PCE_KA_EN_MASK);
|
||||
/* set vip queue selection to ring 1 */
|
||||
airoha_fe_rmw(eth, REG_CDM_FWD_CFG(1), CDM_VIP_QSEL_MASK,
|
||||
FIELD_PREP(CDM_VIP_QSEL_MASK, 0x4));
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
From a94ddc191f19579a7e0a5da2c012f1048ce10262 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Mon, 30 Mar 2026 00:03:49 +0200
|
||||
Subject: [PATCH] net: airoha: Fix typo in airoha_set_gdm2_loopback routine
|
||||
name
|
||||
|
||||
Rename airhoha_set_gdm2_loopback() in airoha_set_gdm2_loopback()
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260330-airoha_set_gdm2_loopback-fix-typo-v1-1-a1320ff6b6cc@kernel.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1722,7 +1722,7 @@ static int airoha_dev_set_macaddr(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
|
||||
+static int airoha_set_gdm2_loopback(struct airoha_gdm_port *port)
|
||||
{
|
||||
struct airoha_eth *eth = port->qdma->eth;
|
||||
u32 val, pse_port, chan;
|
||||
@@ -1796,7 +1796,7 @@ static int airoha_dev_init(struct net_de
|
||||
if (!eth->ports[1]) {
|
||||
int err;
|
||||
|
||||
- err = airhoha_set_gdm2_loopback(port);
|
||||
+ err = airoha_set_gdm2_loopback(port);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 269389ba539834ec80e4d55583fca2cd70e4dc9c Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Tue, 31 Mar 2026 12:33:24 +0200
|
||||
Subject: [PATCH] net: airoha: Set REG_RX_CPU_IDX() once in
|
||||
airoha_qdma_fill_rx_queue()
|
||||
|
||||
It is not necessary to update REG_RX_CPU_IDX register for each iteration
|
||||
of the descriptor loop in airoha_qdma_fill_rx_queue routine.
|
||||
Move REG_RX_CPU_IDX configuration out of the descriptor loop and rely on
|
||||
the last queue head value updated in the descriptor loop.
|
||||
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://patch.msgid.link/20260331-airoha-cpu-idx-out-off-loop-v1-1-75c66b428f50@kernel.org
|
||||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/airoha/airoha_eth.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -561,11 +561,12 @@ static int airoha_qdma_fill_rx_queue(str
|
||||
WRITE_ONCE(desc->msg1, 0);
|
||||
WRITE_ONCE(desc->msg2, 0);
|
||||
WRITE_ONCE(desc->msg3, 0);
|
||||
+ }
|
||||
|
||||
+ if (nframes)
|
||||
airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid),
|
||||
RX_RING_CPU_IDX_MASK,
|
||||
FIELD_PREP(RX_RING_CPU_IDX_MASK, q->head));
|
||||
- }
|
||||
|
||||
return nframes;
|
||||
}
|
||||
+1
-1
@@ -13,7 +13,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -1425,6 +1425,10 @@ static int airoha_hw_init(struct platfor
|
||||
@@ -1423,6 +1423,10 @@ static int airoha_hw_init(struct platfor
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -588,8 +588,11 @@ static int airoha_qdma_get_gdm_port(stru
|
||||
@@ -578,8 +578,11 @@ static int airoha_qdma_get_gdm_port(stru
|
||||
|
||||
sport = FIELD_GET(QDMA_ETH_RXMSG_SPORT_MASK, msg1);
|
||||
switch (sport) {
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -514,8 +514,10 @@ static int airoha_fe_init(struct airoha_
|
||||
@@ -503,8 +503,10 @@ static int airoha_fe_init(struct airoha_
|
||||
FIELD_PREP(IP_ASSEMBLE_PORT_MASK, 0) |
|
||||
FIELD_PREP(IP_ASSEMBLE_NBQ_MASK, 22));
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
airoha_fe_crsn_qsel_init(eth);
|
||||
|
||||
@@ -1657,7 +1659,8 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1655,7 +1657,8 @@ static int airoha_dev_open(struct net_de
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -3127,7 +3127,6 @@ static void airoha_remove(struct platfor
|
||||
@@ -3126,7 +3126,6 @@ static void airoha_remove(struct platfor
|
||||
}
|
||||
|
||||
static const char * const en7581_xsi_rsts_names[] = {
|
||||
@@ -23,7 +23,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
"hsi0-mac",
|
||||
"hsi1-mac",
|
||||
"hsi-mac",
|
||||
@@ -3159,7 +3158,6 @@ static int airoha_en7581_get_src_port_id
|
||||
@@ -3180,7 +3179,6 @@ static u32 airoha_en7581_get_vip_port(st
|
||||
}
|
||||
|
||||
static const char * const an7583_xsi_rsts_names[] = {
|
||||
|
||||
+10
-10
@@ -35,7 +35,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
static void airoha_set_macaddr(struct airoha_gdm_port *port, const u8 *addr)
|
||||
{
|
||||
struct airoha_eth *eth = port->qdma->eth;
|
||||
@@ -1654,6 +1660,17 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1652,6 +1658,17 @@ static int airoha_dev_open(struct net_de
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
u32 pse_port = FE_PSE_PORT_PPE1;
|
||||
|
||||
@@ -53,7 +53,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
netif_tx_start_all_queues(dev);
|
||||
err = airoha_set_vip_for_gdm_port(port, true);
|
||||
if (err)
|
||||
@@ -1718,6 +1735,11 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -1716,6 +1733,11 @@ static int airoha_dev_stop(struct net_de
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2849,6 +2871,20 @@ static const struct ethtool_ops airoha_e
|
||||
@@ -2846,6 +2868,20 @@ static const struct ethtool_ops airoha_e
|
||||
.get_link = ethtool_op_get_link,
|
||||
};
|
||||
|
||||
@@ -86,7 +86,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
static int airoha_metadata_dst_alloc(struct airoha_gdm_port *port)
|
||||
{
|
||||
int i;
|
||||
@@ -2893,6 +2929,99 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
@@ -2890,6 +2926,99 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -186,8 +186,8 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
static int airoha_alloc_gdm_port(struct airoha_eth *eth,
|
||||
struct device_node *np)
|
||||
{
|
||||
@@ -2964,6 +3093,12 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->id = id;
|
||||
@@ -2963,6 +3092,12 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
|
||||
eth->ports[p] = port;
|
||||
|
||||
+ if (airhoa_is_phy_external(port)) {
|
||||
@@ -199,7 +199,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
return airoha_metadata_dst_alloc(port);
|
||||
}
|
||||
|
||||
@@ -3093,6 +3228,10 @@ error_napi_stop:
|
||||
@@ -3092,6 +3227,10 @@ error_napi_stop:
|
||||
|
||||
if (port->dev->reg_state == NETREG_REGISTERED)
|
||||
unregister_netdev(port->dev);
|
||||
@@ -210,7 +210,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
airoha_metadata_dst_free(port);
|
||||
}
|
||||
airoha_hw_cleanup(eth);
|
||||
@@ -3119,6 +3258,10 @@ static void airoha_remove(struct platfor
|
||||
@@ -3118,6 +3257,10 @@ static void airoha_remove(struct platfor
|
||||
|
||||
unregister_netdev(port->dev);
|
||||
airoha_metadata_dst_free(port);
|
||||
@@ -223,9 +223,9 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
@@ -538,6 +538,10 @@ struct airoha_gdm_port {
|
||||
struct net_device *dev;
|
||||
@@ -539,6 +539,10 @@ struct airoha_gdm_port {
|
||||
int id;
|
||||
int nbq;
|
||||
|
||||
+ struct phylink *phylink;
|
||||
+ struct phylink_config phylink_config;
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
|
||||
@@ -599,6 +599,9 @@ static int airoha_qdma_get_gdm_port(stru
|
||||
@@ -589,6 +589,9 @@ static int airoha_qdma_get_gdm_port(stru
|
||||
case 0x18:
|
||||
port = 3; /* GDM4 */
|
||||
break;
|
||||
|
||||
+13
-13
@@ -28,7 +28,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
static void airoha_set_macaddr(struct airoha_gdm_port *port, const u8 *addr)
|
||||
{
|
||||
@@ -1663,6 +1665,7 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1661,6 +1663,7 @@ static int airoha_dev_open(struct net_de
|
||||
struct airoha_qdma *qdma = port->qdma;
|
||||
u32 pse_port = FE_PSE_PORT_PPE1;
|
||||
|
||||
@@ -36,7 +36,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
if (airhoa_is_phy_external(port)) {
|
||||
err = phylink_of_phy_connect(port->phylink, dev->dev.of_node, 0);
|
||||
if (err) {
|
||||
@@ -1673,6 +1676,7 @@ static int airoha_dev_open(struct net_de
|
||||
@@ -1671,6 +1674,7 @@ static int airoha_dev_open(struct net_de
|
||||
|
||||
phylink_start(port->phylink);
|
||||
}
|
||||
@@ -44,7 +44,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
netif_tx_start_all_queues(dev);
|
||||
err = airoha_set_vip_for_gdm_port(port, true);
|
||||
@@ -1738,10 +1742,12 @@ static int airoha_dev_stop(struct net_de
|
||||
@@ -1736,10 +1740,12 @@ static int airoha_dev_stop(struct net_de
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -2874,6 +2880,7 @@ static const struct ethtool_ops airoha_e
|
||||
@@ -2871,6 +2877,7 @@ static const struct ethtool_ops airoha_e
|
||||
.get_link = ethtool_op_get_link,
|
||||
};
|
||||
|
||||
@@ -65,7 +65,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
static struct phylink_pcs *airoha_phylink_mac_select_pcs(struct phylink_config *config,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@@ -2887,6 +2894,7 @@ static void airoha_mac_config(struct phy
|
||||
@@ -2884,6 +2891,7 @@ static void airoha_mac_config(struct phy
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
}
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
static int airoha_metadata_dst_alloc(struct airoha_gdm_port *port)
|
||||
{
|
||||
@@ -2932,6 +2940,7 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
@@ -2929,6 +2937,7 @@ bool airoha_is_valid_gdm_port(struct air
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
static void airoha_mac_link_up(struct phylink_config *config, struct phy_device *phy,
|
||||
unsigned int mode, phy_interface_t interface,
|
||||
int speed, int duplex, bool tx_pause, bool rx_pause)
|
||||
@@ -3024,6 +3033,7 @@ static int airoha_setup_phylink(struct n
|
||||
@@ -3021,6 +3030,7 @@ static int airoha_setup_phylink(struct n
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -89,8 +89,8 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
static int airoha_alloc_gdm_port(struct airoha_eth *eth,
|
||||
struct device_node *np)
|
||||
@@ -3096,11 +3106,13 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->id = id;
|
||||
@@ -3095,11 +3105,13 @@ static int airoha_alloc_gdm_port(struct
|
||||
port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
|
||||
eth->ports[p] = port;
|
||||
|
||||
+#if defined(CONFIG_PCS_AIROHA)
|
||||
@@ -103,7 +103,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
return airoha_metadata_dst_alloc(port);
|
||||
}
|
||||
@@ -3231,10 +3243,12 @@ error_napi_stop:
|
||||
@@ -3230,10 +3242,12 @@ error_napi_stop:
|
||||
|
||||
if (port->dev->reg_state == NETREG_REGISTERED)
|
||||
unregister_netdev(port->dev);
|
||||
@@ -116,7 +116,7 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
airoha_metadata_dst_free(port);
|
||||
}
|
||||
airoha_hw_cleanup(eth);
|
||||
@@ -3261,10 +3275,12 @@ static void airoha_remove(struct platfor
|
||||
@@ -3260,10 +3274,12 @@ static void airoha_remove(struct platfor
|
||||
|
||||
unregister_netdev(port->dev);
|
||||
airoha_metadata_dst_free(port);
|
||||
@@ -131,9 +131,9 @@ Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
|
||||
|
||||
--- a/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
+++ b/drivers/net/ethernet/airoha/airoha_eth.h
|
||||
@@ -538,9 +538,11 @@ struct airoha_gdm_port {
|
||||
struct net_device *dev;
|
||||
@@ -539,9 +539,11 @@ struct airoha_gdm_port {
|
||||
int id;
|
||||
int nbq;
|
||||
|
||||
+#if defined(CONFIG_PCS_AIROHA)
|
||||
struct phylink *phylink;
|
||||
|
||||
@@ -143,7 +143,8 @@
|
||||
read-only;
|
||||
|
||||
nvmem-layout {
|
||||
compatible = "u-boot,env";
|
||||
compatible = "u-boot,env-redundant-count";
|
||||
env-size = <0x10000>;
|
||||
|
||||
macaddr_uboot_ethaddr: ethaddr {
|
||||
};
|
||||
|
||||
+84
-64
@@ -1,4 +1,4 @@
|
||||
From 38798884cb3ccd05b2a82299db865aeb7e7c059b Mon Sep 17 00:00:00 2001
|
||||
From 936b6af1d55981c2f5306ec3c06432e676e1a534 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Thu, 5 May 2022 15:46:07 +0100
|
||||
Subject: [PATCH] hwmon: emc2305: fixups for driver submitted to mailing lists
|
||||
@@ -33,59 +33,29 @@ As this is all downstream only, revert to u8 to match 5.15.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 95 +++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 87 insertions(+), 8 deletions(-)
|
||||
drivers/hwmon/emc2305.c | 106 ++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 103 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -12,12 +12,13 @@
|
||||
#include <linux/platform_data/emc2305.h>
|
||||
#include <linux/thermal.h>
|
||||
@@ -15,6 +15,8 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/util_macros.h>
|
||||
|
||||
+#define EMC2305_REG_FAN_STATUS 0x24
|
||||
+#define EMC2305_REG_FAN_STALL_STATUS 0x25
|
||||
#define EMC2305_REG_DRIVE_FAIL_STATUS 0x27
|
||||
#define EMC2305_REG_VENDOR 0xfe
|
||||
#define EMC2305_FAN_MAX 0xff
|
||||
#define EMC2305_FAN_MIN 0x00
|
||||
#define EMC2305_FAN_MAX_STATE 10
|
||||
-#define EMC2305_DEVICE 0x34
|
||||
#define EMC2305_VENDOR 0x5d
|
||||
#define EMC2305_REG_PRODUCT_ID 0xfd
|
||||
#define EMC2305_TACH_REGS_UNUSE_BITS 3
|
||||
@@ -36,6 +37,7 @@
|
||||
#define EMC2305_RPM_FACTOR 3932160
|
||||
|
||||
#define EMC2305_REG_FAN_DRIVE(n) (0x30 + 0x10 * (n))
|
||||
+#define EMC2305_REG_FAN_CFG(n) (0x32 + 0x10 * (n))
|
||||
#define EMC2305_REG_FAN_MIN_DRIVE(n) (0x38 + 0x10 * (n))
|
||||
#define EMC2305_REG_FAN_TACH(n) (0x3e + 0x10 * (n))
|
||||
|
||||
@@ -55,6 +57,15 @@ static const struct i2c_device_id emc230
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, emc2305_ids);
|
||||
|
||||
+static const struct of_device_id emc2305_dt_ids[] = {
|
||||
+ { .compatible = "microchip,emc2305" },
|
||||
+ { .compatible = "microchip,emc2303" },
|
||||
+ { .compatible = "microchip,emc2302" },
|
||||
+ { .compatible = "microchip,emc2301" },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, emc2305_dt_ids);
|
||||
+
|
||||
/**
|
||||
* struct emc2305_cdev_data - device-specific cooling device state
|
||||
* @cdev: cooling device
|
||||
@@ -100,6 +111,7 @@ struct emc2305_data {
|
||||
u8 pwm_num;
|
||||
@@ -117,6 +119,7 @@ struct emc2305_data {
|
||||
u8 pwm_polarity_mask;
|
||||
bool pwm_separate;
|
||||
u8 pwm_min[EMC2305_PWM_MAX];
|
||||
+ u8 pwm_max;
|
||||
u16 pwm_freq[EMC2305_PWM_MAX];
|
||||
struct emc2305_cdev_data cdev_data[EMC2305_PWM_MAX];
|
||||
};
|
||||
|
||||
@@ -272,7 +284,7 @@ static int emc2305_set_pwm(struct device
|
||||
@@ -288,7 +291,7 @@ static int emc2305_set_pwm(struct device
|
||||
struct i2c_client *client = data->client;
|
||||
int ret;
|
||||
|
||||
@@ -94,7 +64,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
return -EINVAL;
|
||||
|
||||
ret = i2c_smbus_write_byte_data(client, EMC2305_REG_FAN_DRIVE(channel), val);
|
||||
@@ -283,6 +295,49 @@ static int emc2305_set_pwm(struct device
|
||||
@@ -299,6 +302,49 @@ static int emc2305_set_pwm(struct device
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -141,22 +111,19 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int emc2305_set_single_tz(struct device *dev, int idx)
|
||||
static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_node, int idx)
|
||||
{
|
||||
struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
@@ -292,9 +347,17 @@ static int emc2305_set_single_tz(struct
|
||||
@@ -308,10 +354,16 @@ static int emc2305_set_single_tz(struct
|
||||
cdev_idx = (idx) ? idx - 1 : 0;
|
||||
pwm = data->pwm_min[cdev_idx];
|
||||
|
||||
- data->cdev_data[cdev_idx].cdev =
|
||||
- thermal_cooling_device_register(emc2305_fan_name[idx], data,
|
||||
- &emc2305_cooling_ops);
|
||||
+ if (dev->of_node)
|
||||
+ data->cdev_data[cdev_idx].cdev =
|
||||
+ devm_thermal_of_cooling_device_register(dev, dev->of_node,
|
||||
+ emc2305_fan_name[idx],
|
||||
+ data,
|
||||
+ &emc2305_cooling_ops);
|
||||
devm_thermal_of_cooling_device_register(dev, fan_node,
|
||||
emc2305_fan_name[idx], data,
|
||||
&emc2305_cooling_ops);
|
||||
+ else
|
||||
+ data->cdev_data[cdev_idx].cdev =
|
||||
+ thermal_cooling_device_register(emc2305_fan_name[idx],
|
||||
@@ -165,26 +132,60 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
if (IS_ERR(data->cdev_data[cdev_idx].cdev)) {
|
||||
dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]);
|
||||
@@ -353,9 +416,11 @@ static void emc2305_unset_tz(struct devi
|
||||
int i;
|
||||
@@ -344,6 +396,19 @@ static int emc2305_set_single_tz(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Unregister cooling device. */
|
||||
- for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
- if (data->cdev_data[i].cdev)
|
||||
- thermal_cooling_device_unregister(data->cdev_data[i].cdev);
|
||||
+static void emc2305_unset_tz(struct device *dev)
|
||||
+{
|
||||
+ struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
+ int i;
|
||||
+
|
||||
+ /* Unregister cooling device. */
|
||||
+ if (!dev->of_node) {
|
||||
+ for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
+ if (data->cdev_data[i].cdev)
|
||||
+ thermal_cooling_device_unregister(data->cdev_data[i].cdev);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int emc2305_set_tz(struct device *dev)
|
||||
{
|
||||
struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
@@ -355,9 +420,13 @@ static int emc2305_set_tz(struct device
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
ret = emc2305_set_single_tz(dev, dev->of_node, i + 1);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ goto thermal_cooling_device_register_fail;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+thermal_cooling_device_register_fail:
|
||||
+ emc2305_unset_tz(dev);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static umode_t
|
||||
@@ -577,11 +642,18 @@ static int emc2305_probe(struct i2c_clie
|
||||
data->pwm_separate = pdata->pwm_separate;
|
||||
for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
data->pwm_min[i] = pdata->pwm_min[i];
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
@@ -655,6 +724,7 @@ static int emc2305_probe(struct i2c_clie
|
||||
data->pwm_min[i] = pdata->pwm_min[i];
|
||||
data->pwm_freq[i] = pdata->pwm_freq[i];
|
||||
}
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
} else {
|
||||
data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
data->pwm_separate = false;
|
||||
@@ -664,12 +734,24 @@ static int emc2305_probe(struct i2c_clie
|
||||
data->pwm_min[i] = EMC2305_FAN_MIN;
|
||||
data->pwm_freq[i] = base_freq_table[3];
|
||||
}
|
||||
+ data->pwm_max = EMC2305_FAN_MAX;
|
||||
+ if (dev->of_node) {
|
||||
+ ret = emc2305_get_tz_of(dev);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
data->pwm_separate = false;
|
||||
@@ -199,7 +200,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
}
|
||||
|
||||
data->hwmon_dev = devm_hwmon_device_register_with_info(dev, "emc2305", data,
|
||||
@@ -602,6 +674,12 @@ static int emc2305_probe(struct i2c_clie
|
||||
@@ -711,21 +793,39 @@ static int emc2305_probe(struct i2c_clie
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -212,11 +213,30 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -616,6 +694,7 @@ static void emc2305_remove(struct i2c_cl
|
||||
static const struct of_device_id of_emc2305_match_table[] = {
|
||||
{ .compatible = "microchip,emc2305", },
|
||||
+ { .compatible = "microchip,emc2303", },
|
||||
+ { .compatible = "microchip,emc2302", },
|
||||
+ { .compatible = "microchip,emc2301", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_emc2305_match_table);
|
||||
|
||||
+static void emc2305_remove(struct i2c_client *client)
|
||||
+{
|
||||
+ struct device *dev = &client->dev;
|
||||
+
|
||||
+ if (IS_REACHABLE(CONFIG_THERMAL))
|
||||
+ emc2305_unset_tz(dev);
|
||||
+}
|
||||
+
|
||||
static struct i2c_driver emc2305_driver = {
|
||||
.driver = {
|
||||
.name = "emc2305",
|
||||
+ .of_match_table = emc2305_dt_ids,
|
||||
.of_match_table = of_emc2305_match_table,
|
||||
},
|
||||
.probe = emc2305_probe,
|
||||
.remove = emc2305_remove,
|
||||
+ .remove = emc2305_remove,
|
||||
.id_table = emc2305_ids,
|
||||
};
|
||||
|
||||
|
||||
@@ -405,9 +405,9 @@ define Device/meraki_mr26
|
||||
# resize the initramfs to fit the size of the existing part.safe.
|
||||
KERNEL_LOADADDR := 0x00008000
|
||||
KERNEL_INITRAMFS_SUFFIX := .bin
|
||||
KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | uImage gzip | pad-to 9310208
|
||||
KERNEL_INITRAMFS := kernel-bin | append-dtb | libdeflate-gzip | uImage gzip | pad-to 9310208
|
||||
# LZMA is not supported by the uboot
|
||||
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip
|
||||
KERNEL := kernel-bin | append-dtb | libdeflate-gzip | uImage gzip
|
||||
IMAGES += sysupgrade.bin
|
||||
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
|
||||
endef
|
||||
@@ -444,8 +444,8 @@ define Device/meraki_mx6x
|
||||
DEVICE_PACKAGES := -oseama kmod-leds-pwm kmod-usb-ehci \
|
||||
kmod-usb-ohci kmod-usb2
|
||||
DEVICE_VENDOR := Cisco Meraki
|
||||
KERNEL = kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||
KERNEL = kernel-bin | libdeflate-gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||
KERNEL_INITRAMFS := kernel-bin | libdeflate-gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||
KERNEL_INITRAMFS_SUFFIX := .bin
|
||||
IMAGES := sysupgrade.bin
|
||||
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
|
||||
|
||||
@@ -327,14 +327,13 @@ static int msp430_leds_probe(struct spi_device *spi)
|
||||
{
|
||||
struct device *dev = &spi->dev;
|
||||
struct device_node *np = dev_of_node(dev);
|
||||
struct device_node *child;
|
||||
int rc;
|
||||
|
||||
rc = msp430_check_workmode(spi);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
for_each_available_child_of_node(np, child) {
|
||||
for_each_available_child_of_node_scoped(np, child) {
|
||||
u32 reg;
|
||||
|
||||
if (of_property_read_u32(child, "reg", ®))
|
||||
@@ -347,10 +346,8 @@ static int msp430_leds_probe(struct spi_device *spi)
|
||||
}
|
||||
|
||||
rc = msp430_led_probe(spi, child, reg);
|
||||
if (rc < 0) {
|
||||
of_node_put(child);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -12,6 +12,7 @@ KERNELNAME:=Image dtbs
|
||||
SUBTARGETS:=generic
|
||||
|
||||
KERNEL_PATCHVER:=6.12
|
||||
KERNEL_TESTING_PATCHVER:=6.18
|
||||
|
||||
include $(INCLUDE_DIR)/target.mk
|
||||
|
||||
|
||||
@@ -65,15 +65,18 @@ CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_DES=y
|
||||
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
|
||||
CONFIG_CRYPTO_LIB_SHA1=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_UTILS=y
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
# CONFIG_CRYPTO_MANAGER_EXTRA_TESTS is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_SIG2=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
|
||||
|
||||
@@ -0,0 +1,508 @@
|
||||
CONFIG_64BIT=y
|
||||
# CONFIG_ACLINT_SSWI is not set
|
||||
# CONFIG_ACPI is not set
|
||||
# CONFIG_ARCH_CANAAN is not set
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_DMA_DEFAULT_COHERENT=y
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
# CONFIG_ARCH_MICROCHIP is not set
|
||||
CONFIG_ARCH_MMAP_RND_BITS=18
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MAX=24
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
|
||||
CONFIG_ARCH_PROC_KCORE_TEXT=y
|
||||
CONFIG_ARCH_RV64I=y
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
# CONFIG_ARCH_SIFIVE is not set
|
||||
# CONFIG_ARCH_SOPHGO is not set
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_STACKWALK=y
|
||||
CONFIG_ARCH_SUNXI=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# CONFIG_ARCH_THEAD is not set
|
||||
CONFIG_ARCH_WANTS_NO_INSTR=y
|
||||
CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
CONFIG_ASN1=y
|
||||
# CONFIG_AX45MP_L2_CACHE is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_PM=y
|
||||
CONFIG_BUFFER_HEAD=y
|
||||
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_CMODEL_MEDANY=y
|
||||
# CONFIG_CMODEL_MEDLOW is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMMON_CLK_RPMI=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
# CONFIG_COMPAT_32BIT_TIME is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_CONTEXT_TRACKING=y
|
||||
CONFIG_CONTEXT_TRACKING_IDLE=y
|
||||
CONFIG_COREDUMP=y
|
||||
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
|
||||
CONFIG_CPU_ISOLATION=y
|
||||
CONFIG_CPU_MITIGATIONS=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC7=y
|
||||
CONFIG_CRC_ITU_T=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_DEV_ALLWINNER=y
|
||||
# CONFIG_CRYPTO_DEV_SUN4I_SS is not set
|
||||
CONFIG_CRYPTO_DEV_SUN8I_CE=y
|
||||
# CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG is not set
|
||||
CONFIG_CRYPTO_DEV_SUN8I_CE_HASH=y
|
||||
CONFIG_CRYPTO_DEV_SUN8I_CE_PRNG=y
|
||||
CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y
|
||||
# CONFIG_CRYPTO_DEV_SUN8I_SS is not set
|
||||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_ENGINE=y
|
||||
CONFIG_CRYPTO_HW=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_DES=y
|
||||
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_UTILS=y
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
# CONFIG_CRYPTO_MANAGER_EXTRA_TESTS is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y
|
||||
CONFIG_DMA_DIRECT_REMAP=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_NEED_SYNC=y
|
||||
CONFIG_DMA_OF=y
|
||||
CONFIG_DMA_SUN6I=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
CONFIG_DMI=y
|
||||
CONFIG_DMIID=y
|
||||
# CONFIG_DMI_SYSFS is not set
|
||||
CONFIG_DTC=y
|
||||
CONFIG_DWMAC_GENERIC=y
|
||||
# CONFIG_DWMAC_SUN55I is not set
|
||||
CONFIG_DWMAC_SUN8I=y
|
||||
CONFIG_DWMAC_SUNXI=y
|
||||
CONFIG_DYNAMIC_SIGFRAME=y
|
||||
CONFIG_EDAC_SUPPORT=y
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFIVAR_FS=m
|
||||
# CONFIG_EFI_BOOTLOADER_CONTROL is not set
|
||||
# CONFIG_EFI_CAPSULE_LOADER is not set
|
||||
# CONFIG_EFI_COCO_SECRET is not set
|
||||
# CONFIG_EFI_DISABLE_PCI_DMA is not set
|
||||
# CONFIG_EFI_DISABLE_RUNTIME is not set
|
||||
CONFIG_EFI_EARLYCON=y
|
||||
CONFIG_EFI_ESRT=y
|
||||
CONFIG_EFI_GENERIC_STUB=y
|
||||
CONFIG_EFI_PARAMS_FROM_FDT=y
|
||||
CONFIG_EFI_RUNTIME_WRAPPERS=y
|
||||
CONFIG_EFI_STUB=y
|
||||
# CONFIG_EFI_TEST is not set
|
||||
# CONFIG_EFI_ZBOOT is not set
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_ERRATA_ANDES is not set
|
||||
# CONFIG_ERRATA_SIFIVE is not set
|
||||
CONFIG_ERRATA_THEAD=y
|
||||
CONFIG_ERRATA_THEAD_CMO=y
|
||||
CONFIG_ERRATA_THEAD_MAE=y
|
||||
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXTCON=y
|
||||
CONFIG_FAILOVER=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_AUTOSELECT=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_FPU=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_FS_IOMAP=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_FUNCTION_ALIGNMENT=0
|
||||
CONFIG_FWNODE_MDIO=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
CONFIG_FW_LOADER_SYSFS=y
|
||||
CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE=y
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_ARCH_TOPOLOGY=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_CPU_DEVICES=y
|
||||
CONFIG_GENERIC_CPU_VULNERABILITIES=y
|
||||
CONFIG_GENERIC_CSUM=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_ENTRY=y
|
||||
CONFIG_GENERIC_GETTIMEOFDAY=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IOREMAP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_IPI_MUX=y
|
||||
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
|
||||
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
|
||||
CONFIG_GENERIC_MSI_IRQ=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
CONFIG_GENERIC_STRNLEN_USER=y
|
||||
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||
CONFIG_GPIOLIB_IRQCHIP=y
|
||||
CONFIG_GPIO_CDEV=y
|
||||
CONFIG_GPIO_PCF857X=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_IOPORT_MAP=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HZ_PERIODIC=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
CONFIG_I2C_MV64XXX=y
|
||||
CONFIG_I2C_OCORES=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
# CONFIG_IOMMUFD is not set
|
||||
CONFIG_IOMMU_API=y
|
||||
# CONFIG_IOMMU_DEBUGFS is not set
|
||||
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
|
||||
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
|
||||
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
|
||||
CONFIG_IOMMU_SUPPORT=y
|
||||
CONFIG_IO_URING=y
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_STACKS=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KERNEL_UNCOMPRESSED is not set
|
||||
# CONFIG_KEYBOARD_SUN4I_LRADC is not set
|
||||
CONFIG_LEDS_SUN50I_A100=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
CONFIG_LIBFDT=y
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
CONFIG_MAILBOX=y
|
||||
# CONFIG_MAILBOX_TEST is not set
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_BUS_MUX=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
# CONFIG_MDIO_SUN4I is not set
|
||||
CONFIG_MFD_AXP20X=y
|
||||
CONFIG_MFD_AXP20X_I2C=y
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_SUN4I_GPADC is not set
|
||||
CONFIG_MFD_SUN6I_PRCM=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_SUNXI=y
|
||||
CONFIG_MMIOWB=y
|
||||
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NET_EGRESS=y
|
||||
CONFIG_NET_INGRESS=y
|
||||
CONFIG_NET_PTP_CLASSIFY=y
|
||||
CONFIG_NET_SELFTESTS=y
|
||||
CONFIG_NET_VENDOR_ALLWINNER=y
|
||||
CONFIG_NET_XGRESS=y
|
||||
CONFIG_NLS=y
|
||||
# CONFIG_NONPORTABLE is not set
|
||||
CONFIG_NOP_USB_XCEIV=y
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_NVMEM=y
|
||||
CONFIG_NVMEM_LAYOUTS=y
|
||||
CONFIG_NVMEM_SUNXI_SID=y
|
||||
CONFIG_NVMEM_SYSFS=y
|
||||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_IOMMU=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_KOBJ=y
|
||||
CONFIG_OF_MDIO=y
|
||||
CONFIG_OID_REGISTRY=y
|
||||
CONFIG_PADATA=y
|
||||
CONFIG_PAGE_BLOCK_MAX_ORDER=10
|
||||
CONFIG_PAGE_OFFSET=0xff60000000000000
|
||||
CONFIG_PAGE_POOL=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
# CONFIG_PCIE_DW_DEBUGFS is not set
|
||||
CONFIG_PCS_XPCS=y
|
||||
CONFIG_PER_VMA_LOCK=y
|
||||
CONFIG_PGTABLE_LEVELS=5
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHYLIB_LEDS=y
|
||||
CONFIG_PHYLINK=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PHY_SUN4I_USB=y
|
||||
CONFIG_PHY_SUN50I_USB3=y
|
||||
# CONFIG_PHY_SUN6I_MIPI_DPHY is not set
|
||||
# CONFIG_PHY_SUN9I_USB is not set
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_SUN20I_D1=y
|
||||
# CONFIG_PINCTRL_SUN4I_A10 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_A100 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_A100_R is not set
|
||||
# CONFIG_PINCTRL_SUN50I_A64 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_A64_R is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H5 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H6 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H616 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H616_R is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H6_R is not set
|
||||
# CONFIG_PINCTRL_SUN55I_A52 is not set
|
||||
# CONFIG_PINCTRL_SUN55I_A523 is not set
|
||||
# CONFIG_PINCTRL_SUN55I_A523_R is not set
|
||||
# CONFIG_PINCTRL_SUN5I is not set
|
||||
# CONFIG_PINCTRL_SUN6I_A31 is not set
|
||||
# CONFIG_PINCTRL_SUN6I_A31_R is not set
|
||||
# CONFIG_PINCTRL_SUN8I_A23 is not set
|
||||
# CONFIG_PINCTRL_SUN8I_A23_R is not set
|
||||
# CONFIG_PINCTRL_SUN8I_A33 is not set
|
||||
# CONFIG_PINCTRL_SUN8I_A83T is not set
|
||||
# CONFIG_PINCTRL_SUN8I_A83T_R is not set
|
||||
# CONFIG_PINCTRL_SUN8I_H3 is not set
|
||||
# CONFIG_PINCTRL_SUN8I_H3_R is not set
|
||||
# CONFIG_PINCTRL_SUN8I_V3S is not set
|
||||
# CONFIG_PINCTRL_SUN9I_A80 is not set
|
||||
# CONFIG_PINCTRL_SUN9I_A80_R is not set
|
||||
CONFIG_PINCTRL_SUNXI=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_PM_GENERIC_DOMAINS_OF=y
|
||||
CONFIG_PORTABLE=y
|
||||
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_PPS=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
|
||||
CONFIG_PWM=y
|
||||
# CONFIG_PWM_SIFIVE is not set
|
||||
# CONFIG_PWM_SUN4I is not set
|
||||
CONFIG_QUEUED_RWLOCKS=y
|
||||
CONFIG_RANDSTRUCT_NONE=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_REALTEK_PHY=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_REGMAP_IRQ=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_REGMAP_SPI=y
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_AXP20X is not set
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_SUN20I=y
|
||||
# CONFIG_RESET_ATTACK_MITIGATION is not set
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RESET_SIMPLE=y
|
||||
CONFIG_RESET_SUNXI=y
|
||||
CONFIG_RISCV=y
|
||||
CONFIG_RISCV_ALTERNATIVE=y
|
||||
CONFIG_RISCV_ALTERNATIVE_EARLY=y
|
||||
CONFIG_RISCV_APLIC=y
|
||||
CONFIG_RISCV_APLIC_MSI=y
|
||||
CONFIG_RISCV_BOOT_SPINWAIT=y
|
||||
CONFIG_RISCV_COMBO_SPINLOCKS=y
|
||||
CONFIG_RISCV_DMA_NONCOHERENT=y
|
||||
# CONFIG_RISCV_EMULATED_UNALIGNED_ACCESS is not set
|
||||
CONFIG_RISCV_IMSIC=y
|
||||
CONFIG_RISCV_INTC=y
|
||||
# CONFIG_RISCV_IOMMU is not set
|
||||
CONFIG_RISCV_ISA_C=y
|
||||
CONFIG_RISCV_ISA_FALLBACK=y
|
||||
CONFIG_RISCV_ISA_SUPM=y
|
||||
CONFIG_RISCV_ISA_SVNAPOT=y
|
||||
CONFIG_RISCV_ISA_SVPBMT=y
|
||||
CONFIG_RISCV_ISA_V=y
|
||||
CONFIG_RISCV_ISA_VENDOR_EXT=y
|
||||
CONFIG_RISCV_ISA_VENDOR_EXT_ANDES=y
|
||||
# CONFIG_RISCV_ISA_VENDOR_EXT_MIPS is not set
|
||||
CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE=y
|
||||
# CONFIG_RISCV_ISA_VENDOR_EXT_THEAD is not set
|
||||
CONFIG_RISCV_ISA_V_DEFAULT_ENABLE=y
|
||||
CONFIG_RISCV_ISA_V_UCOPY_THRESHOLD=768
|
||||
# CONFIG_RISCV_ISA_XTHEADVECTOR is not set
|
||||
CONFIG_RISCV_ISA_ZACAS=y
|
||||
CONFIG_RISCV_ISA_ZAWRS=y
|
||||
CONFIG_RISCV_ISA_ZBA=y
|
||||
CONFIG_RISCV_ISA_ZBB=y
|
||||
CONFIG_RISCV_ISA_ZBC=y
|
||||
CONFIG_RISCV_ISA_ZBKB=y
|
||||
CONFIG_RISCV_ISA_ZICBOM=y
|
||||
CONFIG_RISCV_ISA_ZICBOP=y
|
||||
CONFIG_RISCV_ISA_ZICBOZ=y
|
||||
CONFIG_RISCV_MISALIGNED=y
|
||||
CONFIG_RISCV_NONSTANDARD_CACHE_OPS=y
|
||||
CONFIG_RISCV_PROBE_UNALIGNED_ACCESS=y
|
||||
CONFIG_RISCV_SBI=y
|
||||
CONFIG_RISCV_SBI_MPXY_MBOX=y
|
||||
CONFIG_RISCV_SBI_V01=y
|
||||
# CONFIG_RISCV_TICKET_SPINLOCKS is not set
|
||||
CONFIG_RISCV_TIMER=y
|
||||
CONFIG_RISCV_USE_LINKER_RELAXATION=y
|
||||
# CONFIG_RPS is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GOLDFISH=y
|
||||
CONFIG_RTC_DRV_SUN6I=y
|
||||
CONFIG_RTC_I2C_AND_SPI=y
|
||||
# CONFIG_RUNTIME_KERNEL_TESTING_MENU is not set
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_8250_DWLIB=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
CONFIG_SGL_ALLOC=y
|
||||
CONFIG_SIFIVE_PLIC=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_COMPRESS_OFFLOAD=y
|
||||
CONFIG_SND_JACK=y
|
||||
CONFIG_SND_JACK_INPUT_DEV=y
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=y
|
||||
# CONFIG_SND_SUN20I_D1_CODEC_ANALOG is not set
|
||||
# CONFIG_SND_SUN4I_I2S is not set
|
||||
# CONFIG_SND_SUN4I_SPDIF is not set
|
||||
# CONFIG_SND_SUN50I_DMIC is not set
|
||||
CONFIG_SOCK_RX_QUEUE_MAPPING=y
|
||||
# CONFIG_SOC_STARFIVE is not set
|
||||
CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SOUND_OSS_CORE=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_MEM=y
|
||||
# CONFIG_SPI_SUN4I is not set
|
||||
CONFIG_SPI_SUN6I=y
|
||||
CONFIG_SPLIT_PMD_PTLOCKS=y
|
||||
CONFIG_SPLIT_PTE_PTLOCKS=y
|
||||
CONFIG_STACKDEPOT=y
|
||||
CONFIG_STACKTRACE=y
|
||||
CONFIG_STMMAC_ETH=y
|
||||
CONFIG_STMMAC_PLATFORM=y
|
||||
CONFIG_SUN20I_D1_CCU=y
|
||||
CONFIG_SUN20I_D1_R_CCU=y
|
||||
CONFIG_SUN20I_GPADC=y
|
||||
CONFIG_SUN20I_PPU=y
|
||||
# CONFIG_SUN4I_EMAC is not set
|
||||
CONFIG_SUN4I_TIMER=y
|
||||
# CONFIG_SUN50I_H6_PRCM_PPU is not set
|
||||
CONFIG_SUN50I_IOMMU=y
|
||||
# CONFIG_SUN55I_PCK600 is not set
|
||||
CONFIG_SUN6I_MSGBOX=y
|
||||
CONFIG_SUN6I_RTC_CCU=y
|
||||
CONFIG_SUN8I_DE2_CCU=y
|
||||
CONFIG_SUN8I_THERMAL=y
|
||||
CONFIG_SUNXI_CCU=y
|
||||
# CONFIG_SUNXI_RSB is not set
|
||||
CONFIG_SUNXI_SRAM=y
|
||||
CONFIG_SUNXI_WATCHDOG=y
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW=y
|
||||
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
||||
# CONFIG_SYSFB_SIMPLEFB is not set
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
CONFIG_THREAD_INFO_IN_TASK=y
|
||||
CONFIG_THREAD_SIZE_ORDER=2
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TOOLCHAIN_HAS_V=y
|
||||
CONFIG_TOOLCHAIN_HAS_VECTOR_CRYPTO=y
|
||||
CONFIG_TOOLCHAIN_HAS_ZBB=y
|
||||
CONFIG_TOOLCHAIN_HAS_ZBC=y
|
||||
CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI=y
|
||||
CONFIG_TRACE_CLOCK=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_TREE_SRCU=y
|
||||
CONFIG_TUNE_GENERIC=y
|
||||
CONFIG_UCS2_STRING=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_COMMON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_MUSB_DUAL_ROLE=y
|
||||
CONFIG_USB_MUSB_HDRC=y
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||
CONFIG_USB_PHY=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
# CONFIG_USB_XHCI_PLATFORM is not set
|
||||
CONFIG_USER_STACKTRACE_SUPPORT=y
|
||||
# CONFIG_VHOST_MENU is not set
|
||||
# CONFIG_VIRTIO_MENU is not set
|
||||
CONFIG_VMAP_STACK=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_XPS=y
|
||||
CONFIG_ZONE_DMA32=y
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Subject: riscv: dts: allwinner: d1: Add LED controller node
|
||||
Date: Sun, 29 Oct 2023 16:26:58 -0500
|
||||
|
||||
Allwinner D1 contains an LED controller. Add its devicetree node, as
|
||||
well as the pinmux used by the reference board design.
|
||||
|
||||
Acked-by: Guo Ren <guoren@kernel.org>
|
||||
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Tested-by: Trevor Woerner <twoerner@gmail.com>
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
---
|
||||
(no changes since v5)
|
||||
|
||||
Changes in v5:
|
||||
- New patch for v5
|
||||
|
||||
arch/riscv/boot/dts/allwinner/sun20i-d1.dtsi | 6 ++++++
|
||||
arch/riscv/boot/dts/allwinner/sunxi-d1s-t113.dtsi | 15 +++++++++++++++
|
||||
2 files changed, 21 insertions(+)
|
||||
|
||||
--- a/arch/riscv/boot/dts/allwinner/sun20i-d1.dtsi
|
||||
+++ b/arch/riscv/boot/dts/allwinner/sun20i-d1.dtsi
|
||||
@@ -59,6 +59,12 @@
|
||||
};
|
||||
|
||||
/omit-if-no-ref/
|
||||
+ ledc_pc0_pin: ledc-pc0-pin {
|
||||
+ pins = "PC0";
|
||||
+ function = "ledc";
|
||||
+ };
|
||||
+
|
||||
+ /omit-if-no-ref/
|
||||
uart0_pb8_pins: uart0-pb8-pins {
|
||||
pins = "PB8", "PB9";
|
||||
function = "uart0";
|
||||
--- a/arch/riscv/boot/dts/allwinner/sunxi-d1s-t113.dtsi
|
||||
+++ b/arch/riscv/boot/dts/allwinner/sunxi-d1s-t113.dtsi
|
||||
@@ -204,6 +204,21 @@
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
+ ledc: led-controller@2008000 {
|
||||
+ compatible = "allwinner,sun20i-d1-ledc",
|
||||
+ "allwinner,sun50i-a100-ledc";
|
||||
+ reg = <0x2008000 0x400>;
|
||||
+ interrupts = <SOC_PERIPHERAL_IRQ(20) IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ clocks = <&ccu CLK_BUS_LEDC>, <&ccu CLK_LEDC>;
|
||||
+ clock-names = "bus", "mod";
|
||||
+ resets = <&ccu RST_BUS_LEDC>;
|
||||
+ dmas = <&dma 42>;
|
||||
+ dma-names = "tx";
|
||||
+ status = "disabled";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ };
|
||||
+
|
||||
gpadc: adc@2009000 {
|
||||
compatible = "allwinner,sun20i-d1-gpadc";
|
||||
reg = <0x2009000 0x400>;
|
||||
@@ -0,0 +1,70 @@
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Subject: riscv: dts: allwinner: d1: Add RGB LEDs to boards
|
||||
Date: Sun, 29 Oct 2023 16:26:59 -0500
|
||||
|
||||
Some D1-based boards feature an onboard RGB LED. Enable them.
|
||||
|
||||
Acked-by: Guo Ren <guoren@kernel.org>
|
||||
Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Tested-by: Trevor Woerner <twoerner@gmail.com>
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
---
|
||||
(no changes since v5)
|
||||
|
||||
Changes in v5:
|
||||
- New patch for v5
|
||||
|
||||
.../boot/dts/allwinner/sun20i-d1-lichee-rv-dock.dts | 12 ++++++++++++
|
||||
arch/riscv/boot/dts/allwinner/sun20i-d1-nezha.dts | 13 +++++++++++++
|
||||
2 files changed, 25 insertions(+)
|
||||
|
||||
--- a/arch/riscv/boot/dts/allwinner/sun20i-d1-lichee-rv-dock.dts
|
||||
+++ b/arch/riscv/boot/dts/allwinner/sun20i-d1-lichee-rv-dock.dts
|
||||
@@ -59,6 +59,18 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&ledc {
|
||||
+ pinctrl-0 = <&ledc_pc0_pin>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ multi-led@0 {
|
||||
+ reg = <0x0>;
|
||||
+ color = <LED_COLOR_ID_RGB>;
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&mmc1 {
|
||||
bus-width = <4>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
--- a/arch/riscv/boot/dts/allwinner/sun20i-d1-nezha.dts
|
||||
+++ b/arch/riscv/boot/dts/allwinner/sun20i-d1-nezha.dts
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
@@ -121,6 +122,18 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&ledc {
|
||||
+ pinctrl-0 = <&ledc_pc0_pin>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ multi-led@0 {
|
||||
+ reg = <0x0>;
|
||||
+ color = <LED_COLOR_ID_RGB>;
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&mdio {
|
||||
ext_rgmii_phy: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
@@ -1249,10 +1249,9 @@ static int w_init(struct en75_bmt_m *ctx, struct device_node *np)
|
||||
add_remap_range(ctx, 0, ctx->reserve_area_begin);
|
||||
} else {
|
||||
struct device_node *parts_np;
|
||||
struct device_node *part_np;
|
||||
|
||||
parts_np = of_get_child_by_name(np, "partitions");
|
||||
for_each_child_of_node(parts_np, part_np) {
|
||||
for_each_child_of_node_scoped(parts_np, part_np) {
|
||||
u32 start;
|
||||
u32 size;
|
||||
const __be32 *reg;
|
||||
|
||||
@@ -11,8 +11,7 @@ FEATURES:=squashfs pci rtc usb usbgadget dt gpio display ext4 rootfs-part boot-p
|
||||
CPU_TYPE:=fa526
|
||||
SUBTARGETS:=generic
|
||||
|
||||
KERNEL_PATCHVER:=6.12
|
||||
KERNEL_TESTING_PATCHVER:=6.18
|
||||
KERNEL_PATCHVER:=6.18
|
||||
|
||||
define Target/Description
|
||||
Build firmware images for the StorLink/Cortina Gemini CS351x ARM FA526 CPU
|
||||
|
||||
@@ -1,438 +0,0 @@
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_ARCH_32BIT_OFF_T=y
|
||||
CONFIG_ARCH_GEMINI=y
|
||||
CONFIG_ARCH_KEEP_MEMBLOCK=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
|
||||
# CONFIG_ARCH_MOXART is not set
|
||||
CONFIG_ARCH_MULTIPLATFORM=y
|
||||
CONFIG_ARCH_MULTI_V4=y
|
||||
# CONFIG_ARCH_MULTI_V4T is not set
|
||||
CONFIG_ARCH_MULTI_V4_V5=y
|
||||
# CONFIG_ARCH_MULTI_V5 is not set
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_STACKWALK=y
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_APPENDED_DTB=y
|
||||
# CONFIG_ARM_ATAG_DTB_COMPAT is not set
|
||||
CONFIG_ARM_HAS_GROUP_RELOCS=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_ATAGS=y
|
||||
CONFIG_ATA_FORCE=y
|
||||
CONFIG_ATA_VERBOSE_ERROR=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BLK_PM=y
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_BUFFER_HEAD=y
|
||||
CONFIG_CACHESTAT_SYSCALL=y
|
||||
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_SIZE_PERCENTAGE=10
|
||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MBYTES is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
CONFIG_CMA_SIZE_SEL_PERCENTAGE=y
|
||||
# CONFIG_CMA_SYSFS is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMMON_CLK_GEMINI=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_COREDUMP=y
|
||||
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
|
||||
CONFIG_CPU_32v4=y
|
||||
CONFIG_CPU_ABRT_EV4=y
|
||||
CONFIG_CPU_CACHE_FA=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_COPY_FA=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_CPU_FA526=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_CPU_MITIGATIONS=y
|
||||
CONFIG_CPU_NO_EFFICIENT_FFS=y
|
||||
CONFIG_CPU_PABRT_LEGACY=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_CPU_TLB_FA=y
|
||||
CONFIG_CPU_USE_DOMAINS=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC_ITU_T=y
|
||||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
CONFIG_CRYPTO_CMAC=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_DEV_SL3516=y
|
||||
# CONFIG_CRYPTO_DEV_SL3516_DEBUG is not set
|
||||
CONFIG_CRYPTO_DRBG=y
|
||||
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||
CONFIG_CRYPTO_DRBG_MENU=y
|
||||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_ECHAINIV=y
|
||||
CONFIG_CRYPTO_ENGINE=y
|
||||
CONFIG_CRYPTO_GENIV=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_HW=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY=y
|
||||
CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
|
||||
CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
|
||||
CONFIG_CRYPTO_JITTERENTROPY_OSR=1
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_DES=y
|
||||
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_UTILS=y
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
# CONFIG_CRYPTO_MANAGER_EXTRA_TESTS is not set
|
||||
CONFIG_CRYPTO_MD4=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_CRYPTO_RNG_DEFAULT=y
|
||||
CONFIG_CRYPTO_SEQIV=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA3=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_USER=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_LZ4=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_DECOMPRESS_XZ=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMATEST=y
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_ENGINE_RAID=y
|
||||
CONFIG_DMA_NEED_SYNC=y
|
||||
CONFIG_DMA_OF=y
|
||||
CONFIG_DMA_OPS_HELPERS=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_BRIDGE=y
|
||||
CONFIG_DRM_FBDEV_EMULATION=y
|
||||
CONFIG_DRM_FBDEV_OVERALLOC=100
|
||||
CONFIG_DRM_GEM_DMA_HELPER=y
|
||||
CONFIG_DRM_KMS_HELPER=y
|
||||
CONFIG_DRM_PANEL=y
|
||||
CONFIG_DRM_PANEL_BRIDGE=y
|
||||
CONFIG_DRM_PANEL_ILITEK_IL9322=y
|
||||
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
|
||||
CONFIG_DRM_TVE200=y
|
||||
CONFIG_DTC=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||
CONFIG_EDAC_SUPPORT=y
|
||||
CONFIG_EEPROM_93CX6=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
|
||||
# CONFIG_EXPERT is not set
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXTCON=y
|
||||
CONFIG_FARADAY_FTINTC010=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CORE=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
CONFIG_FB_DMAMEM_HELPERS=y
|
||||
CONFIG_FB_DMAMEM_HELPERS_DEFERRED=y
|
||||
CONFIG_FB_SYSMEM_FOPS=y
|
||||
CONFIG_FB_SYSMEM_HELPERS=y
|
||||
CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_FORCE_NR_CPUS=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_FS_IOMAP=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_FTTMR010_TIMER=y
|
||||
CONFIG_FTWDT010_WATCHDOG=y
|
||||
CONFIG_FUNCTION_ALIGNMENT=0
|
||||
CONFIG_FWNODE_MDIO=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
CONFIG_FW_LOADER_SYSFS=y
|
||||
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
|
||||
CONFIG_GEMINI_ETHERNET=y
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_ATOMIC64=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
|
||||
CONFIG_GENERIC_CPU_DEVICES=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
CONFIG_GENERIC_STRNLEN_USER=y
|
||||
CONFIG_GLOB=y
|
||||
CONFIG_GPIOLIB_IRQCHIP=y
|
||||
CONFIG_GPIO_CDEV=y
|
||||
CONFIG_GPIO_FTGPIO010=y
|
||||
CONFIG_GPIO_GENERIC=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_IOPORT_MAP=y
|
||||
CONFIG_HDMI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HZ_FIXED=0
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_ALGOBIT=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_GPIO=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_IO_URING=y
|
||||
CONFIG_IPC_NS=y
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
# CONFIG_ISDN is not set
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KCMP=y
|
||||
CONFIG_KERNEL_LZMA=y
|
||||
# CONFIG_KERNEL_XZ is not set
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_KEXEC_CORE=y
|
||||
CONFIG_KEYBOARD_DLINK_DIR685=y
|
||||
CONFIG_KMAP_LOCAL=y
|
||||
CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y
|
||||
# CONFIG_LDM_DEBUG is not set
|
||||
CONFIG_LDM_PARTITION=y
|
||||
CONFIG_LEDS_TRIGGER_DISK=y
|
||||
CONFIG_LIBFDT=y
|
||||
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
CONFIG_LOGO_LINUX_VGA16=y
|
||||
CONFIG_LZ4_DECOMPRESS=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_MDIO_BITBANG=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MDIO_GPIO=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
|
||||
CONFIG_MODULES_USE_ELF_REL=y
|
||||
# CONFIG_MODULE_UNLOAD is not set
|
||||
CONFIG_MQ_IOSCHED_DEADLINE=y
|
||||
CONFIG_MQ_IOSCHED_KYBER=y
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_GEMINI=y
|
||||
CONFIG_MTD_REDBOOT_PARTS=y
|
||||
CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||
CONFIG_MTD_SPLIT_OPENWRT_PROLOG=y
|
||||
CONFIG_MTD_SPLIT_WRGG_FW=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NEED_KUSER_HELPERS=y
|
||||
CONFIG_NEED_PER_CPU_KM=y
|
||||
CONFIG_NET_DEVMEM=y
|
||||
CONFIG_NET_EGRESS=y
|
||||
CONFIG_NET_INGRESS=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_NET_SELFTESTS=y
|
||||
CONFIG_NET_XGRESS=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NVMEM=y
|
||||
CONFIG_NVMEM_LAYOUTS=y
|
||||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_KOBJ=y
|
||||
CONFIG_OF_MDIO=y
|
||||
CONFIG_OLD_SIGACTION=y
|
||||
CONFIG_OLD_SIGSUSPEND3=y
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PAGE_POOL=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
CONFIG_PANIC_ON_OOPS_VALUE=0
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
CONFIG_PATA_FTIDE010=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEASPM=y
|
||||
CONFIG_PCIEASPM_DEFAULT=y
|
||||
# CONFIG_PCIEASPM_PERFORMANCE is not set
|
||||
# CONFIG_PCIEASPM_POWERSAVE is not set
|
||||
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||
CONFIG_PCI_FTPCI100=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
CONFIG_PGTABLE_LEVELS=2
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHYLIB_LEDS=y
|
||||
CONFIG_PID_NS=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_GEMINI=y
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_GEMINI_POWEROFF=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
|
||||
CONFIG_RANDSTRUCT_NONE=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_LZ4=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_RD_XZ=y
|
||||
CONFIG_REALTEK_PHY=y
|
||||
CONFIG_REALTEK_PHY_HWMON=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RSEQ=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_FTRTC010=y
|
||||
CONFIG_RTC_I2C_AND_SPI=y
|
||||
CONFIG_RTC_MC146818_LIB=y
|
||||
CONFIG_RTC_NVMEM=y
|
||||
CONFIG_SATA_GEMINI=y
|
||||
CONFIG_SATA_HOST=y
|
||||
CONFIG_SATA_PMP=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_COMMON=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_SENSORS_DRIVETEMP=y
|
||||
CONFIG_SENSORS_GPIO_FAN=y
|
||||
CONFIG_SENSORS_LM75=y
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
CONFIG_SERIAL_8250_EXAR=y
|
||||
CONFIG_SERIAL_8250_FSL=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=1
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_PCILIB=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=1
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
CONFIG_SGL_ALLOC=y
|
||||
CONFIG_SG_POOL=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_STACKDEPOT=y
|
||||
CONFIG_STACKTRACE=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SYNC_FILE=y
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_HWMON=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
CONFIG_THREAD_INFO_IN_TASK=y
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TINY_SRCU=y
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNWINDER_ARM=y
|
||||
CONFIG_USB_COMMON=y
|
||||
# CONFIG_USB_FOTG210 is not set
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GPIO_VBUS=y
|
||||
CONFIG_USB_PHY=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_USE_OF=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VGA_ARB=y
|
||||
CONFIG_VGA_ARB_MAX_GPUS=16
|
||||
CONFIG_VIDEO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARM64=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_BCJ=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_RISCV=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
@@ -1,41 +0,0 @@
|
||||
From 771db4a77c5fb6da4908825e65f500ad67f86e5f Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Fri, 23 Jan 2026 16:24:49 +0100
|
||||
Subject: [PATCH] ARM: dts: gemini: Fix partition offsets
|
||||
|
||||
These FIS partition offsets were never right: the comment clearly
|
||||
states the FIS index is at 0xfe0000 and 0x7f * 0x200000 is
|
||||
0xfe0000.
|
||||
|
||||
Tested on the iTian SQ201.
|
||||
|
||||
Fixes: d88b11ef91b1 ("ARM: dts: Fix up SQ201 flash access")
|
||||
Fixes: b5a923f8c739 ("ARM: dts: gemini: Switch to redboot partition parsing")
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-sl93512r.dts | 2 +-
|
||||
arch/arm/boot/dts/gemini/gemini-sq201.dts | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
@@ -146,7 +146,7 @@
|
||||
partitions {
|
||||
compatible = "redboot-fis";
|
||||
/* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x1fc>;
|
||||
+ fis-index-block = <0x7f>;
|
||||
};
|
||||
};
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
@@ -134,7 +134,7 @@
|
||||
partitions {
|
||||
compatible = "redboot-fis";
|
||||
/* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x1fc>;
|
||||
+ fis-index-block = <0x7f>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
From 46267aeb78cc7aba845da4c17acff1d46b694647 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Wed, 14 Jan 2026 09:29:48 +0100
|
||||
Subject: [PATCH 1/2] ARM: dts: Add a Verbatim Gigabit NAS DTS
|
||||
|
||||
This adds a device tree for the Verbatim S08V1901-D1 NAS
|
||||
which also has the product names "Gigabit Network Hard Drive"
|
||||
"Gigabit NAS" and maybe other names.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/Makefile | 1 +
|
||||
.../gemini/gemini-verbatim-s08v1901-d1.dts | 225 ++++++++++++++++++
|
||||
2 files changed, 226 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/gemini/gemini-verbatim-s08v1901-d1.dts
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/Makefile
|
||||
+++ b/arch/arm/boot/dts/gemini/Makefile
|
||||
@@ -8,5 +8,6 @@ dtb-$(CONFIG_ARCH_GEMINI) += \
|
||||
gemini-sl93512r.dtb \
|
||||
gemini-sq201.dtb \
|
||||
gemini-ssi1328.dtb \
|
||||
+ gemini-verbatim-s08v1901-d1.dtb \
|
||||
gemini-wbd111.dtb \
|
||||
gemini-wbd222.dtb
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-verbatim-s08v1901-d1.dts
|
||||
@@ -0,0 +1,225 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Device Tree file for the Verbatim S08V1901-D1
|
||||
+ * on product packaging called "Verbatim Gigabit Ethernet Hard Drive"
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "gemini.dtsi"
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "Verbatim Gigabit Ethernet Hard Drive S08V1901-D1";
|
||||
+ compatible = "verbatim,s08v1901-d1", "cortina,gemini";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ memory@0 {
|
||||
+ /* 64MB SDRAM in 2 x Hynix HY5DU561622ETP-D43 */
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x00000000 0x4000000>;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait";
|
||||
+ stdout-path = &uart0;
|
||||
+ };
|
||||
+
|
||||
+ gpio_keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ button-reset {
|
||||
+ debounce-interval = <50>;
|
||||
+ wakeup-source;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ label = "reset";
|
||||
+ gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ led-green-harddisk {
|
||||
+ function = LED_FUNCTION_DISK_ACTIVITY;
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
|
||||
+ default-state = "off";
|
||||
+ linux,default-trigger = "disk-activity";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ /*
|
||||
+ * Fan control candidates: gpio0 10, gpio1 28
|
||||
+ */
|
||||
+
|
||||
+ mdio0: mdio {
|
||||
+ compatible = "virtual,mdio-gpio";
|
||||
+ /* Uses MDC and MDIO */
|
||||
+ gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
+ <&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ /* This is a Realtek RTL8211CL ethernet PHY */
|
||||
+ phy0: ethernet-phy@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ /*
|
||||
+ * I haven't found a way to control the fan, it appears to be
|
||||
+ * always on.
|
||||
+ */
|
||||
+ thermal-zones {
|
||||
+ chassis-thermal {
|
||||
+ /* Poll every 20 seconds */
|
||||
+ polling-delay = <20000>;
|
||||
+ /* Poll every 2nd second when cooling */
|
||||
+ polling-delay-passive = <2000>;
|
||||
+ /* Use the thermal sensor in the hard drive */
|
||||
+ thermal-sensors = <&drive0>;
|
||||
+
|
||||
+ /* Tripping points from the fan.script in the rootfs */
|
||||
+ trips {
|
||||
+ alert: chassis-alert {
|
||||
+ /* At 43 degrees turn on the fan */
|
||||
+ temperature = <43000>;
|
||||
+ hysteresis = <3000>;
|
||||
+ type = "active";
|
||||
+ };
|
||||
+ crit: chassis-crit {
|
||||
+ /* Just shut down at 60 degrees */
|
||||
+ temperature = <60000>;
|
||||
+ hysteresis = <2000>;
|
||||
+ type = "critical";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ soc {
|
||||
+ flash@30000000 {
|
||||
+ /*
|
||||
+ * This is a Spansion S29GL128P11TFI01 852FB245 A
|
||||
+ * 128Mbit (16MB) Flash memory.
|
||||
+ */
|
||||
+ status = "okay";
|
||||
+ reg = <0x30000000 0x01000000>;
|
||||
+
|
||||
+ partitions {
|
||||
+ compatible = "redboot-fis";
|
||||
+ /* Eraseblock at 0xfe0000 */
|
||||
+ fis-index-block = <0x7f>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ syscon: syscon@40000000 {
|
||||
+ pinctrl {
|
||||
+ /*
|
||||
+ * gpio0agrp cover line 0-4 as line 1 is used for the LED
|
||||
+ * gpio0hgrp cover line 21, 22 used by MDIO for Marvell PHY
|
||||
+ */
|
||||
+ gpio0_default_pins: pinctrl-gpio0 {
|
||||
+ mux {
|
||||
+ function = "gpio0";
|
||||
+ groups = "gpio0agrp", "gpio0hgrp";
|
||||
+ };
|
||||
+ };
|
||||
+ gpio1_default_pins: pinctrl-gpio1 {
|
||||
+ /*
|
||||
+ * Free up the TVC pins at GPIO1 offset 28,29,30,31
|
||||
+ * line 31 is used for reset key
|
||||
+ */
|
||||
+ mux {
|
||||
+ function = "gpio1";
|
||||
+ groups = "gpio1dgrp";
|
||||
+ };
|
||||
+ };
|
||||
+ pinctrl-gmii {
|
||||
+ mux {
|
||||
+ function = "gmii";
|
||||
+ groups = "gmii_gmac0_grp";
|
||||
+ };
|
||||
+ /* TODO: investigate vendor registers on boot */
|
||||
+ conf0 {
|
||||
+ pins = "V8 GMAC0 RXDV";
|
||||
+ skew-delay = <0>;
|
||||
+ };
|
||||
+ conf1 {
|
||||
+ pins = "Y7 GMAC0 RXC";
|
||||
+ skew-delay = <15>;
|
||||
+ };
|
||||
+ conf2 {
|
||||
+ pins = "T8 GMAC0 TXEN";
|
||||
+ skew-delay = <7>;
|
||||
+ };
|
||||
+ conf3 {
|
||||
+ pins = "U8 GMAC0 TXC";
|
||||
+ skew-delay = <10>;
|
||||
+ };
|
||||
+ conf4 {
|
||||
+ /* The data lines all have default skew */
|
||||
+ pins = "W8 GMAC0 RXD0", "V9 GMAC0 RXD1",
|
||||
+ "Y8 GMAC0 RXD2", "U9 GMAC0 RXD3",
|
||||
+ "T7 GMAC0 TXD0", "U6 GMAC0 TXD1",
|
||||
+ "V7 GMAC0 TXD2", "U7 GMAC0 TXD3";
|
||||
+ skew-delay = <7>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ /* Both interfaces brought out on SATA connectors */
|
||||
+ sata: sata@46000000 {
|
||||
+ cortina,gemini-ata-muxmode = <0>;
|
||||
+ cortina,gemini-enable-sata-bridge;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ gpio0: gpio@4d000000 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gpio0_default_pins>;
|
||||
+ };
|
||||
+
|
||||
+ gpio1: gpio@4e000000 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gpio1_default_pins>;
|
||||
+ };
|
||||
+
|
||||
+ ethernet@60000000 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ethernet-port@0 {
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-handle = <&phy0>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ ide@63000000 {
|
||||
+ status = "okay";
|
||||
+ /*
|
||||
+ * This drive may have a temperature sensor with a
|
||||
+ * thermal zone we can use for thermal control of the
|
||||
+ * chassis temperature using the fan.
|
||||
+ */
|
||||
+ drive0: ide-port@0 {
|
||||
+ reg = <0>;
|
||||
+ #thermal-sensor-cells = <0>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ ide@63400000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ usb@68000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ usb@69000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
@@ -1,234 +0,0 @@
|
||||
From e6619c1d068dea0d4d29cf770a85bb8bfcfd104b Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Thu, 12 Feb 2026 00:17:53 +0100
|
||||
Subject: [PATCH 1/2] ARM: dts: Add a Raidsonic IB-4210-B DTS
|
||||
|
||||
This adds a device tree for the Raidsonic IB-4210-B NAS, a slightly
|
||||
under-powered version of IB-4220-B with half the memory and
|
||||
the cheaper version of the SoC.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/Makefile | 1 +
|
||||
arch/arm/boot/dts/gemini/gemini-nas4210b.dts | 205 +++++++++++++++++++
|
||||
2 files changed, 206 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/gemini/gemini-nas4210b.dts
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/Makefile
|
||||
+++ b/arch/arm/boot/dts/gemini/Makefile
|
||||
@@ -2,6 +2,7 @@
|
||||
dtb-$(CONFIG_ARCH_GEMINI) += \
|
||||
gemini-dlink-dir-685.dtb \
|
||||
gemini-dlink-dns-313.dtb \
|
||||
+ gemini-nas4210b.dtb \
|
||||
gemini-nas4220b.dtb \
|
||||
gemini-ns2502.dtb \
|
||||
gemini-rut1xx.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-nas4210b.dts
|
||||
@@ -0,0 +1,205 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Device Tree file for the Gemini-based Raidsonic NAS IB-4210-B
|
||||
+ * Based on the NAS Forum experiments by user "CptSpock".
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "gemini.dtsi"
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "Raidsonic NAS IB-4210-B";
|
||||
+ compatible = "raidsonic,ib-4210-b", "cortina,gemini";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ memory@0 { /* 64 MB */
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x00000000 0x4000000>;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait";
|
||||
+ stdout-path = &uart0;
|
||||
+ };
|
||||
+
|
||||
+ gpio_keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ button-setup {
|
||||
+ debounce-interval = <100>;
|
||||
+ wakeup-source;
|
||||
+ linux,code = <KEY_SETUP>;
|
||||
+ label = "Backup button";
|
||||
+ /* Conflict with TVC */
|
||||
+ gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ button-restart {
|
||||
+ debounce-interval = <100>;
|
||||
+ wakeup-source;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ label = "Softreset button";
|
||||
+ /* Conflict with TVC */
|
||||
+ gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ led-orange-hdd {
|
||||
+ label = "nas4220b:orange:hdd";
|
||||
+ /* Conflict with TVC */
|
||||
+ gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
|
||||
+ default-state = "on";
|
||||
+ linux,default-trigger = "disk-activity";
|
||||
+ };
|
||||
+ led-green-os {
|
||||
+ label = "nas4220b:green:os";
|
||||
+ /* Conflict with TVC */
|
||||
+ gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>;
|
||||
+ default-state = "on";
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ mdio0: mdio {
|
||||
+ compatible = "virtual,mdio-gpio";
|
||||
+ gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
+ <&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ /* Realtek RTL8211B */
|
||||
+ phy0: ethernet-phy@1 {
|
||||
+ reg = <1>;
|
||||
+ device_type = "ethernet-phy";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ soc {
|
||||
+ flash@30000000 {
|
||||
+ status = "okay";
|
||||
+ /* 16MB of flash */
|
||||
+ reg = <0x30000000 0x01000000>;
|
||||
+
|
||||
+ partitions {
|
||||
+ compatible = "redboot-fis";
|
||||
+ /* Eraseblock at 0xfe0000 */
|
||||
+ fis-index-block = <0x7f>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ syscon: syscon@40000000 {
|
||||
+ pinctrl {
|
||||
+ gpio0_default_pins: pinctrl-gpio0 {
|
||||
+ mux {
|
||||
+ function = "gpio0";
|
||||
+ groups =
|
||||
+ "gpio0egrp",
|
||||
+ /* Used by MDIO */
|
||||
+ "gpio0igrp";
|
||||
+ };
|
||||
+ };
|
||||
+ gpio1_default_pins: pinctrl-gpio1 {
|
||||
+ mux {
|
||||
+ function = "gpio1";
|
||||
+ /* Lines 28-31 used by LEDs and buttons */
|
||||
+ groups = "gpio1dgrp";
|
||||
+ };
|
||||
+ };
|
||||
+ pinctrl-gmii {
|
||||
+ mux {
|
||||
+ function = "gmii";
|
||||
+ groups = "gmii_gmac0_grp";
|
||||
+ };
|
||||
+ conf0 {
|
||||
+ pins = "R8 GMAC0 RXDV", "U11 GMAC1 RXDV";
|
||||
+ skew-delay = <0>;
|
||||
+ };
|
||||
+ conf1 {
|
||||
+ pins = "T8 GMAC0 RXC";
|
||||
+ skew-delay = <10>;
|
||||
+ };
|
||||
+ conf2 {
|
||||
+ pins = "T11 GMAC1 RXC";
|
||||
+ skew-delay = <15>;
|
||||
+ };
|
||||
+ conf3 {
|
||||
+ pins = "P8 GMAC0 TXEN", "V11 GMAC1 TXEN";
|
||||
+ skew-delay = <7>;
|
||||
+ };
|
||||
+ conf4 {
|
||||
+ pins = "V7 GMAC0 TXC", "P10 GMAC1 TXC";
|
||||
+ skew-delay = <10>;
|
||||
+ };
|
||||
+ conf5 {
|
||||
+ /* The data lines all have default skew */
|
||||
+ pins = "U8 GMAC0 RXD0", "V8 GMAC0 RXD1",
|
||||
+ "P9 GMAC0 RXD2", "R9 GMAC0 RXD3",
|
||||
+ "R11 GMAC1 RXD0", "P11 GMAC1 RXD1",
|
||||
+ "V12 GMAC1 RXD2", "U12 GMAC1 RXD3",
|
||||
+ "R10 GMAC1 TXD0", "T10 GMAC1 TXD1",
|
||||
+ "U10 GMAC1 TXD2", "V10 GMAC1 TXD3";
|
||||
+ skew-delay = <7>;
|
||||
+ };
|
||||
+ conf6 {
|
||||
+ pins = "U7 GMAC0 TXD0", "T7 GMAC0 TXD1",
|
||||
+ "R7 GMAC0 TXD2", "P7 GMAC0 TXD3";
|
||||
+ skew-delay = <5>;
|
||||
+ };
|
||||
+ /* Set up drive strength on GMAC0 to 16 mA */
|
||||
+ conf7 {
|
||||
+ groups = "gmii_gmac0_grp";
|
||||
+ drive-strength = <16>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sata: sata@46000000 {
|
||||
+ cortina,gemini-ata-muxmode = <0>;
|
||||
+ cortina,gemini-enable-sata-bridge;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ gpio0: gpio@4d000000 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gpio0_default_pins>;
|
||||
+ };
|
||||
+
|
||||
+ gpio1: gpio@4e000000 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gpio1_default_pins>;
|
||||
+ };
|
||||
+
|
||||
+ ethernet@60000000 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ethernet-port@0 {
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-handle = <&phy0>;
|
||||
+ };
|
||||
+ ethernet-port@1 {
|
||||
+ /* Not used in this platform */
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ ide@63000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ ide@63400000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ usb@68000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ usb@69000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
@@ -1,60 +0,0 @@
|
||||
From 1cf93e2435f0d7a7e8c9fd0d4355e6a521f72fc1 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Sat, 14 Feb 2026 00:12:51 +0100
|
||||
Subject: [PATCH 1/2] ARM: dts: gemini: Correct the RUT1xx
|
||||
|
||||
Fix two problems with the RUT1xx device tree:
|
||||
- The memory is 32MB not 128MB
|
||||
- The console is 19200 BPS
|
||||
- Activate the PCI
|
||||
- Disable the unused USB ports
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-rut1xx.dts | 18 +++++++-----------
|
||||
1 file changed, 7 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-rut1xx.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-rut1xx.dts
|
||||
@@ -14,13 +14,13 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
- memory@0 { /* 128 MB */
|
||||
+ memory@0 { /* 32 MB */
|
||||
device_type = "memory";
|
||||
- reg = <0x00000000 0x8000000>;
|
||||
+ reg = <0x00000000 0x2000000>;
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,115200n8";
|
||||
+ bootargs = "console=ttyS0,19200n8";
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
@@ -113,6 +113,10 @@
|
||||
pinctrl-0 = <&gpio1_default_pins>;
|
||||
};
|
||||
|
||||
+ pci@50000000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
ethernet@60000000 {
|
||||
status = "okay";
|
||||
|
||||
@@ -124,13 +128,5 @@
|
||||
/* Not used in this platform */
|
||||
};
|
||||
};
|
||||
-
|
||||
- usb@68000000 {
|
||||
- status = "okay";
|
||||
- };
|
||||
-
|
||||
- usb@69000000 {
|
||||
- status = "okay";
|
||||
- };
|
||||
};
|
||||
};
|
||||
-37
@@ -1,37 +0,0 @@
|
||||
From 0890faebd0155f57ef34fb1e766fd3ed8a127595 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Mon, 11 Mar 2019 15:44:29 +0100
|
||||
Subject: [PATCH 2/2] ARM: dts: Augment DIR-685 partition table for OpenWrt
|
||||
|
||||
Rename the firmware partition so that the firmware MTD
|
||||
splitter will do its job, drop the rootfs arguments as
|
||||
the MTD splitter will set this up automatically.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
@@ -20,7 +20,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait consoleblank=300";
|
||||
+ bootargs = "console=ttyS0,19200n8 consoleblank=300";
|
||||
stdout-path = "uart0:19200n8";
|
||||
};
|
||||
|
||||
@@ -317,9 +317,9 @@
|
||||
* this is called "upgrade" on the vendor system.
|
||||
*/
|
||||
partition@40000 {
|
||||
- label = "upgrade";
|
||||
+ compatible = "wrg";
|
||||
+ label = "firmware";
|
||||
reg = <0x00040000 0x01f40000>;
|
||||
- read-only;
|
||||
};
|
||||
/* RGDB, Residental Gateway Database? */
|
||||
partition@1f80000 {
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
From a4ea0ccf0f630b5fb0ccd2ddbb237c37ef0fc5a9 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Mon, 26 Jan 2026 08:14:22 +0100
|
||||
Subject: [PATCH] ARM: dts: gemini: Tag disk led for disk-activity
|
||||
|
||||
Linux now has a trigger specifically for all disk activity
|
||||
and this is what the LED is used for so tag it like such.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-nas4220b.dts | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-nas4220b.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-nas4220b.dts
|
||||
@@ -52,6 +52,7 @@
|
||||
/* Conflict with TVC */
|
||||
gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
+ linux,default-trigger = "disk-activity";
|
||||
};
|
||||
led-green-os {
|
||||
label = "nas4220b:green:os";
|
||||
@@ -1,80 +0,0 @@
|
||||
From 1b5c6be7b6dc6c096e1fd55ce10809d350e3afab Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Mon, 26 Jan 2026 08:09:04 +0100
|
||||
Subject: [PATCH] gemini: augment DTS with botched partitions
|
||||
|
||||
We override the RedBoot FIS partition table with a custom one
|
||||
using fixed-partitions.
|
||||
|
||||
Mostly this is a 1-to-1 copy, but the three partitions called
|
||||
"Kern", "Ramdisk" and "Application" are combined into one
|
||||
called "firmware" which is optimal for OpenWrt.
|
||||
|
||||
The RedBoot bootloader still sees the three partitions and will
|
||||
load the first two into memory to boot the system, which
|
||||
is fine: the kernel will still be there.
|
||||
|
||||
To avoid confusing the MTD partition splitter we also need to
|
||||
remove any command line root partition arguments.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-nas4220b.dts | 39 ++++++++++++++++++--
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-nas4220b.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-nas4220b.dts
|
||||
@@ -20,7 +20,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,19200n8 root=/dev/mtdblock3 rw rootfstype=squashfs,jffs2 rootwait";
|
||||
+ bootargs = "console=ttyS0,19200n8";
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
@@ -82,10 +82,41 @@
|
||||
/* 16MB of flash */
|
||||
reg = <0x30000000 0x01000000>;
|
||||
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
partitions {
|
||||
- compatible = "redboot-fis";
|
||||
- /* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x7f>;
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00020000 0x00f00000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x00f20000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "CurConf";
|
||||
+ reg = <0x00f40000 0x000a0000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x00fe0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
};
|
||||
};
|
||||
|
||||
-68
@@ -1,68 +0,0 @@
|
||||
From e0881008b49ecbec1c88f1f96c62a6a37c808df4 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Sun, 1 Feb 2026 00:21:08 +0100
|
||||
Subject: [PATCH] gemini: augment SQ201 DTS with botched partitions
|
||||
|
||||
Same botched partitions as the Raidsonic IB-4220-B.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-sq201.dts | 39 ++++++++++++++++++++---
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
@@ -20,7 +20,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,115200n8 root=/dev/mtdblock2 rw rootfstype=squashfs,jffs2 rootwait";
|
||||
+ bootargs = "console=ttyS0,115200n8";
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
@@ -131,10 +131,41 @@
|
||||
/* 16MB of flash */
|
||||
reg = <0x30000000 0x01000000>;
|
||||
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
partitions {
|
||||
- compatible = "redboot-fis";
|
||||
- /* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x7f>;
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00016000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00120000 0x00e00000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x00f20000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "CurConf";
|
||||
+ reg = <0x00f40000 0x000a0000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x00fe0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
};
|
||||
};
|
||||
|
||||
-68
@@ -1,68 +0,0 @@
|
||||
From b5732601a7ff5457cb1e3a9389761aa23a81f54d Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Sun, 1 Feb 2026 10:20:56 +0100
|
||||
Subject: [PATCH] gemini: augment SL93512R DTS with botched partitions
|
||||
|
||||
Same botched partitions as the Raidsonic IB-4220-B.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-sl93512r.dts | 39 ++++++++++++++++++--
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
@@ -24,7 +24,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,19200n8 root=/dev/mtdblock3 rw rootfstype=squashfs,jffs2 rootwait";
|
||||
+ bootargs = "console=ttyS0,19200n8";
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
@@ -143,10 +143,41 @@
|
||||
/* 16MB of flash */
|
||||
reg = <0x30000000 0x01000000>;
|
||||
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
partitions {
|
||||
- compatible = "redboot-fis";
|
||||
- /* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x7f>;
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00020000 0x00f00000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x00f20000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "CurConf";
|
||||
+ reg = <0x00f40000 0x000a0000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x00fe0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
};
|
||||
};
|
||||
|
||||
-68
@@ -1,68 +0,0 @@
|
||||
From 590d33c31529aae924fc38e356e93beca684e3be Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Sun, 1 Feb 2026 23:10:25 +0100
|
||||
Subject: [PATCH 2/2] gemini: augment Verbatim DTS with botched partitions
|
||||
|
||||
Same botched partitions as the Raidsonic IB-4220-B.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
.../gemini/gemini-verbatim-s08v1901-d1.dts | 39 +++++++++++++++++--
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-verbatim-s08v1901-d1.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-verbatim-s08v1901-d1.dts
|
||||
@@ -23,7 +23,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait";
|
||||
+ bootargs = "console=ttyS0,19200n8";
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
@@ -108,10 +108,41 @@
|
||||
status = "okay";
|
||||
reg = <0x30000000 0x01000000>;
|
||||
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
partitions {
|
||||
- compatible = "redboot-fis";
|
||||
- /* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x7f>;
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00020000 0x00f00000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x00f20000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "CurConf";
|
||||
+ reg = <0x00f40000 0x000a0000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x00fe0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
};
|
||||
};
|
||||
|
||||
-59
@@ -1,59 +0,0 @@
|
||||
From fdfaeca6b5eed05e446f298c5e597df39b96629a Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Thu, 12 Feb 2026 00:22:30 +0100
|
||||
Subject: [PATCH 2/2] gemini: augment NAS4210 DTS with botched partitions
|
||||
|
||||
Same botched partitions as the Raidsonic IB-4220-B.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-nas4210b.dts | 37 ++++++++++++++++++--
|
||||
1 file changed, 34 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-nas4210b.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-nas4210b.dts
|
||||
@@ -84,10 +84,41 @@
|
||||
/* 16MB of flash */
|
||||
reg = <0x30000000 0x01000000>;
|
||||
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
partitions {
|
||||
- compatible = "redboot-fis";
|
||||
- /* Eraseblock at 0xfe0000 */
|
||||
- fis-index-block = <0x7f>;
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00020000 0x00f00000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x00f20000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "CurConf";
|
||||
+ reg = <0x00f40000 0x000a0000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x00fe0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
};
|
||||
};
|
||||
|
||||
-58
@@ -1,58 +0,0 @@
|
||||
From 0b6bed71689664080e1e9ec95aecf45279dde6ee Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linusw@kernel.org>
|
||||
Date: Sat, 14 Feb 2026 00:21:13 +0100
|
||||
Subject: [PATCH 2/2] gemini: augment RUT1xx DTS with botched partitions
|
||||
|
||||
Same botched partitions as the Raidsonic IB-4220-B.
|
||||
|
||||
Signed-off-by: Linus Walleij <linusw@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-rut1xx.dts | 37 +++++++++++++++++++++-
|
||||
1 file changed, 36 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-rut1xx.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-rut1xx.dts
|
||||
@@ -74,7 +74,42 @@
|
||||
status = "okay";
|
||||
/* 8MB of flash */
|
||||
reg = <0x30000000 0x00800000>;
|
||||
- /* TODO: add flash partitions here */
|
||||
+ /*
|
||||
+ * Override the RedBoot partition table with fixed partitions
|
||||
+ * in order to create a coherent "firmware" partition so that
|
||||
+ * we can have optimal flash usage with OpenWrt in a big
|
||||
+ * MTD-splitted "firmware" partition.
|
||||
+ */
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ partition@0 {
|
||||
+ label = "BOOT";
|
||||
+ reg = <0x00000000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@1 {
|
||||
+ compatible = "openwrt,executable-prolog";
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00020000 0x007a0000>;
|
||||
+ };
|
||||
+ partition@2 {
|
||||
+ label = "VCTL";
|
||||
+ reg = <0x007c0000 0x00010000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@3 {
|
||||
+ label = "cfg";
|
||||
+ reg = <0x007d0000 0x00020000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ partition@4 {
|
||||
+ label = "FIS directory";
|
||||
+ reg = <0x007f0000 0x00010000>;
|
||||
+ read-only;
|
||||
+ };
|
||||
+ };
|
||||
};
|
||||
|
||||
syscon: syscon@40000000 {
|
||||
+3
-2
@@ -1,5 +1,3 @@
|
||||
# ADAPTED FOR OPENWRT 6.12.67 - Documentation changes removed
|
||||
# Original commit: fc0e6db30941
|
||||
From fc0e6db30941a66e284b8516b82356f97f31061d Mon Sep 17 00:00:00 2001
|
||||
From: "Kory Maincent (Dent Project)" <kory.maincent@bootlin.com>
|
||||
Date: Tue, 17 Jun 2025 14:12:01 +0200
|
||||
@@ -15,6 +13,9 @@ Link: https://patch.msgid.link/20250617-feature_poe_port_prio-v14-2-78a1a645e2ee
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
|
||||
---
|
||||
# ADAPTED FOR OPENWRT 6.12.67 - Documentation changes removed
|
||||
# Original commit: fc0e6db30941
|
||||
|
||||
Documentation/netlink/specs/ethtool.yaml | 34 ++++
|
||||
Documentation/networking/ethtool-netlink.rst | 19 ++
|
||||
drivers/net/pse-pd/pse_core.c | 179 ++++++++++++++++++
|
||||
|
||||
+3
-2
@@ -1,5 +1,3 @@
|
||||
# ADAPTED FOR OPENWRT 6.12.67 - Documentation changes removed
|
||||
# Original commit: 1176978ed851
|
||||
From 1176978ed851952652ddea3685e2f71a0e5d61ff Mon Sep 17 00:00:00 2001
|
||||
From: "Kory Maincent (Dent Project)" <kory.maincent@bootlin.com>
|
||||
Date: Tue, 17 Jun 2025 14:12:04 +0200
|
||||
@@ -15,6 +13,9 @@ Link: https://patch.msgid.link/20250617-feature_poe_port_prio-v14-5-78a1a645e2ee
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
|
||||
---
|
||||
# ADAPTED FOR OPENWRT 6.12.67 - Documentation changes removed
|
||||
# Original commit: 1176978ed851
|
||||
|
||||
Documentation/netlink/specs/ethtool.yaml | 5 +++++
|
||||
Documentation/networking/ethtool-netlink.rst | 4 ++++
|
||||
drivers/net/pse-pd/pse_core.c | 3 +++
|
||||
|
||||
+3
-2
@@ -1,5 +1,3 @@
|
||||
# ADAPTED FOR OPENWRT 6.12 - Documentation changes removed
|
||||
# Original commit: eeb0c8f72f49
|
||||
From eeb0c8f72f49a21984981188404cfd3700edbaff Mon Sep 17 00:00:00 2001
|
||||
From: "Kory Maincent (Dent Project)" <kory.maincent@bootlin.com>
|
||||
Date: Tue, 17 Jun 2025 14:12:07 +0200
|
||||
@@ -15,6 +13,9 @@ Link: https://patch.msgid.link/20250617-feature_poe_port_prio-v14-8-78a1a645e2ee
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
|
||||
---
|
||||
# ADAPTED FOR OPENWRT 6.12 - Documentation changes removed
|
||||
# Original commit: eeb0c8f72f49
|
||||
|
||||
net/ethtool/pse-pd.c | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
From 882bd6de1a5b4488dc0747d74420af34d419fd99 Mon Sep 17 00:00:00 2001
|
||||
From: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Date: Fri, 21 Mar 2025 16:33:07 +0200
|
||||
Subject: [PATCH] hwmon: emc2305: Add OF support
|
||||
|
||||
Introduce OF support for Microchip emc2305 pwm fan controller.
|
||||
|
||||
Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Reviewed-by: Frank Li <Frank.Li@nxp.com>
|
||||
Link: https://lore.kernel.org/r/20250321143308.4008623-3-florin.leotescu@oss.nxp.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -613,9 +613,16 @@ static void emc2305_remove(struct i2c_cl
|
||||
emc2305_unset_tz(dev);
|
||||
}
|
||||
|
||||
+static const struct of_device_id of_emc2305_match_table[] = {
|
||||
+ { .compatible = "microchip,emc2305", },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, of_emc2305_match_table);
|
||||
+
|
||||
static struct i2c_driver emc2305_driver = {
|
||||
.driver = {
|
||||
.name = "emc2305",
|
||||
+ .of_match_table = of_emc2305_match_table,
|
||||
},
|
||||
.probe = emc2305_probe,
|
||||
.remove = emc2305_remove,
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
From 2115cbeec8a3ccc69e3b7ecdf97b4472b0829cfc Mon Sep 17 00:00:00 2001
|
||||
From: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Date: Fri, 21 Mar 2025 16:33:08 +0200
|
||||
Subject: [PATCH] hwmon: emc2305: Use devm_thermal_of_cooling_device_register
|
||||
|
||||
Prepare the emc2305 driver to use configuration from Device Tree nodes.
|
||||
Switch to devm_thermal_of_cooling_device_register to simplify the
|
||||
cleanup procedure, allowing the removal of emc2305_unset_tz and
|
||||
emc2305_remove, which are no longer needed.
|
||||
|
||||
Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Reviewed-by: Frank Li <Frank.Li@nxp.com>
|
||||
Link: https://lore.kernel.org/r/20250321143308.4008623-4-florin.leotescu@oss.nxp.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 33 ++++-----------------------------
|
||||
1 file changed, 4 insertions(+), 29 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -112,8 +112,6 @@ static char *emc2305_fan_name[] = {
|
||||
"emc2305_fan5",
|
||||
};
|
||||
|
||||
-static void emc2305_unset_tz(struct device *dev);
|
||||
-
|
||||
static int emc2305_get_max_channel(const struct emc2305_data *data)
|
||||
{
|
||||
return data->pwm_num;
|
||||
@@ -293,8 +291,9 @@ static int emc2305_set_single_tz(struct
|
||||
pwm = data->pwm_min[cdev_idx];
|
||||
|
||||
data->cdev_data[cdev_idx].cdev =
|
||||
- thermal_cooling_device_register(emc2305_fan_name[idx], data,
|
||||
- &emc2305_cooling_ops);
|
||||
+ devm_thermal_of_cooling_device_register(dev, dev->of_node,
|
||||
+ emc2305_fan_name[idx], data,
|
||||
+ &emc2305_cooling_ops);
|
||||
|
||||
if (IS_ERR(data->cdev_data[cdev_idx].cdev)) {
|
||||
dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]);
|
||||
@@ -338,24 +337,9 @@ static int emc2305_set_tz(struct device
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
ret = emc2305_set_single_tz(dev, i + 1);
|
||||
if (ret)
|
||||
- goto thermal_cooling_device_register_fail;
|
||||
+ return ret;
|
||||
}
|
||||
return 0;
|
||||
-
|
||||
-thermal_cooling_device_register_fail:
|
||||
- emc2305_unset_tz(dev);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-static void emc2305_unset_tz(struct device *dev)
|
||||
-{
|
||||
- struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
- int i;
|
||||
-
|
||||
- /* Unregister cooling device. */
|
||||
- for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
- if (data->cdev_data[i].cdev)
|
||||
- thermal_cooling_device_unregister(data->cdev_data[i].cdev);
|
||||
}
|
||||
|
||||
static umode_t
|
||||
@@ -605,14 +589,6 @@ static int emc2305_probe(struct i2c_clie
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void emc2305_remove(struct i2c_client *client)
|
||||
-{
|
||||
- struct device *dev = &client->dev;
|
||||
-
|
||||
- if (IS_REACHABLE(CONFIG_THERMAL))
|
||||
- emc2305_unset_tz(dev);
|
||||
-}
|
||||
-
|
||||
static const struct of_device_id of_emc2305_match_table[] = {
|
||||
{ .compatible = "microchip,emc2305", },
|
||||
{},
|
||||
@@ -625,7 +601,6 @@ static struct i2c_driver emc2305_driver
|
||||
.of_match_table = of_emc2305_match_table,
|
||||
},
|
||||
.probe = emc2305_probe,
|
||||
- .remove = emc2305_remove,
|
||||
.id_table = emc2305_ids,
|
||||
};
|
||||
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
From 7114b74d99a3cd588da4ecb6011858c06f8408a1 Mon Sep 17 00:00:00 2001
|
||||
From: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Date: Tue, 3 Jun 2025 14:31:22 +0300
|
||||
Subject: [PATCH 1/3] hwmon: (emc2305) Add support for PWM frequency, polarity
|
||||
and output
|
||||
|
||||
Add three new attributes to the driver data structures to support
|
||||
configuration of PWM frequency, PWM polarity and PWM output config.
|
||||
|
||||
Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Link: https://lore.kernel.org/r/20250603113125.3175103-2-florin.leotescu@oss.nxp.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 6 ++++++
|
||||
include/linux/platform_data/emc2305.h | 6 ++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -89,8 +89,11 @@ struct emc2305_cdev_data {
|
||||
* @hwmon_dev: hwmon device
|
||||
* @max_state: maximum cooling state of the cooling device
|
||||
* @pwm_num: number of PWM channels
|
||||
+ * @pwm_output_mask: PWM output mask
|
||||
+ * @pwm_polarity_mask: PWM polarity mask
|
||||
* @pwm_separate: separate PWM settings for every channel
|
||||
* @pwm_min: array of minimum PWM per channel
|
||||
+ * @pwm_freq: array of PWM frequency per channel
|
||||
* @cdev_data: array of cooling devices data
|
||||
*/
|
||||
struct emc2305_data {
|
||||
@@ -98,8 +101,11 @@ struct emc2305_data {
|
||||
struct device *hwmon_dev;
|
||||
u8 max_state;
|
||||
u8 pwm_num;
|
||||
+ u8 pwm_output_mask;
|
||||
+ u8 pwm_polarity_mask;
|
||||
bool pwm_separate;
|
||||
u8 pwm_min[EMC2305_PWM_MAX];
|
||||
+ u16 pwm_freq[EMC2305_PWM_MAX];
|
||||
struct emc2305_cdev_data cdev_data[EMC2305_PWM_MAX];
|
||||
};
|
||||
|
||||
--- a/include/linux/platform_data/emc2305.h
|
||||
+++ b/include/linux/platform_data/emc2305.h
|
||||
@@ -9,14 +9,20 @@
|
||||
* struct emc2305_platform_data - EMC2305 driver platform data
|
||||
* @max_state: maximum cooling state of the cooling device;
|
||||
* @pwm_num: number of active channels;
|
||||
+ * @pwm_output_mask: PWM output mask
|
||||
+ * @pwm_polarity_mask: PWM polarity mask
|
||||
* @pwm_separate: separate PWM settings for every channel;
|
||||
* @pwm_min: array of minimum PWM per channel;
|
||||
+ * @pwm_freq: array of PWM frequency per channel
|
||||
*/
|
||||
struct emc2305_platform_data {
|
||||
u8 max_state;
|
||||
u8 pwm_num;
|
||||
+ u8 pwm_output_mask;
|
||||
+ u8 pwm_polarity_mask;
|
||||
bool pwm_separate;
|
||||
u8 pwm_min[EMC2305_PWM_MAX];
|
||||
+ u16 pwm_freq[EMC2305_PWM_MAX];
|
||||
};
|
||||
|
||||
#endif
|
||||
+244
@@ -0,0 +1,244 @@
|
||||
From 2ed4db7a1d07b349b50e890dee3d0f245230d254 Mon Sep 17 00:00:00 2001
|
||||
From: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Date: Tue, 3 Jun 2025 14:31:23 +0300
|
||||
Subject: [PATCH 2/3] hwmon: (emc2305) Configure PWM channels based on DT
|
||||
properties
|
||||
|
||||
Add support for configuring each PWM channel using Device Tree (DT)
|
||||
properties by parsing the 'pwms' phandle arguments.
|
||||
|
||||
Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Link: https://lore.kernel.org/r/20250603113125.3175103-3-florin.leotescu@oss.nxp.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 151 ++++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 129 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -11,6 +11,9 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_data/emc2305.h>
|
||||
#include <linux/thermal.h>
|
||||
+#include <linux/pwm.h>
|
||||
+#include <linux/of_device.h>
|
||||
+#include <linux/util_macros.h>
|
||||
|
||||
#define EMC2305_REG_DRIVE_FAIL_STATUS 0x27
|
||||
#define EMC2305_REG_VENDOR 0xfe
|
||||
@@ -23,6 +26,8 @@
|
||||
#define EMC2305_TACH_REGS_UNUSE_BITS 3
|
||||
#define EMC2305_TACH_CNT_MULTIPLIER 0x02
|
||||
#define EMC2305_TACH_RANGE_MIN 480
|
||||
+#define EMC2305_DEFAULT_OUTPUT 0x0
|
||||
+#define EMC2305_DEFAULT_POLARITY 0x0
|
||||
|
||||
#define EMC2305_PWM_DUTY2STATE(duty, max_state, pwm_max) \
|
||||
DIV_ROUND_CLOSEST((duty) * (max_state), (pwm_max))
|
||||
@@ -39,6 +44,9 @@
|
||||
#define EMC2305_REG_FAN_MIN_DRIVE(n) (0x38 + 0x10 * (n))
|
||||
#define EMC2305_REG_FAN_TACH(n) (0x3e + 0x10 * (n))
|
||||
|
||||
+/* Supported base PWM frequencies */
|
||||
+static const unsigned int base_freq_table[] = { 2441, 4882, 19530, 26000 };
|
||||
+
|
||||
enum emc230x_product_id {
|
||||
EMC2305 = 0x34,
|
||||
EMC2303 = 0x35,
|
||||
@@ -287,7 +295,7 @@ static int emc2305_set_pwm(struct device
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int emc2305_set_single_tz(struct device *dev, int idx)
|
||||
+static int emc2305_set_single_tz(struct device *dev, struct device_node *fan_node, int idx)
|
||||
{
|
||||
struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
long pwm;
|
||||
@@ -297,7 +305,7 @@ static int emc2305_set_single_tz(struct
|
||||
pwm = data->pwm_min[cdev_idx];
|
||||
|
||||
data->cdev_data[cdev_idx].cdev =
|
||||
- devm_thermal_of_cooling_device_register(dev, dev->of_node,
|
||||
+ devm_thermal_of_cooling_device_register(dev, fan_node,
|
||||
emc2305_fan_name[idx], data,
|
||||
&emc2305_cooling_ops);
|
||||
|
||||
@@ -338,10 +346,10 @@ static int emc2305_set_tz(struct device
|
||||
int i, ret;
|
||||
|
||||
if (!data->pwm_separate)
|
||||
- return emc2305_set_single_tz(dev, 0);
|
||||
+ return emc2305_set_single_tz(dev, dev->of_node, 0);
|
||||
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
- ret = emc2305_set_single_tz(dev, i + 1);
|
||||
+ ret = emc2305_set_single_tz(dev, dev->of_node, i + 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
@@ -523,15 +531,85 @@ static int emc2305_identify(struct devic
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int emc2305_of_parse_pwm_child(struct device *dev,
|
||||
+ struct device_node *child,
|
||||
+ struct emc2305_data *data)
|
||||
+{ u32 ch;
|
||||
+ int ret;
|
||||
+ struct of_phandle_args args;
|
||||
+
|
||||
+ ret = of_property_read_u32(child, "reg", &ch);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "missing reg property of %pOFn\n", child);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = of_parse_phandle_with_args(child, "pwms", "#pwm-cells", 0, &args);
|
||||
+
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (args.args_count > 0) {
|
||||
+ data->pwm_freq[ch] = find_closest(args.args[0], base_freq_table,
|
||||
+ ARRAY_SIZE(base_freq_table));
|
||||
+ } else {
|
||||
+ data->pwm_freq[ch] = base_freq_table[3];
|
||||
+ }
|
||||
+
|
||||
+ if (args.args_count > 1) {
|
||||
+ if (args.args[1] == PWM_POLARITY_NORMAL || args.args[1] == PWM_POLARITY_INVERSED)
|
||||
+ data->pwm_polarity_mask |= args.args[1] << ch;
|
||||
+ else
|
||||
+ dev_err(dev, "Wrong PWM polarity config provided: %d\n", args.args[0]);
|
||||
+ } else {
|
||||
+ data->pwm_polarity_mask |= PWM_POLARITY_NORMAL << ch;
|
||||
+ }
|
||||
+
|
||||
+ if (args.args_count > 2) {
|
||||
+ if (args.args[2] == EMC2305_PUSH_PULL || args.args[2] <= EMC2305_OPEN_DRAIN)
|
||||
+ data->pwm_output_mask |= args.args[2] << ch;
|
||||
+ else
|
||||
+ dev_err(dev, "Wrong PWM output config provided: %d\n", args.args[1]);
|
||||
+ } else {
|
||||
+ data->pwm_output_mask |= EMC2305_OPEN_DRAIN << ch;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int emc2305_probe_childs_from_dt(struct device *dev)
|
||||
+{
|
||||
+ struct emc2305_data *data = dev_get_drvdata(dev);
|
||||
+ struct device_node *child;
|
||||
+ int ret, count = 0;
|
||||
+
|
||||
+ data->pwm_output_mask = 0x0;
|
||||
+ data->pwm_polarity_mask = 0x0;
|
||||
+
|
||||
+ for_each_child_of_node(dev->of_node, child) {
|
||||
+ if (of_property_present(child, "reg")) {
|
||||
+ ret = emc2305_of_parse_pwm_child(dev, child, data);
|
||||
+ if (ret) {
|
||||
+ of_node_put(child);
|
||||
+ continue;
|
||||
+ }
|
||||
+ count++;
|
||||
+ }
|
||||
+ }
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
static int emc2305_probe(struct i2c_client *client)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
struct device *dev = &client->dev;
|
||||
+ struct device_node *child;
|
||||
struct emc2305_data *data;
|
||||
struct emc2305_platform_data *pdata;
|
||||
int vendor;
|
||||
int ret;
|
||||
int i;
|
||||
+ int pwm_childs;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
|
||||
return -ENODEV;
|
||||
@@ -551,22 +629,40 @@ static int emc2305_probe(struct i2c_clie
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ pwm_childs = emc2305_probe_childs_from_dt(dev);
|
||||
+
|
||||
pdata = dev_get_platdata(&client->dev);
|
||||
- if (pdata) {
|
||||
- if (!pdata->max_state || pdata->max_state > EMC2305_FAN_MAX_STATE)
|
||||
- return -EINVAL;
|
||||
- data->max_state = pdata->max_state;
|
||||
- /*
|
||||
- * Validate a number of active PWM channels. Note that
|
||||
- * configured number can be less than the actual maximum
|
||||
- * supported by the device.
|
||||
- */
|
||||
- if (!pdata->pwm_num || pdata->pwm_num > EMC2305_PWM_MAX)
|
||||
- return -EINVAL;
|
||||
- data->pwm_num = pdata->pwm_num;
|
||||
- data->pwm_separate = pdata->pwm_separate;
|
||||
- for (i = 0; i < EMC2305_PWM_MAX; i++)
|
||||
- data->pwm_min[i] = pdata->pwm_min[i];
|
||||
+
|
||||
+ if (!pwm_childs) {
|
||||
+ if (pdata) {
|
||||
+ if (!pdata->max_state || pdata->max_state > EMC2305_FAN_MAX_STATE)
|
||||
+ return -EINVAL;
|
||||
+ data->max_state = pdata->max_state;
|
||||
+ /*
|
||||
+ * Validate a number of active PWM channels. Note that
|
||||
+ * configured number can be less than the actual maximum
|
||||
+ * supported by the device.
|
||||
+ */
|
||||
+ if (!pdata->pwm_num || pdata->pwm_num > EMC2305_PWM_MAX)
|
||||
+ return -EINVAL;
|
||||
+ data->pwm_num = pdata->pwm_num;
|
||||
+ data->pwm_output_mask = pdata->pwm_output_mask;
|
||||
+ data->pwm_polarity_mask = pdata->pwm_polarity_mask;
|
||||
+ data->pwm_separate = pdata->pwm_separate;
|
||||
+ for (i = 0; i < EMC2305_PWM_MAX; i++) {
|
||||
+ data->pwm_min[i] = pdata->pwm_min[i];
|
||||
+ data->pwm_freq[i] = pdata->pwm_freq[i];
|
||||
+ }
|
||||
+ } else {
|
||||
+ data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
+ data->pwm_separate = false;
|
||||
+ data->pwm_output_mask = EMC2305_DEFAULT_OUTPUT;
|
||||
+ data->pwm_polarity_mask = EMC2305_DEFAULT_POLARITY;
|
||||
+ for (i = 0; i < EMC2305_PWM_MAX; i++) {
|
||||
+ data->pwm_min[i] = EMC2305_FAN_MIN;
|
||||
+ data->pwm_freq[i] = base_freq_table[3];
|
||||
+ }
|
||||
+ }
|
||||
} else {
|
||||
data->max_state = EMC2305_FAN_MAX_STATE;
|
||||
data->pwm_separate = false;
|
||||
@@ -580,9 +676,20 @@ static int emc2305_probe(struct i2c_clie
|
||||
return PTR_ERR(data->hwmon_dev);
|
||||
|
||||
if (IS_REACHABLE(CONFIG_THERMAL)) {
|
||||
- ret = emc2305_set_tz(dev);
|
||||
- if (ret != 0)
|
||||
- return ret;
|
||||
+ /* Parse and check for the available PWM child nodes */
|
||||
+ if (pwm_childs > 0) {
|
||||
+ i = 0;
|
||||
+ for_each_child_of_node(dev->of_node, child) {
|
||||
+ ret = emc2305_set_single_tz(dev, child, i);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+ i++;
|
||||
+ }
|
||||
+ } else {
|
||||
+ ret = emc2305_set_tz(dev);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
}
|
||||
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From ef8b1b4eb702cdd56807c0430b511f94b2af8e66 Mon Sep 17 00:00:00 2001
|
||||
From: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Date: Tue, 3 Jun 2025 14:31:24 +0300
|
||||
Subject: [PATCH 3/3] hwmon: (emc2305) Enable PWM polarity and output
|
||||
configuration
|
||||
|
||||
Enable configuration of PWM polarity and PWM output config
|
||||
based Device Tree properties.
|
||||
|
||||
Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
|
||||
Link: https://lore.kernel.org/r/20250603113125.3175103-4-florin.leotescu@oss.nxp.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -28,6 +28,10 @@
|
||||
#define EMC2305_TACH_RANGE_MIN 480
|
||||
#define EMC2305_DEFAULT_OUTPUT 0x0
|
||||
#define EMC2305_DEFAULT_POLARITY 0x0
|
||||
+#define EMC2305_REG_POLARITY 0x2a
|
||||
+#define EMC2305_REG_DRIVE_PWM_OUT 0x2b
|
||||
+#define EMC2305_OPEN_DRAIN 0x0
|
||||
+#define EMC2305_PUSH_PULL 0x1
|
||||
|
||||
#define EMC2305_PWM_DUTY2STATE(duty, max_state, pwm_max) \
|
||||
DIV_ROUND_CLOSEST((duty) * (max_state), (pwm_max))
|
||||
@@ -692,6 +696,16 @@ static int emc2305_probe(struct i2c_clie
|
||||
}
|
||||
}
|
||||
|
||||
+ ret = i2c_smbus_write_byte_data(client, EMC2305_REG_DRIVE_PWM_OUT,
|
||||
+ data->pwm_output_mask);
|
||||
+ if (ret < 0)
|
||||
+ dev_err(dev, "Failed to configure pwm output, using default\n");
|
||||
+
|
||||
+ ret = i2c_smbus_write_byte_data(client, EMC2305_REG_POLARITY,
|
||||
+ data->pwm_polarity_mask);
|
||||
+ if (ret < 0)
|
||||
+ dev_err(dev, "Failed to configure pwm polarity, using default\n");
|
||||
+
|
||||
for (i = 0; i < data->pwm_num; i++) {
|
||||
ret = i2c_smbus_write_byte_data(client, EMC2305_REG_FAN_MIN_DRIVE(i),
|
||||
data->pwm_min[i]);
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From 541dfb49dcb80c2509e030842de77adfb77820f5 Mon Sep 17 00:00:00 2001
|
||||
From: Pei Xiao <xiaopei01@kylinos.cn>
|
||||
Date: Fri, 5 Dec 2025 10:02:41 +0800
|
||||
Subject: [PATCH 1/2] hwmon: (emc2305) fix double put in
|
||||
emc2305_probe_childs_from_dt
|
||||
|
||||
./drivers/hwmon/emc2305.c:597:4-15: ERROR: probable double put
|
||||
|
||||
Device node iterators put the previous value of the index variable, so an
|
||||
explicit put causes a double put.
|
||||
|
||||
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
|
||||
Link: https://lore.kernel.org/r/tencent_CD373F952BE48697C949E39CB5EB77841D06@qq.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -593,10 +593,8 @@ static int emc2305_probe_childs_from_dt(
|
||||
for_each_child_of_node(dev->of_node, child) {
|
||||
if (of_property_present(child, "reg")) {
|
||||
ret = emc2305_of_parse_pwm_child(dev, child, data);
|
||||
- if (ret) {
|
||||
- of_node_put(child);
|
||||
+ if (ret)
|
||||
continue;
|
||||
- }
|
||||
count++;
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 4910da6b36b122db50a27fabf6ab7f8611b60bf8 Mon Sep 17 00:00:00 2001
|
||||
From: Pei Xiao <xiaopei01@kylinos.cn>
|
||||
Date: Fri, 5 Dec 2025 11:15:13 +0800
|
||||
Subject: [PATCH 2/2] hwmon: (emc2305) fix device node refcount leak in error
|
||||
path
|
||||
|
||||
The for_each_child_of_node() macro automatically manages device node
|
||||
reference counts during normal iteration. However, when breaking out
|
||||
of the loop early with return, the current iteration's node is not
|
||||
automatically released, leading to a reference count leak.
|
||||
|
||||
Fix this by adding of_node_put(child) before returning from the loop
|
||||
when emc2305_set_single_tz() fails.
|
||||
|
||||
This issue could lead to memory leaks over multiple probe cycles.
|
||||
|
||||
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
|
||||
Link: https://lore.kernel.org/r/tencent_5CDC08544C901D5ECA270573D5AEE3117108@qq.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -683,8 +683,10 @@ static int emc2305_probe(struct i2c_clie
|
||||
i = 0;
|
||||
for_each_child_of_node(dev->of_node, child) {
|
||||
ret = emc2305_set_single_tz(dev, child, i);
|
||||
- if (ret != 0)
|
||||
+ if (ret != 0) {
|
||||
+ of_node_put(child);
|
||||
return ret;
|
||||
+ }
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From bfd0103be5d85751fc8b7c6c8c7553d71022efe0 Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
|
||||
Date: Wed, 24 Dec 2025 12:07:03 +0100
|
||||
Subject: [PATCH] hwmon: (emc2305) Simplify with scoped for each OF child loop
|
||||
|
||||
Use scoped for-each loop when iterating over device nodes to make code a
|
||||
bit simpler.
|
||||
|
||||
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
|
||||
Link: https://lore.kernel.org/r/20251224110702.61746-4-krzysztof.kozlowski@oss.qualcomm.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -605,7 +605,6 @@ static int emc2305_probe(struct i2c_clie
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
struct device *dev = &client->dev;
|
||||
- struct device_node *child;
|
||||
struct emc2305_data *data;
|
||||
struct emc2305_platform_data *pdata;
|
||||
int vendor;
|
||||
@@ -681,12 +680,10 @@ static int emc2305_probe(struct i2c_clie
|
||||
/* Parse and check for the available PWM child nodes */
|
||||
if (pwm_childs > 0) {
|
||||
i = 0;
|
||||
- for_each_child_of_node(dev->of_node, child) {
|
||||
+ for_each_child_of_node_scoped(dev->of_node, child) {
|
||||
ret = emc2305_set_single_tz(dev, child, i);
|
||||
- if (ret != 0) {
|
||||
- of_node_put(child);
|
||||
+ if (ret != 0)
|
||||
return ret;
|
||||
- }
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
From 2954ce672b7623478c1cfeb69e6a6e4042a3656e Mon Sep 17 00:00:00 2001
|
||||
From: Felix Gu <gu_0233@qq.com>
|
||||
Date: Thu, 15 Jan 2026 21:51:48 +0800
|
||||
Subject: [PATCH] hwmon: (emc2305) Fix a resource leak in
|
||||
emc2305_of_parse_pwm_child
|
||||
|
||||
When calling of_parse_phandle_with_args(), the caller is responsible
|
||||
to call of_node_put() to release the reference of device node.
|
||||
In emc2305_of_parse_pwm_child, it does not release the reference,
|
||||
causing a resource leak.
|
||||
|
||||
Signed-off-by: Felix Gu <gu_0233@qq.com>
|
||||
Link: https://lore.kernel.org/r/tencent_738BA80BBF28F3440301EEE6F9E470165105@qq.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -578,6 +578,7 @@ static int emc2305_of_parse_pwm_child(st
|
||||
data->pwm_output_mask |= EMC2305_OPEN_DRAIN << ch;
|
||||
}
|
||||
|
||||
+ of_node_put(args.np);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
From bfd0103be5d85751fc8b7c6c8c7553d71022efe0 Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
|
||||
Date: Wed, 24 Dec 2025 12:07:03 +0100
|
||||
Subject: [PATCH] hwmon: (emc2305) Simplify with scoped for each OF child loop
|
||||
|
||||
Use scoped for-each loop when iterating over device nodes to make code a
|
||||
bit simpler.
|
||||
|
||||
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
|
||||
Link: https://lore.kernel.org/r/20251224110702.61746-4-krzysztof.kozlowski@oss.qualcomm.com
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/hwmon/emc2305.c | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/hwmon/emc2305.c
|
||||
+++ b/drivers/hwmon/emc2305.c
|
||||
@@ -606,7 +606,6 @@ static int emc2305_probe(struct i2c_clie
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
struct device *dev = &client->dev;
|
||||
- struct device_node *child;
|
||||
struct emc2305_data *data;
|
||||
struct emc2305_platform_data *pdata;
|
||||
int vendor;
|
||||
@@ -682,12 +681,10 @@ static int emc2305_probe(struct i2c_clie
|
||||
/* Parse and check for the available PWM child nodes */
|
||||
if (pwm_childs > 0) {
|
||||
i = 0;
|
||||
- for_each_child_of_node(dev->of_node, child) {
|
||||
+ for_each_child_of_node_scoped(dev->of_node, child) {
|
||||
ret = emc2305_set_single_tz(dev, child, i);
|
||||
- if (ret != 0) {
|
||||
- of_node_put(child);
|
||||
+ if (ret != 0)
|
||||
return ret;
|
||||
- }
|
||||
i++;
|
||||
}
|
||||
} else {
|
||||
@@ -183,6 +183,7 @@ CONFIG_AF_UNIX_OOB=y
|
||||
# CONFIG_AHCI_QORIQ is not set
|
||||
# CONFIG_AHCI_XGENE is not set
|
||||
CONFIG_AIO=y
|
||||
# CONFIG_AIROHA_CPU_PM_DOMAIN is not set
|
||||
# CONFIG_AIR_EN8811H_PHY is not set
|
||||
# CONFIG_AIX_PARTITION is not set
|
||||
# CONFIG_AK09911 is not set
|
||||
@@ -242,6 +243,7 @@ CONFIG_ALLOW_DEV_COREDUMP=y
|
||||
# CONFIG_ARCH_ACTIONS is not set
|
||||
# CONFIG_ARCH_AIROHA is not set
|
||||
# CONFIG_ARCH_ALPINE is not set
|
||||
# CONFIG_ARCH_ANDES is not set
|
||||
# CONFIG_ARCH_APPLE is not set
|
||||
# CONFIG_ARCH_ARTPEC is not set
|
||||
# CONFIG_ARCH_ASPEED is not set
|
||||
@@ -273,6 +275,7 @@ CONFIG_ARCH_DEFAULT_CRASH_DUMP=y
|
||||
# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
|
||||
# CONFIG_ARCH_DOVE is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_ESWIN is not set
|
||||
# CONFIG_ARCH_EXYNOS is not set
|
||||
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
@@ -288,6 +291,7 @@ CONFIG_ARCH_FORCE_MAX_ORDER=11
|
||||
# CONFIG_ARCH_K3 is not set
|
||||
# CONFIG_ARCH_KEEMBAY is not set
|
||||
# CONFIG_ARCH_KEYSTONE is not set
|
||||
# CONFIG_ARCH_LAN969X is not set
|
||||
# CONFIG_ARCH_LAYERSCAPE is not set
|
||||
# CONFIG_ARCH_LG1K is not set
|
||||
# CONFIG_ARCH_LPC32XX is not set
|
||||
@@ -337,6 +341,7 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
|
||||
# CONFIG_ARCH_SEATTLE is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_SOPHGO is not set
|
||||
# CONFIG_ARCH_SPACEMIT is not set
|
||||
# CONFIG_ARCH_SPARX5 is not set
|
||||
# CONFIG_ARCH_SPRD is not set
|
||||
# CONFIG_ARCH_STI is not set
|
||||
@@ -1054,6 +1059,7 @@ CONFIG_CONSTRUCTORS=y
|
||||
# CONFIG_CPUFREQ_ARCH_CUR_FREQ is not set
|
||||
# CONFIG_CPUFREQ_DT is not set
|
||||
# CONFIG_CPUFREQ_DT_PLATDEV is not set
|
||||
# CONFIG_CPUFREQ_VIRT is not set
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
@@ -1617,6 +1623,7 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set
|
||||
# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set
|
||||
# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set
|
||||
# CONFIG_DRM_PANEL_BOE_TD4320 is not set
|
||||
# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set
|
||||
# CONFIG_DRM_PANEL_BOE_TV101WUM_LL2 is not set
|
||||
# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set
|
||||
@@ -1626,9 +1633,12 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set
|
||||
# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set
|
||||
# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set
|
||||
# CONFIG_DRM_PANEL_HIMAX_HX8279 is not set
|
||||
# CONFIG_DRM_PANEL_HIMAX_HX83102 is not set
|
||||
# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set
|
||||
# CONFIG_DRM_PANEL_HIMAX_HX83112B is not set
|
||||
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
|
||||
# CONFIG_DRM_PANEL_HYDIS_HV101HD1 is not set
|
||||
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
|
||||
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
|
||||
# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
|
||||
@@ -1662,6 +1672,7 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set
|
||||
# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set
|
||||
# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set
|
||||
# CONFIG_DRM_PANEL_NOVATEK_NT37801 is not set
|
||||
# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set
|
||||
# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set
|
||||
# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set
|
||||
@@ -1670,10 +1681,15 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
|
||||
# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set
|
||||
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
|
||||
# CONFIG_DRM_PANEL_RAYDIUM_RM67200 is not set
|
||||
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
|
||||
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
|
||||
# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
|
||||
# CONFIG_DRM_PANEL_RENESAS_R61307 is not set
|
||||
# CONFIG_DRM_PANEL_RENESAS_R69328 is not set
|
||||
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_AMS581VF01 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
|
||||
@@ -1682,10 +1698,13 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA8 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01 is not set
|
||||
# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set
|
||||
# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set
|
||||
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
|
||||
@@ -1700,14 +1719,17 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
|
||||
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
|
||||
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
|
||||
# CONFIG_DRM_PANEL_SUMMIT is not set
|
||||
# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
|
||||
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
|
||||
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
|
||||
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
|
||||
# CONFIG_DRM_PANEL_TPO_TPG110 is not set
|
||||
# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
|
||||
# CONFIG_DRM_PANEL_VISIONOX_G2647FB105 is not set
|
||||
# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set
|
||||
# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
|
||||
# CONFIG_DRM_PANEL_VISIONOX_RM692E5 is not set
|
||||
# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set
|
||||
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
|
||||
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
|
||||
@@ -1765,6 +1787,7 @@ CONFIG_DQL=y
|
||||
# CONFIG_DRM_VIRTIO_GPU is not set
|
||||
# CONFIG_DRM_VKMS is not set
|
||||
# CONFIG_DRM_VMWGFX is not set
|
||||
# CONFIG_DRM_WAVESHARE_BRIDGE is not set
|
||||
# CONFIG_DRM_WERROR is not set
|
||||
# CONFIG_DRM_XE is not set
|
||||
# CONFIG_DRM_XEN is not set
|
||||
@@ -1997,6 +2020,7 @@ CONFIG_EROFS_FS_PCPU_KTHREAD_HIPRI=y
|
||||
# CONFIG_EROFS_FS_ZIP_ACCEL is not set
|
||||
# CONFIG_EROFS_FS_ZIP_DEFLATE is not set
|
||||
# CONFIG_EROFS_FS_ZIP_ZSTD is not set
|
||||
# CONFIG_ERRATA_MIPS is not set
|
||||
# CONFIG_ET131X is not set
|
||||
CONFIG_ETHERNET=y
|
||||
# CONFIG_ETHOC is not set
|
||||
@@ -3501,6 +3525,7 @@ CONFIG_MAX_SKB_FRAGS=17
|
||||
# CONFIG_MB1232 is not set
|
||||
# CONFIG_MC3230 is not set
|
||||
# CONFIG_MCB is not set
|
||||
# CONFIG_MCHP_LAN966X_PCI is not set
|
||||
# CONFIG_MCP320X is not set
|
||||
# CONFIG_MCP3422 is not set
|
||||
# CONFIG_MCP3564 is not set
|
||||
@@ -3686,6 +3711,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
# CONFIG_MFD_PM8XXX is not set
|
||||
# CONFIG_MFD_QCOM_PM8008 is not set
|
||||
# CONFIG_MFD_QNAP_MCU is not set
|
||||
# CONFIG_MFD_RC5T583 is not set
|
||||
# CONFIG_MFD_RDC321X is not set
|
||||
# CONFIG_MFD_RETU is not set
|
||||
@@ -3751,6 +3777,7 @@ CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
|
||||
# CONFIG_MHI_NET is not set
|
||||
# CONFIG_MHI_WWAN_CTRL is not set
|
||||
# CONFIG_MHI_WWAN_MBIM is not set
|
||||
# CONFIG_MHZ19B is not set
|
||||
# CONFIG_MICREL_KS8995MA is not set
|
||||
# CONFIG_MICREL_PHY is not set
|
||||
# CONFIG_MICROCHIP_PHY is not set
|
||||
@@ -3786,6 +3813,7 @@ CONFIG_MII=y
|
||||
# CONFIG_MIPS_VPE_LOADER is not set
|
||||
# CONFIG_MISC_ALCOR_PCI is not set
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_MISC_RP1 is not set
|
||||
# CONFIG_MISC_RTSX_PCI is not set
|
||||
# CONFIG_MISC_RTSX_USB is not set
|
||||
# CONFIG_MISDN is not set
|
||||
@@ -4811,6 +4839,7 @@ CONFIG_PARTITION_ADVANCED=y
|
||||
# CONFIG_PCIEPORTBUS is not set
|
||||
# CONFIG_PCIE_AL is not set
|
||||
# CONFIG_PCIE_ALTERA is not set
|
||||
# CONFIG_PCIE_AMD_MDB is not set
|
||||
# CONFIG_PCIE_ARMADA_8K is not set
|
||||
CONFIG_PCIE_BUS_DEFAULT=y
|
||||
# CONFIG_PCIE_BUS_PEER2PEER is not set
|
||||
|
||||
@@ -175,7 +175,6 @@ mstcboot_parse_fixed_parts(struct mtd_info *mtd,
|
||||
int active, u32 bootnum_dt)
|
||||
{
|
||||
struct device_node *np = mtd_get_of_node(mtd);
|
||||
struct device_node *child;
|
||||
struct mtd_partition *parts;
|
||||
int ret, nr_parts, index = 0;
|
||||
|
||||
@@ -189,7 +188,7 @@ mstcboot_parse_fixed_parts(struct mtd_info *mtd,
|
||||
if (!parts)
|
||||
return -ENOMEM;
|
||||
|
||||
for_each_child_of_node(np, child) {
|
||||
for_each_child_of_node_scoped(np, child) {
|
||||
u32 reg[2];
|
||||
if (of_n_addr_cells(child) != 1 ||
|
||||
of_n_size_cells(child) != 1)
|
||||
@@ -219,7 +218,6 @@ mstcboot_parse_fixed_parts(struct mtd_info *mtd,
|
||||
parts[index].size = reg[1];
|
||||
index++;
|
||||
}
|
||||
of_node_put(child);
|
||||
|
||||
if (ret)
|
||||
kfree(parts);
|
||||
|
||||
@@ -229,7 +229,7 @@ static int routerboot_partitions_parse(struct mtd_info *master,
|
||||
|
||||
/* First count the subnodes */
|
||||
np = 0;
|
||||
for_each_child_of_node(rbpart_node, pp)
|
||||
for_each_child_of_node_scoped(rbpart_node, pp)
|
||||
np++;
|
||||
|
||||
if (!np)
|
||||
@@ -244,7 +244,7 @@ static int routerboot_partitions_parse(struct mtd_info *master,
|
||||
|
||||
np = 0;
|
||||
master_ofs = 0;
|
||||
for_each_child_of_node(rbpart_node, pp) {
|
||||
for_each_child_of_node_scoped(rbpart_node, pp) {
|
||||
const __be32 *reg, *sz;
|
||||
size_t offset, size;
|
||||
int i, len, a_cells, s_cells;
|
||||
@@ -342,7 +342,6 @@ static int routerboot_partitions_parse(struct mtd_info *master,
|
||||
rbpart_fail:
|
||||
pr_err("%s: error parsing routerboot partition %pOF (%pOF)\n",
|
||||
master->name, pp, rbpart_node);
|
||||
of_node_put(pp);
|
||||
kfree(parts);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -1180,13 +1180,16 @@ static int adm6996_gpio_probe(struct platform_device *pdev)
|
||||
priv->read = adm6996_read_gpio_reg;
|
||||
priv->write = adm6996_write_gpio_reg;
|
||||
|
||||
ret = devm_gpio_request(&pdev->dev, priv->eecs, "adm_eecs");
|
||||
ret = devm_gpio_request_one(&pdev->dev, priv->eecs,
|
||||
GPIOF_IN, "adm_eecs");
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = devm_gpio_request(&pdev->dev, priv->eedi, "adm_eedi");
|
||||
ret = devm_gpio_request_one(&pdev->dev, priv->eedi,
|
||||
GPIOF_IN, "adm_eedi");
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = devm_gpio_request(&pdev->dev, priv->eesk, "adm_eesk");
|
||||
ret = devm_gpio_request_one(&pdev->dev, priv->eesk,
|
||||
GPIOF_IN, "adm_eesk");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -413,7 +413,7 @@ ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
|
||||
const __be32 *paddr;
|
||||
int len;
|
||||
int i;
|
||||
struct device_node *leds, *child;
|
||||
struct device_node *leds;
|
||||
|
||||
paddr = of_get_property(np, "qca,ar8327-initvals", &len);
|
||||
if (!paddr || len < (2 * sizeof(*paddr)))
|
||||
@@ -450,7 +450,7 @@ ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
|
||||
if (!data->leds)
|
||||
return -ENOMEM;
|
||||
|
||||
for_each_available_child_of_node(leds, child) {
|
||||
for_each_available_child_of_node_scoped(leds, child) {
|
||||
u32 reg = 0, mode = 0;
|
||||
struct ar8327_led_info info;
|
||||
int ret;
|
||||
|
||||
@@ -488,12 +488,12 @@ static void b53_switch_reset_gpio(struct b53_device *dev)
|
||||
|
||||
static int b53_configure_ports_of(struct b53_device *dev)
|
||||
{
|
||||
struct device_node *dn, *pn;
|
||||
struct device_node *dn;
|
||||
u32 port_num;
|
||||
|
||||
dn = of_get_child_by_name(dev_of_node(dev->dev), "ports");
|
||||
|
||||
for_each_available_child_of_node(dn, pn) {
|
||||
for_each_available_child_of_node_scoped(dn, pn) {
|
||||
struct device_node *fixed_link;
|
||||
|
||||
if (of_property_read_u32(pn, "reg", &port_num))
|
||||
@@ -1479,7 +1479,7 @@ static const struct b53_chip_data b53_switch_chips[] = {
|
||||
|
||||
static int b53_switch_init_of(struct b53_device *dev)
|
||||
{
|
||||
struct device_node *dn, *pn;
|
||||
struct device_node *dn;
|
||||
const char *alias;
|
||||
u32 port_num;
|
||||
u16 ports = 0;
|
||||
@@ -1488,7 +1488,7 @@ static int b53_switch_init_of(struct b53_device *dev)
|
||||
if (!dn)
|
||||
return -EINVAL;
|
||||
|
||||
for_each_available_child_of_node(dn, pn) {
|
||||
for_each_available_child_of_node_scoped(dn, pn) {
|
||||
const char *label;
|
||||
int len;
|
||||
|
||||
|
||||
@@ -1060,12 +1060,10 @@ static struct genl_family switch_fam = {
|
||||
static void
|
||||
of_switch_load_portmap(struct switch_dev *dev)
|
||||
{
|
||||
struct device_node *port;
|
||||
|
||||
if (!dev->of_node)
|
||||
return;
|
||||
|
||||
for_each_child_of_node(dev->of_node, port) {
|
||||
for_each_child_of_node_scoped(dev->of_node, port) {
|
||||
const __be32 *prop;
|
||||
const char *segment;
|
||||
int size, phys;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 29 Oct 2024 13:37:40 +0100
|
||||
Subject: [PATCH] net: add support for Realtek RTL8261n 10G PHYs
|
||||
|
||||
There is no upstream driver yet. Merge the RTL SDK driver for now.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -431,6 +431,8 @@ config QSEMI_PHY
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
|
||||
.glo_cfg = 0x4604,
|
||||
.rst_idx = 0x4608,
|
||||
.delay_irq = 0x460c,
|
||||
@@ -4160,6 +4163,56 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
@@ -4178,6 +4181,56 @@ static void mtk_set_mcr_max_rx(struct mt
|
||||
mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id));
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ Signed-off-by: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
|
||||
static void mtk_hw_reset(struct mtk_eth *eth)
|
||||
{
|
||||
u32 val;
|
||||
@@ -4639,6 +4692,8 @@ static void mtk_pending_work(struct work
|
||||
@@ -4657,6 +4710,8 @@ static void mtk_pending_work(struct work
|
||||
rtnl_lock();
|
||||
set_bit(MTK_RESETTING, ð->state);
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 29 Oct 2024 13:37:40 +0100
|
||||
Subject: [PATCH] net: add support for Realtek RTL8261n 10G PHYs
|
||||
|
||||
There is no upstream driver yet. Merge the RTL SDK driver for now.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -458,6 +458,8 @@ config QSEMI_PHY
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user