--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
-@@ -286,8 +286,10 @@ static inline bool neigh_key_eq128(const
+@@ -287,8 +287,10 @@ static inline bool neigh_key_eq128(const
const u32 *n32 = (const u32 *)n->primary_key;
const u32 *p32 = pkey;
u32 xfer_resolution;
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
-@@ -1434,7 +1434,15 @@ int snd_soc_runtime_set_dai_fmt(struct s
+@@ -1437,7 +1437,15 @@ int snd_soc_runtime_set_dai_fmt(struct s
return 0;
for_each_rtd_codec_dais(rtd, i, codec_dai) {
+++ /dev/null
-From 6fd71667a133560b84946a5008e3c9375b5115b7 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.org>
-Date: Wed, 31 Oct 2018 14:56:59 +0000
-Subject: [PATCH] media: tc358743: Increase FIFO level to 374.
-
-The existing fixed value of 16 worked for UYVY 720P60 over
-2 lanes at 594MHz, or UYVY 1080P60 over 4 lanes. (RGB888
-1080P60 needs 6 lanes at 594MHz).
-It doesn't allow for lower resolutions to work as the FIFO
-underflows.
-
-374 is required for 1080P24-30 UYVY over 2 lanes @ 972Mbit/s, but
->374 means that the FIFO underflows on 1080P50 UYVY over 2 lanes
-@ 972Mbit/s.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
----
- drivers/media/i2c/tc358743.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/media/i2c/tc358743.c
-+++ b/drivers/media/i2c/tc358743.c
-@@ -1942,7 +1942,7 @@ static int tc358743_probe_of(struct tc35
- state->pdata.ddc5v_delay = DDC5V_DELAY_100_MS;
- state->pdata.enable_hdcp = false;
- /* A FIFO level of 16 should be enough for 2-lane 720p60 at 594 MHz. */
-- state->pdata.fifo_level = 16;
-+ state->pdata.fifo_level = 374;
- /*
- * The PLL input clock is obtained by dividing refclk by pll_prd.
- * It must be between 6 MHz and 40 MHz, lower frequency is better.
--- a/drivers/media/i2c/tc358743.c
+++ b/drivers/media/i2c/tc358743.c
-@@ -1962,6 +1962,7 @@ static int tc358743_probe_of(struct tc35
+@@ -1980,6 +1980,7 @@ static int tc358743_probe_of(struct tc35
/*
* The CSI bps per lane must be between 62.5 Mbps and 1 Gbps.
* The default is 594 Mbps for 4-lane 1080p60 or 2-lane 720p60.
*/
bps_pr_lane = 2 * endpoint.link_frequencies[0];
if (bps_pr_lane < 62500000U || bps_pr_lane > 1000000000U) {
-@@ -1975,23 +1976,42 @@ static int tc358743_probe_of(struct tc35
+@@ -1993,23 +1994,42 @@ static int tc358743_probe_of(struct tc35
state->pdata.refclk_hz * state->pdata.pll_prd;
/*
+++ /dev/null
-From 307615221ab3249fcfdd21b81a8aca138ed7a1ed Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.org>
-Date: Wed, 31 Oct 2018 14:57:34 +0000
-Subject: [PATCH] media: tc358743: Check I2C succeeded during probe.
-
-The probe for the TC358743 reads the CHIPID register from
-the device and compares it to the expected value of 0.
-If the I2C request fails then that also returns 0, so
-the driver loads thinking that the device is there.
-
-Generally I2C communications are reliable so there is
-limited need to check the return value on every transfer,
-therefore only amend the one read during probe to check
-for I2C errors.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
----
- drivers/media/i2c/tc358743.c | 27 +++++++++++++++++++++++----
- 1 file changed, 23 insertions(+), 4 deletions(-)
-
---- a/drivers/media/i2c/tc358743.c
-+++ b/drivers/media/i2c/tc358743.c
-@@ -110,7 +110,7 @@ static inline struct tc358743_state *to_
-
- /* --------------- I2C --------------- */
-
--static void i2c_rd(struct v4l2_subdev *sd, u16 reg, u8 *values, u32 n)
-+static int i2c_rd(struct v4l2_subdev *sd, u16 reg, u8 *values, u32 n)
- {
- struct tc358743_state *state = to_state(sd);
- struct i2c_client *client = state->i2c_client;
-@@ -136,6 +136,7 @@ static void i2c_rd(struct v4l2_subdev *s
- v4l2_err(sd, "%s: reading register 0x%x from 0x%x failed: %d\n",
- __func__, reg, client->addr, err);
- }
-+ return err != ARRAY_SIZE(msgs);
- }
-
- static void i2c_wr(struct v4l2_subdev *sd, u16 reg, u8 *values, u32 n)
-@@ -192,15 +193,24 @@ static void i2c_wr(struct v4l2_subdev *s
- }
- }
-
--static noinline u32 i2c_rdreg(struct v4l2_subdev *sd, u16 reg, u32 n)
-+static noinline u32 i2c_rdreg_err(struct v4l2_subdev *sd, u16 reg, u32 n,
-+ int *err)
- {
-+ int error;
- __le32 val = 0;
-
-- i2c_rd(sd, reg, (u8 __force *)&val, n);
-+ error = i2c_rd(sd, reg, (u8 __force *)&val, n);
-+ if (err)
-+ *err = error;
-
- return le32_to_cpu(val);
- }
-
-+static inline u32 i2c_rdreg(struct v4l2_subdev *sd, u16 reg, u32 n)
-+{
-+ return i2c_rdreg_err(sd, reg, n, NULL);
-+}
-+
- static noinline void i2c_wrreg(struct v4l2_subdev *sd, u16 reg, u32 val, u32 n)
- {
- __le32 raw = cpu_to_le32(val);
-@@ -229,6 +239,13 @@ static u16 i2c_rd16(struct v4l2_subdev *
- return i2c_rdreg(sd, reg, 2);
- }
-
-+static int i2c_rd16_err(struct v4l2_subdev *sd, u16 reg, u16 *value)
-+{
-+ int err;
-+ *value = i2c_rdreg_err(sd, reg, 2, &err);
-+ return err;
-+}
-+
- static void i2c_wr16(struct v4l2_subdev *sd, u16 reg, u16 val)
- {
- i2c_wrreg(sd, reg, val, 2);
-@@ -2050,6 +2067,7 @@ static int tc358743_probe(struct i2c_cli
- struct tc358743_platform_data *pdata = client->dev.platform_data;
- struct v4l2_subdev *sd;
- u16 irq_mask = MASK_HDMI_MSK | MASK_CSI_MSK;
-+ u16 chipid;
- int err;
-
- if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
-@@ -2081,7 +2099,8 @@ static int tc358743_probe(struct i2c_cli
- sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
-
- /* i2c access */
-- if ((i2c_rd16(sd, CHIPID) & MASK_CHIPID) != 0) {
-+ if (i2c_rd16_err(sd, CHIPID, &chipid) ||
-+ (chipid & MASK_CHIPID) != 0) {
- v4l2_info(sd, "not a TC358743 on address 0x%x\n",
- client->addr << 1);
- return -ENODEV;
+++ /dev/null
-From 1745cb8447123a894db6c0b579259ec5d976808f Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.org>
-Date: Thu, 22 Nov 2018 17:31:06 +0000
-Subject: [PATCH] media: tc358743: Return an appropriate colorspace from
- tc358743_set_fmt
-
-When calling tc358743_set_fmt, the code was calling tc358743_get_fmt
-to choose a valid format. However that sets the colorspace
-based on what was read back from the chip. When you set the format,
-then the driver would choose and program the colorspace based
-on the format code.
-
-The result was that if you called try or set format for UYVY
-when the current format was RGB3 then you would get told sRGB,
-and try RGB3 when current was UYVY and you would get told
-SMPTE170M.
-
-The value programmed into the chip is determined by this driver,
-therefore there is no need to read back the value. Return the
-colorspace based on the format set/tried instead.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
-
-media: i2c: tc358743: Only allow supported pixel fmts in set_fmt
-
-Fix commit "media: tc358743: Return an appropriate colorspace from
-tc358743_set_fmt" to ensure that the format passed in to set_fmt
-is checked to be valid, and reset to the current format if not.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/media/i2c/tc358743.c | 44 ++++++++++++++----------------------
- 1 file changed, 17 insertions(+), 27 deletions(-)
-
---- a/drivers/media/i2c/tc358743.c
-+++ b/drivers/media/i2c/tc358743.c
-@@ -1677,12 +1677,23 @@ static int tc358743_enum_mbus_code(struc
- return 0;
- }
-
-+static u32 tc358743_g_colorspace(u32 code)
-+{
-+ switch (code) {
-+ case MEDIA_BUS_FMT_RGB888_1X24:
-+ return V4L2_COLORSPACE_SRGB;
-+ case MEDIA_BUS_FMT_UYVY8_1X16:
-+ return V4L2_COLORSPACE_SMPTE170M;
-+ default:
-+ return 0;
-+ }
-+}
-+
- static int tc358743_get_fmt(struct v4l2_subdev *sd,
- struct v4l2_subdev_state *sd_state,
- struct v4l2_subdev_format *format)
- {
- struct tc358743_state *state = to_state(sd);
-- u8 vi_rep = i2c_rd8(sd, VI_REP);
-
- if (format->pad != 0)
- return -EINVAL;
-@@ -1692,23 +1703,7 @@ static int tc358743_get_fmt(struct v4l2_
- format->format.height = state->timings.bt.height;
- format->format.field = V4L2_FIELD_NONE;
-
-- switch (vi_rep & MASK_VOUT_COLOR_SEL) {
-- case MASK_VOUT_COLOR_RGB_FULL:
-- case MASK_VOUT_COLOR_RGB_LIMITED:
-- format->format.colorspace = V4L2_COLORSPACE_SRGB;
-- break;
-- case MASK_VOUT_COLOR_601_YCBCR_LIMITED:
-- case MASK_VOUT_COLOR_601_YCBCR_FULL:
-- format->format.colorspace = V4L2_COLORSPACE_SMPTE170M;
-- break;
-- case MASK_VOUT_COLOR_709_YCBCR_FULL:
-- case MASK_VOUT_COLOR_709_YCBCR_LIMITED:
-- format->format.colorspace = V4L2_COLORSPACE_REC709;
-- break;
-- default:
-- format->format.colorspace = 0;
-- break;
-- }
-+ format->format.colorspace = tc358743_g_colorspace(format->format.code);
-
- return 0;
- }
-@@ -1722,19 +1717,14 @@ static int tc358743_set_fmt(struct v4l2_
- u32 code = format->format.code; /* is overwritten by get_fmt */
- int ret = tc358743_get_fmt(sd, sd_state, format);
-
-- format->format.code = code;
-+ if (code == MEDIA_BUS_FMT_RGB888_1X24 ||
-+ code == MEDIA_BUS_FMT_UYVY8_1X16)
-+ format->format.code = code;
-+ format->format.colorspace = tc358743_g_colorspace(format->format.code);
-
- if (ret)
- return ret;
-
-- switch (code) {
-- case MEDIA_BUS_FMT_RGB888_1X24:
-- case MEDIA_BUS_FMT_UYVY8_1X16:
-- break;
-- default:
-- return -EINVAL;
-- }
--
- if (format->which == V4L2_SUBDEV_FORMAT_TRY)
- return 0;
-
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -1517,6 +1517,109 @@ static int xhci_check_ep0_maxpacket(stru
+@@ -1519,6 +1519,109 @@ static int xhci_check_ep0_maxpacket(stru
}
/*
* non-error returns are a promise to giveback() the urb later
* we drop ownership so next owner (or urb unlink) can get it
*/
-@@ -5381,6 +5484,7 @@ static const struct hc_driver xhci_hc_dr
+@@ -5383,6 +5486,7 @@ static const struct hc_driver xhci_hc_dr
.endpoint_reset = xhci_endpoint_reset,
.check_bandwidth = xhci_check_bandwidth,
.reset_bandwidth = xhci_reset_bandwidth,
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -1606,7 +1606,7 @@ static void xhci_fixup_endpoint(struct u
+@@ -1608,7 +1608,7 @@ static void xhci_fixup_endpoint(struct u
return;
}
ctrl_ctx->add_flags = xhci_get_endpoint_flag_from_index(ep_index);
return;
val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
-@@ -1444,7 +1445,7 @@ static struct phy_driver broadcom_driver
+@@ -1461,7 +1462,7 @@ static struct phy_driver broadcom_driver
.link_change_notify = bcm54xx_link_change_notify,
}, {
.phy_id = PHY_ID_BCM54210E,
.name = "Broadcom BCM54210E",
/* PHY_GBIT_FEATURES */
.flags = PHY_ALWAYS_CALL_SUSPEND,
-@@ -1462,6 +1463,13 @@ static struct phy_driver broadcom_driver
+@@ -1479,6 +1480,13 @@ static struct phy_driver broadcom_driver
.set_wol = bcm54xx_phy_set_wol,
.led_brightness_set = bcm_phy_led_brightness_set,
}, {
.phy_id = PHY_ID_BCM5461,
.phy_id_mask = 0xfffffff0,
.name = "Broadcom BCM5461",
-@@ -1728,7 +1736,8 @@ module_phy_driver(broadcom_drivers);
+@@ -1745,7 +1753,8 @@ module_phy_driver(broadcom_drivers);
static const struct mdio_device_id __maybe_unused broadcom_tbl[] = {
{ PHY_ID_BCM5411, 0xfffffff0 },
{ PHY_ID_BCM5421, 0xfffffff0 },
if (IS_ERR(data->cdev_data[cdev_idx].cdev)) {
dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]);
-@@ -347,9 +410,11 @@ static void emc2305_unset_tz(struct devi
+@@ -353,9 +416,11 @@ static void emc2305_unset_tz(struct devi
int i;
/* Unregister cooling device. */
}
static umode_t
-@@ -571,11 +636,18 @@ static int emc2305_probe(struct i2c_clie
+@@ -577,11 +642,18 @@ static int emc2305_probe(struct i2c_clie
data->pwm_separate = pdata->pwm_separate;
for (i = 0; i < EMC2305_PWM_MAX; i++)
data->pwm_min[i] = pdata->pwm_min[i];
}
data->hwmon_dev = devm_hwmon_device_register_with_info(dev, "emc2305", data,
-@@ -596,6 +668,12 @@ static int emc2305_probe(struct i2c_clie
+@@ -602,6 +674,12 @@ static int emc2305_probe(struct i2c_clie
return ret;
}
return 0;
}
-@@ -610,6 +688,7 @@ static void emc2305_remove(struct i2c_cl
+@@ -616,6 +694,7 @@ static void emc2305_remove(struct i2c_cl
static struct i2c_driver emc2305_driver = {
.driver = {
.name = "emc2305",
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -1478,8 +1478,14 @@ static struct phy_driver broadcom_driver
+@@ -1495,8 +1495,14 @@ static struct phy_driver broadcom_driver
.phy_id_mask = 0xffffffff,
.name = "Broadcom BCM54213PE",
/* PHY_GBIT_FEATURES */
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
-@@ -1395,6 +1395,7 @@ int xhci_endpoint_init(struct xhci_hcd *
+@@ -1397,6 +1397,7 @@ int xhci_endpoint_init(struct xhci_hcd *
unsigned int ep_index;
struct xhci_ep_ctx *ep_ctx;
struct xhci_ring *ep_ring;
unsigned int max_packet;
enum xhci_ring_type ring_type;
u32 max_esit_payload;
-@@ -1404,6 +1405,8 @@ int xhci_endpoint_init(struct xhci_hcd *
+@@ -1406,6 +1407,8 @@ int xhci_endpoint_init(struct xhci_hcd *
unsigned int mult;
unsigned int avg_trb_len;
unsigned int err_count = 0;
ep_index = xhci_get_endpoint_index(&ep->desc);
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
-@@ -1439,9 +1442,35 @@ int xhci_endpoint_init(struct xhci_hcd *
+@@ -1441,9 +1444,35 @@ int xhci_endpoint_init(struct xhci_hcd *
mult = xhci_get_endpoint_mult(udev, ep);
max_packet = usb_endpoint_maxp(&ep->desc);
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
-@@ -3656,6 +3656,48 @@ static int xhci_align_td(struct xhci_hcd
+@@ -3659,6 +3659,48 @@ static int xhci_align_td(struct xhci_hcd
return 1;
}
/* This is very similar to what ehci-q.c qtd_fill() does */
int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
struct urb *urb, int slot_id, unsigned int ep_index)
-@@ -3810,6 +3852,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3813,6 +3855,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
}
check_trb_math(urb, enqd_len);
giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
start_cycle, start_trb);
return 0;
-@@ -3958,6 +4002,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3961,6 +4005,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
/* Event on completion */
field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);
+++ /dev/null
-From c921a4d6cfed23d22f583dd18a25f61fdde3735a Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.com>
-Date: Thu, 27 May 2021 11:46:30 +0100
-Subject: [PATCH] Allow RESET_BRCMSTB on ARCH_BCM2835
-
----
- drivers/reset/Kconfig | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/reset/Kconfig
-+++ b/drivers/reset/Kconfig
-@@ -51,7 +51,7 @@ config RESET_BERLIN
-
- config RESET_BRCMSTB
- tristate "Broadcom STB reset controller"
-- depends on ARCH_BRCMSTB || COMPILE_TEST
-+ depends on ARCH_BRCMSTB || ARCH_BCM2835 || COMPILE_TEST
- default ARCH_BRCMSTB
- help
- This enables the reset controller driver for Broadcom STB SoCs using
+ fb_info->node = i;
+ }
- if (!fb_info->modelist.prev || !fb_info->modelist.next)
- INIT_LIST_HEAD(&fb_info->modelist);
-@@ -411,7 +415,6 @@ static int do_register_framebuffer(struc
+ if (i >= FB_MAX)
+ return -ENXIO;
+@@ -414,7 +418,6 @@ static int do_register_framebuffer(struc
if (err < 0)
return err;
refcount_set(&fb_info->count, 1);
mutex_init(&fb_info->lock);
mutex_init(&fb_info->mm_lock);
-@@ -442,7 +445,7 @@ static int do_register_framebuffer(struc
+@@ -445,7 +448,7 @@ static int do_register_framebuffer(struc
pm_vt_switch_required(fb_info->device, true);
num_registered_fb++;
#ifdef CONFIG_GUMSTIX_AM200EPD
{
-@@ -503,6 +506,12 @@ static void do_unregister_framebuffer(st
+@@ -506,6 +509,12 @@ static void do_unregister_framebuffer(st
put_fb_info(fb_info);
}
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
-@@ -2083,6 +2083,7 @@ static void nvme_free_host_mem(struct nv
+@@ -2103,6 +2103,7 @@ static void nvme_free_host_mem(struct nv
dev->nr_host_mem_descs = 0;
}
static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
u32 chunk_size)
{
-@@ -2151,9 +2152,11 @@ out:
+@@ -2171,9 +2172,11 @@ out:
dev->host_mem_descs = NULL;
return -ENOMEM;
}
u64 min_chunk = min_t(u64, preferred, PAGE_SIZE * MAX_ORDER_NR_PAGES);
u64 hmminds = max_t(u32, dev->ctrl.hmminds * 4096, PAGE_SIZE * 2);
u64 chunk_size;
-@@ -2166,6 +2169,7 @@ static int nvme_alloc_host_mem(struct nv
+@@ -2186,6 +2189,7 @@ static int nvme_alloc_host_mem(struct nv
nvme_free_host_mem(dev);
}
}
static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
{
struct xhci_segment *seg = ring->first_seg;
-@@ -4786,7 +4790,7 @@ static u16 xhci_calculate_u1_timeout(str
+@@ -4788,7 +4792,7 @@ static u16 xhci_calculate_u1_timeout(str
}
}
timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc);
else
timeout_ns = udev->u1_params.sel;
-@@ -4850,7 +4854,7 @@ static u16 xhci_calculate_u2_timeout(str
+@@ -4852,7 +4856,7 @@ static u16 xhci_calculate_u2_timeout(str
}
}
static void blk_report_disk_dead(struct gendisk *disk, bool surprise)
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -734,6 +734,9 @@ static inline unsigned int blk_queue_dep
+@@ -789,6 +789,9 @@ static inline unsigned int blk_queue_dep
#define for_each_bio(_bio) \
for (; _bio; _bio = _bio->bi_next)
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -1061,8 +1061,7 @@ void b53_get_strings(struct dsa_switch *
+@@ -1086,8 +1086,7 @@ void b53_get_strings(struct dsa_switch *
if (stringset == ETH_SS_STATS) {
for (i = 0; i < mib_size; i++)
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -2343,13 +2343,16 @@ int b53_eee_init(struct dsa_switch *ds,
+@@ -2387,13 +2387,16 @@ int b53_eee_init(struct dsa_switch *ds,
}
EXPORT_SYMBOL(b53_eee_init);
return 0;
}
EXPORT_SYMBOL(b53_get_mac_eee);
-@@ -2359,9 +2362,6 @@ int b53_set_mac_eee(struct dsa_switch *d
+@@ -2403,9 +2406,6 @@ int b53_set_mac_eee(struct dsa_switch *d
struct b53_device *dev = ds->priv;
struct ethtool_keee *p = &dev->ports[port].eee;
p->eee_enabled = e->eee_enabled;
b53_eee_enable_set(ds, port, e->eee_enabled);
-@@ -2418,6 +2418,7 @@ static const struct dsa_switch_ops b53_s
+@@ -2462,6 +2462,7 @@ static const struct dsa_switch_ops b53_s
.port_setup = b53_setup_port,
.port_enable = b53_enable_port,
.port_disable = b53_disable_port,
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -2537,6 +2537,19 @@ static const struct b53_chip_data b53_sw
+@@ -2581,6 +2581,19 @@ static const struct b53_chip_data b53_sw
.jumbo_size_reg = B53_JUMBO_MAX_SIZE,
},
{
.chip_id = BCM53115_DEVICE_ID,
.dev_name = "BCM53115",
.vlans = 4096,
-@@ -2917,6 +2930,7 @@ int b53_switch_detect(struct b53_device
+@@ -2961,6 +2974,7 @@ int b53_switch_detect(struct b53_device
return ret;
switch (id32) {
#include <linux/module.h>
#include <linux/platform_data/b53.h>
#include <linux/phy.h>
-@@ -1202,6 +1203,10 @@ static int b53_setup(struct dsa_switch *
+@@ -1227,6 +1228,10 @@ static int b53_setup(struct dsa_switch *
*/
ds->untag_vlan_aware_bridge_pvid = true;
ret = b53_reset_switch(dev);
if (ret) {
dev_err(ds->dev, "failed to reset switch\n");
-@@ -2397,6 +2402,28 @@ static int b53_get_max_mtu(struct dsa_sw
+@@ -2441,6 +2446,28 @@ static int b53_get_max_mtu(struct dsa_sw
return B53_MAX_MTU;
}
static const struct phylink_mac_ops b53_phylink_mac_ops = {
.mac_select_pcs = b53_phylink_mac_select_pcs,
.mac_config = b53_phylink_mac_config,
-@@ -2421,6 +2448,7 @@ static const struct dsa_switch_ops b53_s
+@@ -2465,6 +2492,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,
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
-@@ -220,6 +220,13 @@
+@@ -225,6 +225,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 */
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -2338,6 +2338,9 @@ int b53_eee_init(struct dsa_switch *ds,
+@@ -2382,6 +2382,9 @@ int b53_eee_init(struct dsa_switch *ds,
{
int ret;
ret = phy_init_eee(phy, false);
if (ret)
return 0;
-@@ -2352,7 +2355,7 @@ bool b53_support_eee(struct dsa_switch *
+@@ -2396,7 +2399,7 @@ bool b53_support_eee(struct dsa_switch *
{
struct b53_device *dev = ds->priv;
#include <linux/module.h>
#include <linux/platform_data/b53.h>
#include <linux/phy.h>
-@@ -1322,24 +1323,17 @@ static void b53_adjust_63xx_rgmii(struct
+@@ -1360,24 +1361,17 @@ static void b53_adjust_63xx_rgmii(struct
phy_interface_t interface)
{
struct b53_device *dev = ds->priv;
dev_dbg(ds->dev, "Configured port %d for %s\n", port,
phy_modes(interface));
-@@ -1490,7 +1484,7 @@ static void b53_phylink_mac_config(struc
+@@ -1528,7 +1522,7 @@ static void b53_phylink_mac_config(struc
struct b53_device *dev = ds->priv;
int port = dp->index;
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
-@@ -2241,8 +2241,11 @@ enum dsa_tag_protocol b53_get_tag_protoc
+@@ -2285,8 +2285,11 @@ enum dsa_tag_protocol b53_get_tag_protoc
goto out;
}
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -1778,7 +1778,8 @@ static int b53_arl_op(struct b53_device
+@@ -1816,7 +1816,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);
/* Issue a read operation for this MAC */
ret = b53_arl_rw_op(dev, 1);
-@@ -2840,6 +2841,9 @@ static int b53_switch_init(struct b53_de
+@@ -2884,6 +2885,9 @@ static int b53_switch_init(struct b53_de
}
}
dev->num_ports = fls(dev->enabled_ports);
dev->ds->num_ports = min_t(unsigned int, dev->num_ports, DSA_MAX_PORTS);
-@@ -2941,10 +2945,24 @@ int b53_switch_detect(struct b53_device
+@@ -2985,10 +2989,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);
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -1764,6 +1764,45 @@ static int b53_arl_read(struct b53_devic
+@@ -1802,6 +1802,45 @@ static int b53_arl_read(struct b53_devic
return *idx >= dev->num_arl_bins ? -ENOSPC : -ENOENT;
}
static int b53_arl_op(struct b53_device *dev, int op, int port,
const unsigned char *addr, u16 vid, bool is_valid)
{
-@@ -1786,7 +1825,10 @@ static int b53_arl_op(struct b53_device
+@@ -1824,7 +1863,10 @@ static int b53_arl_op(struct b53_device
if (ret)
return ret;
/* If this is a read, just finish now */
if (op)
-@@ -1830,12 +1872,17 @@ static int b53_arl_op(struct b53_device
+@@ -1868,12 +1910,17 @@ static int b53_arl_op(struct b53_device
ent.is_static = true;
ent.is_age = false;
memcpy(ent.mac, addr, ETH_ALEN);
return b53_arl_rw_op(dev, 0);
}
-@@ -1847,12 +1894,6 @@ int b53_fdb_add(struct dsa_switch *ds, i
+@@ -1885,12 +1932,6 @@ int b53_fdb_add(struct dsa_switch *ds, i
struct b53_device *priv = ds->priv;
int ret;
mutex_lock(&priv->arl_mutex);
ret = b53_arl_op(priv, 0, port, addr, vid, true);
mutex_unlock(&priv->arl_mutex);
-@@ -1879,10 +1920,15 @@ EXPORT_SYMBOL(b53_fdb_del);
+@@ -1917,10 +1958,15 @@ EXPORT_SYMBOL(b53_fdb_del);
static int b53_arl_search_wait(struct b53_device *dev)
{
unsigned int timeout = 1000;
if (!(reg & ARL_SRCH_STDN))
return 0;
-@@ -1899,13 +1945,24 @@ static void b53_arl_search_rd(struct b53
+@@ -1937,13 +1983,24 @@ static void b53_arl_search_rd(struct b53
struct b53_arl_entry *ent)
{
u64 mac_vid;
}
static int b53_fdb_copy(int port, const struct b53_arl_entry *ent,
-@@ -1926,14 +1983,20 @@ int b53_fdb_dump(struct dsa_switch *ds,
+@@ -1964,14 +2021,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;
#include <linux/bcm47xx_nvram.h>
--- a/drivers/net/dsa/b53/b53_regs.h
+++ b/drivers/net/dsa/b53/b53_regs.h
-@@ -324,9 +324,10 @@
+@@ -329,9 +329,10 @@
#define ARLTBL_VID_MASK 0xfff
#define ARLTBL_DATA_PORT_ID_S_25 48
#define ARLTBL_DATA_PORT_ID_MASK_25 0xf
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -487,6 +487,9 @@ static int b53_flush_arl(struct b53_devi
+@@ -492,6 +492,9 @@ static int b53_flush_arl(struct b53_devi
{
unsigned int i;
b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL,
FAST_AGE_DONE | FAST_AGE_DYNAMIC | mask);
-@@ -511,6 +514,9 @@ out:
+@@ -516,6 +519,9 @@ out:
static int b53_fast_age_port(struct b53_device *dev, int port)
{
b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_PORT_CTRL, port);
return b53_flush_arl(dev, FAST_AGE_PORT);
-@@ -518,6 +524,9 @@ static int b53_fast_age_port(struct b53_
+@@ -523,6 +529,9 @@ static int b53_fast_age_port(struct b53_
static int b53_fast_age_vlan(struct b53_device *dev, u16 vid)
{
+++ /dev/null
-From 22ccaaca43440e90a3b68d2183045b42247dc4be 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:53 +0200
-Subject: [PATCH] net: dsa: b53: prevent SWITCH_CTRL access on BCM5325
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-BCM5325 doesn't implement SWITCH_CTRL register so we should avoid reading
-or writing it.
-
-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-8-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -361,11 +361,12 @@ static void b53_set_forwarding(struct b5
-
- b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt);
-
-- /* Include IMP port in dumb forwarding mode
-- */
-- b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt);
-- mgmt |= B53_MII_DUMB_FWDG_EN;
-- b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt);
-+ if (!is5325(dev)) {
-+ /* Include IMP port in dumb forwarding mode */
-+ b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt);
-+ mgmt |= B53_MII_DUMB_FWDG_EN;
-+ b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt);
-+ }
-
- /* Look at B53_UC_FWD_EN and B53_MC_FWD_EN to decide whether
- * frames should be flooded or not.
+++ /dev/null
-From 044d5ce2788b165798bfd173548e61bf7b6baf4d 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:54 +0200
-Subject: [PATCH] net: dsa: b53: fix IP_MULTICAST_CTRL on BCM5325
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-BCM5325 doesn't implement B53_UC_FWD_EN, B53_MC_FWD_EN or B53_IPMC_FWD_EN.
-
-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-9-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 18 +++++++++++-------
- drivers/net/dsa/b53/b53_regs.h | 1 +
- 2 files changed, 12 insertions(+), 7 deletions(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -366,14 +366,18 @@ static void b53_set_forwarding(struct b5
- b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt);
- mgmt |= B53_MII_DUMB_FWDG_EN;
- b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt);
-- }
-
-- /* Look at B53_UC_FWD_EN and B53_MC_FWD_EN to decide whether
-- * frames should be flooded or not.
-- */
-- b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt);
-- mgmt |= B53_UC_FWD_EN | B53_MC_FWD_EN | B53_IPMC_FWD_EN;
-- b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt);
-+ /* Look at B53_UC_FWD_EN and B53_MC_FWD_EN to decide whether
-+ * frames should be flooded or not.
-+ */
-+ b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt);
-+ mgmt |= B53_UC_FWD_EN | B53_MC_FWD_EN | B53_IPMC_FWD_EN;
-+ b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt);
-+ } else {
-+ b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt);
-+ mgmt |= B53_IP_MCAST_25;
-+ b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt);
-+ }
- }
-
- static void b53_enable_vlan(struct b53_device *dev, int port, bool enable,
---- a/drivers/net/dsa/b53/b53_regs.h
-+++ b/drivers/net/dsa/b53/b53_regs.h
-@@ -106,6 +106,7 @@
-
- /* IP Multicast control (8 bit) */
- #define B53_IP_MULTICAST_CTRL 0x21
-+#define B53_IP_MCAST_25 BIT(0)
- #define B53_IPMC_FWD_EN BIT(1)
- #define B53_UC_FWD_EN BIT(6)
- #define B53_MC_FWD_EN BIT(7)
+++ /dev/null
-From 800728abd9f83bda4de62a30ce62a8b41c242020 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:55 +0200
-Subject: [PATCH] net: dsa: b53: prevent DIS_LEARNING access on BCM5325
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-BCM5325 doesn't implement DIS_LEARNING register so we should avoid reading
-or writing it.
-
-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-10-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -593,6 +593,9 @@ static void b53_port_set_learning(struct
- {
- u16 reg;
-
-+ if (is5325(dev))
-+ return;
-+
- b53_read16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, ®);
- if (learning)
- reg &= ~BIT(port);
-@@ -2243,7 +2246,13 @@ int b53_br_flags_pre(struct dsa_switch *
- struct switchdev_brport_flags flags,
- struct netlink_ext_ack *extack)
- {
-- if (flags.mask & ~(BR_FLOOD | BR_MCAST_FLOOD | BR_LEARNING))
-+ struct b53_device *dev = ds->priv;
-+ unsigned long mask = (BR_FLOOD | BR_MCAST_FLOOD);
-+
-+ if (!is5325(dev))
-+ mask |= BR_LEARNING;
-+
-+ if (flags.mask & ~mask)
- return -EINVAL;
-
- return 0;
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -730,6 +730,11 @@ void b53_brcm_hdr_setup(struct dsa_switc
+@@ -747,6 +747,11 @@ void b53_brcm_hdr_setup(struct dsa_switc
hdr_ctl |= GC_FRM_MGMT_PORT_M;
b53_write8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, hdr_ctl);
+++ /dev/null
-From 37883bbc45a8555d6eca88d3a9730504d2dac86c 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:57 +0200
-Subject: [PATCH] net: dsa: b53: prevent GMII_PORT_OVERRIDE_CTRL access on
- BCM5325
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-BCM5325 doesn't implement GMII_PORT_OVERRIDE_CTRL register so we should
-avoid reading or writing it.
-PORT_OVERRIDE_RX_FLOW and PORT_OVERRIDE_TX_FLOW aren't defined on BCM5325
-and we should use PORT_OVERRIDE_LP_FLOW_25 instead.
-
-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-12-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 21 +++++++++++++++++----
- drivers/net/dsa/b53/b53_regs.h | 1 +
- 2 files changed, 18 insertions(+), 4 deletions(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -1279,6 +1279,8 @@ static void b53_force_link(struct b53_de
- if (port == dev->imp_port) {
- off = B53_PORT_OVERRIDE_CTRL;
- val = PORT_OVERRIDE_EN;
-+ } else if (is5325(dev)) {
-+ return;
- } else {
- off = B53_GMII_PORT_OVERRIDE_CTRL(port);
- val = GMII_PO_EN;
-@@ -1303,6 +1305,8 @@ static void b53_force_port_config(struct
- if (port == dev->imp_port) {
- off = B53_PORT_OVERRIDE_CTRL;
- val = PORT_OVERRIDE_EN;
-+ } else if (is5325(dev)) {
-+ return;
- } else {
- off = B53_GMII_PORT_OVERRIDE_CTRL(port);
- val = GMII_PO_EN;
-@@ -1333,10 +1337,19 @@ static void b53_force_port_config(struct
- return;
- }
-
-- if (rx_pause)
-- reg |= PORT_OVERRIDE_RX_FLOW;
-- if (tx_pause)
-- reg |= PORT_OVERRIDE_TX_FLOW;
-+ if (rx_pause) {
-+ if (is5325(dev))
-+ reg |= PORT_OVERRIDE_LP_FLOW_25;
-+ else
-+ reg |= PORT_OVERRIDE_RX_FLOW;
-+ }
-+
-+ if (tx_pause) {
-+ if (is5325(dev))
-+ reg |= PORT_OVERRIDE_LP_FLOW_25;
-+ else
-+ reg |= PORT_OVERRIDE_TX_FLOW;
-+ }
-
- b53_write8(dev, B53_CTRL_PAGE, off, reg);
- }
---- a/drivers/net/dsa/b53/b53_regs.h
-+++ b/drivers/net/dsa/b53/b53_regs.h
-@@ -95,6 +95,7 @@
- #define PORT_OVERRIDE_SPEED_10M (0 << PORT_OVERRIDE_SPEED_S)
- #define PORT_OVERRIDE_SPEED_100M (1 << PORT_OVERRIDE_SPEED_S)
- #define PORT_OVERRIDE_SPEED_1000M (2 << PORT_OVERRIDE_SPEED_S)
-+#define PORT_OVERRIDE_LP_FLOW_25 BIT(3) /* BCM5325 only */
- #define PORT_OVERRIDE_RV_MII_25 BIT(4) /* BCM5325 only */
- #define PORT_OVERRIDE_RX_FLOW BIT(4)
- #define PORT_OVERRIDE_TX_FLOW BIT(5)
+++ /dev/null
-From c00df1018791185ea398f78af415a2a0aaa0c79c 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:59 +0200
-Subject: [PATCH] net: dsa: b53: fix b53_imp_vlan_setup for BCM5325
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CPU port should be B53_CPU_PORT instead of B53_CPU_PORT_25 for
-B53_PVLAN_PORT_MASK register.
-
-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-14-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -543,6 +543,10 @@ void b53_imp_vlan_setup(struct dsa_switc
- unsigned int i;
- u16 pvlan;
-
-+ /* BCM5325 CPU port is at 8 */
-+ if ((is5325(dev) || is5365(dev)) && cpu_port == B53_CPU_PORT_25)
-+ cpu_port = B53_CPU_PORT;
-+
- /* Enable the IMP port to be in the same VLAN as the other ports
- * on a per-port basis such that we only have Port i and IMP in
- * the same VLAN.
+++ /dev/null
-From 966a83df36c6f27476ac3501771422e7852098bc 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 10:00:00 +0200
-Subject: [PATCH] net: dsa: b53: ensure BCM5325 PHYs are enabled
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-According to the datasheet, BCM5325 uses B53_PD_MODE_CTRL_25 register to
-disable clocking to individual PHYs.
-Only ports 1-4 can be enabled or disabled and the datasheet is explicit
-about not toggling BIT(0) since it disables the PLL power and the switch.
-
-Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
-Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
-Link: https://patch.msgid.link/20250614080000.1884236-15-noltari@gmail.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/dsa/b53/b53_common.c | 13 +++++++++++++
- drivers/net/dsa/b53/b53_regs.h | 5 ++++-
- 2 files changed, 17 insertions(+), 1 deletion(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -660,6 +660,19 @@ int b53_setup_port(struct dsa_switch *ds
- if (dsa_is_user_port(ds, port))
- b53_set_eap_mode(dev, port, EAP_MODE_SIMPLIFIED);
-
-+ if (is5325(dev) &&
-+ in_range(port, 1, 4)) {
-+ u8 reg;
-+
-+ b53_read8(dev, B53_CTRL_PAGE, B53_PD_MODE_CTRL_25, ®);
-+ reg &= ~PD_MODE_POWER_DOWN_PORT(0);
-+ if (dsa_is_unused_port(ds, port))
-+ reg |= PD_MODE_POWER_DOWN_PORT(port);
-+ else
-+ reg &= ~PD_MODE_POWER_DOWN_PORT(port);
-+ b53_write8(dev, B53_CTRL_PAGE, B53_PD_MODE_CTRL_25, reg);
-+ }
-+
- return 0;
- }
- EXPORT_SYMBOL(b53_setup_port);
---- a/drivers/net/dsa/b53/b53_regs.h
-+++ b/drivers/net/dsa/b53/b53_regs.h
-@@ -103,8 +103,11 @@
- #define PORT_OVERRIDE_SPEED_2000M BIT(6) /* BCM5301X only, requires setting 1000M */
- #define PORT_OVERRIDE_EN BIT(7) /* Use the register contents */
-
--/* Power-down mode control */
-+/* Power-down mode control (8 bit) */
- #define B53_PD_MODE_CTRL_25 0x0f
-+#define PD_MODE_PORT_MASK 0x1f
-+/* Bit 0 also powers down the switch. */
-+#define PD_MODE_POWER_DOWN_PORT(i) BIT(i)
-
- /* IP Multicast control (8 bit) */
- #define B53_IP_MULTICAST_CTRL 0x21
};
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
-@@ -1717,7 +1717,7 @@ static struct phy_driver broadcom_driver
+@@ -1734,7 +1734,7 @@ static struct phy_driver broadcom_driver
module_phy_driver(broadcom_drivers);
{ }
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
-@@ -5691,7 +5691,7 @@ MODULE_DESCRIPTION("Micrel PHY driver");
+@@ -5701,7 +5701,7 @@ MODULE_DESCRIPTION("Micrel PHY driver");
MODULE_AUTHOR("David J. Choi");
MODULE_LICENSE("GPL");
};
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
-@@ -884,7 +884,7 @@ MODULE_DESCRIPTION("SMSC PHY driver");
+@@ -885,7 +885,7 @@ MODULE_DESCRIPTION("SMSC PHY driver");
MODULE_AUTHOR("Herbert Valerio Riedel");
MODULE_LICENSE("GPL");
+++ /dev/null
-From 26f732791f2bcab18f59c61915bbe35225f30136 Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Sat, 12 Jul 2025 16:39:21 +0100
-Subject: [PATCH] Revert "leds: trigger: netdev: Configure LED blink interval
- for HW offload"
-
-This reverts commit c629c972b310af41e9e072febb6dae9a299edde6.
-
-While .led_blink_set() would previously put an LED into an unconditional
-permanently blinking state, the offending commit now uses same operation
-to (also?) set the blink timing of the netdev trigger when offloading.
-
-This breaks many if not all of the existing PHY drivers which offer
-offloading LED operations, as those drivers would just put the LED into
-blinking state after .led_blink_set() has been called.
-
-Unfortunately the change even made it into stable kernels for unknown
-reasons, so it should be reverted there as well.
-
-Fixes: c629c972b310a ("leds: trigger: netdev: Configure LED blink interval for HW offload")
-Link: https://lore.kernel.org/linux-leds/c6134e26-2e45-4121-aa15-58aaef327201@lunn.ch/T/#m9d6fe81bbcb273e59f12bbedbd633edd32118387
-Suggested-by: Andrew Lunn <andrew@lunn.ch>
-Cc: stable@vger.kernel.org
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-Reviewed-by: Andrew Lunn <andrew@lunn.ch>
-Link: https://lore.kernel.org/r/6dcc77ee1c9676891d6250d8994850f521426a0f.1752334655.git.daniel@makrotopia.org
-Signed-off-by: Lee Jones <lee@kernel.org>
----
- drivers/leds/trigger/ledtrig-netdev.c | 16 +++-------------
- 1 file changed, 3 insertions(+), 13 deletions(-)
-
---- a/drivers/leds/trigger/ledtrig-netdev.c
-+++ b/drivers/leds/trigger/ledtrig-netdev.c
-@@ -68,7 +68,6 @@ struct led_netdev_data {
- unsigned int last_activity;
-
- unsigned long mode;
-- unsigned long blink_delay;
- int link_speed;
- __ETHTOOL_DECLARE_LINK_MODE_MASK(supported_link_modes);
- u8 duplex;
-@@ -87,10 +86,6 @@ static void set_baseline_state(struct le
- /* Already validated, hw control is possible with the requested mode */
- if (trigger_data->hw_control) {
- led_cdev->hw_control_set(led_cdev, trigger_data->mode);
-- if (led_cdev->blink_set) {
-- led_cdev->blink_set(led_cdev, &trigger_data->blink_delay,
-- &trigger_data->blink_delay);
-- }
-
- return;
- }
-@@ -459,11 +454,10 @@ static ssize_t interval_store(struct dev
- size_t size)
- {
- struct led_netdev_data *trigger_data = led_trigger_get_drvdata(dev);
-- struct led_classdev *led_cdev = trigger_data->led_cdev;
- unsigned long value;
- int ret;
-
-- if (trigger_data->hw_control && !led_cdev->blink_set)
-+ if (trigger_data->hw_control)
- return -EINVAL;
-
- ret = kstrtoul(buf, 0, &value);
-@@ -472,13 +466,9 @@ static ssize_t interval_store(struct dev
-
- /* impose some basic bounds on the timer interval */
- if (value >= 5 && value <= 10000) {
-- if (trigger_data->hw_control) {
-- trigger_data->blink_delay = value;
-- } else {
-- cancel_delayed_work_sync(&trigger_data->work);
-+ cancel_delayed_work_sync(&trigger_data->work);
-
-- atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
-- }
-+ atomic_set(&trigger_data->interval, msecs_to_jiffies(value));
- set_baseline_state(trigger_data); /* resets timer */
- }
-
endif # MODULES
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
-@@ -999,6 +999,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
+@@ -1001,6 +1001,7 @@ size_t modinfo_attrs_count = ARRAY_SIZE(
static const char vermagic[] = VERMAGIC_STRING;
int try_to_force_load(struct module *mod, const char *reason)
{
#ifdef CONFIG_MODULE_FORCE_LOAD
-@@ -1010,6 +1011,7 @@ int try_to_force_load(struct module *mod
+@@ -1012,6 +1013,7 @@ int try_to_force_load(struct module *mod
return -ENOEXEC;
#endif
}
/* Parse tag=value strings from .modinfo section */
char *module_next_tag_pair(char *string, unsigned long *secsize)
-@@ -2093,9 +2095,11 @@ static void module_augment_kernel_taints
+@@ -2095,9 +2097,11 @@ static void module_augment_kernel_taints
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
{
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic = NULL;
-@@ -2109,6 +2113,7 @@ static int check_modinfo(struct module *
+@@ -2111,6 +2115,7 @@ static int check_modinfo(struct module *
info->name, modmagic, vermagic);
return -ENOEXEC;
}
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
u32));
INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
-@@ -2326,9 +2343,11 @@ static void __sk_free(struct sock *sk)
+@@ -2342,9 +2359,11 @@ static void __sk_free(struct sock *sk)
if (likely(sk->sk_net_refcnt))
sock_inuse_add(sock_net(sk), -1);
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -4256,6 +4256,8 @@ static __net_initdata struct pernet_oper
+@@ -4273,6 +4273,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void)
{
-LINUX_VERSION-6.12 = .42
-LINUX_KERNEL_HASH-6.12.42 = 4804528a29cd20309a0b41c30e5aeffc35fa21ee3358f4a706d4586d003bc1fb
+LINUX_VERSION-6.12 = .43
+LINUX_KERNEL_HASH-6.12.43 = 0fcbbbbcd456e87bbbfc8bf37af541fda62ccfcce76903503424fd101ef7bdee
+device_initcall(blk_notifications_init);
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -1696,4 +1696,12 @@ static inline bool bdev_can_atomic_write
+@@ -1751,4 +1751,12 @@ static inline bool bdev_can_atomic_write
#define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { }
}
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -2533,7 +2533,7 @@ void sk_setup_caps(struct sock *sk, stru
+@@ -2550,7 +2550,7 @@ void sk_setup_caps(struct sock *sk, stru
if (sk_is_tcp(sk))
sk->sk_route_caps |= NETIF_F_GSO;
if (sk->sk_route_caps & NETIF_F_GSO)
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -934,6 +937,10 @@ struct ata_port {
+@@ -935,6 +938,10 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
-@@ -2369,7 +2369,7 @@ MODULE_DEVICE_TABLE(of, sdhci_msm_dt_mat
+@@ -2383,7 +2383,7 @@ MODULE_DEVICE_TABLE(of, sdhci_msm_dt_mat
static const struct sdhci_ops sdhci_msm_ops = {
.reset = sdhci_and_cqhci_reset,
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
-@@ -1804,49 +1804,49 @@ static unsigned int sdhci_msm_get_min_cl
+@@ -1818,49 +1818,49 @@ static unsigned int sdhci_msm_get_min_cl
return SDHCI_MSM_MIN_CLOCK;
}
+#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -4792,6 +4792,9 @@ enum skb_ext_id {
+@@ -4798,6 +4798,9 @@ enum skb_ext_id {
#if IS_ENABLED(CONFIG_MCTP_FLOWS)
SKB_EXT_MCTP,
#endif
(transaction layer end-to-end CRC checking).
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
-@@ -1629,6 +1629,8 @@ void pci_walk_bus_locked(struct pci_bus
+@@ -1643,6 +1643,8 @@ void pci_walk_bus_locked(struct pci_bus
void *userdata);
int pci_cfg_space_size(struct pci_dev *dev);
unsigned char pci_bus_max_busnr(struct pci_bus *bus);
+++ /dev/null
-From 9c9a7ff9882fc6ba7d2f4050697e8bb80383e8dc Mon Sep 17 00:00:00 2001
-From: Shiji Yang <yangshiji66@outlook.com>
-Date: Wed, 18 Jun 2025 22:53:23 +0800
-Subject: [PATCH 11/11] MIPS: lantiq: falcon: sysctrl: fix request memory check
- logic
-
-request_mem_region() will return NULL instead of error code
-when the memory request fails. Therefore, we should check if
-the return value is non-zero instead of less than zero. In
-this way, this patch also fixes the build warnings:
-
-arch/mips/lantiq/falcon/sysctrl.c:214:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
- 214 | res_status.name) < 0) ||
- | ^
-arch/mips/lantiq/falcon/sysctrl.c:216:47: error: ordered comparison of pointer with integer zero [-Werror=extra]
- 216 | res_ebu.name) < 0) ||
- | ^
-arch/mips/lantiq/falcon/sysctrl.c:219:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
- 219 | res_sys[0].name) < 0) ||
- | ^
-arch/mips/lantiq/falcon/sysctrl.c:222:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
- 222 | res_sys[1].name) < 0) ||
- | ^
-arch/mips/lantiq/falcon/sysctrl.c:225:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
- 225 | res_sys[2].name) < 0))
- |
-
-Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
-Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
----
- arch/mips/lantiq/falcon/sysctrl.c | 23 ++++++++++-------------
- 1 file changed, 10 insertions(+), 13 deletions(-)
-
---- a/arch/mips/lantiq/falcon/sysctrl.c
-+++ b/arch/mips/lantiq/falcon/sysctrl.c
-@@ -210,19 +210,16 @@ void __init ltq_soc_init(void)
- of_node_put(np_syseth);
- of_node_put(np_sysgpe);
-
-- if ((request_mem_region(res_status.start, resource_size(&res_status),
-- res_status.name) < 0) ||
-- (request_mem_region(res_ebu.start, resource_size(&res_ebu),
-- res_ebu.name) < 0) ||
-- (request_mem_region(res_sys[0].start,
-- resource_size(&res_sys[0]),
-- res_sys[0].name) < 0) ||
-- (request_mem_region(res_sys[1].start,
-- resource_size(&res_sys[1]),
-- res_sys[1].name) < 0) ||
-- (request_mem_region(res_sys[2].start,
-- resource_size(&res_sys[2]),
-- res_sys[2].name) < 0))
-+ if ((!request_mem_region(res_status.start, resource_size(&res_status),
-+ res_status.name)) ||
-+ (!request_mem_region(res_ebu.start, resource_size(&res_ebu),
-+ res_ebu.name)) ||
-+ (!request_mem_region(res_sys[0].start, resource_size(&res_sys[0]),
-+ res_sys[0].name)) ||
-+ (!request_mem_region(res_sys[1].start, resource_size(&res_sys[1]),
-+ res_sys[1].name)) ||
-+ (!request_mem_region(res_sys[2].start, resource_size(&res_sys[2]),
-+ res_sys[2].name)))
- pr_err("Failed to request core resources");
-
- status_membase = ioremap(res_status.start,
+++ /dev/null
-From 844615dd0f2d95c018ec66b943e08af22b62aff3 Mon Sep 17 00:00:00 2001
-From: Shiji Yang <yangshiji66@outlook.com>
-Date: Thu, 3 Jul 2025 21:06:32 +0800
-Subject: [PATCH] MIPS: vpe-mt: add missing prototypes for
- vpe_{alloc,start,stop,free}
-
-These functions are exported but their prototypes are not defined.
-This patch adds the missing function prototypes to fix the following
-compilation warnings:
-
-arch/mips/kernel/vpe-mt.c:180:7: error: no previous prototype for 'vpe_alloc' [-Werror=missing-prototypes]
- 180 | void *vpe_alloc(void)
- | ^~~~~~~~~
-arch/mips/kernel/vpe-mt.c:198:5: error: no previous prototype for 'vpe_start' [-Werror=missing-prototypes]
- 198 | int vpe_start(void *vpe, unsigned long start)
- | ^~~~~~~~~
-arch/mips/kernel/vpe-mt.c:208:5: error: no previous prototype for 'vpe_stop' [-Werror=missing-prototypes]
- 208 | int vpe_stop(void *vpe)
- | ^~~~~~~~
-arch/mips/kernel/vpe-mt.c:229:5: error: no previous prototype for 'vpe_free' [-Werror=missing-prototypes]
- 229 | int vpe_free(void *vpe)
- | ^~~~~~~~
-
-Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
-Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
----
- arch/mips/include/asm/vpe.h | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/arch/mips/include/asm/vpe.h
-+++ b/arch/mips/include/asm/vpe.h
-@@ -119,4 +119,12 @@ void cleanup_tc(struct tc *tc);
-
- int __init vpe_module_init(void);
- void __exit vpe_module_exit(void);
-+
-+#ifdef CONFIG_MIPS_VPE_LOADER_MT
-+void *vpe_alloc(void);
-+int vpe_start(void *vpe, unsigned long start);
-+int vpe_stop(void *vpe);
-+int vpe_free(void *vpe);
-+#endif /* CONFIG_MIPS_VPE_LOADER_MT */
-+
- #endif /* _ASM_VPE_H */
--- a/drivers/mtd/spi-nor/spansion.c
+++ b/drivers/mtd/spi-nor/spansion.c
-@@ -828,9 +828,9 @@ static const struct flash_info spansion_
+@@ -859,9 +859,9 @@ static const struct flash_info spansion_
.name = "s25fs512s",
.size = SZ_64M,
.sector_size = SZ_256K,
+++ /dev/null
-From patchwork Thu May 22 20:25:55 2025
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Christian Marangi <ansuelsmth@gmail.com>
-X-Patchwork-Id: 14097271
-Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com
- [209.85.221.50])
- (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
- (No client certificate requested)
- by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE1BF2B9A9;
- Thu, 22 May 2025 20:26:28 +0000 (UTC)
-Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=209.85.221.50
-ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
- t=1747945590; cv=none;
- b=SJyQKJEIm31L7OgiCxpH5eSDCvy3pwWfc5Tm5ylnbA62aIfHLr9TAaJ3qgIEhatEmg1tASNg/kuDmfqVkvTcCgfN89i5AC/I6gvQRguLThtK4NHh5SuCKdUd49BWXk1X+Ma5cEIKEKY+Me0pO1q2XeLvwuWTFN3RHUkygO2Cias=
-ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
- s=arc-20240116; t=1747945590; c=relaxed/simple;
- bh=RcOtjmSun1IwEL5Wb3PSql0fo4oAT/kf0BO04Ne0FWo=;
- h=From:To:Cc:Subject:Date:Message-ID:MIME-Version;
- b=lOheyUFV/bVQ1HRRivMF7JOVhTelzBEnWB7rGJmANrNWl2gcgEf+xEHi3nWPULWal/ppIdrVL9LjC0v7KEKoHe6XJ/WmqmhJgrNKiUSUJQbnmUZgaser6iyO9XJUCjR3TlgdSnZ2A8dsLXVbiK2UPLe+GUdb0V5O5ZChOm6rVAM=
-ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
- dmarc=pass (p=none dis=none) header.from=gmail.com;
- spf=pass smtp.mailfrom=gmail.com;
- dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com
- header.b=U3Ibckvp; arc=none smtp.client-ip=209.85.221.50
-Authentication-Results: smtp.subspace.kernel.org;
- dmarc=pass (p=none dis=none) header.from=gmail.com
-Authentication-Results: smtp.subspace.kernel.org;
- spf=pass smtp.mailfrom=gmail.com
-Authentication-Results: smtp.subspace.kernel.org;
- dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com
- header.b="U3Ibckvp"
-Received: by mail-wr1-f50.google.com with SMTP id
- ffacd0b85a97d-3a367ec7840so3966539f8f.2;
- Thu, 22 May 2025 13:26:28 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=gmail.com; s=20230601; t=1747945587; x=1748550387;
- darn=vger.kernel.org;
- h=content-transfer-encoding:mime-version:message-id:date:subject:cc
- :to:from:from:to:cc:subject:date:message-id:reply-to;
- bh=xgvKtt5DybnIrKc6mWPJ7EZTeS6I4nUMUzu2bm2zMtQ=;
- b=U3IbckvpuScfyKSdVLd02B1axIbs/9630TXWceGPzDNFU/YHi8PIALyMXNVBZ5/DGb
- fSlmQmam2bC0j5pk1bg2xqWs7I9sCteTah3Ygxo9X1vXhD9PnqbhJfgvQJp3KrNoLwC4
- JdRzdVi/vjJIEEuMlveXpcanmLLn+BjOEYYMs8x3EZ3yLYQr7KkHtJ+V6HTWPsE47qA8
- mOdp/ysLZ2jLPihravIjN6BlUSGMz5EkdYudIljy3wYNiga385aw4aQsa79gd/J7RxjD
- o9GAIcFAtoRp4Co7G632DYC+zoYQw1G10ZfIzT7kOCPRZxoevlaGeRVxsgh9bCnsQ9LT
- 3aog==
-X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=1e100.net; s=20230601; t=1747945587; x=1748550387;
- h=content-transfer-encoding:mime-version:message-id:date:subject:cc
- :to:from:x-gm-message-state:from:to:cc:subject:date:message-id
- :reply-to;
- bh=xgvKtt5DybnIrKc6mWPJ7EZTeS6I4nUMUzu2bm2zMtQ=;
- b=Fdp0DTSGLe7u0fvh/rW+co2BBsFkL9sH5Y4cVO/uEyWrOuDZY4wEIY3k7tT9z/qusu
- qsBqrFaiXgv99S3sOK6e4buTvnX+yvbk5hBq7kKb+WUSdLnvo7am0NzjlVz3/8ksSosU
- g/6WFJbxG/UEf7eQS5ze9cOtfag1nj3qpj/wf1od2RAE8KLaGt1yT2RKXrxvWswjVtWc
- TVKIc5mEANR4fTG4AwfOVG6QBU1JfLpTBS41O9THoy/vk3BI9id6by4w3zsD8BSc4Z6W
- njvleK+s7I7draMy3YYcYM3etzGD2P5AiJj0NxoyEZ8hCSswjCDIcfQniPRhfblicRBT
- Bi+Q==
-X-Forwarded-Encrypted: i=1;
- AJvYcCU//xD5uHyFhB4sHqPQHkUS/SeqLIOqpGrEMtx0zyh2/T2x39VopI/PnTpe2ESaMCDbmRl8MurqOBOJ@vger.kernel.org,
- AJvYcCWlko+5ICQgXGZZ6qZxD3WWDXE1EmkOd7Tw+6qOZDni1suR0Um5tG1VcHHtIJIp034hXQ7Tj5WK3veOVQgD@vger.kernel.org,
- AJvYcCXnJcB9/SJexBqJAU7vPtjnJ2eKMHLPx+eHgLCSNvPKpkH7r5TU+eAOzfjqSPvmxKNRZXM/L/CxkyxDzp+n@vger.kernel.org
-X-Gm-Message-State: AOJu0Ywgx5kKVjnck8zcNF5jiJmr1aap8FGVVIFxqqFyLqAdMsRpJ5RM
- YGVflzDLCHubLU2D5IwFoaoiTDyGi/eHphmIPndSUeFP8moWY/T6O3Pd
-X-Gm-Gg: ASbGncunHQP8921RyvQsddVmY7ua8h+QTVvMvQHB4kaRgHeeD58OPdZJCqc3cNVNIP1
- X/LZAzqXAmd7j1ls65igxC/kCtPSyDnS4zh1hu6AFlttxuOfgdWgiXbFyqdozanfhYDRhD11FD6
- aAseq7i2gRb72LDgkGGmwREbBnHgtugTuSboaAJnCaoVVhU53SdpG0XfrAJBxVVHKFRv+WLtktr
- o0itJiaG5BklL3SQ7I36EqdExH7yo3mPByvwYI5zarwBqgENcIqxoMbum72iweT8YSB7p6h0iMo
- /dPKuoYps8Nt9k6kkL6oF2SkVLjTvYDQ4kna9JVBqwP0UdjBgTo+FMZBNy6UNnEnJC+4gKrLnE+
- I1asottOJwbm+C7Ke4/O9
-X-Google-Smtp-Source:
- AGHT+IE/fBAh0wuvEHRV8Pp3re+RzxCwE85Zo4u5IxHZMcKKHBmdPi+/PvNmPZSoI/27B1urc+XZXg==
-X-Received: by 2002:a05:6000:2281:b0:3a3:7be3:cba9 with SMTP id
- ffacd0b85a97d-3a37be3cebdmr9761395f8f.18.1747945586791;
- Thu, 22 May 2025 13:26:26 -0700 (PDT)
-Received: from localhost.localdomain (93-34-88-225.ip49.fastwebnet.it.
- [93.34.88.225])
- by smtp.googlemail.com with ESMTPSA id
- ffacd0b85a97d-3a35ca5a03fsm23883073f8f.22.2025.05.22.13.26.25
- (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
- Thu, 22 May 2025 13:26:25 -0700 (PDT)
-From: Christian Marangi <ansuelsmth@gmail.com>
-To: Bjorn Andersson <andersson@kernel.org>,
- Michael Turquette <mturquette@baylibre.com>,
- Stephen Boyd <sboyd@kernel.org>,
- Christian Marangi <ansuelsmth@gmail.com>,
- linux-arm-msm@vger.kernel.org,
- linux-clk@vger.kernel.org,
- linux-kernel@vger.kernel.org
-Cc: stable@vger.kernel.org
-Subject: [PATCH] clk: qcom: gcc-ipq8074: fix broken freq table for
- nss_port6_tx_clk_src
-Date: Thu, 22 May 2025 22:25:55 +0200
-Message-ID: <20250522202600.4028-1-ansuelsmth@gmail.com>
-X-Mailer: git-send-email 2.48.1
-Precedence: bulk
-X-Mailing-List: linux-arm-msm@vger.kernel.org
-List-Id: <linux-arm-msm.vger.kernel.org>
-List-Subscribe: <mailto:linux-arm-msm+subscribe@vger.kernel.org>
-List-Unsubscribe: <mailto:linux-arm-msm+unsubscribe@vger.kernel.org>
-MIME-Version: 1.0
-
-With the conversion done by commit e88f03230dc0 ("clk: qcom: gcc-ipq8074:
-rework nss_port5/6 clock to multiple conf") a Copy-Paste error was made
-for the nss_port6_tx_clk_src frequency table.
-
-This was caused by the wrong setting of the parent in
-ftbl_nss_port6_tx_clk_src that was wrongly set to P_UNIPHY1_RX instead
-of P_UNIPHY2_TX.
-
-This cause the UNIPHY2 port to malfunction when it needs to be scaled to
-higher clock. The malfunction was observed with the example scenario
-with an Aquantia 10G PHY connected and a speed higher than 1G (example
-2.5G)
-
-Fix the broken frequency table to restore original functionality.
-
-Cc: stable@vger.kernel.org
-Fixes: e88f03230dc0 ("clk: qcom: gcc-ipq8074: rework nss_port5/6 clock to multiple conf")
-Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
----
- drivers/clk/qcom/gcc-ipq8074.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/clk/qcom/gcc-ipq8074.c
-+++ b/drivers/clk/qcom/gcc-ipq8074.c
-@@ -1895,10 +1895,10 @@ static const struct freq_conf ftbl_nss_p
- static const struct freq_multi_tbl ftbl_nss_port6_tx_clk_src[] = {
- FMS(19200000, P_XO, 1, 0, 0),
- FM(25000000, ftbl_nss_port6_tx_clk_src_25),
-- FMS(78125000, P_UNIPHY1_RX, 4, 0, 0),
-+ FMS(78125000, P_UNIPHY2_TX, 4, 0, 0),
- FM(125000000, ftbl_nss_port6_tx_clk_src_125),
-- FMS(156250000, P_UNIPHY1_RX, 2, 0, 0),
-- FMS(312500000, P_UNIPHY1_RX, 1, 0, 0),
-+ FMS(156250000, P_UNIPHY2_TX, 2, 0, 0),
-+ FMS(312500000, P_UNIPHY2_TX, 1, 0, 0),
- { }
- };
-
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
-@@ -3185,6 +3185,18 @@ static const struct usb_device_id uvc_id
+@@ -3197,6 +3197,18 @@ static const struct usb_device_id uvc_id
.bInterfaceSubClass = 1,
.bInterfaceProtocol = 0,
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
#include <media/jpeg.h>
#include <media/v4l2-common.h>
-@@ -1344,9 +1349,149 @@ static void uvc_video_decode_data(struct
+@@ -1353,9 +1358,149 @@ static void uvc_video_decode_data(struct
uvc_urb->async_operations++;
}
/* Mark the buffer as done if the EOF marker is set. */
if (data[1] & UVC_STREAM_EOF && buf->bytesused != 0) {
uvc_dbg(stream->dev, FRAME, "Frame complete (EOF found)\n");
-@@ -1928,6 +2073,8 @@ static int uvc_init_video_isoc(struct uv
+@@ -1937,6 +2082,8 @@ static int uvc_init_video_isoc(struct uv
if (npackets == 0)
return -ENOMEM;