mirror of
https://github.com/Ansuel/openwrt.git
synced 2025-12-16 15:01:32 +00:00
kernel: bump 6.12 to 6.12.58
changelogs: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.58 Removed upstreamed patches: 1. target/linux/generic/backport-6.12/612-01-v6.17-net-dsa-tag_brcm-legacy-reorganize-functions.patch Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.58&id=a4daaf063f8269a5881154c5b77c5ef6639d65d3 2. target/linux/qualcommax/patches-6.12/0151-arm64-qcom-ipq6018-nss_port5.patch Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.58&id=9a7a5d50ee2e035325de9c720e4842d6759d2374 3. target/linux/realtek/patches-6.12/020-01-v6.18-timer-rtl-otto-work-around-dying-timers.patch Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.58&id=d0e217b33d42bfe52ef7ef447916a23a586e6e5c 4. target/linux/realtek/patches-6.12/020-03-v6.18-timer-rtl-otto-do-not-interfere-with-interrupts.patch Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.58&id=8cc561dd9d02f1753ae34dfdd565662828be9a9d Additional changes: - Manually adapted bcm27xx patch: * 950-0410-media-i2c-adv7180-Add-support-for-V4L2_CID_LINK_FREQ.patch Rebased and adjusted for kernel 6.12 to fix context conflicts. - Synced lantiq DTS (danube.dtsi) with upstream bindings to fix DT validation issues on kernel 6.12. - Manually adapted DTS to match OpenWrt's lantiq DTS layout. Compile-tested on x86_64 Run-tested on x86_64 Signed-off-by: gongzi miao <miaogongzi0227@gmail.com> Link: https://github.com/openwrt/openwrt/pull/20777 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
e62ff2eb2b
commit
738876e76b
@ -16,7 +16,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
--- a/drivers/media/i2c/adv7180.c
|
||||
+++ b/drivers/media/i2c/adv7180.c
|
||||
@@ -1362,6 +1362,7 @@ static const struct adv7180_chip_info ad
|
||||
@@ -1352,6 +1352,7 @@ static const struct adv7180_chip_info ad
|
||||
static int init_device(struct adv7180_state *state)
|
||||
{
|
||||
int ret;
|
||||
@ -24,7 +24,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
mutex_lock(&state->mutex);
|
||||
|
||||
@@ -1409,6 +1410,18 @@ static int init_device(struct adv7180_st
|
||||
@@ -1399,6 +1400,18 @@ static int init_device(struct adv7180_st
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
--- a/drivers/media/i2c/adv7180.c
|
||||
+++ b/drivers/media/i2c/adv7180.c
|
||||
@@ -1351,6 +1351,7 @@ static const struct adv7180_chip_info ad
|
||||
@@ -1341,6 +1341,7 @@ static const struct adv7180_chip_info ad
|
||||
BIT(ADV7182_INPUT_SVIDEO_AIN1_AIN2) |
|
||||
BIT(ADV7182_INPUT_SVIDEO_AIN3_AIN4) |
|
||||
BIT(ADV7182_INPUT_SVIDEO_AIN7_AIN8) |
|
||||
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
struct adv7180_state;
|
||||
|
||||
#define ADV7180_FLAG_RESET_POWERED BIT(0)
|
||||
@@ -408,10 +412,24 @@ out:
|
||||
@@ -403,10 +407,24 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -437,7 +455,11 @@ static int adv7180_program_std(struct ad
|
||||
@@ -432,7 +450,11 @@ static int adv7180_program_std(struct ad
|
||||
static int adv7180_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
@ -69,7 +69,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -459,6 +481,8 @@ static int adv7180_g_std(struct v4l2_sub
|
||||
@@ -454,6 +476,8 @@ static int adv7180_g_std(struct v4l2_sub
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
|
||||
@ -78,7 +78,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
*norm = state->curr_norm;
|
||||
|
||||
return 0;
|
||||
@@ -900,6 +924,8 @@ static int adv7180_s_stream(struct v4l2_
|
||||
@@ -890,6 +914,8 @@ static int adv7180_s_stream(struct v4l2_
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/net/bluetooth/hci_sync.c
|
||||
+++ b/net/bluetooth/hci_sync.c
|
||||
@@ -4930,6 +4930,7 @@ static const struct {
|
||||
@@ -4935,6 +4935,7 @@ static const struct {
|
||||
*/
|
||||
static int hci_dev_setup_sync(struct hci_dev *hdev)
|
||||
{
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
int ret = 0;
|
||||
bool invalid_bdaddr;
|
||||
size_t i;
|
||||
@@ -4958,7 +4959,8 @@ static int hci_dev_setup_sync(struct hci
|
||||
@@ -4963,7 +4964,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) &&
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
#ifdef CONFIG_GUMSTIX_AM200EPD
|
||||
{
|
||||
@@ -506,6 +509,12 @@ static void do_unregister_framebuffer(st
|
||||
@@ -507,6 +510,12 @@ static void do_unregister_framebuffer(st
|
||||
put_fb_info(fb_info);
|
||||
}
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Jürgen Kreileder <jk@blackdown.de>
|
||||
|
||||
--- a/drivers/thermal/gov_step_wise.c
|
||||
+++ b/drivers/thermal/gov_step_wise.c
|
||||
@@ -17,11 +17,11 @@
|
||||
@@ -17,13 +17,13 @@
|
||||
#include "thermal_core.h"
|
||||
|
||||
/*
|
||||
@ -44,13 +44,15 @@ Signed-off-by: Jürgen Kreileder <jk@blackdown.de>
|
||||
+ * If the temperature is higher than a hysteresis temperature,
|
||||
* a. if the trend is THERMAL_TREND_RAISING, use higher cooling
|
||||
* state for this trip point
|
||||
* b. if the trend is THERMAL_TREND_DROPPING, do nothing
|
||||
* b. if the trend is THERMAL_TREND_DROPPING, use a lower cooling state
|
||||
* for this trip point, but keep the cooling state above the applicable
|
||||
* minimum
|
||||
- * If the temperature is lower than a trip point,
|
||||
+ * If the temperature is lower than a hysteresis temperature,
|
||||
* a. if the trend is THERMAL_TREND_RAISING, do nothing
|
||||
* b. if the trend is THERMAL_TREND_DROPPING, use lower cooling
|
||||
* state for this trip point, if the cooling state already
|
||||
@@ -74,19 +74,35 @@ static void thermal_zone_trip_update(str
|
||||
@@ -87,19 +87,35 @@ static void thermal_zone_trip_update(str
|
||||
int trip_id = thermal_zone_trip_id(tz, trip);
|
||||
struct thermal_instance *instance;
|
||||
bool throttle = false;
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
--- a/drivers/media/i2c/adv7180.c
|
||||
+++ b/drivers/media/i2c/adv7180.c
|
||||
@@ -737,10 +737,15 @@ static int adv7180_enum_mbus_code(struct
|
||||
@@ -732,10 +732,15 @@ static int adv7180_enum_mbus_code(struct
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
@ -34,7 +34,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -750,7 +755,10 @@ static int adv7180_mbus_fmt(struct v4l2_
|
||||
@@ -745,7 +750,10 @@ static int adv7180_mbus_fmt(struct v4l2_
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
|
||||
|
||||
@ -1,18 +1,14 @@
|
||||
From 7e58b9c99676d641ef76edd9c097f1c3c4e6c464 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Date: Thu, 21 Dec 2023 18:03:34 +0000
|
||||
Subject: [PATCH] media: i2c: adv7180: Add support for V4L2_CID_LINK_FREQ
|
||||
|
||||
For CSI2 receivers that need to know the link frequency,
|
||||
add it as a control to the driver.
|
||||
Interlaced modes are 216Mbp/s or 108MHz, whilst going through
|
||||
the I2P to deinterlace gives 432Mb/s or 216MHz.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
---
|
||||
drivers/media/i2c/adv7180.c | 32 +++++++++++++++++++++++++++++++-
|
||||
1 file changed, 31 insertions(+), 1 deletion(-)
|
||||
|
||||
From 954129f16c200e41a00ebebe2e22efc01b243538 Mon Sep 17 00:00:00 2001
|
||||
From: Dom Cobley <popcornmix@gmail.com>
|
||||
Date: Fri, 14 Nov 2025 14:08:18 +0000
|
||||
Subject: [PATCH] Revert "Revert "media: i2c: adv7180: Add support for
|
||||
V4L2_CID_LINK_FREQ""
|
||||
|
||||
This reverts commit 00ecb85c58501f8f7ae75fcb069bbbad5542e853.
|
||||
---
|
||||
drivers/media/i2c/adv7180.c | 39 +++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 37 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/media/i2c/adv7180.c
|
||||
+++ b/drivers/media/i2c/adv7180.c
|
||||
@@ -189,6 +189,16 @@
|
||||
@ -40,7 +36,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
};
|
||||
#define to_adv7180_sd(_ctrl) (&container_of(_ctrl->handler, \
|
||||
struct adv7180_state, \
|
||||
@@ -630,6 +641,9 @@ static int adv7180_s_ctrl(struct v4l2_ct
|
||||
@@ -625,6 +636,9 @@ static int adv7180_s_ctrl(struct v4l2_ct
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -50,7 +46,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
val = ctrl->val;
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_BRIGHTNESS:
|
||||
@@ -671,6 +685,7 @@ static int adv7180_s_ctrl(struct v4l2_ct
|
||||
@@ -666,6 +680,7 @@ static int adv7180_s_ctrl(struct v4l2_ct
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
@ -58,7 +54,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
mutex_unlock(&state->mutex);
|
||||
return ret;
|
||||
}
|
||||
@@ -691,7 +706,7 @@ static const struct v4l2_ctrl_config adv
|
||||
@@ -686,7 +701,7 @@ static const struct v4l2_ctrl_config adv
|
||||
|
||||
static int adv7180_init_controls(struct adv7180_state *state)
|
||||
{
|
||||
@ -67,7 +63,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
|
||||
v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops,
|
||||
V4L2_CID_BRIGHTNESS, ADV7180_BRI_MIN,
|
||||
@@ -717,6 +732,17 @@ static int adv7180_init_controls(struct
|
||||
@@ -712,6 +727,17 @@ static int adv7180_init_controls(struct
|
||||
test_pattern_menu);
|
||||
}
|
||||
|
||||
@ -85,14 +81,21 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
state->sd.ctrl_handler = &state->ctrl_hdl;
|
||||
if (state->ctrl_hdl.error) {
|
||||
int err = state->ctrl_hdl.error;
|
||||
@@ -849,6 +875,10 @@ static int adv7180_set_pad_format(struct
|
||||
adv7180_set_power(state, false);
|
||||
adv7180_set_field_mode(state);
|
||||
adv7180_set_power(state, true);
|
||||
@@ -839,7 +865,16 @@ static int adv7180_set_pad_format(struct
|
||||
ret = adv7180_mbus_fmt(sd, &format->format);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
- state->field = format->format.field;
|
||||
+ if (state->field != format->format.field) {
|
||||
+ state->field = format->format.field;
|
||||
+ adv7180_set_power(state, false);
|
||||
+ adv7180_set_field_mode(state);
|
||||
+ adv7180_set_power(state, true);
|
||||
+ if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2)
|
||||
+ __v4l2_ctrl_s_ctrl(state->link_freq,
|
||||
+ (state->field == V4L2_FIELD_NONE) ?
|
||||
+ I2P_IDX : INTERLACED_IDX);
|
||||
}
|
||||
+ }
|
||||
} else {
|
||||
framefmt = v4l2_subdev_state_get_format(sd_state, 0);
|
||||
*framefmt = format->format;
|
||||
|
||||
@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/net/bluetooth/hci_sync.c
|
||||
+++ b/net/bluetooth/hci_sync.c
|
||||
@@ -4930,7 +4930,8 @@ static const struct {
|
||||
@@ -4935,7 +4935,8 @@ static const struct {
|
||||
*/
|
||||
static int hci_dev_setup_sync(struct hci_dev *hdev)
|
||||
{
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/kernel/cgroup/cgroup.c
|
||||
+++ b/kernel/cgroup/cgroup.c
|
||||
@@ -6916,6 +6916,39 @@ static int __init cgroup_disable(char *s
|
||||
@@ -6932,6 +6932,39 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
||||
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -6255,6 +6255,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
@@ -6256,6 +6256,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56b1, aspm_l1_acceptable_latency);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c0, aspm_l1_acceptable_latency);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c1, aspm_l1_acceptable_latency);
|
||||
|
||||
@ -58,7 +58,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
+ the phy interface, but actually requires internal delays enabled.
|
||||
--- a/drivers/net/dsa/b53/b53_common.c
|
||||
+++ b/drivers/net/dsa/b53/b53_common.c
|
||||
@@ -1426,6 +1426,16 @@ static void b53_adjust_531x5_rgmii(struc
|
||||
@@ -1435,6 +1435,16 @@ static void b53_adjust_531x5_rgmii(struc
|
||||
else
|
||||
off = B53_RGMII_CTRL_P(port);
|
||||
|
||||
@ -75,7 +75,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
/* Configure the port RGMII clock delay by DLL disabled and
|
||||
* tx_clk aligned timing (restoring to reset defaults)
|
||||
*/
|
||||
@@ -1437,19 +1447,24 @@ static void b53_adjust_531x5_rgmii(struc
|
||||
@@ -1446,19 +1456,24 @@ static void b53_adjust_531x5_rgmii(struc
|
||||
* account for this internal delay that is inserted, otherwise
|
||||
* the switch won't be able to receive correctly.
|
||||
*
|
||||
|
||||
@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static int m88e1111_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
int extsr = phy_read(phydev, MII_M1111_PHY_EXT_SR);
|
||||
@@ -3667,6 +3681,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3704,6 +3718,7 @@ static struct phy_driver marvell_drivers
|
||||
.name = "Marvell 88E1112",
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.probe = marvell_probe,
|
||||
@ -45,7 +45,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
.config_init = m88e1112_config_init,
|
||||
.config_aneg = marvell_config_aneg,
|
||||
.config_intr = marvell_config_intr,
|
||||
@@ -3688,6 +3703,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3725,6 +3740,7 @@ static struct phy_driver marvell_drivers
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.flags = PHY_POLL_CABLE_TEST,
|
||||
.probe = marvell_probe,
|
||||
@ -53,7 +53,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
.config_init = m88e1111gbe_config_init,
|
||||
.config_aneg = m88e1111_config_aneg,
|
||||
.read_status = marvell_read_status,
|
||||
@@ -3711,6 +3727,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3748,6 +3764,7 @@ static struct phy_driver marvell_drivers
|
||||
.name = "Marvell 88E1111 (Finisar)",
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.probe = marvell_probe,
|
||||
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static int m88e1111_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
int extsr = phy_read(phydev, MII_M1111_PHY_EXT_SR);
|
||||
@@ -3682,6 +3710,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3719,6 +3747,7 @@ static struct phy_driver marvell_drivers
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.probe = marvell_probe,
|
||||
.inband_caps = m88e1111_inband_caps,
|
||||
@ -59,7 +59,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
.config_init = m88e1112_config_init,
|
||||
.config_aneg = marvell_config_aneg,
|
||||
.config_intr = marvell_config_intr,
|
||||
@@ -3704,6 +3733,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3741,6 +3770,7 @@ static struct phy_driver marvell_drivers
|
||||
.flags = PHY_POLL_CABLE_TEST,
|
||||
.probe = marvell_probe,
|
||||
.inband_caps = m88e1111_inband_caps,
|
||||
@ -67,7 +67,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
.config_init = m88e1111gbe_config_init,
|
||||
.config_aneg = m88e1111_config_aneg,
|
||||
.read_status = marvell_read_status,
|
||||
@@ -3728,6 +3758,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -3765,6 +3795,7 @@ static struct phy_driver marvell_drivers
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.probe = marvell_probe,
|
||||
.inband_caps = m88e1111_inband_caps,
|
||||
|
||||
@ -18,7 +18,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/b53/b53_common.c
|
||||
+++ b/drivers/net/dsa/b53/b53_common.c
|
||||
@@ -2584,6 +2584,19 @@ static const struct b53_chip_data b53_sw
|
||||
@@ -2603,6 +2603,19 @@ static const struct b53_chip_data b53_sw
|
||||
.jumbo_size_reg = B53_JUMBO_MAX_SIZE,
|
||||
},
|
||||
{
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
.chip_id = BCM53115_DEVICE_ID,
|
||||
.dev_name = "BCM53115",
|
||||
.vlans = 4096,
|
||||
@@ -2964,6 +2977,7 @@ int b53_switch_detect(struct b53_device
|
||||
@@ -2983,6 +2996,7 @@ int b53_switch_detect(struct b53_device
|
||||
return ret;
|
||||
|
||||
switch (id32) {
|
||||
|
||||
@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
ret = b53_reset_switch(dev);
|
||||
if (ret) {
|
||||
dev_err(ds->dev, "failed to reset switch\n");
|
||||
@@ -2444,6 +2449,28 @@ static int b53_get_max_mtu(struct dsa_sw
|
||||
@@ -2463,6 +2468,28 @@ static int b53_get_max_mtu(struct dsa_sw
|
||||
return B53_MAX_MTU;
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static const struct phylink_mac_ops b53_phylink_mac_ops = {
|
||||
.mac_select_pcs = b53_phylink_mac_select_pcs,
|
||||
.mac_config = b53_phylink_mac_config,
|
||||
@@ -2468,6 +2495,7 @@ static const struct dsa_switch_ops b53_s
|
||||
@@ -2487,6 +2514,7 @@ static const struct dsa_switch_ops b53_s
|
||||
.support_eee = b53_support_eee,
|
||||
.get_mac_eee = b53_get_mac_eee,
|
||||
.set_mac_eee = b53_set_mac_eee,
|
||||
@ -89,7 +89,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
void b53_br_leave(struct dsa_switch *ds, int port, struct dsa_bridge bridge);
|
||||
--- a/drivers/net/dsa/b53/b53_regs.h
|
||||
+++ b/drivers/net/dsa/b53/b53_regs.h
|
||||
@@ -225,6 +225,13 @@
|
||||
@@ -224,6 +224,13 @@
|
||||
#define BRCM_HDR_P5_EN BIT(1) /* Enable tagging on port 5 */
|
||||
#define BRCM_HDR_P7_EN BIT(2) /* Enable tagging on port 7 */
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_data/b53.h>
|
||||
#include <linux/phy.h>
|
||||
@@ -1360,24 +1361,17 @@ static void b53_adjust_63xx_rgmii(struct
|
||||
@@ -1369,24 +1370,17 @@ static void b53_adjust_63xx_rgmii(struct
|
||||
phy_interface_t interface)
|
||||
{
|
||||
struct b53_device *dev = ds->priv;
|
||||
@ -59,7 +59,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||
|
||||
dev_dbg(ds->dev, "Configured port %d for %s\n", port,
|
||||
phy_modes(interface));
|
||||
@@ -1528,7 +1522,7 @@ static void b53_phylink_mac_config(struc
|
||||
@@ -1537,7 +1531,7 @@ static void b53_phylink_mac_config(struc
|
||||
struct b53_device *dev = ds->priv;
|
||||
int port = dp->index;
|
||||
|
||||
|
||||
@ -1,99 +0,0 @@
|
||||
From a4daaf063f8269a5881154c5b77c5ef6639d65d3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
||||
Date: Sat, 14 Jun 2025 09:59:47 +0200
|
||||
Subject: [PATCH] net: dsa: tag_brcm: legacy: reorganize functions
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Move brcm_leg_tag_rcv() definition to top.
|
||||
This function is going to be shared between two different tags.
|
||||
|
||||
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
||||
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
||||
Link: https://patch.msgid.link/20250614080000.1884236-2-noltari@gmail.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
net/dsa/tag_brcm.c | 64 +++++++++++++++++++++++-----------------------
|
||||
1 file changed, 32 insertions(+), 32 deletions(-)
|
||||
|
||||
--- a/net/dsa/tag_brcm.c
|
||||
+++ b/net/dsa/tag_brcm.c
|
||||
@@ -213,6 +213,38 @@ MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROT
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_LEGACY)
|
||||
+static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
|
||||
+ struct net_device *dev)
|
||||
+{
|
||||
+ int len = BRCM_LEG_TAG_LEN;
|
||||
+ int source_port;
|
||||
+ u8 *brcm_tag;
|
||||
+
|
||||
+ if (unlikely(!pskb_may_pull(skb, BRCM_LEG_TAG_LEN + VLAN_HLEN)))
|
||||
+ return NULL;
|
||||
+
|
||||
+ brcm_tag = dsa_etype_header_pos_rx(skb);
|
||||
+
|
||||
+ source_port = brcm_tag[5] & BRCM_LEG_PORT_ID;
|
||||
+
|
||||
+ skb->dev = dsa_conduit_find_user(dev, 0, source_port);
|
||||
+ if (!skb->dev)
|
||||
+ return NULL;
|
||||
+
|
||||
+ /* VLAN tag is added by BCM63xx internal switch */
|
||||
+ if (netdev_uses_dsa(skb->dev))
|
||||
+ len += VLAN_HLEN;
|
||||
+
|
||||
+ /* Remove Broadcom tag and update checksum */
|
||||
+ skb_pull_rcsum(skb, len);
|
||||
+
|
||||
+ dsa_default_offload_fwd_mark(skb);
|
||||
+
|
||||
+ dsa_strip_etype_header(skb, len);
|
||||
+
|
||||
+ return skb;
|
||||
+}
|
||||
+
|
||||
static struct sk_buff *brcm_leg_tag_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -249,38 +281,6 @@ static struct sk_buff *brcm_leg_tag_xmit
|
||||
|
||||
return skb;
|
||||
}
|
||||
-
|
||||
-static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
|
||||
- struct net_device *dev)
|
||||
-{
|
||||
- int len = BRCM_LEG_TAG_LEN;
|
||||
- int source_port;
|
||||
- u8 *brcm_tag;
|
||||
-
|
||||
- if (unlikely(!pskb_may_pull(skb, BRCM_LEG_TAG_LEN + VLAN_HLEN)))
|
||||
- return NULL;
|
||||
-
|
||||
- brcm_tag = dsa_etype_header_pos_rx(skb);
|
||||
-
|
||||
- source_port = brcm_tag[5] & BRCM_LEG_PORT_ID;
|
||||
-
|
||||
- skb->dev = dsa_conduit_find_user(dev, 0, source_port);
|
||||
- if (!skb->dev)
|
||||
- return NULL;
|
||||
-
|
||||
- /* VLAN tag is added by BCM63xx internal switch */
|
||||
- if (netdev_uses_dsa(skb->dev))
|
||||
- len += VLAN_HLEN;
|
||||
-
|
||||
- /* Remove Broadcom tag and update checksum */
|
||||
- skb_pull_rcsum(skb, len);
|
||||
-
|
||||
- dsa_default_offload_fwd_mark(skb);
|
||||
-
|
||||
- dsa_strip_etype_header(skb, len);
|
||||
-
|
||||
- return skb;
|
||||
-}
|
||||
|
||||
static const struct dsa_device_ops brcm_legacy_netdev_ops = {
|
||||
.name = BRCM_LEGACY_NAME,
|
||||
@ -99,7 +99,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -244,7 +250,9 @@ static struct sk_buff *brcm_leg_tag_rcv(
|
||||
@@ -250,7 +256,9 @@ static struct sk_buff *brcm_leg_tag_rcv(
|
||||
|
||||
return skb;
|
||||
}
|
||||
@ -109,7 +109,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static struct sk_buff *brcm_leg_tag_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
@@ -294,6 +302,66 @@ DSA_TAG_DRIVER(brcm_legacy_netdev_ops);
|
||||
@@ -300,6 +308,66 @@ DSA_TAG_DRIVER(brcm_legacy_netdev_ops);
|
||||
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM_LEGACY, BRCM_LEGACY_NAME);
|
||||
#endif /* CONFIG_NET_DSA_TAG_BRCM_LEGACY */
|
||||
|
||||
@ -176,7 +176,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_PREPEND)
|
||||
static struct sk_buff *brcm_tag_xmit_prepend(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
@@ -328,6 +396,9 @@ static struct dsa_tag_driver *dsa_tag_dr
|
||||
@@ -334,6 +402,9 @@ static struct dsa_tag_driver *dsa_tag_dr
|
||||
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_LEGACY)
|
||||
&DSA_TAG_DRIVER_NAME(brcm_legacy_netdev_ops),
|
||||
#endif
|
||||
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
This driver adds support for Broadcom managed switch chips. It supports
|
||||
--- a/drivers/net/dsa/b53/b53_common.c
|
||||
+++ b/drivers/net/dsa/b53/b53_common.c
|
||||
@@ -2285,8 +2285,11 @@ enum dsa_tag_protocol b53_get_tag_protoc
|
||||
@@ -2304,8 +2304,11 @@ enum dsa_tag_protocol b53_get_tag_protoc
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/b53/b53_common.c
|
||||
+++ b/drivers/net/dsa/b53/b53_common.c
|
||||
@@ -1816,7 +1816,8 @@ static int b53_arl_op(struct b53_device
|
||||
@@ -1835,7 +1835,8 @@ static int b53_arl_op(struct b53_device
|
||||
|
||||
/* Perform a read for the given MAC and VID */
|
||||
b53_write48(dev, B53_ARLIO_PAGE, B53_MAC_ADDR_IDX, mac);
|
||||
@ -31,7 +31,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* Issue a read operation for this MAC */
|
||||
ret = b53_arl_rw_op(dev, 1);
|
||||
@@ -2884,6 +2885,9 @@ static int b53_switch_init(struct b53_de
|
||||
@@ -2903,6 +2904,9 @@ static int b53_switch_init(struct b53_de
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
dev->num_ports = fls(dev->enabled_ports);
|
||||
|
||||
dev->ds->num_ports = min_t(unsigned int, dev->num_ports, DSA_MAX_PORTS);
|
||||
@@ -2985,10 +2989,24 @@ int b53_switch_detect(struct b53_device
|
||||
@@ -3004,10 +3008,24 @@ int b53_switch_detect(struct b53_device
|
||||
b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, 0xf);
|
||||
b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, &tmp);
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/dsa/b53/b53_common.c
|
||||
+++ b/drivers/net/dsa/b53/b53_common.c
|
||||
@@ -1802,6 +1802,45 @@ static int b53_arl_read(struct b53_devic
|
||||
@@ -1821,6 +1821,45 @@ static int b53_arl_read(struct b53_devic
|
||||
return *idx >= dev->num_arl_bins ? -ENOSPC : -ENOENT;
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static int b53_arl_op(struct b53_device *dev, int op, int port,
|
||||
const unsigned char *addr, u16 vid, bool is_valid)
|
||||
{
|
||||
@@ -1824,7 +1863,10 @@ static int b53_arl_op(struct b53_device
|
||||
@@ -1843,7 +1882,10 @@ static int b53_arl_op(struct b53_device
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -82,7 +82,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* If this is a read, just finish now */
|
||||
if (op)
|
||||
@@ -1868,12 +1910,17 @@ static int b53_arl_op(struct b53_device
|
||||
@@ -1887,12 +1929,17 @@ static int b53_arl_op(struct b53_device
|
||||
ent.is_static = true;
|
||||
ent.is_age = false;
|
||||
memcpy(ent.mac, addr, ETH_ALEN);
|
||||
@ -103,7 +103,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
return b53_arl_rw_op(dev, 0);
|
||||
}
|
||||
@@ -1885,12 +1932,6 @@ int b53_fdb_add(struct dsa_switch *ds, i
|
||||
@@ -1904,12 +1951,6 @@ int b53_fdb_add(struct dsa_switch *ds, i
|
||||
struct b53_device *priv = ds->priv;
|
||||
int ret;
|
||||
|
||||
@ -116,7 +116,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
mutex_lock(&priv->arl_mutex);
|
||||
ret = b53_arl_op(priv, 0, port, addr, vid, true);
|
||||
mutex_unlock(&priv->arl_mutex);
|
||||
@@ -1917,10 +1958,15 @@ EXPORT_SYMBOL(b53_fdb_del);
|
||||
@@ -1936,10 +1977,15 @@ EXPORT_SYMBOL(b53_fdb_del);
|
||||
static int b53_arl_search_wait(struct b53_device *dev)
|
||||
{
|
||||
unsigned int timeout = 1000;
|
||||
@ -132,9 +132,9 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
- b53_read8(dev, B53_ARLIO_PAGE, B53_ARL_SRCH_CTL, ®);
|
||||
+ b53_read8(dev, B53_ARLIO_PAGE, offset, ®);
|
||||
if (!(reg & ARL_SRCH_STDN))
|
||||
return 0;
|
||||
return -ENOENT;
|
||||
|
||||
@@ -1937,13 +1983,24 @@ static void b53_arl_search_rd(struct b53
|
||||
@@ -1956,13 +2002,24 @@ static void b53_arl_search_rd(struct b53
|
||||
struct b53_arl_entry *ent)
|
||||
{
|
||||
u64 mac_vid;
|
||||
@ -165,7 +165,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
}
|
||||
|
||||
static int b53_fdb_copy(int port, const struct b53_arl_entry *ent,
|
||||
@@ -1964,14 +2021,20 @@ int b53_fdb_dump(struct dsa_switch *ds,
|
||||
@@ -1983,14 +2040,20 @@ int b53_fdb_dump(struct dsa_switch *ds,
|
||||
struct b53_device *priv = ds->priv;
|
||||
struct b53_arl_entry results[2];
|
||||
unsigned int count = 0;
|
||||
@ -234,7 +234,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
#include <linux/bcm47xx_nvram.h>
|
||||
--- a/drivers/net/dsa/b53/b53_regs.h
|
||||
+++ b/drivers/net/dsa/b53/b53_regs.h
|
||||
@@ -329,9 +329,10 @@
|
||||
@@ -328,9 +328,10 @@
|
||||
#define ARLTBL_VID_MASK 0xfff
|
||||
#define ARLTBL_DATA_PORT_ID_S_25 48
|
||||
#define ARLTBL_DATA_PORT_ID_MASK_25 0xf
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
/* PHY Registers */
|
||||
#define B53_PORT_MII_PAGE(i) (0x10 + (i)) /* Port i MII Registers */
|
||||
@@ -372,6 +373,18 @@
|
||||
@@ -371,6 +372,18 @@
|
||||
#define B53_ARL_SRCH_RSTL(x) (B53_ARL_SRCH_RSTL_0 + ((x) * 0x10))
|
||||
|
||||
/*************************************************************************
|
||||
|
||||
@ -403,7 +403,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
};
|
||||
--- a/drivers/net/phy/marvell.c
|
||||
+++ b/drivers/net/phy/marvell.c
|
||||
@@ -4181,7 +4181,7 @@ static struct phy_driver marvell_drivers
|
||||
@@ -4218,7 +4218,7 @@ static struct phy_driver marvell_drivers
|
||||
|
||||
module_phy_driver(marvell_drivers);
|
||||
|
||||
|
||||
@ -183,7 +183,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
else if (tp->mac_version == RTL_GIGA_MAC_VER_63)
|
||||
r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200);
|
||||
@@ -3742,8 +3742,8 @@ static void rtl_hw_start_8125_common(str
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030);
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001);
|
||||
- if (tp->mac_version == RTL_GIGA_MAC_VER_65 ||
|
||||
|
||||
@ -69,7 +69,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
else if (tp->mac_version == RTL_GIGA_MAC_VER_63)
|
||||
r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200);
|
||||
@@ -3714,8 +3710,7 @@ static void rtl_hw_start_8125_common(str
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030);
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001);
|
||||
- if (tp->mac_version == RTL_GIGA_MAC_VER_70 ||
|
||||
|
||||
@ -97,7 +97,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
else if (tp->mac_version == RTL_GIGA_MAC_VER_63)
|
||||
r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200);
|
||||
@@ -3708,7 +3720,8 @@ static void rtl_hw_start_8125_common(str
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030);
|
||||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000);
|
||||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001);
|
||||
- if (tp->mac_version == RTL_GIGA_MAC_VER_70)
|
||||
|
||||
@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/page_pool.c
|
||||
+++ b/net/core/page_pool.c
|
||||
@@ -1153,8 +1153,9 @@ static void page_pool_release_retry(stru
|
||||
@@ -1155,8 +1155,9 @@ static void page_pool_release_retry(stru
|
||||
{
|
||||
struct delayed_work *dwq = to_delayed_work(wq);
|
||||
struct page_pool *pool = container_of(dwq, typeof(*pool), release_dw);
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
inflight = page_pool_release(pool);
|
||||
/* In rare cases, a driver bug may cause inflight to go negative.
|
||||
@@ -1166,6 +1167,21 @@ static void page_pool_release_retry(stru
|
||||
@@ -1168,6 +1169,21 @@ static void page_pool_release_retry(stru
|
||||
if (inflight <= 0)
|
||||
return;
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
||||
|
||||
--- a/drivers/net/usb/qmi_wwan.c
|
||||
+++ b/drivers/net/usb/qmi_wwan.c
|
||||
@@ -1076,6 +1076,11 @@ static const struct usb_device_id produc
|
||||
@@ -1082,6 +1082,11 @@ static const struct usb_device_id produc
|
||||
USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x581d, USB_CLASS_VENDOR_SPEC, 1, 7),
|
||||
.driver_info = (unsigned long)&qmi_wwan_info,
|
||||
},
|
||||
@ -22,7 +22,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0122)}, /* Quectel RG650V */
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0125)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0306)}, /* Quectel EP06/EG06/EM06 */
|
||||
@@ -1083,6 +1088,7 @@ static const struct usb_device_id produc
|
||||
@@ -1089,6 +1094,7 @@ static const struct usb_device_id produc
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */
|
||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0801)}, /* Quectel RM520N */
|
||||
|
||||
@ -331,7 +331,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -4277,6 +4277,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -4280,6 +4280,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.12 = .57
|
||||
LINUX_KERNEL_HASH-6.12.57 = 165ca1c37c4607b90e731996b7c1e3311285167d13deeedf08f3f1f0b9d2541a
|
||||
LINUX_VERSION-6.12 = .58
|
||||
LINUX_KERNEL_HASH-6.12.58 = 5f1c4c546660a6a81046fdfa6195306bad2c8d17c0d69876dc100a85ad4613ac
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (sk_can_gso(sk)) {
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2021,7 +2021,7 @@ void ieee80211_color_collision_detection
|
||||
@@ -2023,7 +2023,7 @@ void ieee80211_color_collision_detection
|
||||
/* interface handling */
|
||||
#define MAC80211_SUPPORTED_FEATURES_TX (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \
|
||||
NETIF_F_HW_CSUM | NETIF_F_SG | \
|
||||
|
||||
@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/bridge/br_forward.c
|
||||
+++ b/net/bridge/br_forward.c
|
||||
@@ -201,6 +201,7 @@ void br_flood(struct net_bridge *br, str
|
||||
@@ -202,6 +202,7 @@ void br_flood(struct net_bridge *br, str
|
||||
enum br_pkt_type pkt_type, bool local_rcv, bool local_orig,
|
||||
u16 vid)
|
||||
{
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct net_bridge_port *prev = NULL;
|
||||
struct net_bridge_port *p;
|
||||
|
||||
@@ -218,6 +219,10 @@ void br_flood(struct net_bridge *br, str
|
||||
@@ -219,6 +220,10 @@ void br_flood(struct net_bridge *br, str
|
||||
case BR_PKT_MULTICAST:
|
||||
if (!(p->flags & BR_MCAST_FLOOD) && skb->dev != br->dev)
|
||||
continue;
|
||||
|
||||
@ -74,7 +74,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
}
|
||||
--- a/drivers/ufs/core/ufshcd.c
|
||||
+++ b/drivers/ufs/core/ufshcd.c
|
||||
@@ -1119,8 +1119,8 @@ out:
|
||||
@@ -1122,8 +1122,8 @@ out:
|
||||
}
|
||||
|
||||
int ufshcd_opp_config_clks(struct device *dev, struct opp_table *opp_table,
|
||||
@ -121,7 +121,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
}
|
||||
--- a/include/ufs/ufshcd.h
|
||||
+++ b/include/ufs/ufshcd.h
|
||||
@@ -1326,8 +1326,8 @@ void ufshcd_mcq_enable(struct ufs_hba *h
|
||||
@@ -1333,8 +1333,8 @@ void ufshcd_mcq_enable(struct ufs_hba *h
|
||||
void ufshcd_mcq_config_esi(struct ufs_hba *hba, struct msi_msg *msg);
|
||||
|
||||
int ufshcd_opp_config_clks(struct device *dev, struct opp_table *opp_table,
|
||||
|
||||
@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* The Mellanox Tavor device gives false positive parity errors. Disable
|
||||
* parity error reporting.
|
||||
@@ -3508,6 +3509,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
@@ -3509,6 +3510,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.
|
||||
* To work around this, query the size it should be configured to by the
|
||||
@@ -3533,6 +3536,8 @@ static void quirk_intel_ntb(struct pci_d
|
||||
@@ -3534,6 +3537,8 @@ static void quirk_intel_ntb(struct pci_d
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
|
||||
|
||||
@ -51,7 +51,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
/*
|
||||
* Some BIOS implementations leave the Intel GPU interrupts enabled, even
|
||||
* though no one is handling them (e.g., if the i915 driver is never
|
||||
@@ -3571,6 +3576,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
|
||||
@@ -3572,6 +3577,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ Link: https://patch.msgid.link/20250416081314.3929794-2-hongxing.zhu@nxp.com
|
||||
}
|
||||
|
||||
/* Make sure link training is finished as well! */
|
||||
@@ -1546,7 +1540,7 @@ static const struct imx_pcie_drvdata drv
|
||||
@@ -1550,7 +1544,7 @@ static const struct imx_pcie_drvdata drv
|
||||
[IMX6Q] = {
|
||||
.variant = IMX6Q,
|
||||
.flags = IMX_PCIE_FLAG_IMX_PHY |
|
||||
@ -81,7 +81,7 @@ Link: https://patch.msgid.link/20250416081314.3929794-2-hongxing.zhu@nxp.com
|
||||
IMX_PCIE_FLAG_BROKEN_SUSPEND |
|
||||
IMX_PCIE_FLAG_SUPPORTS_SUSPEND,
|
||||
.dbi_length = 0x200,
|
||||
@@ -1564,7 +1558,7 @@ static const struct imx_pcie_drvdata drv
|
||||
@@ -1568,7 +1562,7 @@ static const struct imx_pcie_drvdata drv
|
||||
[IMX6SX] = {
|
||||
.variant = IMX6SX,
|
||||
.flags = IMX_PCIE_FLAG_IMX_PHY |
|
||||
@ -90,7 +90,7 @@ Link: https://patch.msgid.link/20250416081314.3929794-2-hongxing.zhu@nxp.com
|
||||
IMX_PCIE_FLAG_SUPPORTS_SUSPEND,
|
||||
.gpr = "fsl,imx6q-iomuxc-gpr",
|
||||
.clk_names = imx6sx_clks,
|
||||
@@ -1580,7 +1574,7 @@ static const struct imx_pcie_drvdata drv
|
||||
@@ -1584,7 +1578,7 @@ static const struct imx_pcie_drvdata drv
|
||||
[IMX6QP] = {
|
||||
.variant = IMX6QP,
|
||||
.flags = IMX_PCIE_FLAG_IMX_PHY |
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
||||
|
||||
--- a/drivers/mmc/host/sdhci-msm.c
|
||||
+++ b/drivers/mmc/host/sdhci-msm.c
|
||||
@@ -2383,7 +2383,7 @@ MODULE_DEVICE_TABLE(of, sdhci_msm_dt_mat
|
||||
@@ -2398,7 +2398,7 @@ MODULE_DEVICE_TABLE(of, sdhci_msm_dt_mat
|
||||
|
||||
static const struct sdhci_ops sdhci_msm_ops = {
|
||||
.reset = sdhci_and_cqhci_reset,
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/drivers/mmc/host/sdhci-msm.c
|
||||
+++ b/drivers/mmc/host/sdhci-msm.c
|
||||
@@ -1818,49 +1818,49 @@ static unsigned int sdhci_msm_get_min_cl
|
||||
@@ -1833,49 +1833,49 @@ static unsigned int sdhci_msm_get_min_cl
|
||||
return SDHCI_MSM_MIN_CLOCK;
|
||||
}
|
||||
|
||||
|
||||
@ -141,7 +141,7 @@
|
||||
interrupts = <126 127 128 129 130 131>;
|
||||
};
|
||||
|
||||
gpios: stp@e100bb0 {
|
||||
stp0: gpio@e100bb0 {
|
||||
#gpio-cells = <2>;
|
||||
compatible = "lantiq,gpio-stp-xway";
|
||||
gpio-controller;
|
||||
|
||||
@ -24,7 +24,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
|
||||
--- a/drivers/thermal/gov_step_wise.c
|
||||
+++ b/drivers/thermal/gov_step_wise.c
|
||||
@@ -74,19 +74,28 @@ static void thermal_zone_trip_update(str
|
||||
@@ -87,19 +87,28 @@ static void thermal_zone_trip_update(str
|
||||
int trip_id = thermal_zone_trip_id(tz, trip);
|
||||
struct thermal_instance *instance;
|
||||
bool throttle = false;
|
||||
|
||||
@ -1,125 +0,0 @@
|
||||
From 9989fcd49c52500a2bf1f6d49411690dec45d2dc Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= <marko.makela@iki.fi>
|
||||
Date: Sat, 2 Aug 2025 12:47:08 +0300
|
||||
Subject: [PATCH] clk: qcom: gcc-ipq6018: rework nss_port5 clock to multiple
|
||||
conf
|
||||
|
||||
Rework nss_port5 to use the new multiple configuration implementation
|
||||
and correctly fix the clocks for this port under some corner case.
|
||||
|
||||
In OpenWrt, this patch avoids intermittent dmesg errors of the form
|
||||
nss_port5_rx_clk_src: rcg didn't update its configuration.
|
||||
|
||||
This is a mechanical, straightforward port of
|
||||
commit e88f03230dc07aa3293b6aeb078bd27370bb2594
|
||||
("clk: qcom: gcc-ipq8074: rework nss_port5/6 clock to multiple conf")
|
||||
to gcc-ipq6018, with two conflicts resolved: different frequency of the
|
||||
P_XO clock source, and only 5 Ethernet ports.
|
||||
|
||||
This was originally developed by JiaY-shi <shi05275@163.com>.
|
||||
|
||||
Link: https://lore.kernel.org/all/20231220221724.3822-4-ansuelsmth@gmail.com/
|
||||
Signed-off-by: Marko Mäkelä <marko.makela@iki.fi>
|
||||
Tested-by: Marko Mäkelä <marko.makela@iki.fi>
|
||||
---
|
||||
drivers/clk/qcom/gcc-ipq6018.c | 60 +++++++++++++++++++++-------------
|
||||
1 file changed, 38 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/clk/qcom/gcc-ipq6018.c
|
||||
+++ b/drivers/clk/qcom/gcc-ipq6018.c
|
||||
@@ -511,15 +511,23 @@ static struct clk_rcg2 apss_ahb_clk_src
|
||||
},
|
||||
};
|
||||
|
||||
-static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
|
||||
- F(24000000, P_XO, 1, 0, 0),
|
||||
- F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
|
||||
- F(25000000, P_UNIPHY0_RX, 5, 0, 0),
|
||||
- F(78125000, P_UNIPHY1_RX, 4, 0, 0),
|
||||
- F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
|
||||
- F(125000000, P_UNIPHY0_RX, 1, 0, 0),
|
||||
- F(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
||||
- F(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
||||
+static const struct freq_conf ftbl_nss_port5_rx_clk_src_25[] = {
|
||||
+ C(P_UNIPHY1_RX, 12.5, 0, 0),
|
||||
+ C(P_UNIPHY0_RX, 5, 0, 0),
|
||||
+};
|
||||
+
|
||||
+static const struct freq_conf ftbl_nss_port5_rx_clk_src_125[] = {
|
||||
+ C(P_UNIPHY1_RX, 2.5, 0, 0),
|
||||
+ C(P_UNIPHY0_RX, 1, 0, 0),
|
||||
+};
|
||||
+
|
||||
+static const struct freq_multi_tbl ftbl_nss_port5_rx_clk_src[] = {
|
||||
+ FMS(24000000, P_XO, 1, 0, 0),
|
||||
+ FM(25000000, ftbl_nss_port5_rx_clk_src_25),
|
||||
+ FMS(78125000, P_UNIPHY1_RX, 4, 0, 0),
|
||||
+ FM(125000000, ftbl_nss_port5_rx_clk_src_125),
|
||||
+ FMS(156250000, P_UNIPHY1_RX, 2, 0, 0),
|
||||
+ FMS(312500000, P_UNIPHY1_RX, 1, 0, 0),
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -547,26 +555,34 @@ gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32
|
||||
|
||||
static struct clk_rcg2 nss_port5_rx_clk_src = {
|
||||
.cmd_rcgr = 0x68060,
|
||||
- .freq_tbl = ftbl_nss_port5_rx_clk_src,
|
||||
+ .freq_multi_tbl = ftbl_nss_port5_rx_clk_src,
|
||||
.hid_width = 5,
|
||||
.parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
|
||||
.clkr.hw.init = &(struct clk_init_data){
|
||||
.name = "nss_port5_rx_clk_src",
|
||||
.parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
|
||||
.num_parents = 7,
|
||||
- .ops = &clk_rcg2_ops,
|
||||
+ .ops = &clk_rcg2_fm_ops,
|
||||
},
|
||||
};
|
||||
|
||||
-static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
|
||||
- F(24000000, P_XO, 1, 0, 0),
|
||||
- F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
|
||||
- F(25000000, P_UNIPHY0_TX, 5, 0, 0),
|
||||
- F(78125000, P_UNIPHY1_TX, 4, 0, 0),
|
||||
- F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
|
||||
- F(125000000, P_UNIPHY0_TX, 1, 0, 0),
|
||||
- F(156250000, P_UNIPHY1_TX, 2, 0, 0),
|
||||
- F(312500000, P_UNIPHY1_TX, 1, 0, 0),
|
||||
+static const struct freq_conf ftbl_nss_port5_tx_clk_src_25[] = {
|
||||
+ C(P_UNIPHY1_TX, 12.5, 0, 0),
|
||||
+ C(P_UNIPHY0_TX, 5, 0, 0),
|
||||
+};
|
||||
+
|
||||
+static const struct freq_conf ftbl_nss_port5_tx_clk_src_125[] = {
|
||||
+ C(P_UNIPHY1_TX, 2.5, 0, 0),
|
||||
+ C(P_UNIPHY0_TX, 1, 0, 0),
|
||||
+};
|
||||
+
|
||||
+static const struct freq_multi_tbl ftbl_nss_port5_tx_clk_src[] = {
|
||||
+ FMS(24000000, P_XO, 1, 0, 0),
|
||||
+ FM(25000000, ftbl_nss_port5_tx_clk_src_25),
|
||||
+ FMS(78125000, P_UNIPHY1_TX, 4, 0, 0),
|
||||
+ FM(125000000, ftbl_nss_port5_tx_clk_src_125),
|
||||
+ FMS(156250000, P_UNIPHY1_TX, 2, 0, 0),
|
||||
+ FMS(312500000, P_UNIPHY1_TX, 1, 0, 0),
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -594,14 +610,14 @@ gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32
|
||||
|
||||
static struct clk_rcg2 nss_port5_tx_clk_src = {
|
||||
.cmd_rcgr = 0x68068,
|
||||
- .freq_tbl = ftbl_nss_port5_tx_clk_src,
|
||||
+ .freq_multi_tbl = ftbl_nss_port5_tx_clk_src,
|
||||
.hid_width = 5,
|
||||
.parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
|
||||
.clkr.hw.init = &(struct clk_init_data){
|
||||
.name = "nss_port5_tx_clk_src",
|
||||
.parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
|
||||
.num_parents = 7,
|
||||
- .ops = &clk_rcg2_ops,
|
||||
+ .ops = &clk_rcg2_fm_ops,
|
||||
},
|
||||
};
|
||||
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
|
||||
|
||||
/**
|
||||
* qcom_q6v5_wait_for_start() - wait for remote processor start signal
|
||||
@@ -174,7 +176,17 @@ static irqreturn_t q6v5_handover_interru
|
||||
@@ -179,7 +181,17 @@ static irqreturn_t q6v5_handover_interru
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@ -66,7 +66,7 @@ Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
|
||||
{
|
||||
struct qcom_q6v5 *q6v5 = data;
|
||||
|
||||
@@ -182,6 +194,7 @@ static irqreturn_t q6v5_stop_interrupt(i
|
||||
@@ -187,6 +199,7 @@ static irqreturn_t q6v5_stop_interrupt(i
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
@ -74,7 +74,7 @@ Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
|
||||
|
||||
/**
|
||||
* qcom_q6v5_request_stop() - request the remote processor to stop
|
||||
@@ -212,6 +225,28 @@ int qcom_q6v5_request_stop(struct qcom_q
|
||||
@@ -217,6 +230,28 @@ int qcom_q6v5_request_stop(struct qcom_q
|
||||
EXPORT_SYMBOL_GPL(qcom_q6v5_request_stop);
|
||||
|
||||
/**
|
||||
|
||||
@ -13,7 +13,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||
|
||||
--- a/drivers/media/usb/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
||||
@@ -3216,6 +3216,18 @@ static const struct usb_device_id uvc_id
|
||||
@@ -3229,6 +3229,18 @@ static const struct usb_device_id uvc_id
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
||||
|
||||
@ -1,103 +0,0 @@
|
||||
From 9f146b3e0b9e098cf36ebe42b4aa69270113c6bf Mon Sep 17 00:00:00 2001
|
||||
From: Markus Stockhausen <markus.stockhausen@gmx.de>
|
||||
Date: Mon, 4 Aug 2025 04:03:25 -0400
|
||||
Subject: clocksource/drivers/timer-rtl-otto: Work around dying timers
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The OpenWrt distribution has switched from kernel longterm 6.6 to
|
||||
6.12. Reports show that devices with the Realtek Otto switch platform
|
||||
die during operation and are rebooted by the watchdog. Sorting out
|
||||
other possible reasons the Otto timer is to blame. The platform
|
||||
currently consists of 4 targets with different hardware revisions.
|
||||
It is not 100% clear which devices and revisions are affected.
|
||||
|
||||
Analysis shows:
|
||||
|
||||
A more aggressive sched/deadline handling leads to more timer starts
|
||||
with small intervals. This increases the bug chances. See
|
||||
https://marc.info/?l=linux-kernel&m=175276556023276&w=2
|
||||
|
||||
Focusing on the real issue a hardware limitation on some devices was
|
||||
found. There is a minimal chance that a timer ends without firing an
|
||||
interrupt if it is reprogrammed within the 5us before its expiration
|
||||
time. Work around this issue by introducing a bounce() function. It
|
||||
restarts the timer directly before the normal restart functions as
|
||||
follows:
|
||||
|
||||
- Stop timer
|
||||
- Restart timer with a slow frequency.
|
||||
- Target time will be >5us
|
||||
- The subsequent normal restart is outside the critical window
|
||||
|
||||
Downstream has already tested and confirmed a patch. See
|
||||
https://github.com/openwrt/openwrt/pull/19468
|
||||
https://forum.openwrt.org/t/support-for-rtl838x-based-managed-switches/57875/3788
|
||||
|
||||
Tested-by: Stephen Howell <howels@allthatwemight.be>
|
||||
Tested-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
|
||||
Link: https://lore.kernel.org/r/20250804080328.2609287-2-markus.stockhausen@gmx.de
|
||||
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
|
||||
---
|
||||
drivers/clocksource/timer-rtl-otto.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
--- a/drivers/clocksource/timer-rtl-otto.c
|
||||
+++ b/drivers/clocksource/timer-rtl-otto.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#define RTTM_BIT_COUNT 28
|
||||
#define RTTM_MIN_DELTA 8
|
||||
#define RTTM_MAX_DELTA CLOCKSOURCE_MASK(28)
|
||||
+#define RTTM_MAX_DIVISOR GENMASK(15, 0)
|
||||
|
||||
/*
|
||||
* Timers are derived from the LXB clock frequency. Usually this is a fixed
|
||||
@@ -112,6 +113,22 @@ static irqreturn_t rttm_timer_interrupt(
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
+static void rttm_bounce_timer(void __iomem *base, u32 mode)
|
||||
+{
|
||||
+ /*
|
||||
+ * When a running timer has less than ~5us left, a stop/start sequence
|
||||
+ * might fail. While the details are unknown the most evident effect is
|
||||
+ * that the subsequent interrupt will not be fired.
|
||||
+ *
|
||||
+ * As a workaround issue an intermediate restart with a very slow
|
||||
+ * frequency of ~3kHz keeping the target counter (>=8). So the follow
|
||||
+ * up restart will always be issued outside the critical window.
|
||||
+ */
|
||||
+
|
||||
+ rttm_disable_timer(base);
|
||||
+ rttm_enable_timer(base, mode, RTTM_MAX_DIVISOR);
|
||||
+}
|
||||
+
|
||||
static void rttm_stop_timer(void __iomem *base)
|
||||
{
|
||||
rttm_disable_timer(base);
|
||||
@@ -129,6 +146,7 @@ static int rttm_next_event(unsigned long
|
||||
struct timer_of *to = to_timer_of(clkevt);
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
+ rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
||||
rttm_stop_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, delta);
|
||||
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
||||
@@ -141,6 +159,7 @@ static int rttm_state_oneshot(struct clo
|
||||
struct timer_of *to = to_timer_of(clkevt);
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
+ rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
||||
rttm_stop_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
||||
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
||||
@@ -153,6 +172,7 @@ static int rttm_state_periodic(struct cl
|
||||
struct timer_of *to = to_timer_of(clkevt);
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
+ rttm_bounce_timer(to->of_base.base, RTTM_CTRL_TIMER);
|
||||
rttm_stop_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
||||
rttm_start_timer(to, RTTM_CTRL_TIMER);
|
||||
@ -1,60 +0,0 @@
|
||||
From add0d895aa6f66320f9b1d901b66259f4308af04 Mon Sep 17 00:00:00 2001
|
||||
From: Markus Stockhausen <markus.stockhausen@gmx.de>
|
||||
Date: Mon, 4 Aug 2025 04:03:27 -0400
|
||||
Subject: clocksource/drivers/timer-rtl-otto: Do not interfere with interrupts
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
During normal operation the timers are reprogrammed including an
|
||||
interrupt acknowledgement. This has no effect as the whole timer
|
||||
is setup from scratch afterwards. Especially in an interrupt this
|
||||
has already been done by rttm_timer_interrupt().
|
||||
|
||||
Change the behaviour as follows:
|
||||
|
||||
- Use rttm_disable_timer() during reprogramming
|
||||
- Keep rttm_stop_timer() for all other use cases.
|
||||
|
||||
Downstream has already tested and confirmed a patch. See
|
||||
https://github.com/openwrt/openwrt/pull/19468
|
||||
https://forum.openwrt.org/t/support-for-rtl838x-based-managed-switches/57875/3788
|
||||
|
||||
Tested-by: Stephen Howell <howels@allthatwemight.be>
|
||||
Tested-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
|
||||
Link: https://lore.kernel.org/r/20250804080328.2609287-4-markus.stockhausen@gmx.de
|
||||
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
|
||||
---
|
||||
drivers/clocksource/timer-rtl-otto.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/clocksource/timer-rtl-otto.c
|
||||
+++ b/drivers/clocksource/timer-rtl-otto.c
|
||||
@@ -141,7 +141,7 @@ static int rttm_next_event(unsigned long
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
||||
- rttm_stop_timer(to->of_base.base);
|
||||
+ rttm_disable_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, delta);
|
||||
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
||||
|
||||
@@ -154,7 +154,7 @@ static int rttm_state_oneshot(struct clo
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_COUNTER);
|
||||
- rttm_stop_timer(to->of_base.base);
|
||||
+ rttm_disable_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
||||
rttm_start_timer(to, RTTM_CTRL_COUNTER);
|
||||
|
||||
@@ -167,7 +167,7 @@ static int rttm_state_periodic(struct cl
|
||||
|
||||
RTTM_DEBUG(to->of_base.base);
|
||||
rttm_bounce_timer(to->of_base.base, RTTM_CTRL_TIMER);
|
||||
- rttm_stop_timer(to->of_base.base);
|
||||
+ rttm_disable_timer(to->of_base.base);
|
||||
rttm_set_period(to->of_base.base, RTTM_TICKS_PER_SEC / HZ);
|
||||
rttm_start_timer(to, RTTM_CTRL_TIMER);
|
||||
|
||||
@ -19,7 +19,7 @@ Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
|
||||
--- a/drivers/ufs/core/ufshcd.c
|
||||
+++ b/drivers/ufs/core/ufshcd.c
|
||||
@@ -4043,7 +4043,7 @@ static int ufshcd_dme_link_startup(struc
|
||||
@@ -4046,7 +4046,7 @@ static int ufshcd_dme_link_startup(struc
|
||||
*
|
||||
* Return: 0 on success, non-zero value on failure.
|
||||
*/
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
{
|
||||
struct uic_command uic_cmd = {
|
||||
.command = UIC_CMD_DME_RESET,
|
||||
@@ -4057,6 +4057,7 @@ static int ufshcd_dme_reset(struct ufs_h
|
||||
@@ -4060,6 +4060,7 @@ static int ufshcd_dme_reset(struct ufs_h
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
|
||||
int ufshcd_dme_configure_adapt(struct ufs_hba *hba,
|
||||
int agreed_gear,
|
||||
@@ -4082,7 +4083,7 @@ EXPORT_SYMBOL_GPL(ufshcd_dme_configure_a
|
||||
@@ -4085,7 +4086,7 @@ EXPORT_SYMBOL_GPL(ufshcd_dme_configure_a
|
||||
*
|
||||
* Return: 0 on success, non-zero value on failure.
|
||||
*/
|
||||
@ -45,7 +45,7 @@ Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
{
|
||||
struct uic_command uic_cmd = {
|
||||
.command = UIC_CMD_DME_ENABLE,
|
||||
@@ -4096,6 +4097,7 @@ static int ufshcd_dme_enable(struct ufs_
|
||||
@@ -4099,6 +4100,7 @@ static int ufshcd_dme_enable(struct ufs_
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
{
|
||||
--- a/include/ufs/ufshcd.h
|
||||
+++ b/include/ufs/ufshcd.h
|
||||
@@ -1361,6 +1361,8 @@ extern int ufshcd_system_thaw(struct dev
|
||||
@@ -1368,6 +1368,8 @@ extern int ufshcd_system_thaw(struct dev
|
||||
extern int ufshcd_system_restore(struct device *dev);
|
||||
#endif
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
||||
|
||||
--- a/drivers/irqchip/irq-sifive-plic.c
|
||||
+++ b/drivers/irqchip/irq-sifive-plic.c
|
||||
@@ -202,6 +202,9 @@ static struct irq_chip plic_edge_chip =
|
||||
@@ -204,6 +204,9 @@ static struct irq_chip plic_edge_chip =
|
||||
#endif
|
||||
.irq_set_type = plic_irq_set_type,
|
||||
.flags = IRQCHIP_SKIP_SET_WAKE |
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
|
||||
IRQCHIP_AFFINITY_PRE_STARTUP,
|
||||
};
|
||||
|
||||
@@ -217,6 +220,9 @@ static struct irq_chip plic_chip = {
|
||||
@@ -219,6 +222,9 @@ static struct irq_chip plic_chip = {
|
||||
#endif
|
||||
.irq_set_type = plic_irq_set_type,
|
||||
.flags = IRQCHIP_SKIP_SET_WAKE |
|
||||
|
||||
Loading…
Reference in New Issue
Block a user