From ec8a128cbb2106132731fcb3528c9004859b86f2 Mon Sep 17 00:00:00 2001 From: Manuel Fombuena Date: Tue, 14 Jan 2025 12:37:20 +0000 Subject: [PATCH 01/28] generic: add leds_st1202 patch to fix NULL pointer access As per @KanjiMonster comment: st1202_dt_init() calls devm_led_classdev_register_ext() before the internal data structures are properly setup, so the leds become visible to user space while being partially initialized, leading to a window where trying to access them causes a NULL pointer access. Move devm_led_classdev_register_ext() to the last thing to happen during initialization. Signed-off-by: Manuel Fombuena Link: https://github.com/openwrt/openwrt/pull/17543 Signed-off-by: Robert Marko --- ...st1202-Fix-NULL-pointer-access-error.patch | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 target/linux/generic/pending-6.6/893-leds_st1202-Fix-NULL-pointer-access-error.patch diff --git a/target/linux/generic/pending-6.6/893-leds_st1202-Fix-NULL-pointer-access-error.patch b/target/linux/generic/pending-6.6/893-leds_st1202-Fix-NULL-pointer-access-error.patch new file mode 100644 index 0000000000..d763c5dfbd --- /dev/null +++ b/target/linux/generic/pending-6.6/893-leds_st1202-Fix-NULL-pointer-access-error.patch @@ -0,0 +1,70 @@ +From e3da313ebcace17f1227566fe1b0d0c3883061f9 Mon Sep 17 00:00:00 2001 +From: Manuel Fombuena +Date: Fri, 17 Jan 2025 12:31:49 +0000 +Subject: [PATCH 1/5] leds: leds-st1202: fix NULL pointer access on race + condition + +st1202_dt_init() calls devm_led_classdev_register_ext() before the +internal data structures are properly setup, so the leds become visible +to user space while being partially initialized, leading to a window +where trying to access them causes a NULL pointer access. + +This change moves devm_led_classdev_register_ext() to the last thing to +happen during initialization to eliminate it. + +Signed-off-by: Manuel Fombuena +--- + drivers/leds/leds-st1202.c | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +--- a/drivers/leds/leds-st1202.c ++++ b/drivers/leds/leds-st1202.c +@@ -261,8 +261,6 @@ static int st1202_dt_init(struct st1202_ + int err, reg; + + for_each_available_child_of_node_scoped(dev_of_node(dev), child) { +- struct led_init_data init_data = {}; +- + err = of_property_read_u32(child, "reg", ®); + if (err) + return dev_err_probe(dev, err, "Invalid register\n"); +@@ -276,15 +274,6 @@ static int st1202_dt_init(struct st1202_ + led->led_cdev.pattern_set = st1202_led_pattern_set; + led->led_cdev.pattern_clear = st1202_led_pattern_clear; + led->led_cdev.default_trigger = "pattern"; +- +- init_data.fwnode = led->fwnode; +- init_data.devicename = "st1202"; +- init_data.default_label = ":"; +- +- err = devm_led_classdev_register_ext(dev, &led->led_cdev, &init_data); +- if (err < 0) +- return dev_err_probe(dev, err, "Failed to register LED class device\n"); +- + led->led_cdev.brightness_set = st1202_brightness_set; + led->led_cdev.brightness_get = st1202_brightness_get; + } +@@ -368,6 +357,7 @@ static int st1202_probe(struct i2c_clien + return ret; + + for (int i = 0; i < ST1202_MAX_LEDS; i++) { ++ struct led_init_data init_data = {}; + led = &chip->leds[i]; + led->chip = chip; + led->led_num = i; +@@ -384,6 +374,15 @@ static int st1202_probe(struct i2c_clien + if (ret < 0) + return dev_err_probe(&client->dev, ret, + "Failed to clear LED pattern\n"); ++ ++ init_data.fwnode = led->fwnode; ++ init_data.devicename = "st1202"; ++ init_data.default_label = ":"; ++ ++ ret = devm_led_classdev_register_ext(&client->dev, &led->led_cdev, &init_data); ++ if (ret < 0) ++ return dev_err_probe(&client->dev, ret, ++ "Failed to register LED class device\n"); + } + + return 0; From 9096f996baf5555bae1c3175a9ddf7bbd3be9a9c Mon Sep 17 00:00:00 2001 From: Tony Ambardar Date: Wed, 1 Jan 2025 04:48:56 -0800 Subject: [PATCH 02/28] mac80211: Fix tracing backport Update handling of macro __assign_str() to also support the one-argument variant when building against kernel 6.10 or later. This is needed for building the next LTS kernel 6.12. Fixes: 384d079fd8 ("mac80211: update to version 6.11") Signed-off-by: Tony Ambardar Link: https://github.com/openwrt/openwrt/pull/17456 Signed-off-by: Robert Marko --- .../patches/build/140-trace_backport.patch | 419 ++++++++++++------ 1 file changed, 286 insertions(+), 133 deletions(-) diff --git a/package/kernel/mac80211/patches/build/140-trace_backport.patch b/package/kernel/mac80211/patches/build/140-trace_backport.patch index 8b77b7e83d..2d25f1c5c3 100644 --- a/package/kernel/mac80211/patches/build/140-trace_backport.patch +++ b/package/kernel/mac80211/patches/build/140-trace_backport.patch @@ -1,541 +1,694 @@ --- a/drivers/bus/mhi/host/trace.h +++ b/drivers/bus/mhi/host/trace.h -@@ -104,7 +104,7 @@ TRACE_EVENT(mhi_gen_tre, +@@ -104,7 +104,11 @@ TRACE_EVENT(mhi_gen_tre, ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif __entry->ch_num = mhi_chan->chan; __entry->wp = mhi_tre; __entry->tre_ptr = le64_to_cpu(mhi_tre->ptr); -@@ -132,7 +132,7 @@ TRACE_EVENT(mhi_intvec_states, +@@ -132,7 +136,11 @@ TRACE_EVENT(mhi_intvec_states, ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif __entry->local_ee = mhi_cntrl->ee; __entry->state = mhi_cntrl->dev_state; __entry->dev_ee = dev_ee; -@@ -159,7 +159,7 @@ TRACE_EVENT(mhi_tryset_pm_state, +@@ -159,7 +167,11 @@ TRACE_EVENT(mhi_tryset_pm_state, ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif if (pm_state) pm_state = __fls(pm_state); __entry->pm_state = pm_state; -@@ -185,7 +185,7 @@ DECLARE_EVENT_CLASS(mhi_process_event_ri +@@ -185,7 +197,11 @@ DECLARE_EVENT_CLASS(mhi_process_event_ri ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif __entry->rp = rp; __entry->ptr = le64_to_cpu(rp->ptr); __entry->dword0 = le32_to_cpu(rp->dword[0]); -@@ -227,7 +227,7 @@ DECLARE_EVENT_CLASS(mhi_update_channel_s +@@ -227,7 +243,11 @@ DECLARE_EVENT_CLASS(mhi_update_channel_s ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif __entry->ch_num = mhi_chan->chan; __entry->state = state; __entry->reason = reason; -@@ -266,7 +266,7 @@ TRACE_EVENT(mhi_pm_st_transition, +@@ -266,7 +286,11 @@ TRACE_EVENT(mhi_pm_st_transition, ), TP_fast_assign( -- __assign_str(name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(name); ++#else + __assign_str(name, mhi_cntrl->mhi_dev->name); ++#endif __entry->state = state; ), --- a/drivers/net/wireless/ath/ath10k/trace.h +++ b/drivers/net/wireless/ath/ath10k/trace.h -@@ -55,8 +55,8 @@ DECLARE_EVENT_CLASS(ath10k_log_event, +@@ -55,8 +55,13 @@ DECLARE_EVENT_CLASS(ath10k_log_event, __vstring(msg, vaf->fmt, vaf->va) ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk( -@@ -92,8 +92,8 @@ TRACE_EVENT(ath10k_log_dbg, +@@ -92,8 +97,13 @@ TRACE_EVENT(ath10k_log_dbg, __vstring(msg, vaf->fmt, vaf->va) ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->level = level; __assign_vstr(msg, vaf->fmt, vaf->va); ), -@@ -121,10 +121,10 @@ TRACE_EVENT(ath10k_log_dbg_dump, +@@ -121,10 +131,17 @@ TRACE_EVENT(ath10k_log_dbg_dump, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); -- __assign_str(msg); -- __assign_str(prefix); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); + __assign_str(msg); + __assign_str(prefix); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); + __assign_str(msg, msg); + __assign_str(prefix, prefix); ++#endif __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); ), -@@ -152,8 +152,8 @@ TRACE_EVENT(ath10k_wmi_cmd, +@@ -152,8 +169,13 @@ TRACE_EVENT(ath10k_wmi_cmd, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->id = id; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); -@@ -182,8 +182,8 @@ TRACE_EVENT(ath10k_wmi_event, +@@ -182,8 +204,13 @@ TRACE_EVENT(ath10k_wmi_event, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->id = id; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); -@@ -211,8 +211,8 @@ TRACE_EVENT(ath10k_htt_stats, +@@ -211,8 +238,13 @@ TRACE_EVENT(ath10k_htt_stats, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); ), -@@ -239,8 +239,8 @@ TRACE_EVENT(ath10k_wmi_dbglog, +@@ -239,8 +271,13 @@ TRACE_EVENT(ath10k_wmi_dbglog, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->hw_type = ar->hw_rev; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); -@@ -269,8 +269,8 @@ TRACE_EVENT(ath10k_htt_pktlog, +@@ -269,8 +306,13 @@ TRACE_EVENT(ath10k_htt_pktlog, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->hw_type = ar->hw_rev; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(pktlog), buf, buf_len); -@@ -301,8 +301,8 @@ TRACE_EVENT(ath10k_htt_tx, +@@ -301,8 +343,13 @@ TRACE_EVENT(ath10k_htt_tx, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->msdu_id = msdu_id; __entry->msdu_len = msdu_len; __entry->vdev_id = vdev_id; -@@ -332,8 +332,8 @@ TRACE_EVENT(ath10k_txrx_tx_unref, +@@ -332,8 +379,13 @@ TRACE_EVENT(ath10k_txrx_tx_unref, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->msdu_id = msdu_id; ), -@@ -358,8 +358,8 @@ DECLARE_EVENT_CLASS(ath10k_hdr_event, +@@ -358,8 +410,13 @@ DECLARE_EVENT_CLASS(ath10k_hdr_event, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->len = ath10k_frm_hdr_len(data, len); memcpy(__get_dynamic_array(data), data, __entry->len); ), -@@ -386,8 +386,8 @@ DECLARE_EVENT_CLASS(ath10k_payload_event +@@ -386,8 +443,13 @@ DECLARE_EVENT_CLASS(ath10k_payload_event ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->len = len - ath10k_frm_hdr_len(data, len); memcpy(__get_dynamic_array(payload), data + ath10k_frm_hdr_len(data, len), __entry->len); -@@ -435,8 +435,8 @@ TRACE_EVENT(ath10k_htt_rx_desc, +@@ -435,8 +497,13 @@ TRACE_EVENT(ath10k_htt_rx_desc, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->hw_type = ar->hw_rev; __entry->len = len; memcpy(__get_dynamic_array(rxdesc), data, len); -@@ -472,8 +472,8 @@ TRACE_EVENT(ath10k_wmi_diag_container, +@@ -472,8 +539,13 @@ TRACE_EVENT(ath10k_wmi_diag_container, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->type = type; __entry->timestamp = timestamp; __entry->code = code; -@@ -505,8 +505,8 @@ TRACE_EVENT(ath10k_wmi_diag, +@@ -505,8 +577,13 @@ TRACE_EVENT(ath10k_wmi_diag, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->dev)); + __assign_str(driver, dev_driver_string(ar->dev)); ++#endif __entry->len = len; memcpy(__get_dynamic_array(data), data, len); ), --- a/drivers/net/wireless/ath/ath11k/trace.h +++ b/drivers/net/wireless/ath/ath11k/trace.h -@@ -48,8 +48,8 @@ TRACE_EVENT(ath11k_htt_pktlog, +@@ -48,8 +48,13 @@ TRACE_EVENT(ath11k_htt_pktlog, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->buf_len = buf_len; __entry->pktlog_checksum = pktlog_checksum; memcpy(__get_dynamic_array(pktlog), buf, buf_len); -@@ -77,8 +77,8 @@ TRACE_EVENT(ath11k_htt_ppdu_stats, +@@ -77,8 +82,13 @@ TRACE_EVENT(ath11k_htt_ppdu_stats, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->len = len; memcpy(__get_dynamic_array(ppdu), data, len); ), -@@ -105,8 +105,8 @@ TRACE_EVENT(ath11k_htt_rxdesc, +@@ -105,8 +115,13 @@ TRACE_EVENT(ath11k_htt_rxdesc, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->len = len; __entry->log_type = log_type; memcpy(__get_dynamic_array(rxdesc), data, len); -@@ -130,8 +130,8 @@ DECLARE_EVENT_CLASS(ath11k_log_event, +@@ -130,8 +145,13 @@ DECLARE_EVENT_CLASS(ath11k_log_event, __vstring(msg, vaf->fmt, vaf->va) ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk( -@@ -171,8 +171,8 @@ TRACE_EVENT(ath11k_wmi_cmd, +@@ -171,8 +191,13 @@ TRACE_EVENT(ath11k_wmi_cmd, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __entry->id = id; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); -@@ -201,8 +201,8 @@ TRACE_EVENT(ath11k_wmi_event, +@@ -201,8 +226,13 @@ TRACE_EVENT(ath11k_wmi_event, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __entry->id = id; __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); -@@ -230,8 +230,8 @@ TRACE_EVENT(ath11k_log_dbg, +@@ -230,8 +260,13 @@ TRACE_EVENT(ath11k_log_dbg, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __entry->level = level; WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), ATH11K_MSG_MAX, vaf->fmt, -@@ -262,10 +262,10 @@ TRACE_EVENT(ath11k_log_dbg_dump, +@@ -262,10 +297,17 @@ TRACE_EVENT(ath11k_log_dbg_dump, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); -- __assign_str(msg); -- __assign_str(prefix); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); + __assign_str(msg); + __assign_str(prefix); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); + __assign_str(msg, msg); + __assign_str(prefix, prefix); ++#endif __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); ), -@@ -292,8 +292,8 @@ TRACE_EVENT(ath11k_wmi_diag, +@@ -292,8 +334,13 @@ TRACE_EVENT(ath11k_wmi_diag, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __entry->len = len; memcpy(__get_dynamic_array(data), data, len); ), -@@ -318,8 +318,8 @@ TRACE_EVENT(ath11k_ps_timekeeper, +@@ -318,8 +365,14 @@ TRACE_EVENT(ath11k_ps_timekeeper, __field(u32, peer_ps_timestamp) ), - TP_fast_assign(__assign_str(device); -- __assign_str(driver); -+ TP_fast_assign(__assign_str(device, dev_name(ar->ab->dev)); ++ TP_fast_assign( ++#if LINUX_VERSION_IS_GEQ(6,10,0) ++ __assign_str(device); + __assign_str(driver); ++#else ++ __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif memcpy(__get_dynamic_array(peer_addr), peer_addr, ETH_ALEN); __entry->peer_ps_state = peer_ps_state; --- a/drivers/net/wireless/ath/ath12k/trace.h +++ b/drivers/net/wireless/ath/ath12k/trace.h -@@ -36,8 +36,8 @@ TRACE_EVENT(ath12k_htt_pktlog, +@@ -36,8 +36,13 @@ TRACE_EVENT(ath12k_htt_pktlog, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->buf_len = buf_len; __entry->pktlog_checksum = pktlog_checksum; memcpy(__get_dynamic_array(pktlog), buf, buf_len); -@@ -73,8 +73,8 @@ TRACE_EVENT(ath12k_htt_ppdu_stats, +@@ -73,8 +78,13 @@ TRACE_EVENT(ath12k_htt_ppdu_stats, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->len = len; __entry->info = ar->pdev->timestamp.info; __entry->sync_tstmp_lo_us = ar->pdev->timestamp.sync_timestamp_hi_us; -@@ -117,8 +117,8 @@ TRACE_EVENT(ath12k_htt_rxdesc, +@@ -117,8 +127,13 @@ TRACE_EVENT(ath12k_htt_rxdesc, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ar->ab->dev)); + __assign_str(driver, dev_driver_string(ar->ab->dev)); ++#endif __entry->len = len; __entry->type = type; __entry->info = ar->pdev->timestamp.info; -@@ -153,8 +153,8 @@ TRACE_EVENT(ath12k_wmi_diag, +@@ -153,8 +168,13 @@ TRACE_EVENT(ath12k_wmi_diag, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, dev_name(ab->dev)); + __assign_str(driver, dev_driver_string(ab->dev)); ++#endif __entry->len = len; memcpy(__get_dynamic_array(data), data, len); ), --- a/drivers/net/wireless/ath/ath6kl/trace.h +++ b/drivers/net/wireless/ath/ath6kl/trace.h -@@ -304,8 +304,8 @@ TRACE_EVENT(ath6kl_log_dbg_dump, +@@ -304,8 +304,13 @@ TRACE_EVENT(ath6kl_log_dbg_dump, ), TP_fast_assign( -- __assign_str(msg); -- __assign_str(prefix); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(msg); + __assign_str(prefix); ++#else + __assign_str(msg, msg); + __assign_str(prefix, prefix); ++#endif __entry->buf_len = buf_len; memcpy(__get_dynamic_array(buf), buf, buf_len); ), --- a/drivers/net/wireless/ath/trace.h +++ b/drivers/net/wireless/ath/trace.h -@@ -44,8 +44,8 @@ TRACE_EVENT(ath_log, +@@ -44,8 +44,13 @@ TRACE_EVENT(ath_log, ), TP_fast_assign( -- __assign_str(device); -- __assign_str(driver); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(device); + __assign_str(driver); ++#else + __assign_str(device, wiphy_name(wiphy)); + __assign_str(driver, KBUILD_MODNAME); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.h -@@ -41,7 +41,7 @@ TRACE_EVENT(brcmf_err, +@@ -41,7 +41,11 @@ TRACE_EVENT(brcmf_err, __vstring(msg, vaf->fmt, vaf->va) ), TP_fast_assign( -- __assign_str(func); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(func); ++#else + __assign_str(func, func); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk("%s: %s", __get_str(func), __get_str(msg)) -@@ -57,7 +57,7 @@ TRACE_EVENT(brcmf_dbg, +@@ -57,7 +61,11 @@ TRACE_EVENT(brcmf_dbg, ), TP_fast_assign( __entry->level = level; -- __assign_str(func); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(func); ++#else + __assign_str(func, func); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk("%s: %s", __get_str(func), __get_str(msg)) --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac.h -@@ -81,7 +81,7 @@ TRACE_EVENT(brcms_macintstatus, +@@ -81,7 +81,11 @@ TRACE_EVENT(brcms_macintstatus, __field(u32, mask) ), TP_fast_assign( -- __assign_str(dev); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(dev); ++#else + __assign_str(dev, dev_name(dev)); ++#endif __entry->in_isr = in_isr; __entry->macintstatus = macintstatus; __entry->mask = mask; --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac_msg.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac_msg.h -@@ -71,7 +71,7 @@ TRACE_EVENT(brcms_dbg, +@@ -71,7 +71,11 @@ TRACE_EVENT(brcms_dbg, ), TP_fast_assign( __entry->level = level; -- __assign_str(func); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(func); ++#else + __assign_str(func, func); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk("%s: %s", __get_str(func), __get_str(msg)) --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac_tx.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcms_trace_brcmsmac_tx.h -@@ -31,7 +31,7 @@ TRACE_EVENT(brcms_txdesc, +@@ -31,7 +31,11 @@ TRACE_EVENT(brcms_txdesc, __dynamic_array(u8, txh, txh_len) ), TP_fast_assign( -- __assign_str(dev); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(dev); ++#else + __assign_str(dev, dev_name(dev)); ++#endif memcpy(__get_dynamic_array(txh), txh, txh_len); ), TP_printk("[%s] txdesc", __get_str(dev)) -@@ -54,7 +54,7 @@ TRACE_EVENT(brcms_txstatus, +@@ -54,7 +58,11 @@ TRACE_EVENT(brcms_txstatus, __field(u16, ackphyrxsh) ), TP_fast_assign( -- __assign_str(dev); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(dev); ++#else + __assign_str(dev, dev_name(dev)); ++#endif __entry->framelen = framelen; __entry->frameid = frameid; __entry->status = status; -@@ -85,7 +85,7 @@ TRACE_EVENT(brcms_ampdu_session, +@@ -85,7 +93,11 @@ TRACE_EVENT(brcms_ampdu_session, __field(u16, dma_len) ), TP_fast_assign( -- __assign_str(dev); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(dev); ++#else + __assign_str(dev, dev_name(dev)); ++#endif __entry->max_ampdu_len = max_ampdu_len; __entry->max_ampdu_frames = max_ampdu_frames; __entry->ampdu_len = ampdu_len; --- a/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-msg.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-devtrace-msg.h -@@ -57,7 +57,7 @@ TRACE_EVENT(iwlwifi_dbg, +@@ -57,7 +57,11 @@ TRACE_EVENT(iwlwifi_dbg, ), TP_fast_assign( __entry->level = level; -- __assign_str(function); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(function); ++#else + __assign_str(function, function); ++#endif __assign_vstr(msg, vaf->fmt, vaf->va); ), TP_printk("%s", __get_str(msg)) --- a/drivers/net/wireless/intel/iwlwifi/iwl-devtrace.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-devtrace.h -@@ -87,7 +87,7 @@ static inline void trace_ ## name(proto) +@@ -87,7 +87,11 @@ static inline void trace_ ## name(proto) #endif #define DEV_ENTRY __string(dev, dev_name(dev)) --#define DEV_ASSIGN __assign_str(dev) ++#if LINUX_VERSION_IS_GEQ(6,10,0) + #define DEV_ASSIGN __assign_str(dev) ++#else +#define DEV_ASSIGN __assign_str(dev, dev_name(dev)) ++#endif #include "iwl-devtrace-io.h" #include "iwl-devtrace-ucode.h" --- a/include/trace/events/qrtr.h +++ b/include/trace/events/qrtr.h -@@ -102,7 +102,7 @@ TRACE_EVENT(qrtr_ns_message, +@@ -102,7 +102,11 @@ TRACE_EVENT(qrtr_ns_message, ), TP_fast_assign( -- __assign_str(ctrl_pkt_str); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(ctrl_pkt_str); ++#else + __assign_str(ctrl_pkt_str, ctrl_pkt_str); ++#endif __entry->sq_node = sq_node; __entry->sq_port = sq_port; ), --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h -@@ -33,7 +33,7 @@ +@@ -31,9 +31,15 @@ + #define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \ + __field(bool, p2p) \ __string(vif_name, sdata->name) ++#if LINUX_VERSION_IS_GEQ(6,10,0) #define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \ __entry->p2p = sdata->vif.p2p; \ -- __assign_str(vif_name) + __assign_str(vif_name) ++#else ++#define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \ ++ __entry->p2p = sdata->vif.p2p; \ + __assign_str(vif_name, sdata->name) ++#endif #define VIF_PR_FMT " vif:%s(%d%s)" #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" --- a/net/wireless/trace.h +++ b/net/wireless/trace.h -@@ -446,7 +446,7 @@ TRACE_EVENT(rdev_add_virtual_intf, +@@ -446,7 +446,11 @@ TRACE_EVENT(rdev_add_virtual_intf, ), TP_fast_assign( WIPHY_ASSIGN; -- __assign_str(vir_intf_name); ++#if LINUX_VERSION_IS_GEQ(6,10,0) + __assign_str(vir_intf_name); ++#else + __assign_str(vir_intf_name, name ? name : ""); ++#endif __entry->type = type; ), TP_printk(WIPHY_PR_FMT ", virtual intf name: %s, type: %d", From 9454331b7fc896704a2c60b28767c282eb9ca0bd Mon Sep 17 00:00:00 2001 From: Andrea Pesaresi Date: Wed, 15 Jan 2025 01:15:20 +0100 Subject: [PATCH 03/28] ethtool: update to 6.11 Version 6.11 - October 8, 2024 * Feature: cmis: print active and inactive firmware versions * Feature: flash transceiver module firmware (--flash-module-firmware) * Feature: add T1BRR 10Mb/s mode to link mode tables * Feature: support for disabling netlink from command line * Fix: fix lanes parameter format specifier * Fix: add missing clause 33 PSE manual description * Fix: qsf: Better handling of Page A2h netlink read failure * Fix: rss: retrieve ring count using ETHTOOL_GRXRINGS ioctl (-x) * Misc: man page formatting fix * changelog here: https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/commit/NEWS?id=c0ea4b70c71334ef038f7a3416b228a50dada406 Tested on gl.inet MT6000, retrieve ring count is now working Signed-off-by: Andrea Pesaresi Link: https://github.com/openwrt/openwrt/pull/17607 Signed-off-by: Robert Marko --- package/network/utils/ethtool/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/network/utils/ethtool/Makefile b/package/network/utils/ethtool/Makefile index cfb4cfaeb9..893fcc1eda 100644 --- a/package/network/utils/ethtool/Makefile +++ b/package/network/utils/ethtool/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ethtool -PKG_VERSION:=6.10 +PKG_VERSION:=6.11 PKG_RELEASE:=1 PKG_MAINTAINER:=Felix Fietkau PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/software/network/ethtool -PKG_HASH:=cc613fe8a2bcddee17a1e6e0d763c0f3ea33c7e930658d2d7f601aa65e426a1f +PKG_HASH:=8d91f5c72ae3f25b7e88d4781279dcb320f71e30058914370b1c574c96b31202 PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=COPYING From 6720958659d226e71dca49657202e0502bb059bd Mon Sep 17 00:00:00 2001 From: Lech Perczak Date: Wed, 20 Nov 2024 03:45:21 +0100 Subject: [PATCH 04/28] ath79: lzma-loader: expose LZMA_TEXT_ADDRESS configuration again initramfs for some devices grew so big, that it can't be loaded within the previous 32MB RAM limit. Make the LZMA_TEXT_ADDRESS configurable per-target once again, to fix it for bigger devices, while maintaining compatibility with previous ones. Signed-off-by: Lech Perczak Link: https://github.com/openwrt/openwrt/pull/17616 Signed-off-by: Hauke Mehrtens --- target/linux/ath79/image/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/linux/ath79/image/Makefile b/target/linux/ath79/image/Makefile index 5647200b4b..1918a8a431 100644 --- a/target/linux/ath79/image/Makefile +++ b/target/linux/ath79/image/Makefile @@ -4,7 +4,7 @@ include $(INCLUDE_DIR)/image.mk KERNEL_LOADADDR = 0x80060000 DEVICE_VARS += LOADER_FLASH_OFFS LOADER_TYPE -DEVICE_VARS += LOADER_FLASH_MAX LOADER_KERNEL_MAGIC +DEVICE_VARS += LOADER_FLASH_MAX LOADER_KERNEL_MAGIC LZMA_TEXT_START DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID DEVICE_VARS += RAS_BOARD RAS_ROOTFS_SIZE RAS_VERSION DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK @@ -14,6 +14,7 @@ define Build/loader-common $(MAKE) -C lzma-loader \ PKG_BUILD_DIR="$@.src" \ TARGET_DIR="$(dir $@)" LOADER_NAME="$(notdir $@)" \ + LZMA_TEXT_START=$(LZMA_TEXT_START) \ $(1) compile loader.$(LOADER_TYPE) mv "$@.$(LOADER_TYPE)" "$@" rm -rf $@.src @@ -74,6 +75,7 @@ define Device/Default LOADER_FLASH_MAX := LOADER_FLASH_OFFS := LOADER_TYPE := + LZMA_TEXT_START := 0x81800000 COMPILE := IMAGES := sysupgrade.bin IMAGE/sysupgrade.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | \ From 32c6b9064ac7fc62cead37b1bc7d46ffba598c71 Mon Sep 17 00:00:00 2001 From: Lech Perczak Date: Wed, 20 Nov 2024 03:45:46 +0100 Subject: [PATCH 05/28] ath79: zte-mf28x-common: fix initramfs execution Now that LZMA_TEXT_START is configurable per-target once again, move the target above 32MB boundary for ZTE MF28* devices. Signed-off-by: Lech Perczak Link: https://github.com/openwrt/openwrt/pull/17616 Signed-off-by: Hauke Mehrtens --- target/linux/ath79/image/nand.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk index d3c1120aa2..e8494da15d 100644 --- a/target/linux/ath79/image/nand.mk +++ b/target/linux/ath79/image/nand.mk @@ -442,6 +442,10 @@ define Device/zte_mf28x_common DEVICE_PACKAGES := kmod-usb2 kmod-ath10k-ct BLOCKSIZE := 128k PAGESIZE := 2048 + LOADER_TYPE := bin + LZMA_TEXT_START := 0x82800000 + KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | uImage none + KERNEL_INITRAMFS := $$(KERNEL) KERNEL_SIZE := 4096k IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata endef From 3d63a41ffab69cb6f49c14cff99c3c3a84899363 Mon Sep 17 00:00:00 2001 From: Aleksander Jan Bajkowski Date: Wed, 15 Jan 2025 19:21:24 +0100 Subject: [PATCH 06/28] mediatek: EX5601-T0 add Zyxel EX5601-T1 and T-56 alias Define EX5601-T1 and T-56 as alternative name, to explicitly show the device is supported using existing image. EX5601-T1 does not have the option to switch between WAN/SFP port. The switch port is hardwired to the WAN port. The Zyxel T-56 is the odido-branded version of the EX5601-T1. Signed-off-by: Aleksander Jan Bajkowski Link: https://github.com/openwrt/openwrt/pull/17615 Signed-off-by: Hauke Mehrtens --- target/linux/mediatek/image/filogic.mk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/linux/mediatek/image/filogic.mk b/target/linux/mediatek/image/filogic.mk index 01d827c029..b188add1bd 100644 --- a/target/linux/mediatek/image/filogic.mk +++ b/target/linux/mediatek/image/filogic.mk @@ -1721,6 +1721,10 @@ TARGET_DEVICES += zbtlink_zbt-z8103ax define Device/zyxel_ex5601-t0-stock DEVICE_VENDOR := Zyxel DEVICE_MODEL := EX5601-T0 + DEVICE_ALT0_VENDOR := Zyxel + DEVICE_ALT0_MODEL := EX5601-T1 + DEVICE_ALT1_VENDOR := Zyxel + DEVICE_ALT1_MODEL := T-56 DEVICE_VARIANT := (stock layout) DEVICE_DTS := mt7986a-zyxel-ex5601-t0-stock DEVICE_DTS_DIR := ../dts @@ -1744,6 +1748,10 @@ TARGET_DEVICES += zyxel_ex5601-t0-stock define Device/zyxel_ex5601-t0-ubootmod DEVICE_VENDOR := Zyxel DEVICE_MODEL := EX5601-T0 + DEVICE_ALT0_VENDOR := Zyxel + DEVICE_ALT0_MODEL := EX5601-T1 + DEVICE_ALT1_VENDOR := Zyxel + DEVICE_ALT1_MODEL := T-56 DEVICE_VARIANT := (OpenWrt U-Boot layout) DEVICE_DTS := mt7986a-zyxel-ex5601-t0-ubootmod DEVICE_DTS_DIR := ../dts From f80f52163a1f56ebf3ced76cb4d37906c4d25702 Mon Sep 17 00:00:00 2001 From: "Anton Yu. Ivanusev" Date: Thu, 16 Jan 2025 21:05:38 +0500 Subject: [PATCH 07/28] ramips: fixes for Keenetic KN-1711,1713,1910 The image size has been changed to prevent failures in routers and bootloop when flashing a large image using a stock bootloader. The LED trigger package has been removed for 1910, which is no longer in use. Signed-off-by: Anton Yu. Ivanusev Link: https://github.com/openwrt/openwrt/pull/17630 Signed-off-by: Hauke Mehrtens --- target/linux/ramips/image/mt7621.mk | 5 ++--- target/linux/ramips/image/mt76x8.mk | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index 08b3dcc64f..a77579e1cc 100755 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -1804,11 +1804,10 @@ define Device/keenetic_kn-1910 $(Device/uimage-lzma-loader) BLOCKSIZE := 128k PAGESIZE := 2048 - IMAGE_SIZE := 24903680 + IMAGE_SIZE := 20368588 DEVICE_VENDOR := Keenetic DEVICE_MODEL := KN-1910 - DEVICE_PACKAGES := kmod-mt7615-firmware kmod-usb3 \ - kmod-usb-ledtrig-usbport + DEVICE_PACKAGES := kmod-mt7615-firmware kmod-usb3 IMAGES += factory.bin IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \ append-ubi | check-size | zyimage -d 0x801910 -v "KN-1910" diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk index d63148cae4..a0dd48b8a6 100644 --- a/target/linux/ramips/image/mt76x8.mk +++ b/target/linux/ramips/image/mt76x8.mk @@ -368,7 +368,7 @@ TARGET_DEVICES += keenetic_kn-1613 define Device/keenetic_kn-1711 BLOCKSIZE := 64k - IMAGE_SIZE := 13434880 + IMAGE_SIZE := 10551296 DEVICE_VENDOR := Keenetic DEVICE_MODEL := KN-1711 DEVICE_PACKAGES := kmod-mt7615e kmod-mt7663-firmware-ap kmod-usb2 @@ -380,7 +380,7 @@ TARGET_DEVICES += keenetic_kn-1711 define Device/keenetic_kn-1713 BLOCKSIZE := 64k - IMAGE_SIZE := 13434880 + IMAGE_SIZE := 10551296 DEVICE_VENDOR := Keenetic DEVICE_MODEL := KN-1713 DEVICE_PACKAGES := kmod-mt7615e kmod-mt7663-firmware-ap kmod-usb2 From b2cac2a9785ada7c30388349f5d9a9bdcff2e730 Mon Sep 17 00:00:00 2001 From: Dustin Gathmann Date: Wed, 15 Jan 2025 15:55:29 +0100 Subject: [PATCH 08/28] lantiq: fritz_cal_extract with reverse option for AVM FritzBox 7430 This implementation of fritz_cal_extract can also retrieve firmware data stored in reverse byte order, as found in the AVM 7430 device. This is done by intermediate storage in a buffer presumably large enough to hold the complete data set. Currently, this buffer size is 128kB + 1kB (some extra space for skipped data). In the usual case of "forward" data, this implementation should behave like the original implementation in all common cases. limit [-l] will determine the amount of data read and size of buffer allocated. However, if you are reading reversed data or didn't set a limit, the buffer may be too small to hold all data. In this case, you can choose a higher limit [-l] to enforce a sufficient buffer size. Signed-off-by: Dustin Gathmann Link: https://github.com/openwrt/openwrt/pull/15501 Signed-off-by: Robert Marko --- .../utils/fritz-tools/src/fritz_cal_extract.c | 142 +++++++++++++----- .../etc/hotplug.d/firmware/12-ath9k-eeprom | 7 +- 2 files changed, 111 insertions(+), 38 deletions(-) diff --git a/package/utils/fritz-tools/src/fritz_cal_extract.c b/package/utils/fritz-tools/src/fritz_cal_extract.c index 9899cd53c3..c4547bc7e0 100644 --- a/package/utils/fritz-tools/src/fritz_cal_extract.c +++ b/package/utils/fritz-tools/src/fritz_cal_extract.c @@ -8,6 +8,9 @@ * that is Not copyrighted -- provided to the public domain * Version 1.4 11 December 2005 Mark Adler * + * Modifications to also handle calibration data in reversed byte order + * (c) 2024 by . + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -28,31 +31,54 @@ #include #include #include +#include #include #include #include #include "zlib.h" #define CHUNK 1024 +#define DEFAULT_BUFFERSIZE (129 * 1024) -static inline size_t special_min(size_t a, size_t b) +#define MIN(a,b) (((a)<(b))?(a):(b)) + +/* Reverse byte order in data buffer. + * 'top' is position of last valid data byte = (datasize - 1) + */ +static void buffer_reverse(unsigned char *data, unsigned int top) { - return a == 0 ? b : (a < b ? a : b); + register unsigned char swapbyte; + const unsigned int center = top / 2; + + for (unsigned int bottom = 0; bottom < center; ++bottom, --top) { + swapbyte = data[bottom]; + data[bottom] = data[top]; + data[top] = swapbyte; + } } -/* Decompress from file source to file dest until stream ends or EOF. - inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be - allocated for processing, Z_DATA_ERROR if the deflate data is - invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and - the version of the library linked do not match, or Z_ERRNO if there - is an error reading or writing the files. */ -static int inf(FILE *source, FILE *dest, size_t limit, size_t skip) +/* Decompress from file source to data buffer until stream ends + * or *limit bytes have been written to buffer. + * + * On call, 'limit' must reference a variable containing the intended + * number of bytes to retrieve (must be <= allocated buffer size). + * + * Return values (success): + * Z_END_STREAM if complete data was retrieved (*limit == size of complete data), + * or Z_OK if data was retrieved up to limit (*limit == original value). + * + * Return values (failure): + * Z_MEM_ERROR if memory could not be allocated for processing, + * Z_DATA_ERROR if the deflate data is invalid or incomplete, + * Z_VERSION_ERROR if the version of zlib.h and the version of the + * library linked do not match, or + * Z_ERRNO if there is an error reading or writing the files. + */ +static int inflate_to_buffer(FILE *source, unsigned char *buf, size_t *limit) { int ret; - size_t have; z_stream strm; unsigned char in[CHUNK]; - unsigned char out[CHUNK]; /* allocate inflate state */ strm.zalloc = Z_NULL; @@ -64,6 +90,10 @@ static int inf(FILE *source, FILE *dest, size_t limit, size_t skip) if (ret != Z_OK) return ret; + /* set data buffer as stream output */ + strm.avail_out = *limit; + strm.next_out = buf; + /* decompress until deflate stream ends or end of file */ do { strm.avail_in = fread(in, 1, CHUNK, source); @@ -75,35 +105,28 @@ static int inf(FILE *source, FILE *dest, size_t limit, size_t skip) break; strm.next_in = in; - /* run inflate() on input until output buffer not full */ - do { - strm.avail_out = CHUNK; - strm.next_out = out; - ret = inflate(&strm, Z_NO_FLUSH); - assert(ret != Z_STREAM_ERROR); /* state not clobbered */ - switch (ret) { + /* run inflate(), fill data buffer with all available output */ + ret = inflate(&strm, Z_FINISH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + + switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; /* and fall through */ case Z_DATA_ERROR: case Z_MEM_ERROR: (void)inflateEnd(&strm); return ret; - } - have = special_min(limit, CHUNK - strm.avail_out) - skip; - if (fwrite(&out[skip], have, 1, dest) != 1 || ferror(dest)) { - (void)inflateEnd(&strm); - return Z_ERRNO; - } - skip = 0; - limit -= have; - } while (strm.avail_out == 0 && limit > 0); + } + /* done when inflate() says it's done or limit reached */ + } while (ret != Z_STREAM_END && strm.avail_out > 0); - /* done when inflate() says it's done */ - } while (ret != Z_STREAM_END && limit > 0); + /* set limit to end of retrieved data */ + assert(strm.total_out <= *limit); + *limit = strm.total_out; /* clean up and return */ (void)inflateEnd(&strm); - return (limit == 0 ? Z_OK : (ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR)); + return (ret == Z_STREAM_END ? Z_STREAM_END : (strm.avail_out == 0 ? Z_OK : Z_DATA_ERROR)); } /* report a zlib or i/o error */ @@ -140,7 +163,8 @@ static unsigned int get_num(char *str) static void usage(void) { - fprintf(stderr, "Usage: fritz_cal_extract [-s seek offset] [-i skip] [-o output file] [-l limit] [infile] -e entry_id\n" + fprintf(stderr, "Usage: fritz_cal_extract -e entry_id [-s seek offset] [-l limit]\n" + "\t[-r reverse extracted data] [-i skip n bytes] [-o output file] [infile]\n" "Finds and extracts zlib compressed calibration data in the EVA loader\n"); exit(EXIT_FAILURE); } @@ -154,15 +178,18 @@ struct cal_entry { int main(int argc, char **argv) { struct cal_entry cal = { .len = 0 }; + unsigned char *buf = NULL; FILE *in = stdin; FILE *out = stdout; + size_t datasize = DEFAULT_BUFFERSIZE; size_t limit = 0, skip = 0; int initial_offset = 0; int entry = -1; + bool reversed = false, limit_was_set = true; int ret; int opt; - while ((opt = getopt(argc, argv, "s:e:o:l:i:")) != -1) { + while ((opt = getopt(argc, argv, "s:e:o:l:i:r")) != -1) { switch (opt) { case 's': initial_offset = (int)get_num(optarg); @@ -199,6 +226,9 @@ int main(int argc, char **argv) goto out_bad; } break; + case 'r': + reversed = true; + break; default: /* '?' */ usage(); } @@ -243,11 +273,50 @@ int main(int argc, char **argv) goto out_bad; } - ret = inf(in, out, limit, skip); - if (ret == Z_OK) - goto out; + /* Set boundaries. Only keep default datasize if we need complete data + * for reversal and didn't set a higher limit. */ + if (!limit) { + limit_was_set = false; + limit = datasize - skip; + } + datasize = (reversed && datasize >= limit + skip) ? datasize : (limit + skip); - zerr(ret); + /* Create data buffer. */ + buf = malloc(datasize); + assert(buf != NULL); + + ret = inflate_to_buffer(in, buf, &datasize); + + if ((reversed || !limit_was_set) && ret != Z_STREAM_END) { /* didn't read to stream end */ + fprintf(stderr, "Failed: Data exceeds buffer size of %u. Refusing to reverse" + " or store incomplete data." + " Use a higher limit [-l] to increase buffer size.\n", + (unsigned int) datasize); + goto out_bad; + } + + ret = (ret == Z_STREAM_END) ? Z_OK : ret; /* normalize return value */ + if (ret != Z_OK) { + zerr(ret); + goto out_bad; + } + + if (reversed) + buffer_reverse(buf, datasize - 1); + + if (datasize <= skip) { + fprintf(stderr, "Failed to skip %u bytes, total data size is %u!\n", + (unsigned int)skip, (unsigned int)datasize); + goto out_bad; + } + + limit = MIN(limit, datasize - skip); + if (fwrite(&buf[skip], limit, 1, out) != 1 || ferror(out)) { + fprintf(stderr, "Failed to write data buffer to output file"); + goto out_bad; + } + + goto out; out_bad: ret = EXIT_FAILURE; @@ -257,5 +326,6 @@ out: fclose(in); if (out) fclose(out); + free(buf); return ret; } diff --git a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom index 936181c693..cb3fef9168 100644 --- a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom +++ b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom @@ -19,11 +19,14 @@ case "$FIRMWARE" in avm,fritz3390) caldata_extract_reverse "urlader" 0x2546 0x440 ;; - avm,fritz7412|\ - avm,fritz7430) + avm,fritz7412) /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") || \ /usr/bin/fritz_cal_extract -i 1 -s 0x1e800 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") ;; + avm,fritz7430) + /usr/bin/fritz_cal_extract -r -i 4 -s 0x1e000 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") || \ + /usr/bin/fritz_cal_extract -r -i 4 -s 0x1e800 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") + ;; bt,homehub-v5a) caldata_extract_ubi "caldata" 0x1000 0x1000 ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c From 4a8717b5e76edbc8e1f63122f8b05685e0b779db Mon Sep 17 00:00:00 2001 From: Robert Marko Date: Mon, 20 Jan 2025 13:08:38 +0100 Subject: [PATCH 09/28] fritz-tools: increase PKG_RELEASE Increase PKG_RELEASE as follow-up for ("lantiq: fritz_cal_extract with reverse option for AVM FritzBox 7430"). Signed-off-by: Robert Marko --- package/utils/fritz-tools/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/utils/fritz-tools/Makefile b/package/utils/fritz-tools/Makefile index 6e20b56ff8..b43fe20e9e 100644 --- a/package/utils/fritz-tools/Makefile +++ b/package/utils/fritz-tools/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fritz-tools -PKG_RELEASE:=2 +PKG_RELEASE:=3 CMAKE_INSTALL:=1 include $(INCLUDE_DIR)/package.mk From 334c649a8d9b191c0282f9104b3997b090628f56 Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Mon, 20 Jan 2025 17:14:47 +0100 Subject: [PATCH 10/28] kernel: fix rootfs initramfs not updating on subsequent single build There is currently a problem where the rootfs in an initramfs image for single target build is not updated on subsequent run. This is caused by a bug introduced in d78dec3e19e3 ("kernel: copy kernel build dir on Per-Device Initramfs compilation") where the initramfs_data.cpio rm was moved to PrepareConfigPerRootfs. This caused the side effect of dropping the rm call for single target build making the kernel reusing the previous generated initramfs_data.cpio. To correctly handle this, restore the original location of this call right after the touch /init call. This way the kernel will always regenerate the initramfs embedded rootfs ALSO for single target build. Fixes: d78dec3e19e3 ("kernel: copy kernel build dir on Per-Device Initramfs compilation") Signed-off-by: Christian Marangi --- include/kernel-defaults.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index f94ed33230..cbe415abe6 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -175,7 +175,6 @@ define Kernel/PrepareConfigPerRootfs [ ! -d "$(1)" ] || rm -rf $(1); \ mkdir $(1) && $(CP) -T $(LINUX_DIR) $(1); \ touch $(1)/.config; \ - rm -rf $(1)/usr/initramfs_data.cpio*; \ } endef @@ -190,6 +189,7 @@ define Kernel/CompileImage/Initramfs $(call Kernel/Configure/Initramfs,$(if $(1),$(1),$(TARGET_DIR)),$(LINUX_DIR)$(2)); \ $(CP) $(GENERIC_PLATFORM_DIR)/other-files/init $(if $(1),$(1),$(TARGET_DIR))/init; \ $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(if $(1),$(1),$(TARGET_DIR)) $(if $(1),$(1),$(TARGET_DIR))/init;) \ + rm -rf $(LINUX_DIR)$(2)/usr/initramfs_data.cpio*; \ $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \ $(call locked,{ \ $(if $(call qstrip,$(CONFIG_EXTERNAL_CPIO)), \ From e046f8c318618162fcdd768c4a9eadd53c239629 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 20 Jan 2025 22:16:37 +0100 Subject: [PATCH 11/28] uci: update to Git HEAD (2025-01-20) 047b2efc1348 CMakeLists.txt: bump minimum cmake version 16ff0badbde7 CMakeLists: add support for including ABIVERSION in the library version number Signed-off-by: Felix Fietkau --- package/system/uci/Makefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/package/system/uci/Makefile b/package/system/uci/Makefile index a253b43938..6e4d8da97c 100644 --- a/package/system/uci/Makefile +++ b/package/system/uci/Makefile @@ -13,9 +13,10 @@ PKG_RELEASE:=1 PKG_SOURCE_URL=$(PROJECT_GIT)/project/uci.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2025-01-17 -PKG_SOURCE_VERSION:=fb3c2343b17b759b175f11aec5b3fbb1cf48bbc3 -PKG_MIRROR_HASH:=c9302f4a1cb400134cb9fc0622fb6a04bbe8c55bcc83ec454caadb1e62f3257e +PKG_SOURCE_DATE:=2025-01-20 +PKG_SOURCE_VERSION:=16ff0badbde7e17ec3bd1f827ffe45922956cf86 +PKG_MIRROR_HASH:=e91ee4a2c0baaafe1d8ccd5321de70a8412a50323b0b27bbc7ad145e77018a22 +PKG_ABI_VERSION:=20250120 PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:= @@ -33,7 +34,7 @@ define Package/libuci CATEGORY:=Libraries TITLE:=C library for the Unified Configuration Interface (UCI) DEPENDS:=+libubox - ABI_VERSION:=20250117 + ABI_VERSION:=$(PKG_ABI_VERSION) endef define Package/uci @@ -55,11 +56,12 @@ TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ + -DABIVERSION=$(PKG_ABI_VERSION) \ $(if $(DEBUG),-DUCI_DEBUG=ON) define Package/libuci/install $(INSTALL_DIR) $(1)/lib - $(CP) $(PKG_BUILD_DIR)/libuci.so* $(1)/lib/ + $(CP) $(PKG_BUILD_DIR)/libuci.so.* $(1)/lib/ endef define Package/libuci-lua/install From ca7324134dd4fa49266c1917dc18aeb19d95077f Mon Sep 17 00:00:00 2001 From: Lech Perczak Date: Thu, 9 Jan 2025 21:40:03 +0100 Subject: [PATCH 12/28] ath79: add support for Ruckus R500 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruckus R500 datasheet: https://webresources.ruckuswireless.com/datasheets/r500/ds-ruckus-r500.html Specifications: SoC: 720Mhz QCA9558 RAM: 256MB Storage: 64MB of FLASH (SPI NOR - S25FL512S) 1x AR8327 GB switch Ethernet: 1x1000M port #3 on AR8327, 1x1000M (802.3at POE), port #5 on AR8327 Wireless: QCA988X HW2.0 802.11ac AR9550 2.4GHz 802.11b/g/n 5x GPIO LED 1x GPIO Reset Button 1x DC Jack 12v 1x UART, 3.3v, 115200 1x TPM, SLB9645TT12 2x Beamforming antennas configured via 74LV164 MAC addresses: 1. art 0x807E | Factory bridged | f0:3e:90:XX:XX:80 | 2. art 0x66 | eth0 | f0:3e:90:XX:XX:83 | (port 5, cpu port 6) - PoE port 3. art 0x6c | eth1 | f0:3e:90:XX:XX:84 | (port 3, cpu port 0) - non PoE port Serial console: 115200-8-N-1 on internal H4 header. Pinout: H1 ----------- |1|x|3|4|5| ----------- Pin 1 is near the "H4" marking. 1 - RX x - no pin 3 - VCC (3.3V) 4 - GND 5 - TX JTAG: Connector H2, similar to MIPS eJTAG, standard, unpoulated. H9 ---------------------- |2 |4 |6 |8 |10|12|14| ---------------------- |1 |3 |5 |7 |9 |11|13| ---------------------- 3 - TDI 5 - TDO 7 - TMS 9 - TCK 2,4,6,8,10 - GND 14 - Vref 1,11,12,13 - Not connected I²C: connector H2, near power LED, unpopulated: ------ |1|2|3 ------ H2 1 - SCL 2 - SDA 3 - GND Installation: Serial Port/TFTP 1. Setup tftp server on the local network 2. Connect to UART with TTL 3. Interupt U-boot process with Ctrl-C 4. Setup appropriate ipaddr and serverip in setenv: - setenv ipaddr 192.168.1.1 - setenv serverip 192.168.1.2 5. On TFTP Server - copy openwrt-ath79-generic-ruckus_r500-initramfs-kernel.bin to /srv/tftp 6. On R500 boot into initrd image - tftpboot 0x81000000 openwrt-ath79-generic-ruckus_r500-initramfs-kernel.bin - bootm 0x81000000 7. On TFTP server - scp -O openwrt-ath79-generic-ruckus_r500-squashfs-sysupgrade.bin root@192.168.1.1:/tmp 8. Ensure the boot command is set before flashing the image: fw_setenv bootcmd 'bootm 0xbf1c0000' 9. On R500 - sysupgrade /tmp/openwrt-ath79-generic-ruckus_r500-squashfs-sysupgrade.bin 10. If not done in 8; set boot command from U-boot shell itself: - setenv bootcmd bootm 0xbf1c0000 - saveenv - reset This patch adapted from https://github.com/victhor393/openwrt-ruckus-r500/tree/ruckus-r500-master Signed-off-by: Damien Mascord - Heavily refactored the device tree - Extended commit message - Documented onboad connectors - Refactored MAC and calibration data setups to use nvmem-layout - Made both network interfaces LAN ports and bridge them, this makes more sense for an access point and is consistent with the rest of Ruckus APs. - Enable lzma-loader for compressed initramfs - Enabled the optional internal USB port - Added missing LEDs and according pinctrl settings - Added reserved memory region used for bootloader communication - Added the bit-banged I²C bus and onboard TPM - Refactored boot scheme and flash layout to match earlier Ruckus devices and maximize usable space for user data. Quirks: - H7 is the physical presence switch for the SLB9645TT12 TPM. TODO: - Link state reporting on the Ethernet ports doesn't work and both ports report "up" due to limitation of swconfig ar8327 driver. With DSA conversion, this shall be rectified. - Locate 2nd shift register (U7) controlling beamforming antennas, probably on ath10k GPIOs which are currently unsupported in the driver. For this, there is a device tree node describing that - but explicitly disabled. - At the moment of adding support, there is an endianness bug in the TPM driver causing it to not detect the TPM module because of ID mismatch. Signed-off-by: Lech Perczak Link: https://github.com/openwrt/openwrt/pull/17550 Signed-off-by: Hauke Mehrtens --- .../linux/ath79/dts/qca9557_ruckus_r500.dts | 331 ++++++++++++++++++ .../generic/base-files/etc/board.d/02_network | 5 + target/linux/ath79/image/generic.mk | 11 + 3 files changed, 347 insertions(+) create mode 100644 target/linux/ath79/dts/qca9557_ruckus_r500.dts diff --git a/target/linux/ath79/dts/qca9557_ruckus_r500.dts b/target/linux/ath79/dts/qca9557_ruckus_r500.dts new file mode 100644 index 0000000000..53495ac16d --- /dev/null +++ b/target/linux/ath79/dts/qca9557_ruckus_r500.dts @@ -0,0 +1,331 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "qca955x.dtsi" + +#include +#include +#include +#include + +/ { + compatible = "ruckus,r500", "qca,qca9557"; + model = "Ruckus R500"; + + aliases { + led-boot = &power_green; + led-failsafe = &power_red; + led-running = &power_green; + led-upgrade = &power_red; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + leds { + compatible = "gpio-leds"; + + pinctrl-names = "default"; + pinctrl-0 = <&jtag_disable_pins &clks_disable_pins &enable_gpio_4>; + + power_green: led-0 { + function = LED_FUNCTION_POWER; + color = ; + gpios = <&gpio 4 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + + power_red: led-1 { + function = LED_FUNCTION_POWER; + color = ; + gpios = <&gpio 16 GPIO_ACTIVE_HIGH>; + default-state = "off"; + panic-indicator; + }; + + // DIR (Zone Director) LED - Indicates Zone director connection status + led-2 { + color = ; + function = "dir"; + gpios = <&gpio 17 GPIO_ACTIVE_LOW>; + }; + + // AIR (Signal/Air Quality) LED - Indicates uplink status and the quality of the wireless signal to the uplink AP + led-3 { + color = ; + function = "air"; + gpios = <&gpio 18 GPIO_ACTIVE_LOW>; + }; + + led-4 { + color = ; + function = LED_FUNCTION_WLAN_2GHZ; + gpios = <&gpio 1 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy1assoc"; + }; + + led-5 { + color = ; + function = LED_FUNCTION_WLAN_2GHZ; + gpios = <&gpio 2 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy1tpt"; + }; + + led-6 { + color = ; + function = LED_FUNCTION_WLAN_5GHZ; + gpios = <&gpio 21 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0assoc"; + }; + + led-7 { + color = ; + function = LED_FUNCTION_WLAN_5GHZ; + gpios = <&gpio 22 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&gpio 0 GPIO_ACTIVE_HIGH>; + linux,code = ; + debounce-interval = <60>; + }; + + }; + + beamforming-2g-spi { + compatible = "spi-gpio"; + mosi-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>; + sck-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; + num-chipselects = <0>; + #address-cells = <1>; + #size-cells = <0>; + + beamforming-2g-gpio@0 { + compatible = "fairchild,74hc595"; + reg = <0>; + registers-number = <1>; + spi-max-frequency = <24000000>; + gpio-controller; + #gpio-cells = <2>; + }; + }; + + beamforming-5g-spi { + /* + * ath10k driver doesn't expose GPIOs as of now, + * so let's disable it for now. The shift register + * for antenna pattern control is correctly initialized + * for omnidirectional pattern correctly despite that, + * there is just no possibility to control that from OpenWrt yet. + */ + status = "disabled"; + compatible = "spi-gpio"; + mosi-gpios = <&ath10k 15 GPIO_ACTIVE_HIGH>; + sck-gpios = <&ath10k 14 GPIO_ACTIVE_HIGH>; + num-chipselects = <0>; + #address-cells = <1>; + #size-cells = <0>; + + beamforming-5g-gpio@0 { + compatible = "fairchild,74hc595"; + reg = <0>; + registers-number = <1>; + spi-max-frequency = <24000000>; + gpio-controller; + #gpio-cells = <2>; + }; + }; + + i2c: i2c { + compatible = "i2c-gpio"; + #address-cells = <1>; + #size-cells = <0>; + + scl-gpios = <&gpio 19 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio 20 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; + + tpm@20 { + compatible = "infineon,slb9645tt", "tcg,tpm-tis-i2c"; + reg = <0x20>; + crc-checksum; + }; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + ruckus-himem@fff0000 { + /* Ruckus Himem area used to control + * redundant boot image selection + */ + compatible = "nvmem-rmem"; + reg = <0xfff0000 0x10000>; + no-map; + }; + }; +}; + +&pinmux { + clks_disable_pins: pinmux_clks_disable_pins { + pinctrl-single,bits = <0x40 0x0 0x80>; + }; + + enable_gpio_4: pinctrl_enable_gpio_4 { + pinctrl-single,bits = <0x4 0x0 0xff>; + }; +}; + +&spi { + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <50000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + reg = <0x0000000 0x100000>; + label = "u-boot"; + read-only; + }; + + partition@100000 { + compatible = "u-boot,env"; + reg = <0x0100000 0x40000>; + label = "u-boot-env"; + }; + + board_data: partition@140000 { + reg = <0x0140000 0x80000>; + label = "board-data"; + read-only; + }; + + partition@1c0000 { + reg = <0x01c0000 0x3e40000>; + compatible = "openwrt,uimage", "denx,uimage"; + label = "firmware"; + }; + }; + }; +}; + +&mdio0 { + status = "okay"; + + phy0: ethernet-phy@0 { + reg = <0>; + + qca,ar8327-initvals = < + 0x04 0x00080080 /* PORT0 PAD MODE CTRL */ + 0x0c 0x07600000 /* PORT6 PAD MODE CTRL */ + 0x7c 0x0000007e /* PORT0_STATUS */ + 0x94 0x0000007e /* PORT6 STATUS */ + >; + }; +}; + +ð0 { + status = "okay"; + + nvmem-cells = <&macaddr_board_data_66>; + nvmem-cell-names = "mac-address"; + pll-data = <0x96000000 0x00000101 0x00001616>; + + phy-handle = <&phy0>; +}; + +ð1 { + status = "okay"; + + nvmem-cells = <&macaddr_board_data_6c>; + nvmem-cell-names = "mac-address"; + pll-data = <0x03000101 0x00000101 0x00001616>; + + fixed-link { + speed = <1000>; + full-duplex; + }; +}; + +&pcie0 { + status = "okay"; + + ath10k: wifi@0,0 { + compatible = "pci168c,003c"; + reg = <0x0000 0 0 0 0>; + gpio-controller; + #gpio-cells = <2>; + + nvmem-cells = <&macaddr_board_data_76>, <&cal_board_data_45000>; + nvmem-cell-names = "mac-address", "calibration"; + }; +}; + +&wmac { + status = "okay"; + + nvmem-cells = <&macaddr_board_data_60>, <&cal_board_data_41000>; + nvmem-cell-names = "mac-address", "calibration"; +}; + +&usb_phy0 { + status = "okay"; +}; + +&usb0 { + status = "okay"; +}; + +&usb_phy1 { + status = "okay"; +}; + +&usb1 { + status = "okay"; +}; + +&board_data { + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr_board_data_60: macaddr@60 { + reg = <0x60 0x6>; + }; + + macaddr_board_data_66: macaddr@66 { + reg = <0x66 0x6>; + }; + + macaddr_board_data_6c: macaddr@6c { + reg = <0x6c 0x6>; + }; + + macaddr_board_data_76: macaddr@76 { + reg = <0x76 0x6>; + }; + + cal_board_data_41000: cal@41000 { + reg = <0x41000 0x440>; + }; + + cal_board_data_45000: cal@45000 { + reg = <0x45000 0x844>; + }; + }; +}; diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index 0321a9ac85..9a9267c8c7 100644 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -505,6 +505,10 @@ ath79_setup_interfaces() ucidef_add_switch "switch0" \ "0u@eth1" "4:lan:1" "3:lan:2" "2:lan:3" "1:lan:4" ;; + ruckus,r500) + ucidef_add_switch "switch0" \ + "6u@eth0" "5:lan:1" "3:lan:2" "0@eth1" + ;; teltonika,rut955|\ teltonika,rut955-h7v3c0) ucidef_set_interface_wan "eth1" @@ -813,6 +817,7 @@ ath79_setup_macs() wan_mac=$(mtd_get_mac_binary factory 0x0) lan_mac=$(macaddr_setbit_la "$wan_mac") ;; + ruckus,r500|\ ruckus,zf7025|\ ruckus,zf7321|\ ruckus,zf7341|\ diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index b15b8b0efe..f9547e9567 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -2941,6 +2941,17 @@ define Device/ruckus_zf7372 endef TARGET_DEVICES += ruckus_zf7372 +define Device/ruckus_r500 + $(Device/ruckus_common) + SOC := qca9557 + DEVICE_MODEL := R500 + IMAGE_SIZE := 63744k + BLOCKSIZE := 256k + DEVICE_PACKAGES += kmod-ath10k-ct ath10k-firmware-qca988x-ct \ + kmod-i2c-gpio kmod-tpm-i2c-infineon +endef +TARGET_DEVICES += ruckus_r500 + define Device/samsung_wam250 SOC := ar9344 DEVICE_VENDOR := Samsung From 65de1e0f78707695238382ace6a78695acbb8ed8 Mon Sep 17 00:00:00 2001 From: John Audia Date: Thu, 9 Jan 2025 21:22:48 -0500 Subject: [PATCH 13/28] kernel: add missing symbols for lxc These symbols are needed to satisfy lxc dependencies. Signed-off-by: John Audia Link: https://github.com/openwrt/openwrt/pull/17553 Signed-off-by: Hauke Mehrtens --- package/kernel/linux/modules/netsupport.mk | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk index 06ef823280..20f85c3173 100644 --- a/package/kernel/linux/modules/netsupport.mk +++ b/package/kernel/linux/modules/netsupport.mk @@ -1649,3 +1649,21 @@ define KernelPackage/qrtr-mhi/description endef $(eval $(call KernelPackage,qrtr-mhi)) + +define KernelPackage/unix-diag + TITLE:=UNIX socket monitoring interface + KCONFIG:=CONFIG_UNIX_DIAG + FILES:= $(LINUX_DIR)/net/unix/unix_diag.ko + AUTOLOAD:=$(call AutoProbe,unix_diag) +endef + +$(eval $(call KernelPackage,unix-diag)) + +define KernelPackage/packet-diag + TITLE:=Packet sockets monitoring interface + KCONFIG:=CONFIG_PACKET_DIAG + FILES:= $(LINUX_DIR)/net/packet/af_packet_diag.ko + AUTOLOAD:=$(call AutoProbe,af_packet_diag) +endef + +$(eval $(call KernelPackage,packet-diag)) From f9813f41b2e9fccb644ae149eabe575fbae12fa3 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Wed, 15 Jan 2025 21:31:47 +0100 Subject: [PATCH 14/28] lantiq: xrx200: fb7430 set correct label-mac the CWMP account mac is correctly set on the lan device but was not correctly as label-mac Signed-off-by: Florian Maurer Link: https://github.com/openwrt/openwrt/pull/17618 Signed-off-by: Hauke Mehrtens --- target/linux/lantiq/xrx200/base-files/etc/board.d/02_network | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/linux/lantiq/xrx200/base-files/etc/board.d/02_network b/target/linux/lantiq/xrx200/base-files/etc/board.d/02_network index 8c2cdb12af..bf90757897 100644 --- a/target/linux/lantiq/xrx200/base-files/etc/board.d/02_network +++ b/target/linux/lantiq/xrx200/base-files/etc/board.d/02_network @@ -125,6 +125,7 @@ lantiq_setup_macs() tffsdev=$(find_mtd_chardev "nand-tffs") lan_mac=$(/usr/bin/fritz_tffs_nand -d $tffsdev -n maca -o) wan_mac=$(/usr/bin/fritz_tffs_nand -d $tffsdev -n macdsl -o) + label_mac=$lan_mac ;; bt,homehub-v5a) lan_mac=$(mtd_get_mac_binary_ubi caldata 0x110c) @@ -142,6 +143,7 @@ lantiq_setup_macs() [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" "$lan_mac" [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" "$wan_mac" + [ -n "$label_mac" ] && ucidef_set_label_macaddr "$label_mac" } board_config_update From 1d021458fd681dc4c27615a574cc09cc57d1c51e Mon Sep 17 00:00:00 2001 From: John Audia Date: Fri, 17 Jan 2025 08:25:17 -0500 Subject: [PATCH 15/28] kernel: bump 6.6 to 6.6.72 Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.72 Dropped to due being superseded by upstream patch: mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch[1] All other patches automatically rebased. 1. https://github.com/gregkh/linux/commit/ac7f5641e9887354a0fc6f48190533af084bb0dc Build system: x86/64 Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Signed-off-by: John Audia Link: https://github.com/openwrt/openwrt/pull/17646 Signed-off-by: Hauke Mehrtens --- include/kernel-6.6 | 4 +- ...evm_thermal_of_zone_register_with_pa.patch | 18 ++--- .../950-0087-Add-dwc_otg-driver.patch | 2 +- ...ci_sync-Add-fallback-bd-address-prop.patch | 4 +- ...wc3-Set-DMA-and-coherent-masks-early.patch | 4 +- ...-add-FS-LS-bus-instance-parkmode-dis.patch | 4 +- ...th-hci_sync-Fix-crash-on-NULL-parent.patch | 2 +- ...d-support-for-setting-NAK-enhancemen.patch | 4 +- ...t-size-the-hashtable-more-adequately.patch | 2 +- ...les-ignore-EOPNOTSUPP-on-flowtable-d.patch | 2 +- ...y-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch | 70 ------------------- ...c3-add-optional-PHY-interface-clocks.patch | 4 +- ...t-8250-Add-dw-auto-flow-ctrl-support.patch | 2 +- 13 files changed, 26 insertions(+), 96 deletions(-) delete mode 100644 target/linux/mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch diff --git a/include/kernel-6.6 b/include/kernel-6.6 index f034d0754c..8fa79f9ce1 100644 --- a/include/kernel-6.6 +++ b/include/kernel-6.6 @@ -1,2 +1,2 @@ -LINUX_VERSION-6.6 = .71 -LINUX_KERNEL_HASH-6.6.71 = 219715ba2dcfa6539fba09ad3f9212772f3507189eb60d77f8e89b06c32e724e +LINUX_VERSION-6.6 = .72 +LINUX_KERNEL_HASH-6.6.72 = feb9e514930d5968daa0b8b5486d3295d1fb2b34accf876207641884d4baef39 diff --git a/target/linux/airoha/patches-6.6/101-01-thermal-of-Add-devm_thermal_of_zone_register_with_pa.patch b/target/linux/airoha/patches-6.6/101-01-thermal-of-Add-devm_thermal_of_zone_register_with_pa.patch index 7836aef7dd..d646e05170 100644 --- a/target/linux/airoha/patches-6.6/101-01-thermal-of-Add-devm_thermal_of_zone_register_with_pa.patch +++ b/target/linux/airoha/patches-6.6/101-01-thermal-of-Add-devm_thermal_of_zone_register_with_pa.patch @@ -40,7 +40,7 @@ Signed-off-by: Christian Marangi --- a/drivers/thermal/thermal_of.c +++ b/drivers/thermal/thermal_of.c -@@ -245,7 +245,7 @@ static void thermal_of_parameters_init(s +@@ -246,7 +246,7 @@ static void thermal_of_parameters_init(s { int coef[2]; int ncoef = ARRAY_SIZE(coef); @@ -49,7 +49,7 @@ Signed-off-by: Christian Marangi tzp->no_hwmon = true; -@@ -257,14 +257,11 @@ static void thermal_of_parameters_init(s +@@ -258,14 +258,11 @@ static void thermal_of_parameters_init(s * thermal zone. Thus, we are considering only the first two * values as slope and offset. */ @@ -67,7 +67,7 @@ Signed-off-by: Christian Marangi } static struct device_node *thermal_of_zone_get_by_name(struct thermal_zone_device *tz) -@@ -458,10 +455,15 @@ static void thermal_of_zone_unregister(s +@@ -459,10 +456,15 @@ static void thermal_of_zone_unregister(s * zone properties and registers new thermal zone with those * properties. * @@ -83,7 +83,7 @@ Signed-off-by: Christian Marangi * * Return: a valid thermal zone structure pointer on success. * - EINVAL: if the device tree thermal description is malformed -@@ -469,11 +471,11 @@ static void thermal_of_zone_unregister(s +@@ -470,11 +472,11 @@ static void thermal_of_zone_unregister(s * - Other negative errors are returned by the underlying called functions */ static struct thermal_zone_device *thermal_of_zone_register(struct device_node *sensor, int id, void *data, @@ -97,7 +97,7 @@ Signed-off-by: Christian Marangi struct thermal_zone_device_ops *of_ops; struct device_node *np; int delay, pdelay; -@@ -508,7 +510,7 @@ static struct thermal_zone_device *therm +@@ -509,7 +511,7 @@ static struct thermal_zone_device *therm goto out_kfree_trips; } @@ -106,7 +106,7 @@ Signed-off-by: Christian Marangi of_ops->bind = thermal_of_bind; of_ops->unbind = thermal_of_unbind; -@@ -516,7 +518,7 @@ static struct thermal_zone_device *therm +@@ -517,7 +519,7 @@ static struct thermal_zone_device *therm mask = GENMASK_ULL((ntrips) - 1, 0); tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips, @@ -115,7 +115,7 @@ Signed-off-by: Christian Marangi pdelay, delay); if (IS_ERR(tz)) { ret = PTR_ERR(tz); -@@ -571,6 +573,7 @@ static int devm_thermal_of_zone_match(st +@@ -572,6 +574,7 @@ static int devm_thermal_of_zone_match(st struct thermal_zone_device *devm_thermal_of_zone_register(struct device *dev, int sensor_id, void *data, const struct thermal_zone_device_ops *ops) { @@ -123,7 +123,7 @@ Signed-off-by: Christian Marangi struct thermal_zone_device **ptr, *tzd; ptr = devres_alloc(devm_thermal_of_zone_release, sizeof(*ptr), -@@ -578,7 +581,7 @@ struct thermal_zone_device *devm_thermal +@@ -579,7 +582,7 @@ struct thermal_zone_device *devm_thermal if (!ptr) return ERR_PTR(-ENOMEM); @@ -132,7 +132,7 @@ Signed-off-by: Christian Marangi if (IS_ERR(tzd)) { devres_free(ptr); return tzd; -@@ -592,6 +595,46 @@ struct thermal_zone_device *devm_thermal +@@ -593,6 +596,46 @@ struct thermal_zone_device *devm_thermal EXPORT_SYMBOL_GPL(devm_thermal_of_zone_register); /** diff --git a/target/linux/bcm27xx/patches-6.6/950-0087-Add-dwc_otg-driver.patch b/target/linux/bcm27xx/patches-6.6/950-0087-Add-dwc_otg-driver.patch index cb9fd4442a..3da9f4230b 100644 --- a/target/linux/bcm27xx/patches-6.6/950-0087-Add-dwc_otg-driver.patch +++ b/target/linux/bcm27xx/patches-6.6/950-0087-Add-dwc_otg-driver.patch @@ -1189,7 +1189,7 @@ Signed-off-by: Alexander Winkowski } --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -5710,7 +5710,7 @@ static void port_event(struct usb_hub *h +@@ -5712,7 +5712,7 @@ static void port_event(struct usb_hub *h port_dev->over_current_count++; port_over_current_notify(port_dev); diff --git a/target/linux/bcm27xx/patches-6.6/950-0441-Bluetooth-hci_sync-Add-fallback-bd-address-prop.patch b/target/linux/bcm27xx/patches-6.6/950-0441-Bluetooth-hci_sync-Add-fallback-bd-address-prop.patch index 3f9d802de3..b9d1a95c6d 100644 --- a/target/linux/bcm27xx/patches-6.6/950-0441-Bluetooth-hci_sync-Add-fallback-bd-address-prop.patch +++ b/target/linux/bcm27xx/patches-6.6/950-0441-Bluetooth-hci_sync-Add-fallback-bd-address-prop.patch @@ -20,7 +20,7 @@ Signed-off-by: Phil Elwell --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c -@@ -4872,6 +4872,7 @@ static const struct { +@@ -4873,6 +4873,7 @@ static const struct { */ static int hci_dev_setup_sync(struct hci_dev *hdev) { @@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell int ret = 0; bool invalid_bdaddr; size_t i; -@@ -4900,7 +4901,8 @@ static int hci_dev_setup_sync(struct hci +@@ -4901,7 +4902,8 @@ static int hci_dev_setup_sync(struct hci test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); if (!ret) { if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks) && diff --git a/target/linux/bcm27xx/patches-6.6/950-0519-usb-dwc3-Set-DMA-and-coherent-masks-early.patch b/target/linux/bcm27xx/patches-6.6/950-0519-usb-dwc3-Set-DMA-and-coherent-masks-early.patch index 2448bd942a..db3b6cd828 100644 --- a/target/linux/bcm27xx/patches-6.6/950-0519-usb-dwc3-Set-DMA-and-coherent-masks-early.patch +++ b/target/linux/bcm27xx/patches-6.6/950-0519-usb-dwc3-Set-DMA-and-coherent-masks-early.patch @@ -333,7 +333,7 @@ Signed-off-by: Jonathan Bell /* Global Debug LSP MUX Select */ #define DWC3_GDBGLSPMUX_ENDBC BIT(15) /* Host only */ #define DWC3_GDBGLSPMUX_HOSTSELECT(n) ((n) & 0x3fff) -@@ -1066,6 +1069,7 @@ struct dwc3_scratchpad_array { +@@ -1067,6 +1070,7 @@ struct dwc3_scratchpad_array { * @tx_max_burst_prd: max periodic ESS transmit burst size * @tx_fifo_resize_max_num: max number of fifos allocated during txfifo resize * @clear_stall_protocol: endpoint number that requires a delayed status phase @@ -341,7 +341,7 @@ Signed-off-by: Jonathan Bell * @hsphy_interface: "utmi" or "ulpi" * @connected: true when we're connected to a host, false otherwise * @softconnect: true when gadget connect is called, false when disconnect runs -@@ -1303,6 +1307,7 @@ struct dwc3 { +@@ -1304,6 +1308,7 @@ struct dwc3 { u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; diff --git a/target/linux/bcm27xx/patches-6.6/950-0853-drivers-usb-dwc3-add-FS-LS-bus-instance-parkmode-dis.patch b/target/linux/bcm27xx/patches-6.6/950-0853-drivers-usb-dwc3-add-FS-LS-bus-instance-parkmode-dis.patch index 6eb5e5697f..0441512add 100644 --- a/target/linux/bcm27xx/patches-6.6/950-0853-drivers-usb-dwc3-add-FS-LS-bus-instance-parkmode-dis.patch +++ b/target/linux/bcm27xx/patches-6.6/950-0853-drivers-usb-dwc3-add-FS-LS-bus-instance-parkmode-dis.patch @@ -45,7 +45,7 @@ Signed-off-by: Jonathan Bell #define DWC3_GUCTL1_RESUME_OPMODE_HS_HOST BIT(10) /* Global Status Register */ -@@ -1121,10 +1122,12 @@ struct dwc3_scratchpad_array { +@@ -1122,10 +1123,12 @@ struct dwc3_scratchpad_array { * generation after resume from suspend. * @ulpi_ext_vbus_drv: Set to confiure the upli chip to drives CPEN pin * VBUS with an external supply. @@ -62,7 +62,7 @@ Signed-off-by: Jonathan Bell * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk * @tx_de_emphasis: Tx de-emphasis value * 0 - -6dB de-emphasis -@@ -1351,6 +1354,7 @@ struct dwc3 { +@@ -1352,6 +1355,7 @@ struct dwc3 { unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; diff --git a/target/linux/bcm27xx/patches-6.6/950-1218-Bluetooth-hci_sync-Fix-crash-on-NULL-parent.patch b/target/linux/bcm27xx/patches-6.6/950-1218-Bluetooth-hci_sync-Fix-crash-on-NULL-parent.patch index 223e2df2b7..6dfd31c70f 100644 --- a/target/linux/bcm27xx/patches-6.6/950-1218-Bluetooth-hci_sync-Fix-crash-on-NULL-parent.patch +++ b/target/linux/bcm27xx/patches-6.6/950-1218-Bluetooth-hci_sync-Fix-crash-on-NULL-parent.patch @@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c -@@ -4872,7 +4872,8 @@ static const struct { +@@ -4873,7 +4873,8 @@ static const struct { */ static int hci_dev_setup_sync(struct hci_dev *hdev) { diff --git a/target/linux/bcm27xx/patches-6.6/950-1359-usb-dwc3-core-add-support-for-setting-NAK-enhancemen.patch b/target/linux/bcm27xx/patches-6.6/950-1359-usb-dwc3-core-add-support-for-setting-NAK-enhancemen.patch index cb4f6deb39..8995f6f9dc 100644 --- a/target/linux/bcm27xx/patches-6.6/950-1359-usb-dwc3-core-add-support-for-setting-NAK-enhancemen.patch +++ b/target/linux/bcm27xx/patches-6.6/950-1359-usb-dwc3-core-add-support-for-setting-NAK-enhancemen.patch @@ -57,7 +57,7 @@ Signed-off-by: Jonathan Bell #define DWC3_GUCTL1_PARKMODE_DISABLE_SS BIT(17) #define DWC3_GUCTL1_PARKMODE_DISABLE_HS BIT(16) #define DWC3_GUCTL1_PARKMODE_DISABLE_FSLS BIT(15) -@@ -1122,6 +1124,8 @@ struct dwc3_scratchpad_array { +@@ -1123,6 +1125,8 @@ struct dwc3_scratchpad_array { * generation after resume from suspend. * @ulpi_ext_vbus_drv: Set to confiure the upli chip to drives CPEN pin * VBUS with an external supply. @@ -66,7 +66,7 @@ Signed-off-by: Jonathan Bell * @parkmode_disable_ss_quirk: If set, disable park mode feature for all * Superspeed instances. * @parkmode_disable_hs_quirk: If set, disable park mode feature for all -@@ -1352,6 +1356,8 @@ struct dwc3 { +@@ -1353,6 +1357,8 @@ struct dwc3 { unsigned dis_tx_ipgap_linecheck_quirk:1; unsigned resume_hs_terminations:1; unsigned ulpi_ext_vbus_drv:1; diff --git a/target/linux/generic/hack-6.6/661-kernel-ct-size-the-hashtable-more-adequately.patch b/target/linux/generic/hack-6.6/661-kernel-ct-size-the-hashtable-more-adequately.patch index 020f3f3a11..ff959ec8d2 100644 --- a/target/linux/generic/hack-6.6/661-kernel-ct-size-the-hashtable-more-adequately.patch +++ b/target/linux/generic/hack-6.6/661-kernel-ct-size-the-hashtable-more-adequately.patch @@ -14,7 +14,7 @@ Signed-off-by: Rui Salvaterra --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2682,7 +2682,7 @@ int nf_conntrack_init_start(void) +@@ -2685,7 +2685,7 @@ int nf_conntrack_init_start(void) if (!nf_conntrack_htable_size) { nf_conntrack_htable_size diff --git a/target/linux/generic/pending-6.6/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch b/target/linux/generic/pending-6.6/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch index 572aad2a3b..6cb52d00a2 100644 --- a/target/linux/generic/pending-6.6/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch +++ b/target/linux/generic/pending-6.6/701-netfilter-nf_tables-ignore-EOPNOTSUPP-on-flowtable-d.patch @@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c -@@ -8421,7 +8421,7 @@ static int nft_register_flowtable_net_ho +@@ -8425,7 +8425,7 @@ static int nft_register_flowtable_net_ho err = flowtable->data.type->setup(&flowtable->data, hook->ops.dev, FLOW_BLOCK_BIND); diff --git a/target/linux/mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch b/target/linux/mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch deleted file mode 100644 index 4aea9e034c..0000000000 --- a/target/linux/mediatek/patches-6.6/870-drm-mediatek-only-touch-DISP_REG_OVL_PITCH_MSB-if-AF.patch +++ /dev/null @@ -1,70 +0,0 @@ -From patchwork Sun Dec 15 22:09:41 2024 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: Daniel Golle -X-Patchwork-Id: 13908995 -Return-Path: - -Date: Sun, 15 Dec 2024 22:09:41 +0000 -From: Daniel Golle -To: Chun-Kuang Hu , - Philipp Zabel , - David Airlie , Simona Vetter , - Matthias Brugger , - AngeloGioacchino Del Regno , - Justin Green , - Frank Wunderlich , - John Crispin , dri-devel@lists.freedesktop.org, - linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, stable@vger.kernel.org -Subject: [PATCH] drm/mediatek: only touch DISP_REG_OVL_PITCH_MSB if AFBC is - supported -Message-ID: - <8c001c8e70d93d64d3ee6bf7dc5078d2783d4e32.1734300345.git.daniel@makrotopia.org> -MIME-Version: 1.0 -Content-Disposition: inline -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20241215_140959_910539_20C140B3 -X-CRM114-Status: UNSURE ( 9.48 ) -X-CRM114-Notice: Please train this message. -X-BeenThere: linux-mediatek@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-mediatek" -Errors-To: - linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org - -Touching DISP_REG_OVL_PITCH_MSB leads to video overlay on MT2701, MT7623N -and probably other older SoCs being broken. - -Only touching it on hardware which actually supports AFBC like it was -before commit c410fa9b07c3 ("drm/mediatek: Add AFBC support to Mediatek -DRM driver") fixes it. - -Fixes: c410fa9b07c3 ("drm/mediatek: Add AFBC support to Mediatek DRM driver") -Cc: stable@vger.kernel.org -Signed-off-by: Daniel Golle ---- - drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c -+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c -@@ -478,7 +478,7 @@ void mtk_ovl_layer_config(struct device - &ovl->cmdq_reg, ovl->regs, DISP_REG_OVL_PITCH_MSB(idx)); - mtk_ddp_write_relaxed(cmdq_pkt, hdr_pitch, &ovl->cmdq_reg, ovl->regs, - DISP_REG_OVL_HDR_PITCH(ovl, idx)); -- } else { -+ } else if (ovl->data->supports_afbc) { - mtk_ddp_write_relaxed(cmdq_pkt, - overlay_pitch.split_pitch.msb, - &ovl->cmdq_reg, ovl->regs, DISP_REG_OVL_PITCH_MSB(idx)); diff --git a/target/linux/rockchip/patches-6.6/034-v6.7-usb-dwc3-add-optional-PHY-interface-clocks.patch b/target/linux/rockchip/patches-6.6/034-v6.7-usb-dwc3-add-optional-PHY-interface-clocks.patch index d38d260ef1..30e8a98fd7 100644 --- a/target/linux/rockchip/patches-6.6/034-v6.7-usb-dwc3-add-optional-PHY-interface-clocks.patch +++ b/target/linux/rockchip/patches-6.6/034-v6.7-usb-dwc3-add-optional-PHY-interface-clocks.patch @@ -71,7 +71,7 @@ Signed-off-by: Greg Kroah-Hartman --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h -@@ -1002,6 +1002,8 @@ struct dwc3_scratchpad_array { +@@ -1003,6 +1003,8 @@ struct dwc3_scratchpad_array { * @bus_clk: clock for accessing the registers * @ref_clk: reference clock * @susp_clk: clock used when the SS phy is in low power (S3) state @@ -80,7 +80,7 @@ Signed-off-by: Greg Kroah-Hartman * @reset: reset control * @regs: base address for our registers * @regs_size: address space size -@@ -1174,6 +1176,8 @@ struct dwc3 { +@@ -1175,6 +1177,8 @@ struct dwc3 { struct clk *bus_clk; struct clk *ref_clk; struct clk *susp_clk; diff --git a/target/linux/starfive/patches-6.6/0066-uart-8250-Add-dw-auto-flow-ctrl-support.patch b/target/linux/starfive/patches-6.6/0066-uart-8250-Add-dw-auto-flow-ctrl-support.patch index c88008a604..617d72f11f 100644 --- a/target/linux/starfive/patches-6.6/0066-uart-8250-Add-dw-auto-flow-ctrl-support.patch +++ b/target/linux/starfive/patches-6.6/0066-uart-8250-Add-dw-auto-flow-ctrl-support.patch @@ -25,7 +25,7 @@ Signed-off-by: Minda Chen + uart->probe = up->probe; if (uart->port.type != PORT_8250_CIR) { - if (serial8250_isa_config != NULL) + if (uart_console_registered(&uart->port)) --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -612,6 +612,9 @@ static int dw8250_probe(struct platform_ From a6b0abf4661e4dc1449494e46340f75c44df81de Mon Sep 17 00:00:00 2001 From: Mikhail Zhilkin Date: Sat, 11 Jan 2025 14:46:05 +0000 Subject: [PATCH 16/28] mediatek: replace multiple fw_setenv calls by the bulk one This commit replaces multiple fw_setenv calls by the bulk one to reduce flash writes. Thanks @Linaro1985 for the idea. Signed-off-by: Mikhail Zhilkin Link: https://github.com/openwrt/openwrt/pull/17580 Signed-off-by: Hauke Mehrtens --- .../filogic/base-files/lib/upgrade/platform.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh index 1d89640a4e..38019e89e5 100755 --- a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh +++ b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh @@ -40,13 +40,15 @@ xiaomi_initial_setup() return 0 fi - fw_setenv boot_wait on - fw_setenv uart_en 1 - fw_setenv flag_boot_rootfs 0 - fw_setenv flag_last_success 1 - fw_setenv flag_boot_success 1 - fw_setenv flag_try_sys1_failed 8 - fw_setenv flag_try_sys2_failed 8 + fw_setenv -s - <<-EOF + boot_wait on + uart_en 1 + flag_boot_rootfs 0 + flag_last_success 1 + flag_boot_success 1 + flag_try_sys1_failed 8 + flag_try_sys2_failed 8 + EOF local board=$(board_name) case "$board" in From 42a253c7e8992e2274628b1770a0263ac433d0bc Mon Sep 17 00:00:00 2001 From: Mikhail Zhilkin Date: Sat, 11 Jan 2025 14:55:17 +0000 Subject: [PATCH 17/28] mediatek: Xiaomi AX3000t: fix soft brick for the rd23 model This commit fixes Xiaomi AX3000t soft bricks. Issue affects at least rd23 model (Global version) users: Link: https://forum.openwrt.org/t/openwrt-support-for-xiaomi-ax3000t/180490/452 I also found that these nvram settings are wrong for the rd23 model and U-Boot erase them: ''' flag_try_sys1_failed 8 flag_try_sys2_failed 8 ''' As a result, platform.sh -> xiaomi_initial_setup() function sometimes ends early without applying settings for the rd23 model. RD03 model strategy: 1. Don't touch values those were set up by platform.sh -> xiaomi_initial_setup() function RD23 model strategy: 1. Apply correct nvram settings at every boot 2. Use bulk fw_setenv call I didn't find opened issue for AX3000t. Similar AX3200 issue: Link: https://github.com/openwrt/openwrt/issues/16347 So, other Xiaomi devices (e.g. Xiaomi WR30U) may also require fix. Fixes: 7dbcc1215a56cc1da68c81bf92d7efa174c5e051 ("mediatek: filogic: add support for Xiaomi AX3000T") Signed-off-by: Mikhail Zhilkin Link: https://github.com/openwrt/openwrt/pull/17580 Signed-off-by: Hauke Mehrtens --- .../filogic/base-files/etc/init.d/bootcount | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/target/linux/mediatek/filogic/base-files/etc/init.d/bootcount b/target/linux/mediatek/filogic/base-files/etc/init.d/bootcount index c52d004c63..a0e7d40862 100755 --- a/target/linux/mediatek/filogic/base-files/etc/init.d/bootcount +++ b/target/linux/mediatek/filogic/base-files/etc/init.d/bootcount @@ -5,6 +5,24 @@ START=99 boot() { case $(board_name) in + xiaomi,mi-router-ax3000t) + . /lib/upgrade/common.sh + [ "$(rootfs_type)" = "tmpfs" ] && \ + logger "bootcount: initramfs mode detected, exit" && \ + return 0 + [ "$(fw_printenv -n flag_try_sys2_failed 2>&1)" = "8" ] && \ + logger "bootcount: rd03 model detected, exit" && \ + return 0 + fw_setenv -s - <<-EOF + flag_boot_rootfs 0 + flag_boot_success 1 + flag_last_success 0 + flag_ota_reboot 0 + flag_try_sys1_failed 0 + flag_try_sys2_failed 0 + EOF + logger "bootcount: rd23 model detected, nvram was updated" + ;; zyxel,ex5700-telenor) fw_setenv uboot_bootcount 0 ;; From 7423e67e1b8c7e4c9f527d1300dbeaab72b1f95f Mon Sep 17 00:00:00 2001 From: Lech Perczak Date: Tue, 21 Jan 2025 00:10:50 +0100 Subject: [PATCH 18/28] ath79: meraki-mr18: fix initramfs build Now, that initramfs images built for ZTE devices work, by moving LZMA_TEXT_START further up the available RAM - same fix works successfully for Meraki MR18 too. Apply it and reenable initramfs generation again. Fixes: 1d49310fdb5e ("ath79: add Cisco Meraki MR18") Signed-off-by: Lech Perczak Link: https://github.com/openwrt/openwrt/pull/17680 Signed-off-by: Robert Marko --- target/linux/ath79/image/nand.mk | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk index e8494da15d..68cb543187 100644 --- a/target/linux/ath79/image/nand.mk +++ b/target/linux/ath79/image/nand.mk @@ -313,10 +313,9 @@ define Device/meraki_mr18 BLOCKSIZE := 128k PAGESIZE := 2048 LOADER_TYPE := bin + LZMA_TEXT_START := 0x82800000 KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | meraki-header MR18 -# Initramfs-build fails due to size issues -# KERNEL_INITRAMFS := $$(KERNEL) - KERNEL_INITRAMFS := + KERNEL_INITRAMFS := $$(KERNEL) IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata SUPPORTED_DEVICES += mr18 endef From db0fcc0c8dd4424631931aea5dbb7050fa88d088 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 13 Jan 2025 19:46:10 +0900 Subject: [PATCH 19/28] tools: firmware-utils: update to Git HEAD (2024-01-14) 12c0b42 nosimg-enc: add new tool for XikeStor SKS8300 series Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- tools/firmware-utils/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile index 62222b6daf..117dceb754 100644 --- a/tools/firmware-utils/Makefile +++ b/tools/firmware-utils/Makefile @@ -11,9 +11,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git -PKG_SOURCE_DATE:=2024-10-20 -PKG_SOURCE_VERSION:=4b7638925d3eac03e614e40bc30cb49f5877c46d -PKG_MIRROR_HASH:=ea0e30f2b20211e4153704019ebb3f8789269893a4af6d853a85fae7c091802c +PKG_SOURCE_DATE:=2025-01-14 +PKG_SOURCE_VERSION:=12c0b42231bee58b3cd7cbe95c33de2685484a4f +PKG_MIRROR_HASH:=50d872a5069f9f672de5ea9efcf00872bcce27ec52bbb69fff3785abcee1c77c include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk From 5410d1299ebc4ba316bbe16f0d336772731e5245 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 13 Jan 2025 17:30:26 +0900 Subject: [PATCH 20/28] build: add additional parameter support to Build/jffs2 Allow specifying additional parameters on Build/jffs2. This is useful to specify additional options or overriding existing ones. Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- include/image-commands.mk | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/image-commands.mk b/include/image-commands.mk index aa48e19399..030cd17dd8 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -438,13 +438,14 @@ endef define Build/jffs2 rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 && \ - mkdir -p $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$$(dirname $(1)) && \ - cp $@ $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$(1) && \ + mkdir -p $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$$(dirname $(word 1,$(1))) && \ + cp $@ $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$(word 1,$(1)) && \ $(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad \ $(if $(CONFIG_BIG_ENDIAN),--big-endian,--little-endian) \ --squash-uids -v -e $(patsubst %k,%KiB,$(BLOCKSIZE)) \ -o $@.new \ -d $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 \ + $(wordlist 2,$(words $(1)),$(1)) \ 2>&1 1>/dev/null | awk '/^.+$$$$/' && \ $(STAGING_DIR_HOST)/bin/padjffs2 $@.new -J $(patsubst %k,,$(BLOCKSIZE)) -rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/ From ad8bc8900de9c2d6095b93244bfba439cbbc512d Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Sun, 26 May 2024 02:25:13 +0900 Subject: [PATCH 21/28] realtek: rtl930x: enable HIGHMEM for large memory (>256M) Enable HIGHMEM option to use all ranges of memory on XikeStor SKS8300-8X that has 512MiB RAM. Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- target/linux/realtek/rtl930x/config-6.6 | 1 + 1 file changed, 1 insertion(+) diff --git a/target/linux/realtek/rtl930x/config-6.6 b/target/linux/realtek/rtl930x/config-6.6 index 5b070a8371..f1e5eb96e2 100644 --- a/target/linux/realtek/rtl930x/config-6.6 +++ b/target/linux/realtek/rtl930x/config-6.6 @@ -85,6 +85,7 @@ CONFIG_HAS_DMA=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y +CONFIG_HIGHMEM=y CONFIG_HWMON=y CONFIG_HZ_PERIODIC=y CONFIG_I2C=y From 70198cac367d22b32dd6bb3c980d6b1061e55364 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Sun, 19 Jan 2025 18:56:15 +0900 Subject: [PATCH 22/28] realtek: rtl930x: enable rtl8231-related drivers Enable the following drivers to use the external RTL8231 GPIO expander. - aux-mdio - rtl8231 (mfd) - rtl8231 (pinctrl) Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- target/linux/realtek/rtl930x/config-6.6 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/target/linux/realtek/rtl930x/config-6.6 b/target/linux/realtek/rtl930x/config-6.6 index f1e5eb96e2..4c53682b1b 100644 --- a/target/linux/realtek/rtl930x/config-6.6 +++ b/target/linux/realtek/rtl930x/config-6.6 @@ -105,6 +105,7 @@ CONFIG_IRQ_MIPS_CPU=y CONFIG_IRQ_WORK=y CONFIG_JFFS2_ZLIB=y CONFIG_LEDS_GPIO=y +# CONFIG_LEDS_RTL8231 is not set CONFIG_LIBFDT=y CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_MACH_REALTEK_RTL=y @@ -113,9 +114,9 @@ CONFIG_MDIO_BUS=y CONFIG_MDIO_DEVICE=y CONFIG_MDIO_DEVRES=y CONFIG_MDIO_I2C=y -# CONFIG_MDIO_REALTEK_OTTO_AUX is not set +CONFIG_MDIO_REALTEK_OTTO_AUX=y CONFIG_MDIO_SMBUS=y -# CONFIG_MFD_RTL8231 is not set +CONFIG_MFD_RTL8231=y CONFIG_MFD_SYSCON=y CONFIG_MIGRATION=y CONFIG_MIPS=y @@ -176,6 +177,7 @@ CONFIG_PHYLIB=y CONFIG_PHYLIB_LEDS=y CONFIG_PHYLINK=y CONFIG_PINCTRL=y +CONFIG_PINCTRL_RTL8231=y CONFIG_POWER_RESET=y CONFIG_POWER_RESET_GPIO_RESTART=y CONFIG_POWER_RESET_SYSCON=y @@ -189,6 +191,7 @@ CONFIG_REALTEK_PHY=y CONFIG_REALTEK_SOC_PHY=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_MDIO=y CONFIG_REGMAP_MMIO=y CONFIG_RESET_CONTROLLER=y # CONFIG_RTL838X is not set From d45890f6cd508256356f99c11b8a744a30d99cf4 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Sun, 19 Jan 2025 19:01:28 +0900 Subject: [PATCH 23/28] realtek: add aux-mdio and pinctrl nodes to rtl930x.dtsi Add aux-mdio and pinctrl nodes to rtl930x.dtsi to enable handling of the external RTL8231 GPIO expander connected via MDIO. Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- target/linux/realtek/dts/rtl930x.dtsi | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/target/linux/realtek/dts/rtl930x.dtsi b/target/linux/realtek/dts/rtl930x.dtsi index 9b0a5781a2..94b755aeee 100644 --- a/target/linux/realtek/dts/rtl930x.dtsi +++ b/target/linux/realtek/dts/rtl930x.dtsi @@ -143,6 +143,35 @@ }; + switchcore@1b000000 { + compatible = "syscon", "simple-mfd"; + reg = <0x1b000000 0x10000>; + + mdio_aux: mdio-aux { + compatible = "realtek,rtl9300-aux-mdio"; + #address-cells = <1>; + #size-cells = <0>; + pinctrl-0 = <&pinmux_gpio_mdio_en>; + pinctrl-names = "default"; + + status = "disabled"; + }; + }; + + pinmux@1b00c600 { + compatible = "pinctrl-single"; + reg = <0x1b00c600 0x4>; + + pinctrl-single,bit-per-mux; + pinctrl-single,register-width = <32>; + pinctrl-single,function-mask = <0x1>; + #pinctrl-cells = <2>; + + pinmux_gpio_mdio_en: gpio-mdio-en { + pinctrl-single,bits = <0x0 0x100 0x100>; + }; + }; + pinmux_led: pinmux@1b00cc00 { compatible = "pinctrl-single"; reg = <0x1b00cc00 0x4>; From 09fbc5d343bb5a5c247c9f302491108de740606f Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 23 Dec 2024 20:58:30 +0900 Subject: [PATCH 24/28] realtek: add 10GBASER to supported interfaces in DSA driver add PHY_INTERFACE_MODE_10GBASER to supported_interfaces for using 10GBase-*R interfaces on SFP+ ports. Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- target/linux/realtek/files-6.6/drivers/net/dsa/rtl83xx/dsa.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/linux/realtek/files-6.6/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.6/drivers/net/dsa/rtl83xx/dsa.c index f9d37fb3bd..69151b2f6b 100644 --- a/target/linux/realtek/files-6.6/drivers/net/dsa/rtl83xx/dsa.c +++ b/target/linux/realtek/files-6.6/drivers/net/dsa/rtl83xx/dsa.c @@ -686,6 +686,7 @@ static void rtl83xx_phylink_get_caps(struct dsa_switch *ds, int port, __set_bit(PHY_INTERFACE_MODE_XGMII, config->supported_interfaces); __set_bit(PHY_INTERFACE_MODE_USXGMII, config->supported_interfaces); __set_bit(PHY_INTERFACE_MODE_1000BASEX, config->supported_interfaces); + __set_bit(PHY_INTERFACE_MODE_10GBASER, config->supported_interfaces); } static void rtl83xx_phylink_mac_config(struct dsa_switch *ds, int port, From 9fc80b684cb4d0d4b632c973bd1b90ca573628d1 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 23 Dec 2024 21:00:26 +0900 Subject: [PATCH 25/28] realtek: suppress debug messages of RTL930x SerDes in PHY driver Change some debugging messages of RTL930x SerDes in the PHY driver to pr_debug() to suppress log messages on the console. Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- .../linux/realtek/files-6.6/drivers/net/phy/rtl83xx-phy.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/linux/realtek/files-6.6/drivers/net/phy/rtl83xx-phy.c b/target/linux/realtek/files-6.6/drivers/net/phy/rtl83xx-phy.c index 09c6ca3b2c..53a7e184f5 100644 --- a/target/linux/realtek/files-6.6/drivers/net/phy/rtl83xx-phy.c +++ b/target/linux/realtek/files-6.6/drivers/net/phy/rtl83xx-phy.c @@ -1690,7 +1690,7 @@ static int rtl9300_read_status(struct phy_device *phydev) if (of_property_read_u32(dn, "sds", &sds_num)) sds_num = -1; - pr_info("%s: Port %d, SerDes is %d\n", __func__, phy_addr, sds_num); + pr_debug("%s: Port %d, SerDes is %d\n", __func__, phy_addr, sds_num); } else { dev_err(dev, "No DT node.\n"); return -EINVAL; @@ -1700,7 +1700,7 @@ static int rtl9300_read_status(struct phy_device *phydev) return 0; mode = rtl9300_sds_mode_get(sds_num); - pr_info("%s got SDS mode %02x\n", __func__, mode); + pr_debug("%s got SDS mode %02x\n", __func__, mode); if (mode == RTL930X_SDS_OFF) mode = rtl9300_sds_field_r(sds_num, 0x1f, 9, 11, 7); if (mode == RTL930X_SDS_MODE_10GBASER) { /* 10GR mode */ @@ -1715,7 +1715,7 @@ static int rtl9300_read_status(struct phy_device *phydev) latch_status |= rtl9300_sds_field_r(sds_num, 0x1, 30, 8, 0); } - pr_info("%s link status: status: %d, latch %d\n", __func__, status, latch_status); + pr_debug("%s link status: status: %d, latch %d\n", __func__, status, latch_status); if (latch_status) { phydev->link = true; From 0dc0b982950a3e471862925ff1ca5a78d9515821 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Fri, 24 May 2024 13:38:02 +0900 Subject: [PATCH 26/28] realtek: add support for XikeStor SKS8300-8X XikeStor (Seeker) SKS8300-8X is a 8 ports Multi-Gig switch, based on RTL9303. Specification: - SoC : Realtek RTL9303 - RAM : DDR3 512 MiB - Flash : SPI-NOR 32 MiB (Winbond W25Q256JVFIQ) - Ethernet : 8x 1/2.5/10 Gbps (SFP+) - LEDs/Keys (GPIO): 1x/1x - UART : "Console" port on the front panel - type : RS-232C - connector : RJ-45 - settings : 9600n8 - Watchdog : Diodes PT7A7514WE - Power : 12 VDC, 2 A Flash instruction using initramfs image: 1. Prepare TFTP server with an IP address "192.168.2.36" 2. Connect your PC to Port1 on SKS8300-8X 3. Power on SKS8300-8X and interrupt by Ctrl + B 4. Login to the vendor CLI by Ctrl + F and "diagshell_unipoe_env" 5. Login to the U-Boot CLI by "debug_unish_env" command 6. Enable Port1 with the following commands rtk 10g 0 fiber1g (or fiber10g if 10GBase-*R) rtk ext-devInit 0 rtk ext-pinSet 2 0 Note: the last command sets tx-disable to low 7. Download initramfs image from TFTP server tftpboot 0x82000000 8. Boot with the downloaded image bootm 9. On the initramfs image, backup the stock firmware if needed 10. Upload (or download) sysupgrade image to the device 11. Erase "firmware" partition to cleanup JFFS2 of stock FW mtd erase firmware 12. Perform sysupgrade with the sysupgrade image 13. Wait ~120 sec to complete flashing Notes: - A kernel binary "nos.img" needs to be stored into JFFS2 filesystem using 4KiB erase block instead of 64KiB. - PT7A7514WE is handled by hardware-assited system LED output (blinking). - Some Japanese users asked to XikeStor about maximum power limit of SFP+ ports and got approximate criteria: - per port : <= 2.9 W - total (8 ports): <= 15.8 W MAC addresses: eth0 : 84:E5:D8:xx:xx:37 (board-info (stock:"flash_raw"), 0x218 (hex)) (ports): 84:E5:D8:xx:xx:36 (board-info (stock:"flash_raw"), 0x1f1 (hex)) Reverting to stock firmware: 1. Prepare OpenWrt SDK to use the mkfs.jffs2 tool contained in it Note: the official mkfs.jffs2 tool in mtd-utils doesn't support 4KiB erase size and not usable for SKS8300-8X 2. Create a directory for working 3. Download official firmware for SKS8300-8X from XikeStor's official website 4. Rename the downloaded firmware to "nos.img" and place it to the working directory 5. Create a JFFS2 filesystem binary with the working directory /path/to/mkfs.jffs2 -p -b -U -v -e 4KiB -x lzma \ -o nos.img.jffs2 -d /path/to/working/dir/ 6. Upload the created JFFS2 filesystem binary to the device 7. Erase the "firmware" partition mtd erase firmware 8. Write the JFFS2 filesystem binary to the "firmware" partition mtd write /path/to/nos.img.jffs2 firmware 9. After writing, reboot the device by power cycle Signed-off-by: INAGAKI Hiroshi Link: https://github.com/openwrt/openwrt/pull/17593 Signed-off-by: Sander Vanheule --- .../realtek/base-files/etc/board.d/02_network | 3 + .../dts/rtl9303_xikestor_sks8300-8x.dts | 434 ++++++++++++++++++ target/linux/realtek/image/rtl930x.mk | 18 + 3 files changed, 455 insertions(+) create mode 100644 target/linux/realtek/dts/rtl9303_xikestor_sks8300-8x.dts diff --git a/target/linux/realtek/base-files/etc/board.d/02_network b/target/linux/realtek/base-files/etc/board.d/02_network index 1255ee8b9e..16642c273a 100644 --- a/target/linux/realtek/base-files/etc/board.d/02_network +++ b/target/linux/realtek/base-files/etc/board.d/02_network @@ -54,6 +54,9 @@ tplink,t1600g-28ts-v3) label_mac=$(get_mac_label) lan_mac="$label_mac" ;; +xikestor,sks8300-8x) + lan_mac=$(mtd_get_mac_binary board-info 0x1f1) + ;; *) lan_mac=$(mtd_get_mac_ascii u-boot-env2 mac_start) lan_mac_end=$(mtd_get_mac_ascii u-boot-env2 mac_end) diff --git a/target/linux/realtek/dts/rtl9303_xikestor_sks8300-8x.dts b/target/linux/realtek/dts/rtl9303_xikestor_sks8300-8x.dts new file mode 100644 index 0000000000..b143844ddd --- /dev/null +++ b/target/linux/realtek/dts/rtl9303_xikestor_sks8300-8x.dts @@ -0,0 +1,434 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rtl930x.dtsi" + +#include +#include +#include + +/ { + compatible = "xikestor,sks8300-8x", "realtek,rtl930x-soc"; + model = "XikeStor SKS8300-8X"; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x10000000>, /* first 256 MiB */ + <0x20000000 0x10000000>; /* remaining 256 MiB */ + }; + + aliases { + led-boot = &led_sys; + led-failsafe = &led_sys; + led-running = &led_sys; + led-upgrade = &led_sys; + }; + + chosen { + stdout-path = "serial0:9600n8"; + }; + + i2c_master: i2c@1b00036c { + compatible = "realtek,rtl9300-i2c"; + reg = <0x1b00036c 0x3c>; + #address-cells = <1>; + #size-cells = <0>; + scl-pin = <8>; + sda-pin = <9>; + clock-frequency = <100000>; + }; + + i2c-mux { + compatible = "realtek,i2c-mux-rtl9300"; + i2c-parent = <&i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + + i2c0: i2c@0 { + reg = <0>; + scl-pin = <8>; + sda-pin = <9>; + }; + + i2c1: i2c@1 { + reg = <1>; + scl-pin = <8>; + sda-pin = <10>; + }; + + i2c2: i2c@2 { + reg = <2>; + scl-pin = <8>; + sda-pin = <11>; + }; + + i2c3: i2c@3 { + reg = <3>; + scl-pin = <8>; + sda-pin = <12>; + }; + + i2c4: i2c@4 { + reg = <4>; + scl-pin = <8>; + sda-pin = <13>; + }; + + i2c5: i2c@5 { + reg = <5>; + scl-pin = <8>; + sda-pin = <14>; + }; + + i2c6: i2c@6 { + reg = <6>; + scl-pin = <8>; + sda-pin = <15>; + }; + + i2c7: i2c@7 { + reg = <7>; + scl-pin = <8>; + sda-pin = <16>; + }; + }; + + keys { + compatible = "gpio-keys"; + + button-reset { + label = "reset"; + gpios = <&gpio0 22 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_sys: led-0 { + gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; + color = ; + function = LED_FUNCTION_STATUS; + }; + }; + + led_set { + compatible = "realtek,rtl9300-leds"; + active-low; + + /* + * LED set 0 + * + * - LED[0](Green): 10G/LINK/ACT + * - LED[1](Amber): 10M/100M/1G/2.5G/5G/LINK/ACT + */ + led_set0 = <0x0baa 0x0a01>; + }; + + sfp0: sfp-p1 { + compatible = "sff,sfp"; + i2c-bus = <&i2c0>; + los-gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 1 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 2 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <2900>; + }; + + sfp1: sfp-p2 { + compatible = "sff,sfp"; + i2c-bus = <&i2c1>; + los-gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 4 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <1500>; + }; + + sfp2: sfp-p3 { + compatible = "sff,sfp"; + i2c-bus = <&i2c2>; + los-gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 7 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 8 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <1500>; + }; + + sfp3: sfp-p4 { + compatible = "sff,sfp"; + i2c-bus = <&i2c3>; + los-gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 10 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 11 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <2000>; + }; + + sfp4: sfp-p5 { + compatible = "sff,sfp"; + i2c-bus = <&i2c4>; + los-gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 13 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 14 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <2000>; + }; + + sfp5: sfp-p6 { + compatible = "sff,sfp"; + i2c-bus = <&i2c5>; + los-gpio = <&gpio1 21 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 22 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <1500>; + }; + + sfp6: sfp-p7 { + compatible = "sff,sfp"; + i2c-bus = <&i2c6>; + los-gpio = <&gpio1 24 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 25 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <1500>; + }; + + sfp7: sfp-p8 { + compatible = "sff,sfp"; + i2c-bus = <&i2c7>; + los-gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>; + mod-def0-gpio = <&gpio1 28 GPIO_ACTIVE_LOW>; + tx-disable-gpio = <&gpio1 29 GPIO_ACTIVE_HIGH>; + maximum-power-milliwatt = <2900>; + }; +}; + +&mdio_aux { + status = "okay"; + + gpio1: gpio@0 { + compatible = "realtek,rtl8231"; + reg = <0>; + + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&gpio1 0 0 37>; + + led-controller { + compatible = "realtek,rtl8231-leds"; + status = "disabled"; + }; + }; +}; + +&spi0 { + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <10000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x100000>; + read-only; + }; + + /* "flash_raw" on stock */ + partition@100000 { + label = "board-info"; + reg = <0x100000 0x30000>; + read-only; + }; + + partition@130000 { + label = "syslog"; + reg = <0x130000 0xd0000>; + read-only; + }; + + /* "flash_user" on stock */ + partition@200000 { + compatible = "fixed-partitions"; + label = "firmware"; + reg = <0x200000 0x1e00000>; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "kernel"; + reg = <0x0 0x800000>; + }; + + partition@800000 { + label = "rootfs"; + reg = <0x800000 0x1600000>; + }; + }; + }; + }; +}; + +ðernet0 { + mdio: mdio-bus { + compatible = "realtek,rtl838x-mdio"; + regmap = <ðernet0>; + #address-cells = <1>; + #size-cells = <0>; + + phy0: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <0>; + sds = <2>; + }; + + phy8: ethernet-phy@8 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <8>; + sds = <3>; + }; + + phy16: ethernet-phy@10 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <16>; + sds = <4>; + }; + + phy20: ethernet-phy@14 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <20>; + sds = <5>; + }; + + phy24: ethernet-phy@18 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <24>; + sds = <6>; + }; + + phy25: ethernet-phy@19 { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <25>; + sds = <7>; + }; + + phy26: ethernet-phy@1a { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <26>; + sds = <8>; + }; + + phy27: ethernet-phy@1b { + compatible = "ethernet-phy-ieee802.3-c22"; + phy-is-integrated; + reg = <27>; + sds = <9>; + }; + }; +}; + +&switch0 { + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + label = "lan1"; + phy-handle = <&phy0>; + phy-mode = "10gbase-r"; + sfp = <&sfp0>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@8 { + reg = <8>; + label = "lan2"; + phy-handle = <&phy8>; + phy-mode = "10gbase-r"; + sfp = <&sfp1>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@10 { + reg = <16>; + label = "lan3"; + phy-handle = <&phy16>; + phy-mode = "10gbase-r"; + sfp = <&sfp2>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@14 { + reg = <20>; + label = "lan4"; + phy-handle = <&phy20>; + phy-mode = "10gbase-r"; + sfp = <&sfp3>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@18 { + reg = <24>; + label = "lan5"; + phy-handle = <&phy24>; + phy-mode = "10gbase-r"; + sfp = <&sfp4>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@19 { + reg = <25>; + label = "lan6"; + phy-handle = <&phy25>; + phy-mode = "10gbase-r"; + sfp = <&sfp5>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@1a { + reg = <26>; + label = "lan7"; + phy-handle = <&phy26>; + phy-mode = "10gbase-r"; + sfp = <&sfp6>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@1b { + reg = <27>; + label = "lan8"; + phy-handle = <&phy27>; + phy-mode = "10gbase-r"; + sfp = <&sfp7>; + managed = "in-band-status"; + led-set = <0>; + }; + + port@1c { + ethernet = <ðernet0>; + reg = <28>; + phy-mode = "internal"; + + fixed-link { + speed = <10000>; + full-duplex; + }; + }; + }; +}; diff --git a/target/linux/realtek/image/rtl930x.mk b/target/linux/realtek/image/rtl930x.mk index 7f0b691759..8aff7d52f6 100644 --- a/target/linux/realtek/image/rtl930x.mk +++ b/target/linux/realtek/image/rtl930x.mk @@ -1,5 +1,23 @@ # SPDX-License-Identifier: GPL-2.0-only +define Build/xikestor-nosimg + $(STAGING_DIR_HOST)/bin/nosimg-enc -i $@ -o $@.new + mv $@.new $@ +endef + +define Device/xikestor_sks8300-8x + SOC := rtl9303 + DEVICE_VENDOR := XikeStor + DEVICE_MODEL := SKS8300-8X + BLOCKSIZE := 64k + KERNEL_SIZE := 8192k + IMAGE_SIZE := 30720k + IMAGE/sysupgrade.bin := pad-extra 256 | append-kernel | xikestor-nosimg | \ + jffs2 nos.img -e 4KiB -x lzma | pad-to $$$$(KERNEL_SIZE) | \ + append-rootfs | pad-rootfs | append-metadata | check-size +endef +TARGET_DEVICES += xikestor_sks8300-8x + define Device/zyxel_xgs1250-12 SOC := rtl9302 UIMAGE_MAGIC := 0x93001250 From 761b244964f8d5da9fbd27a618565b4c38ae0cbc Mon Sep 17 00:00:00 2001 From: John Audia Date: Tue, 21 Jan 2025 15:07:46 -0500 Subject: [PATCH 27/28] kernel: bump 6.6 to 6.6.73 Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.73 No patches needed a rebase. Build system: x86/64 Build-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Run-tested: bcm27xx/bcm2712, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Signed-off-by: John Audia Link: https://github.com/openwrt/openwrt/pull/17687 Signed-off-by: Hauke Mehrtens --- include/kernel-6.6 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/kernel-6.6 b/include/kernel-6.6 index 8fa79f9ce1..aa0a345b29 100644 --- a/include/kernel-6.6 +++ b/include/kernel-6.6 @@ -1,2 +1,2 @@ -LINUX_VERSION-6.6 = .72 -LINUX_KERNEL_HASH-6.6.72 = feb9e514930d5968daa0b8b5486d3295d1fb2b34accf876207641884d4baef39 +LINUX_VERSION-6.6 = .73 +LINUX_KERNEL_HASH-6.6.73 = d2028db190c201650898be8db1c705e9fe73ab44fc04290b4f7af63514122490 From 15887235c1e3b732d4c8e14afac253d00a7bfb36 Mon Sep 17 00:00:00 2001 From: Danila Romanov Date: Mon, 20 Jan 2025 18:40:20 +0300 Subject: [PATCH 28/28] generic: mtk_eth_soc: reduce driver memory usage 1. Import pending patch to fix ramips/mt7621 64MB targets. 2. Do not enable CONFIG_PAGE_POOL_STATS by default. Signed-off-by: Danila Romanov Signed-off-by: Felix Fietkau --- ...th_soc-reduce-rx-ring-size-for-older.patch | 104 ++++++++++++++++++ ..._eth_soc-do-not-enable-page-pool-sta.patch | 43 ++++++++ 2 files changed, 147 insertions(+) create mode 100644 target/linux/generic/pending-6.6/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch create mode 100644 target/linux/generic/pending-6.6/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch diff --git a/target/linux/generic/pending-6.6/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch b/target/linux/generic/pending-6.6/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch new file mode 100644 index 0000000000..b492f4d0c0 --- /dev/null +++ b/target/linux/generic/pending-6.6/738-01-net-ethernet-mtk_eth_soc-reduce-rx-ring-size-for-older.patch @@ -0,0 +1,104 @@ +From: Felix Fietkau +Subject: [PATCH net-next 3/4] net: ethernet: mtk_eth_soc: reduce rx ring size for older chipsets +Date: Tue, 15 Oct 2024 13:09:37 +0200 + +Commit c57e55819443 ("net: ethernet: mtk_eth_soc: handle dma buffer +size soc specific") resolved some tx timeout issues by bumping FQ and +tx ring sizes from 512 to 2048 entries (the value used in the MediaTek +SDK), however it also changed the rx ring size for all chipsets in the +same way. + +Based on a few tests, it seems that a symmetric rx/tx ring size of 2048 +really only makes sense on MT7988, which is capable of 10G ethernet links. + +Older chipsets are typically deployed in systems that are more memory +constrained and don't actually need the larger rings to handle received +packets. + +In order to reduce wasted memory set the ring size based on the SoC to +the following values: +- 2048 on MT7988 +- 1024 on MT7986 +- 512 (previous value) on everything else, except: +- 256 on RT5350 (the oldest supported chipset) + +Fixes: c57e55819443 ("net: ethernet: mtk_eth_soc: handle dma buffer size soc specific") +Signed-off-by: Felix Fietkau +--- + drivers/net/ethernet/mediatek/mtk_eth_soc.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c ++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c +@@ -5381,7 +5381,7 @@ static const struct mtk_soc_data mt2701_ + .desc_size = sizeof(struct mtk_rx_dma), + .irq_done_mask = MTK_RX_DONE_INT, + .dma_l4_valid = RX_DMA_L4_VALID, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, + }, +@@ -5409,7 +5409,7 @@ static const struct mtk_soc_data mt7621_ + .desc_size = sizeof(struct mtk_rx_dma), + .irq_done_mask = MTK_RX_DONE_INT, + .dma_l4_valid = RX_DMA_L4_VALID, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, + }, +@@ -5439,7 +5439,7 @@ static const struct mtk_soc_data mt7622_ + .desc_size = sizeof(struct mtk_rx_dma), + .irq_done_mask = MTK_RX_DONE_INT, + .dma_l4_valid = RX_DMA_L4_VALID, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, + }, +@@ -5468,7 +5468,7 @@ static const struct mtk_soc_data mt7623_ + .desc_size = sizeof(struct mtk_rx_dma), + .irq_done_mask = MTK_RX_DONE_INT, + .dma_l4_valid = RX_DMA_L4_VALID, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, + }, +@@ -5494,7 +5494,7 @@ static const struct mtk_soc_data mt7629_ + .desc_size = sizeof(struct mtk_rx_dma), + .irq_done_mask = MTK_RX_DONE_INT, + .dma_l4_valid = RX_DMA_L4_VALID, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, + }, +@@ -5526,7 +5526,7 @@ static const struct mtk_soc_data mt7981_ + .dma_l4_valid = RX_DMA_L4_VALID_V2, + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(512), + }, + }; + +@@ -5556,7 +5556,7 @@ static const struct mtk_soc_data mt7986_ + .dma_l4_valid = RX_DMA_L4_VALID_V2, + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(1K), + }, + }; + +@@ -5609,7 +5609,7 @@ static const struct mtk_soc_data rt5350_ + .dma_l4_valid = RX_DMA_L4_VALID_PDMA, + .dma_max_len = MTK_TX_DMA_BUF_LEN, + .dma_len_offset = 16, +- .dma_size = MTK_DMA_SIZE(2K), ++ .dma_size = MTK_DMA_SIZE(256), + }, + }; + diff --git a/target/linux/generic/pending-6.6/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch b/target/linux/generic/pending-6.6/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch new file mode 100644 index 0000000000..ab374d93e4 --- /dev/null +++ b/target/linux/generic/pending-6.6/738-02-net-ethernet-mtk_eth_soc-do-not-enable-page-pool-sta.patch @@ -0,0 +1,43 @@ +From: Danila Romanov +Date: Wed, 22 Jan 2025 06:48:45 +0100 +Subject: [PATCH] net: ethernet: mtk_eth_soc: do not enable page pool stats by + default + +There is no reason for it to be enabled by default. +Align mtk_eth_soc driver to mt76 driver. + +This option incurs additional CPU cost in allocation and recycle paths +and additional memory cost to store the statistics. + +Signed-off-by: Danila Romanov +Signed-off-by: Felix Fietkau +--- + +--- a/drivers/net/ethernet/mediatek/Kconfig ++++ b/drivers/net/ethernet/mediatek/Kconfig +@@ -18,7 +18,6 @@ config NET_MEDIATEK_SOC + select PHYLINK + select DIMLIB + select PAGE_POOL +- select PAGE_POOL_STATS + select PCS_MTK_LYNXI + select REGMAP_MMIO + help +--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c ++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c +@@ -4552,6 +4552,7 @@ static int mtk_get_sset_count(struct net + + static void mtk_ethtool_pp_stats(struct mtk_eth *eth, u64 *data) + { ++#ifdef CONFIG_PAGE_POOL_STATS + struct page_pool_stats stats = {}; + int i; + +@@ -4564,6 +4565,7 @@ static void mtk_ethtool_pp_stats(struct + page_pool_get_stats(ring->page_pool, &stats); + } + page_pool_ethtool_stats_get(data, &stats); ++#endif + } + + static void mtk_get_ethtool_stats(struct net_device *dev,