Merge pull request #1468 from kernelkit/fix-rpi-display

linux: Fix stability of Raspberry pi display 1
This commit is contained in:
Joachim Wiberg
2026-04-05 05:55:02 +02:00
committed by GitHub
43 changed files with 708 additions and 112 deletions
@@ -2,29 +2,18 @@
#include "infix.dtsi"
/ {
/* Dynamic GPU reservation */
gpu-reserved {
size = <0x0 0x10000000>; /* 256MB */
alignment = <0x0 0x1000000>; /* 16MB aligned */
alloc-ranges = <0x0 0x10000000 0x1 0x00000000>; /* Allow anywhere in RAM */
no-map;
};
/* CMA pool */
cma-reserved {
compatible = "shared-dma-pool";
size = <0x0 0x10000000>; /* 256MB */
alignment = <0x0 0x1000000>; /* 16MB aligned */
linux,cma-default;
reusable;
};
chosen {
/* 8250 auxiliary UART instead of pl011 */
stdout-path = "serial1:115200n8";
};
};
/* Override upstream 64MB CMA with 256MB for vc4 GPU */
&rmem {
cma: linux,cma {
size = <0x10000000>; /* 256MB */
};
};
&vc4 {
status = "okay";
+11 -1
View File
@@ -3,6 +3,16 @@ Change Log
All notable changes to the project are documented in this file.
[v26.04.0][UNRELEASED] -
-------------------------
### Changes
- Upgrade Linux kernel to 6.18.21 (LTS)
### Fixes
[v26.03.0][] - 2026-03-31
-------------------------
@@ -2025,7 +2035,7 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
- N/A
[buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.02.0...HEAD
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.03.0...HEAD
[v26.03.0]: https://github.com/kernelkit/infix/compare/v26.02.0...v26.03.0
[v26.02.0]: https://github.com/kernelkit/infix/compare/v26.01.0...v26.02.0
[v26.01.0]: https://github.com/kernelkit/infix/compare/v25.11.0...v26.01.0
@@ -1,8 +1,9 @@
From 657a79b59e67bac4af66f63bcf740238af399aba Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 19 Sep 2023 18:38:10 +0200
Subject: [PATCH 01/33] net: phy: marvell10g: Support firmware loading on
Subject: [PATCH 01/41] net: phy: marvell10g: Support firmware loading on
88X3310
Organization: Wires
When probing, if a device is waiting for firmware to be loaded into
its RAM, ask userspace for the binary and load it over XMDIO.
@@ -15,7 +16,7 @@ fall back.
1 file changed, 161 insertions(+)
diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 8fd42131cdbf..44294519231e 100644
index 8fd42131cdbf9..44294519231ed 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -25,6 +25,7 @@
@@ -1,8 +1,9 @@
From 6684303b2262468f91f4aab0755a35f8dc2ee141 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 21 Nov 2023 20:15:24 +0100
Subject: [PATCH 02/33] net: phy: marvell10g: Fix power-up when strapped to
Subject: [PATCH 02/41] net: phy: marvell10g: Fix power-up when strapped to
start powered down
Organization: Wires
On devices which are hardware strapped to start powered down (PDSTATE
== 1), make sure that we clear the power-down bit on all units
@@ -12,7 +13,7 @@ affected by this setting.
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 44294519231e..40439db49601 100644
index 44294519231ed..40439db49601d 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -322,11 +322,23 @@ static int mv3310_power_down(struct phy_device *phydev)
@@ -1,7 +1,8 @@
From ee1464a4becdb06df87ae167fb56d9ac1530512f Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 15 Nov 2023 20:58:42 +0100
Subject: [PATCH 03/33] net: phy: marvell10g: Add LED support for 88X3310
Subject: [PATCH 03/41] net: phy: marvell10g: Add LED support for 88X3310
Organization: Wires
Pickup the LEDs from the state in which the hardware reset or
bootloader left them, but also support further configuration via
@@ -21,7 +22,7 @@ Trigger support:
1 file changed, 422 insertions(+)
diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 40439db49601..7ae4744f147b 100644
index 40439db49601d..7ae4744f147bb 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -28,6 +28,7 @@
@@ -1,8 +1,9 @@
From cfe0f07454be8ab659b33fafd83a57b2d44f2fdf Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 12 Dec 2023 09:51:05 +0100
Subject: [PATCH 04/33] net: phy: marvell10g: Support LEDs tied to a single
Subject: [PATCH 04/41] net: phy: marvell10g: Support LEDs tied to a single
media side
Organization: Wires
In a combo-port setup, i.e. where both the copper and fiber interface
are available to the user, the LEDs may be physically located either
@@ -18,7 +19,7 @@ versa for the SFP cage.
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 7ae4744f147b..5e48355ffcef 100644
index 7ae4744f147bb..5e48355ffcef4 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -192,6 +192,9 @@ struct mv3310_chip {
@@ -1,7 +1,8 @@
From e0d9221901b235ffb4c0ea58748e8e5263eb0d9f Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 27 Mar 2024 10:10:19 +0100
Subject: [PATCH 05/33] net: phy: Do not resume PHY when attaching
Subject: [PATCH 05/41] net: phy: Do not resume PHY when attaching
Organization: Wires
The PHY should not start negotiating with its link-partner until
explicitly instructed to do so.
@@ -19,7 +20,7 @@ administratively down.
1 file changed, 1 deletion(-)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 2353d6eced68..9b0983453393 100644
index 2353d6eced68d..9b09834533933 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -1750,7 +1750,6 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
@@ -1,8 +1,9 @@
From 86cdec8b0959cf957b2811a23ddf77648161a402 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Mon, 4 Mar 2024 16:47:28 +0100
Subject: [PATCH 06/33] net: bridge: avoid classifying unknown multicast as
Subject: [PATCH 06/41] net: bridge: avoid classifying unknown multicast as
mrouters_only
Organization: Wires
Unknown multicast, MAC/IPv4/IPv6, should always be flooded according to
the per-port mcast_flood setting, as well as to detected and configured
@@ -26,7 +27,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
7 files changed, 57 insertions(+), 14 deletions(-)
diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h
index e52f8207ab27..306fa8a94c81 100644
index e52f8207ab278..306fa8a94c819 100644
--- a/include/uapi/linux/if_bridge.h
+++ b/include/uapi/linux/if_bridge.h
@@ -835,6 +835,7 @@ enum br_boolopt_id {
@@ -38,7 +39,7 @@ index e52f8207ab27..306fa8a94c81 100644
};
diff --git a/net/bridge/br.c b/net/bridge/br.c
index c37e52e2f29a..0759bc37d6f0 100644
index c37e52e2f29ad..0759bc37d6f0f 100644
--- a/net/bridge/br.c
+++ b/net/bridge/br.c
@@ -312,6 +312,9 @@ int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on,
@@ -61,7 +62,7 @@ index c37e52e2f29a..0759bc37d6f0 100644
/* shouldn't be called with unsupported options */
WARN_ON(1);
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 525d4eccd194..6278dfc9612f 100644
index 525d4eccd194a..6278dfc9612f5 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -89,10 +89,10 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
@@ -101,7 +102,7 @@ index 525d4eccd194..6278dfc9612f 100644
br_stp_timer_init(br);
br_multicast_init(br);
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index dea09096ad0f..f0a613238e0d 100644
index dea09096ad0fb..f0a613238e0d5 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -199,15 +199,20 @@ static struct net_bridge_port *maybe_deliver(
@@ -140,7 +141,7 @@ index dea09096ad0f..f0a613238e0d 100644
continue;
break;
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 2cbae0f9ae1f..0c539bf4bebe 100644
index 2cbae0f9ae1f0..0c539bf4bebec 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -186,9 +186,13 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
@@ -170,7 +171,7 @@ index 2cbae0f9ae1f..0c539bf4bebe 100644
br_multicast_flood(mdst, skb, brmctx, local_rcv, false);
}
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 5855eb050208..06641afb99a8 100644
index 5855eb0502085..06641afb99a8b 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -3836,6 +3836,11 @@ static void br_multicast_err_count(const struct net_bridge *br,
@@ -206,7 +207,7 @@ index 5855eb050208..06641afb99a8 100644
ipv6_addr_is_all_snoopers(&ipv6_hdr(skb)->daddr))
br_ip6_multicast_mrd_rcv(brmctx, pmctx, skb);
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index b9b2981c4841..ccbaaa96f7c7 100644
index b9b2981c48414..ccbaaa96f7c70 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -489,6 +489,7 @@ enum net_bridge_opts {
@@ -1,8 +1,9 @@
From 31794e03e7f1d66f7fdff708cdaa40453e591204 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Tue, 5 Mar 2024 06:44:41 +0100
Subject: [PATCH 07/33] net: bridge: Ignore router ports when forwarding L2
Subject: [PATCH 07/41] net: bridge: Ignore router ports when forwarding L2
multicast
Organization: Wires
Multicast router ports are either statically configured or learned from
control protocol traffic (IGMP/MLD/PIM). These protocols regulate IP
@@ -16,7 +17,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index ccbaaa96f7c7..d7187bead496 100644
index ccbaaa96f7c70..d7187bead4968 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -1097,7 +1097,10 @@ br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx,
@@ -1,8 +1,9 @@
From 984d59e5f06c3741e1c76daf4bed6883eb339e97 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Thu, 4 Apr 2024 16:36:30 +0200
Subject: [PATCH 08/33] net: bridge: drop delay for applying strict multicast
Subject: [PATCH 08/41] net: bridge: drop delay for applying strict multicast
filtering
Organization: Wires
This *local* patch drops the initial delay before applying strict multicast
filtering, introduced in [1] and recently updated in [2].
@@ -24,7 +25,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2 files changed, 8 insertions(+), 38 deletions(-)
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 06641afb99a8..bacff6c2e968 100644
index 06641afb99a8b..bacff6c2e9684 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1760,10 +1760,6 @@ static void br_ip6_multicast_querier_expired(struct timer_list *t)
@@ -163,7 +164,7 @@ index 06641afb99a8..bacff6c2e968 100644
#endif
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index d7187bead496..83dc15fdcefd 100644
index d7187bead4968..83dc15fdcefdc 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -80,7 +80,6 @@ struct bridge_mcast_own_query {
@@ -1,8 +1,9 @@
From e3f31e30e7086bdd0b9698deb0b036d5e8ebb99e Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Thu, 16 May 2024 14:51:54 +0200
Subject: [PATCH 09/33] net: bridge: Differentiate MDB additions from
Subject: [PATCH 09/41] net: bridge: Differentiate MDB additions from
modifications
Organization: Wires
Before this change, the reception of an IGMPv3 report (and analogously
for MLDv2) that adds a new group, would trigger two MDB RTM_NEWMDB
@@ -27,7 +28,7 @@ introducing a RTM_SETMDB events to be used in the latter scenario.
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
index dab9493c791b..40a3534f0f1d 100644
index dab9493c791b8..40a3534f0f1d7 100644
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
@@ -142,6 +142,8 @@ enum {
@@ -40,7 +41,7 @@ index dab9493c791b..40a3534f0f1d 100644
RTM_NEWNSID = 88,
#define RTM_NEWNSID RTM_NEWNSID
diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
index 400eb872b403..cd7a2cd0911a 100644
index 400eb872b4032..cd7a2cd0911ad 100644
--- a/net/bridge/br_mdb.c
+++ b/net/bridge/br_mdb.c
@@ -752,7 +752,7 @@ static int br_mdb_replace_group_sg(const struct br_mdb_config *cfg,
@@ -62,7 +63,7 @@ index 400eb872b403..cd7a2cd0911a 100644
if (br_multicast_should_handle_mode(brmctx, cfg->group.proto))
br_multicast_star_g_handle_mode(pg, cfg->filter_mode);
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index bacff6c2e968..a5f3e4935edc 100644
index bacff6c2e9684..a5f3e4935edc6 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -616,7 +616,7 @@ static void br_multicast_fwd_src_handle(struct net_bridge_group_src *src)
@@ -1,8 +1,9 @@
From 7f1e44c7216953f3b09e2aa6df4c739ce2e1d480 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Fri, 24 Nov 2023 23:29:55 +0100
Subject: [PATCH 10/33] nvmem: layouts: onie-tlv: Let device probe even when
Subject: [PATCH 10/41] nvmem: layouts: onie-tlv: Let device probe even when
TLV is invalid
Organization: Wires
Before this change, probing an NVMEM device, expected to contain a
valid TLV, would fail if it had not been provisioned yet. But an
@@ -17,7 +18,7 @@ simply refrain from registering any cells in those cases.
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/nvmem/layouts/onie-tlv.c b/drivers/nvmem/layouts/onie-tlv.c
index 0967a32319a2..48547d5bb502 100644
index 0967a32319a28..48547d5bb5020 100644
--- a/drivers/nvmem/layouts/onie-tlv.c
+++ b/drivers/nvmem/layouts/onie-tlv.c
@@ -197,7 +197,7 @@ static int onie_tlv_parse_table(struct nvmem_layout *layout)
@@ -1,8 +1,9 @@
From 080f229c35d686e8c260092e18caa39cbe833392 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Sun, 11 Aug 2024 11:27:35 +0200
Subject: [PATCH 11/33] net: usb: r8152: add r8153b support for link/activity
Subject: [PATCH 11/41] net: usb: r8152: add r8153b support for link/activity
LEDs
Organization: Wires
This patch adds support for the link/activity LEDs on the NanoPi R2S
and OrangePi R1 Plus.
@@ -18,7 +19,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
1 file changed, 8 insertions(+)
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 357f5c733d0b..e7aa0cffadc5 100644
index 357f5c733d0b5..e7aa0cffadc58 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -41,6 +41,11 @@
@@ -1,8 +1,9 @@
From 2040cffd47b80aa352b624ddaa66f47f85d5c88a Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Sun, 10 Aug 2025 18:52:54 +0200
Subject: [PATCH 12/33] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to
Subject: [PATCH 12/41] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to
match case
Organization: Wires
For ref. see: https://wiki.banana-pi.org/File:Bpi-r3_Metal_case.jpg
@@ -15,7 +16,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
index e7654dc9a1c9..4cc6aff07225 100644
index e7654dc9a1c9b..4cc6aff072256 100644
--- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
+++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
@@ -46,7 +46,7 @@ fan: pwm-fan {
@@ -1,8 +1,9 @@
From db4b35cf2ce8f06e9ed65b394728e846f92af4b7 Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Wed, 20 Aug 2025 21:38:24 +0200
Subject: [PATCH 13/33] drm/panel-simple: Add a timing for the Raspberry Pi 7"
Subject: [PATCH 13/41] drm/panel-simple: Add a timing for the Raspberry Pi 7"
panel
Organization: Wires
The Raspberry Pi 7" 800x480 panel uses a Toshiba TC358762 DSI
to DPI bridge chip, so there is a requirement for the timings
@@ -46,7 +47,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 271f93399193..75dbc3cb8135 100644
index 271f933991937..75dbc3cb81354 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -400,7 +400,8 @@ static int panel_simple_get_modes(struct drm_panel *panel,
@@ -1,7 +1,8 @@
From c6bdd72407392acd6f29e6a1554724953ec8590f Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Thu, 21 Aug 2025 11:20:23 +0200
Subject: [PATCH 14/33] input:touchscreen:edt-ft5x06: Add polled mode
Subject: [PATCH 14/41] input:touchscreen:edt-ft5x06: Add polled mode
Organization: Wires
Not all hardware has interrupts therefore we need
to poll the touchscreen.
@@ -10,7 +11,7 @@ to poll the touchscreen.
1 file changed, 58 insertions(+), 16 deletions(-)
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index bf498bd4dea9..30308d840935 100644
index bf498bd4dea96..30308d8409353 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -77,6 +77,9 @@
@@ -1,8 +1,9 @@
From 0361723f9ea674aab4e76f4a88471c1719976623 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 12 Mar 2024 10:27:24 +0100
Subject: [PATCH 15/33] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
Subject: [PATCH 15/41] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
PPU on 6393X
Organization: Wires
In a multi-chip setup, delays of up to 750ms are observed before the
device (6393X) signals completion of PPU initialization (Global 1,
@@ -12,7 +13,7 @@ register 0, bit 15). Therefore, increase the timeout threshold to 1s.
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 09002c853b78..22f4fe642578 100644
index 09002c853b78e..22f4fe642578c 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -87,7 +87,7 @@ int mv88e6xxx_write(struct mv88e6xxx_chip *chip, int addr, int reg, u16 val)
@@ -1,8 +1,9 @@
From d9cc0e3a04dec8b02edbb0510eaee73734e9fe1b Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 27 Mar 2024 15:52:43 +0100
Subject: [PATCH 16/33] net: dsa: mv88e6xxx: Improve indirect register access
Subject: [PATCH 16/41] net: dsa: mv88e6xxx: Improve indirect register access
perf on 6393
Organization: Wires
When operating in multi-chip mode, the 6393 family maps a subset of
commonly used global registers to the outermost address space (in
@@ -21,7 +22,7 @@ other accesses use the regular indirect interface.
5 files changed, 119 insertions(+)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 22f4fe642578..c51588e74aed 100644
index 22f4fe642578c..c51588e74aedb 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -6543,6 +6543,13 @@ static int mv88e6xxx_detect(struct mv88e6xxx_chip *chip)
@@ -39,7 +40,7 @@ index 22f4fe642578..c51588e74aed 100644
chip->info->prod_num, chip->info->name, rev);
diff --git a/drivers/net/dsa/mv88e6xxx/global1.h b/drivers/net/dsa/mv88e6xxx/global1.h
index 3dbb7a1b8fe1..5ea956aadecc 100644
index 3dbb7a1b8fe11..5ea956aadecc9 100644
--- a/drivers/net/dsa/mv88e6xxx/global1.h
+++ b/drivers/net/dsa/mv88e6xxx/global1.h
@@ -218,6 +218,9 @@
@@ -53,7 +54,7 @@ index 3dbb7a1b8fe1..5ea956aadecc 100644
#define MV88E6XXX_G1_CTL2 0x1c
#define MV88E6185_G1_CTL2_CASCADE_PORT_MASK 0xf000
diff --git a/drivers/net/dsa/mv88e6xxx/global2.h b/drivers/net/dsa/mv88e6xxx/global2.h
index 82f9b410de0b..3663645621c9 100644
index 82f9b410de0b8..3663645621c9d 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.h
+++ b/drivers/net/dsa/mv88e6xxx/global2.h
@@ -143,6 +143,9 @@
@@ -67,7 +68,7 @@ index 82f9b410de0b..3663645621c9 100644
#define MV88E6XXX_G2_EEPROM_CMD 0x14
#define MV88E6XXX_G2_EEPROM_CMD_BUSY 0x8000
diff --git a/drivers/net/dsa/mv88e6xxx/smi.c b/drivers/net/dsa/mv88e6xxx/smi.c
index a990271b7482..f54bb0e79030 100644
index a990271b74823..f54bb0e79030c 100644
--- a/drivers/net/dsa/mv88e6xxx/smi.c
+++ b/drivers/net/dsa/mv88e6xxx/smi.c
@@ -8,6 +8,8 @@
@@ -168,7 +169,7 @@ index a990271b7482..f54bb0e79030 100644
chip->smi_ops = &mv88e6xxx_smi_indirect_ops;
else
diff --git a/drivers/net/dsa/mv88e6xxx/smi.h b/drivers/net/dsa/mv88e6xxx/smi.h
index c6c71d5757f5..788cf68b7b33 100644
index c6c71d5757f5d..788cf68b7b334 100644
--- a/drivers/net/dsa/mv88e6xxx/smi.h
+++ b/drivers/net/dsa/mv88e6xxx/smi.h
@@ -31,6 +31,36 @@
@@ -1,8 +1,9 @@
From 8516fa6ca5c60461f61703525eb29efc2f90e83f Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Mon, 22 Apr 2024 23:18:01 +0200
Subject: [PATCH 17/33] net: dsa: mv88e6xxx: Honor ports being managed via
Subject: [PATCH 17/41] net: dsa: mv88e6xxx: Honor ports being managed via
in-band-status
Organization: Wires
Keep all link parameters in their unforced states when the port is
declared as being managed via in-band-status, and let the MAC
@@ -17,7 +18,7 @@ when in-band-status is being used.
1 file changed, 6 insertions(+)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index c51588e74aed..de230df48545 100644
index c51588e74aedb..de230df48545d 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -965,6 +965,9 @@ static void mv88e6xxx_mac_link_down(struct phylink_config *config,
@@ -1,8 +1,9 @@
From 46f0ce2051d0ddb753a663b5bc2a622758100899 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 24 Apr 2024 22:41:04 +0200
Subject: [PATCH 18/33] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
Subject: [PATCH 18/41] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
ports on 6393X
Organization: Wires
For packets with a DA in the IEEE reserved L2 group range, originating
from a CPU, forward it as normal, rather than classifying it as
@@ -33,7 +34,7 @@ forwarded like any other.
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
index 66b1b7277281..df19dfa5cc3d 100644
index 66b1b72772810..df19dfa5cc3d8 100644
--- a/drivers/net/dsa/mv88e6xxx/port.c
+++ b/drivers/net/dsa/mv88e6xxx/port.c
@@ -1434,6 +1434,23 @@ static int mv88e6393x_port_policy_write_all(struct mv88e6xxx_chip *chip,
@@ -1,8 +1,9 @@
From 07600da9729116e9d146a961a681312fd5945831 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 28 May 2024 10:38:42 +0200
Subject: [PATCH 19/33] net: dsa: tag_dsa: Use tag priority as initial
Subject: [PATCH 19/41] net: dsa: tag_dsa: Use tag priority as initial
skb->priority
Organization: Wires
Use the 3-bit priority field from the DSA tag as the initial packet
priority on ingress to the CPU.
@@ -23,7 +24,7 @@ implemented, support the setup that is likely to be the most common; a
1 file changed, 7 insertions(+)
diff --git a/net/dsa/tag_dsa.c b/net/dsa/tag_dsa.c
index 2a2c4fb61a65..a00ae6bf2971 100644
index 2a2c4fb61a65c..a00ae6bf29717 100644
--- a/net/dsa/tag_dsa.c
+++ b/net/dsa/tag_dsa.c
@@ -323,6 +323,13 @@ static struct sk_buff *dsa_rcv_ll(struct sk_buff *skb, struct net_device *dev,
@@ -1,8 +1,9 @@
From 3d7009324b7b0855621b1187cdd02f5cd1d10aae Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 16 Jan 2024 16:00:55 +0100
Subject: [PATCH 20/33] net: dsa: Support MDB memberships whose L2 addresses
Subject: [PATCH 20/41] net: dsa: Support MDB memberships whose L2 addresses
overlap
Organization: Wires
Multiple IP multicast groups (32 for v4, 2^80 for v6) map to the same
L2 address. This means that switchdev drivers may receive multiple MDB
@@ -33,7 +34,7 @@ which previously skipped reference countung on user ports.
1 file changed, 16 deletions(-)
diff --git a/net/dsa/switch.c b/net/dsa/switch.c
index 3d2feeea897b..628e8a884dde 100644
index 3d2feeea897b6..628e8a884dde5 100644
--- a/net/dsa/switch.c
+++ b/net/dsa/switch.c
@@ -164,14 +164,6 @@ static int dsa_port_do_mdb_add(struct dsa_port *dp,
@@ -1,7 +1,8 @@
From 3f046855852e41283e4855575974f376c4d82976 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Thu, 21 Mar 2024 19:12:15 +0100
Subject: [PATCH 21/33] net: dsa: Support EtherType based priority overrides
Subject: [PATCH 21/41] net: dsa: Support EtherType based priority overrides
Organization: Wires
---
include/net/dsa.h | 4 ++++
@@ -9,7 +10,7 @@ Subject: [PATCH 21/33] net: dsa: Support EtherType based priority overrides
2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 5cb456bf4639..c31d4e910f07 100644
index 5cb456bf46394..c31d4e910f075 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -958,6 +958,10 @@ struct dsa_switch_ops {
@@ -24,7 +25,7 @@ index 5cb456bf4639..c31d4e910f07 100644
/*
* Suspend and resume
diff --git a/net/dsa/user.c b/net/dsa/user.c
index f59d66f0975d..58174ad612d2 100644
index f59d66f0975d7..58174ad612d21 100644
--- a/net/dsa/user.c
+++ b/net/dsa/user.c
@@ -2336,6 +2336,34 @@ dsa_user_dcbnl_add_dscp_prio(struct net_device *dev, struct dcb_app *app)
@@ -1,8 +1,9 @@
From ab5c530c7dbf9f8dacf42231d4aa8331ae874c00 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Fri, 22 Mar 2024 16:15:43 +0100
Subject: [PATCH 22/33] net: dsa: mv88e6xxx: Support EtherType based priority
Subject: [PATCH 22/41] net: dsa: mv88e6xxx: Support EtherType based priority
overrides
Organization: Wires
---
drivers/net/dsa/mv88e6xxx/chip.c | 64 +++++++++++++++++++++++++++++
@@ -14,7 +15,7 @@ Subject: [PATCH 22/33] net: dsa: mv88e6xxx: Support EtherType based priority
6 files changed, 207 insertions(+), 4 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index de230df48545..c99aef8afa5d 100644
index de230df48545d..c99aef8afa5d0 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -1688,6 +1688,11 @@ static int mv88e6xxx_rmu_setup(struct mv88e6xxx_chip *chip)
@@ -117,7 +118,7 @@ index de230df48545..c99aef8afa5d 100644
static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index e073446ee7d0..5d5e7ab63fca 100644
index e073446ee7d02..5d5e7ab63fca3 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -301,6 +301,11 @@ struct mv88e6xxx_port {
@@ -170,7 +171,7 @@ index e073446ee7d0..5d5e7ab63fca 100644
struct mv88e6xxx_bus_ops {
diff --git a/drivers/net/dsa/mv88e6xxx/global2.c b/drivers/net/dsa/mv88e6xxx/global2.c
index 30a6ffa7817b..3f16a7ef3fa2 100644
index 30a6ffa7817b0..3f16a7ef3fa28 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.c
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
@@ -315,7 +315,7 @@ int mv88e6xxx_g2_atu_stats_get(struct mv88e6xxx_chip *chip, u16 *stats)
@@ -244,7 +245,7 @@ index 30a6ffa7817b..3f16a7ef3fa2 100644
* Offset 0x15: EEPROM Data (for 16-bit data access)
* Offset 0x15: EEPROM Addr (for 8-bit data access)
diff --git a/drivers/net/dsa/mv88e6xxx/global2.h b/drivers/net/dsa/mv88e6xxx/global2.h
index 3663645621c9..496269c26c50 100644
index 3663645621c9d..496269c26c508 100644
--- a/drivers/net/dsa/mv88e6xxx/global2.h
+++ b/drivers/net/dsa/mv88e6xxx/global2.h
@@ -138,6 +138,7 @@
@@ -266,7 +267,7 @@ index 3663645621c9..496269c26c50 100644
int mv88e6xxx_g2_trunk_mask_write(struct mv88e6xxx_chip *chip, int num,
bool hash, u16 mask);
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
index df19dfa5cc3d..e1fee09eae2f 100644
index df19dfa5cc3d8..e1fee09eae2fc 100644
--- a/drivers/net/dsa/mv88e6xxx/port.c
+++ b/drivers/net/dsa/mv88e6xxx/port.c
@@ -1560,6 +1560,52 @@ int mv88e6351_port_set_ether_type(struct mv88e6xxx_chip *chip, int port,
@@ -323,7 +324,7 @@ index df19dfa5cc3d..e1fee09eae2f 100644
* Offset 0x19: Port IEEE Priority Remapping Registers [4-7]
*/
diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h
index c1d2f99efb1c..d2ba9ed1f23e 100644
index c1d2f99efb1c6..d2ba9ed1f23ea 100644
--- a/drivers/net/dsa/mv88e6xxx/port.h
+++ b/drivers/net/dsa/mv88e6xxx/port.h
@@ -286,7 +286,18 @@
@@ -1,7 +1,8 @@
From 1a2c045f9e4fd595803b014bd85e2914b9003e8d Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 28 May 2024 11:04:22 +0200
Subject: [PATCH 23/33] net: dsa: mv88e6xxx: Add mqprio qdisc support
Subject: [PATCH 23/41] net: dsa: mv88e6xxx: Add mqprio qdisc support
Organization: Wires
Add support for attaching mqprio qdisc's to mv88e6xxx ports and use
the packet's traffic class as the outgoing priority when no PCP bits
@@ -29,7 +30,7 @@ handle the mapping down to the "real" number.
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index c99aef8afa5d..2c533aeb7374 100644
index c99aef8afa5d0..2c533aeb7374d 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -32,6 +32,7 @@
@@ -131,7 +132,7 @@ index c99aef8afa5d..2c533aeb7374 100644
return dsa_register_switch(ds);
diff --git a/net/dsa/tag_dsa.c b/net/dsa/tag_dsa.c
index a00ae6bf2971..55c296e0b5b0 100644
index a00ae6bf29717..55c296e0b5b0e 100644
--- a/net/dsa/tag_dsa.c
+++ b/net/dsa/tag_dsa.c
@@ -180,8 +180,10 @@ static struct sk_buff *dsa_xmit_ll(struct sk_buff *skb, struct net_device *dev,
@@ -1,8 +1,9 @@
From e21110ff341e8e98fd37682eb3697af164ab6a18 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 29 May 2024 13:20:41 +0200
Subject: [PATCH 24/33] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
Subject: [PATCH 24/41] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
are available
Organization: Wires
Switch the priority sourcing precdence to prefer VLAN PCP over IP
DSCP, when both are available.
@@ -26,7 +27,7 @@ main reasons for choosing the new default:
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 2c533aeb7374..969f772fcb27 100644
index 2c533aeb7374d..969f772fcb273 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3422,9 +3422,13 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
@@ -1,8 +1,9 @@
From 707470adc86e9a099e3660c1c6c7a50ec38c2aa9 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Tue, 26 Nov 2024 19:45:59 +0100
Subject: [PATCH 25/33] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
Subject: [PATCH 25/41] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
VLANs
Organization: Wires
Before this change, in a setup like the following, packets assigned to
VLAN 10 were forwarded between the switch ports, even though the
@@ -30,7 +31,7 @@ cause all packets assigned to these VLANs to properly terminated.
3 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 969f772fcb27..161ce87a8871 100644
index 969f772fcb273..161ce87a88716 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2611,7 +2611,7 @@ static int mv88e6xxx_port_broadcast_sync(struct mv88e6xxx_chip *chip, int port,
@@ -117,7 +118,7 @@ index 969f772fcb27..161ce87a8871 100644
return err;
diff --git a/include/net/switchdev.h b/include/net/switchdev.h
index 8346b0d29542..764cd3dd4645 100644
index 8346b0d29542c..764cd3dd46454 100644
--- a/include/net/switchdev.h
+++ b/include/net/switchdev.h
@@ -104,6 +104,10 @@ struct switchdev_obj_port_vlan {
@@ -132,7 +133,7 @@ index 8346b0d29542..764cd3dd4645 100644
#define SWITCHDEV_OBJ_PORT_VLAN(OBJ) \
diff --git a/net/dsa/user.c b/net/dsa/user.c
index 58174ad612d2..c0019d0c1172 100644
index 58174ad612d21..c0019d0c1172d 100644
--- a/net/dsa/user.c
+++ b/net/dsa/user.c
@@ -1796,6 +1796,8 @@ static int dsa_user_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
@@ -1,8 +1,9 @@
From 810739b589e9a754a62f2070abf39bab7c96122d Mon Sep 17 00:00:00 2001
From: Joachim Wiberg <troglobit@gmail.com>
Date: Thu, 16 Jan 2025 12:35:12 +0100
Subject: [PATCH 26/33] net: dsa: mv88e6xxx: collapse disabled state into
Subject: [PATCH 26/41] net: dsa: mv88e6xxx: collapse disabled state into
blocking
Organization: Wires
This patch changes the behavior of switchcore ports wrt. the port state.
Instead of disabling the port, the driver now treats the disabled state
@@ -22,7 +23,7 @@ Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
1 file changed, 2 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
index e1fee09eae2f..e28fdd21de38 100644
index e1fee09eae2fc..e28fdd21de38e 100644
--- a/drivers/net/dsa/mv88e6xxx/port.c
+++ b/drivers/net/dsa/mv88e6xxx/port.c
@@ -793,8 +793,6 @@ int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state)
@@ -1,8 +1,9 @@
From 33439041b14ff724f0d607df9bf46ae90415f493 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz <tobias@waldekranz.com>
Date: Wed, 12 Feb 2025 22:03:14 +0100
Subject: [PATCH 27/33] net: dsa: mv88e6xxx: Only activate LAG offloading when
Subject: [PATCH 27/41] net: dsa: mv88e6xxx: Only activate LAG offloading when
bridged
Organization: Wires
The current port isolation scheme for mv88e6xxx is detailed here:
https://lore.kernel.org/netdev/20220203101657.990241-1-tobias@waldekranz.com/
@@ -50,7 +51,7 @@ CPU; egress traffic always relies on software hashing.
1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 161ce87a8871..d379799c0a16 100644
index 161ce87a88716..d379799c0a168 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3058,6 +3058,7 @@ static int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
@@ -1,7 +1,8 @@
From 1c589a1949419a0f810a768f0d871d849c48073c Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Wed, 14 Jan 2026 18:22:41 +0100
Subject: [PATCH 28/33] net: dsa: mv88e6xxx: Add LED support for 6393X
Subject: [PATCH 28/41] net: dsa: mv88e6xxx: Add LED support for 6393X
Organization: Wires
Original commit:
commit 462277b926140ee2d231317e92afb6cabf640268
@@ -22,7 +23,7 @@ Date: Thu Nov 16 21:59:35 2023 +0100
4 files changed, 450 insertions(+)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index d379799c0a16..7bc3169839d3 100644
index d379799c0a168..7bc3169839d3b 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -5658,6 +5658,7 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = {
@@ -34,7 +35,7 @@ index d379799c0a16..7bc3169839d3 100644
.port_set_upstream_port = mv88e6393x_port_set_upstream_port,
.stats_snapshot = mv88e6390_g1_stats_snapshot,
diff --git a/drivers/net/dsa/mv88e6xxx/leds.c b/drivers/net/dsa/mv88e6xxx/leds.c
index ab3bc645da56..aa539df21f8d 100644
index ab3bc645da566..aa539df21f8d7 100644
--- a/drivers/net/dsa/mv88e6xxx/leds.c
+++ b/drivers/net/dsa/mv88e6xxx/leds.c
@@ -102,6 +102,58 @@ struct mv88e6xxx_led_hwconfig {
@@ -452,7 +453,7 @@ index ab3bc645da56..aa539df21f8d 100644
+ return ret;
+}
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
index e28fdd21de38..1985b8553611 100644
index e28fdd21de38e..1985b85536112 100644
--- a/drivers/net/dsa/mv88e6xxx/port.c
+++ b/drivers/net/dsa/mv88e6xxx/port.c
@@ -1604,6 +1604,39 @@ int mv88e6xxx_port_relinquish_ether_type(struct mv88e6xxx_chip *chip, int port)
@@ -496,7 +497,7 @@ index e28fdd21de38..1985b8553611 100644
* Offset 0x19: Port IEEE Priority Remapping Registers [4-7]
*/
diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h
index d2ba9ed1f23e..f4a56671fc4c 100644
index d2ba9ed1f23ea..f4a56671fc4c2 100644
--- a/drivers/net/dsa/mv88e6xxx/port.h
+++ b/drivers/net/dsa/mv88e6xxx/port.h
@@ -444,6 +444,9 @@
@@ -1,11 +1,12 @@
From bc38784c6cece06ea7de222187024eade94d6cbd Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Thu, 15 Jan 2026 22:47:37 +0100
Subject: [PATCH 29/33] wifi: brcmfmac: support deletion and recreation of
Subject: [PATCH 29/41] wifi: brcmfmac: support deletion and recreation of
primary interface
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Wires
The Broadcom FullMAC firmware does not allow the primary interface
(bsscfgidx 0) to be deleted - it always exists in firmware. However,
@@ -44,7 +45,7 @@ Signed-off-by: Mattias Walström <lazzer@gmail.com>
4 files changed, 186 insertions(+), 20 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index bb96b87b2a6e..bcd8a4724625 100644
index bb96b87b2a6e5..bcd8a4724625b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -124,6 +124,9 @@ struct cca_msrmnt_query {
@@ -332,7 +333,7 @@ index bb96b87b2a6e..bcd8a4724625 100644
err = brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_PHY_NOISE, &noise);
if (err) {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
index 273c80f2d483..ee7e9dc17dce 100644
index 273c80f2d483a..ee7e9dc17dce0 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
@@ -433,7 +433,9 @@ static inline struct brcmf_cfg80211_vif *wdev_to_vif(struct wireless_dev *wdev)
@@ -347,7 +348,7 @@ index 273c80f2d483..ee7e9dc17dce 100644
static inline struct brcmf_cfg80211_info *ndev_to_cfg(struct net_device *ndev)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 862a0336a0b5..08f265325ce4 100644
index 862a0336a0b59..08f265325ce41 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -933,9 +933,11 @@ static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx,
@@ -365,7 +366,7 @@ index 862a0336a0b5..08f265325ce4 100644
} else {
netif_stop_queue(ifp->ndev);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
index e1752a513c73..2dc0fbba271d 100644
index e1752a513c733..2dc0fbba271de 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
@@ -2222,8 +2222,13 @@ static struct wireless_dev *brcmf_p2p_create_p2pdev(struct brcmf_p2p_info *p2p,
@@ -1,11 +1,12 @@
From 1b42e2f4929b011f0e0d7c8ec552970164811a98 Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Mon, 19 Jan 2026 13:06:53 +0100
Subject: [PATCH 30/33] wifi: brcmfmac: check connection state before querying
Subject: [PATCH 30/41] wifi: brcmfmac: check connection state before querying
station info
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Wires
In station mode, brcmf_cfg80211_get_station() queries the firmware for
station info even when not connected to an AP. This results in error
@@ -23,7 +24,7 @@ Signed-off-by: Mattias Walström <lazzer@gmail.com>
1 file changed, 5 insertions(+)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index bcd8a4724625..f06658d4299b 100644
index bcd8a4724625b..f06658d4299b3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -3303,6 +3303,11 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev,
@@ -1,11 +1,12 @@
From 8de957dbd9fcb775b3fa27a0d396fd6f95aa9da8 Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Tue, 20 Jan 2026 20:12:10 +0100
Subject: [PATCH 31/33] wifi: brcmfmac: suppress log spam for
Subject: [PATCH 31/41] wifi: brcmfmac: suppress log spam for
regulatory-restricted channels
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Wires
When scanning, the driver attempts to set each channel and logs an
error if the firmware rejects it. For regulatory-restricted channels,
@@ -20,7 +21,7 @@ Signed-off-by: Mattias Walström <lazzer@gmail.com>
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index f06658d4299b..046e07875d00 100644
index f06658d4299b3..046e07875d001 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -8283,7 +8283,12 @@ brcmf_set_channel(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp,
@@ -1,11 +1,12 @@
From 0a25079b3ae16423aaad78637ed6fc29b44283d9 Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Tue, 20 Jan 2026 20:18:45 +0100
Subject: [PATCH 32/33] wifi: brcmfmac: reduce log noise during AP to station
Subject: [PATCH 32/41] wifi: brcmfmac: reduce log noise during AP to station
transition
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Wires
When transitioning from AP mode to station mode (e.g., hostapd stopping
and wpa_supplicant starting), several non-fatal errors can occur:
@@ -27,7 +28,7 @@ Signed-off-by: Mattias Walström <lazzer@gmail.com>
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 046e07875d00..0b04f98f6e4e 100644
index 046e07875d001..0b04f98f6e4ee 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -1130,13 +1130,15 @@ static void brcmf_scan_config_mpc(struct brcmf_if *ifp, int mpc)
@@ -1,8 +1,9 @@
From 81cb8dc071332896b5d3c49f6edd8b8331b86f2f Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Tue, 17 Feb 2026 21:59:59 +0100
Subject: [PATCH 33/33] net: phy: air_en8811h: add OF device table for
Subject: [PATCH 33/41] net: phy: air_en8811h: add OF device table for
auto-loading
Organization: Wires
mdio_uevent() only emits an OF-style MODALIAS via
of_device_uevent_modalias(), never the mdio: binary format that
@@ -20,7 +21,7 @@ rejects drivers that provide an of_match_table.
1 file changed, 6 insertions(+)
diff --git a/drivers/net/phy/air_en8811h.c b/drivers/net/phy/air_en8811h.c
index badd65f0ccee..b609465247a2 100644
index badd65f0ccee2..b609465247a28 100644
--- a/drivers/net/phy/air_en8811h.c
+++ b/drivers/net/phy/air_en8811h.c
@@ -1184,6 +1184,12 @@ static int en8811h_suspend(struct phy_device *phydev)
@@ -0,0 +1,114 @@
From 42de6ed86d2d6745c0a96515c5d39d29eb5a6695 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Fri, 20 Sep 2024 12:05:18 +0100
Subject: [PATCH 34/41] drm: vc4: dsi: enable video and then retry failed
transfers
Organization: Wires
The DSI block appears to be able to come up stuck in a condition where
it leaves the lanes in HS mode or just jabbering. This stops LP
transfers from completing as there is no LP time available. This is
signalled via the LP1 contention error.
Enabling video briefly clears that condition, so if we detect the
error condition, enable video mode and then retry.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dsi.c | 54 +++++++++++++++++++++++++++++------
1 file changed, 46 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 458e5d9879645..439d7a04127d8 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -286,6 +286,8 @@
DSI1_INT_PR_TO)
#define DSI0_STAT 0x2c
+# define DSI0_STAT_ERR_CONT_LP1 BIT(6)
+# define DSI0_STAT_ERR_CONT_LP0 BIT(5)
#define DSI0_HSTX_TO_CNT 0x30
#define DSI0_LPRX_TO_CNT 0x34
#define DSI0_TA_TO_CNT 0x38
@@ -1168,10 +1170,9 @@ static int vc4_dsi_bridge_attach(struct drm_bridge *bridge,
&dsi->bridge, flags);
}
-static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
- const struct mipi_dsi_msg *msg)
+static ssize_t vc4_dsi_transfer(struct vc4_dsi *dsi,
+ const struct mipi_dsi_msg *msg, bool log_error)
{
- struct vc4_dsi *dsi = host_to_dsi(host);
struct drm_device *drm = dsi->bridge.dev;
struct mipi_dsi_packet packet;
u32 pkth = 0, pktc = 0;
@@ -1281,10 +1282,12 @@ static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
DSI_PORT_WRITE(TXPKT1C, pktc);
if (!wait_for_completion_timeout(&dsi->xfer_completion,
- msecs_to_jiffies(1000))) {
- dev_err(&dsi->pdev->dev, "transfer interrupt wait timeout");
- dev_err(&dsi->pdev->dev, "instat: 0x%08x\n",
- DSI_PORT_READ(INT_STAT));
+ msecs_to_jiffies(500))) {
+ if (log_error) {
+ dev_err(&dsi->pdev->dev, "transfer interrupt wait timeout");
+ dev_err(&dsi->pdev->dev, "instat: 0x%08x, stat: 0x%08x\n",
+ DSI_PORT_READ(INT_STAT), DSI_PORT_READ(INT_STAT));
+ }
ret = -ETIMEDOUT;
} else {
ret = dsi->xfer_result;
@@ -1327,7 +1330,8 @@ static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
return ret;
reset_fifo_and_return:
- drm_err(drm, "DSI transfer failed, resetting: %d\n", ret);
+ if (log_error)
+ drm_err(drm, "DSI transfer failed, resetting: %d\n", ret);
DSI_PORT_WRITE(TXPKT1C, DSI_PORT_READ(TXPKT1C) & ~DSI_TXPKT1C_CMD_EN);
udelay(1);
@@ -1340,6 +1344,40 @@ static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
return ret;
}
+static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
+ const struct mipi_dsi_msg *msg)
+{
+ struct vc4_dsi *dsi = host_to_dsi(host);
+ u32 stat, disp0_ctrl;
+ int ret;
+
+ ret = vc4_dsi_transfer(dsi, msg, false);
+
+ if (ret == -ETIMEDOUT) {
+ stat = DSI_PORT_READ(STAT);
+ disp0_ctrl = DSI_PORT_READ(DISP0_CTRL);
+
+ DSI_PORT_WRITE(STAT, DSI_PORT_BIT(STAT_ERR_CONT_LP1));
+ if (!(disp0_ctrl & DSI_DISP0_ENABLE)) {
+ /* If video mode not enabled, then try recovering by
+ * enabling it briefly to clear FIFOs and the state.
+ */
+ disp0_ctrl |= DSI_DISP0_ENABLE;
+ DSI_PORT_WRITE(DISP0_CTRL, disp0_ctrl);
+ msleep(30);
+ disp0_ctrl &= ~DSI_DISP0_ENABLE;
+ DSI_PORT_WRITE(DISP0_CTRL, disp0_ctrl);
+ msleep(30);
+
+ ret = vc4_dsi_transfer(dsi, msg, true);
+ } else {
+ DRM_ERROR("DSI transfer failed whilst in HS mode stat: 0x%08x\n",
+ stat);
+ }
+ }
+ return ret;
+}
+
static const struct component_ops vc4_dsi_ops;
static int vc4_dsi_host_attach(struct mipi_dsi_host *host,
struct mipi_dsi_device *device)
@@ -0,0 +1,63 @@
From d7727e571a36e978685cc5457d69ee12bab5b95e Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Wed, 8 Jun 2022 17:23:47 +0100
Subject: [PATCH 35/41] drm: vc4: dsi: Clocks should be running before reset
Organization: Wires
The initialisation sequence differs slightly from the documentation
in that the clocks are meant to be running before resets and
similar.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dsi.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 439d7a04127d8..1eba498d276f8 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -926,6 +926,21 @@ static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
"Failed to set phy clock to %ld: %d\n", phy_clock, ret);
}
+ ret = clk_prepare_enable(dsi->escape_clock);
+ if (ret) {
+ drm_err(bridge->dev, "Failed to turn on DSI escape clock: %d\n",
+ ret);
+ return;
+ }
+
+ ret = clk_prepare_enable(dsi->pll_phy_clock);
+ if (ret) {
+ drm_err(bridge->dev, "Failed to turn on DSI PLL: %d\n", ret);
+ return;
+ }
+
+ hs_clock = clk_get_rate(dsi->pll_phy_clock);
+
/* Reset the DSI and all its fifos. */
DSI_PORT_WRITE(CTRL,
DSI_CTRL_SOFT_RESET_CFG |
@@ -984,21 +999,6 @@ static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
mdelay(1);
}
- ret = clk_prepare_enable(dsi->escape_clock);
- if (ret) {
- drm_err(bridge->dev, "Failed to turn on DSI escape clock: %d\n",
- ret);
- return;
- }
-
- ret = clk_prepare_enable(dsi->pll_phy_clock);
- if (ret) {
- drm_err(bridge->dev, "Failed to turn on DSI PLL: %d\n", ret);
- return;
- }
-
- hs_clock = clk_get_rate(dsi->pll_phy_clock);
-
/* Yes, we set the DSI0P/DSI1P pixel clock to the byte rate,
* not the pixel clock rate. DSIxP take from the APHY's byte,
* DDR2, or DDR4 clock (we use byte) and feed into the PV at
@@ -0,0 +1,60 @@
From ee825e39fc6d6d40a51bcf6de7fe3c553aa44c60 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Fri, 5 Apr 2024 17:51:55 +0100
Subject: [PATCH 36/41] drm/vc4: Ensure DSI is enabled for FIFO resets
Organization: Wires
The block must be enabled for the FIFO resets to be actioned,
so ensure this is the case.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dsi.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 1eba498d276f8..de963edefb760 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -400,7 +400,8 @@
# define DSI1_CTRL_DISABLE_DISP_ECCC BIT(1)
# define DSI0_CTRL_CTRL0 BIT(0)
# define DSI1_CTRL_EN BIT(0)
-# define DSI0_CTRL_RESET_FIFOS (DSI_CTRL_CLR_LDF | \
+# define DSI0_CTRL_RESET_FIFOS (DSI0_CTRL_CTRL0 | \
+ DSI_CTRL_CLR_LDF | \
DSI0_CTRL_CLR_PBCF | \
DSI0_CTRL_CLR_CPBCF | \
DSI0_CTRL_CLR_PDF | \
@@ -941,12 +942,17 @@ static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
hs_clock = clk_get_rate(dsi->pll_phy_clock);
- /* Reset the DSI and all its fifos. */
+ /*
+ * Reset the DSI and all its fifos. The block must be enabled for the
+ * FIFO resets to trigger.
+ */
DSI_PORT_WRITE(CTRL,
DSI_CTRL_SOFT_RESET_CFG |
DSI_PORT_BIT(CTRL_RESET_FIFOS));
DSI_PORT_WRITE(CTRL,
+ ((dsi->variant->port == 0) ?
+ DSI0_CTRL_CTRL0 : DSI1_CTRL_EN) |
DSI_CTRL_HSDT_EOT_DISABLE |
DSI_CTRL_RX_LPDT_EOT_DISABLE);
@@ -1114,12 +1120,6 @@ static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
DSI_DISP1_PFORMAT) |
DSI_DISP1_ENABLE);
- /* Ungate the block. */
- if (dsi->variant->port == 0)
- DSI_PORT_WRITE(CTRL, DSI_PORT_READ(CTRL) | DSI0_CTRL_CTRL0);
- else
- DSI_PORT_WRITE(CTRL, DSI_PORT_READ(CTRL) | DSI1_CTRL_EN);
-
/* Bring AFE out of reset. */
DSI_PORT_WRITE(PHY_AFEC0,
DSI_PORT_READ(PHY_AFEC0) &
@@ -0,0 +1,52 @@
From 72f90bf20790266571c167e5f9d4348f3f3a6815 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Thu, 26 May 2022 18:56:19 +0100
Subject: [PATCH 37/41] drm: vc4: Reset DSI AFE on disable
Organization: Wires
vc4_dsi_bridge_disable wasn't resetting things during shutdown,
so add that in.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dsi.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index de963edefb760..9756821ebf27c 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -360,6 +360,16 @@
# define DSI_PHY_AFEC0_CTATADJ_MASK VC4_MASK(3, 0)
# define DSI_PHY_AFEC0_CTATADJ_SHIFT 0
+# define DSI0_AFEC0_PD_ALL_LANES (DSI0_PHY_AFEC0_PD | \
+ DSI0_PHY_AFEC0_PD_BG | \
+ DSI0_PHY_AFEC0_PD_DLANE1)
+
+# define DSI1_AFEC0_PD_ALL_LANES (DSI1_PHY_AFEC0_PD | \
+ DSI1_PHY_AFEC0_PD_BG | \
+ DSI1_PHY_AFEC0_PD_DLANE3 | \
+ DSI1_PHY_AFEC0_PD_DLANE2 | \
+ DSI1_PHY_AFEC0_PD_DLANE1)
+
#define DSI0_PHY_AFEC1 0x68
# define DSI0_PHY_AFEC1_IDR_DLANE1_MASK VC4_MASK(10, 8)
# define DSI0_PHY_AFEC1_IDR_DLANE1_SHIFT 8
@@ -809,6 +819,16 @@ static void vc4_dsi_bridge_disable(struct drm_bridge *bridge,
disp0_ctrl = DSI_PORT_READ(DISP0_CTRL);
disp0_ctrl &= ~DSI_DISP0_ENABLE;
DSI_PORT_WRITE(DISP0_CTRL, disp0_ctrl);
+
+ /* Reset the DSI and all its fifos. */
+ DSI_PORT_WRITE(CTRL, DSI_CTRL_SOFT_RESET_CFG |
+ DSI_PORT_BIT(CTRL_RESET_FIFOS));
+
+ /* Power down the analogue front end. */
+ DSI_PORT_WRITE(PHY_AFEC0, DSI_PORT_BIT(PHY_AFEC0_RESET) |
+ DSI_PORT_BIT(PHY_AFEC0_PD) |
+ DSI_PORT_BIT(AFEC0_PD_ALL_LANES));
+
}
static void vc4_dsi_bridge_post_disable(struct drm_bridge *bridge,
@@ -0,0 +1,151 @@
From e92eb94594b1e04b69c5c85f0719d09c8858cdfe Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Wed, 20 Nov 2024 13:58:08 +0000
Subject: [PATCH 38/41] drm: vc4: dsi: Handle the different command FIFO widths
Organization: Wires
DSI0 and DSI1 have different widths for the command FIFO (24bit
vs 32bit), but the driver was assuming the 32bit width of DSI1
in all cases.
DSI0 also wants the data packed as 24bit big endian, so the
formatting code needs updating.
Handle the difference via the variant structure.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dsi.c | 64 ++++++++++++++++++++++++-----------
1 file changed, 44 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 9756821ebf27c..b1cc30b8aa797 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -44,7 +44,6 @@
#define DSI_CMD_FIFO_DEPTH 16
#define DSI_PIX_FIFO_DEPTH 256
-#define DSI_PIX_FIFO_WIDTH 4
#define DSI0_CTRL 0x00
@@ -170,11 +169,15 @@
#define DSI1_DISP1_CTRL 0x2c
/* Format of the data written to TXPKT_PIX_FIFO. */
# define DSI_DISP1_PFORMAT_MASK VC4_MASK(2, 1)
-# define DSI_DISP1_PFORMAT_SHIFT 1
-# define DSI_DISP1_PFORMAT_16BIT 0
-# define DSI_DISP1_PFORMAT_24BIT 1
-# define DSI_DISP1_PFORMAT_32BIT_LE 2
-# define DSI_DISP1_PFORMAT_32BIT_BE 3
+# define DSI1_DISP1_PFORMAT_SHIFT 1
+# define DSI0_DISP1_PFORMAT_16BIT 0
+# define DSI0_DISP1_PFORMAT_16BIT_ADJ 1
+# define DSI0_DISP1_PFORMAT_24BIT 2
+# define DSI0_DISP1_PFORMAT_32BIT_LE 3 /* NB Invalid, but required for macros to work */
+# define DSI1_DISP1_PFORMAT_16BIT 0
+# define DSI1_DISP1_PFORMAT_24BIT 1
+# define DSI1_DISP1_PFORMAT_32BIT_LE 2
+# define DSI1_DISP1_PFORMAT_32BIT_BE 3
/* DISP1 is always command mode. */
# define DSI_DISP1_ENABLE BIT(0)
@@ -553,6 +556,7 @@ struct vc4_dsi_variant {
unsigned int port;
bool broken_axi_workaround;
+ unsigned int cmd_fifo_width;
const char *debugfs_name;
const struct debugfs_reg32 *regs;
@@ -1135,10 +1139,16 @@ static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
/* Set up DISP1 for transferring long command payloads through
* the pixfifo.
*/
- DSI_PORT_WRITE(DISP1_CTRL,
- VC4_SET_FIELD(DSI_DISP1_PFORMAT_32BIT_LE,
- DSI_DISP1_PFORMAT) |
- DSI_DISP1_ENABLE);
+ if (dsi->variant->cmd_fifo_width == 4)
+ DSI_PORT_WRITE(DISP1_CTRL,
+ VC4_SET_FIELD(DSI_PORT_BIT(DISP1_PFORMAT_32BIT_LE),
+ DSI_DISP1_PFORMAT) |
+ DSI_DISP1_ENABLE);
+ else
+ DSI_PORT_WRITE(DISP1_CTRL,
+ VC4_SET_FIELD(DSI_PORT_BIT(DISP1_PFORMAT_24BIT),
+ DSI_DISP1_PFORMAT) |
+ DSI_DISP1_ENABLE);
/* Bring AFE out of reset. */
DSI_PORT_WRITE(PHY_AFEC0,
@@ -1221,9 +1231,9 @@ static ssize_t vc4_dsi_transfer(struct vc4_dsi *dsi,
pix_fifo_len = 0;
} else {
cmd_fifo_len = (packet.payload_length %
- DSI_PIX_FIFO_WIDTH);
+ dsi->variant->cmd_fifo_width);
pix_fifo_len = ((packet.payload_length - cmd_fifo_len) /
- DSI_PIX_FIFO_WIDTH);
+ dsi->variant->cmd_fifo_width);
}
WARN_ON_ONCE(pix_fifo_len >= DSI_PIX_FIFO_DEPTH);
@@ -1241,14 +1251,25 @@ static ssize_t vc4_dsi_transfer(struct vc4_dsi *dsi,
for (i = 0; i < cmd_fifo_len; i++)
DSI_PORT_WRITE(TXPKT_CMD_FIFO, packet.payload[i]);
- for (i = 0; i < pix_fifo_len; i++) {
- const u8 *pix = packet.payload + cmd_fifo_len + i * 4;
-
- DSI_PORT_WRITE(TXPKT_PIX_FIFO,
- pix[0] |
- pix[1] << 8 |
- pix[2] << 16 |
- pix[3] << 24);
+ if (dsi->variant->cmd_fifo_width == 4) {
+ for (i = 0; i < pix_fifo_len; i++) {
+ const u8 *pix = packet.payload + cmd_fifo_len + i * 4;
+
+ DSI_PORT_WRITE(TXPKT_PIX_FIFO,
+ pix[0] |
+ pix[1] << 8 |
+ pix[2] << 16 |
+ pix[3] << 24);
+ }
+ } else {
+ for (i = 0; i < pix_fifo_len; i++) {
+ const u8 *pix = packet.payload + cmd_fifo_len + i * 3;
+
+ DSI_PORT_WRITE(TXPKT_PIX_FIFO,
+ pix[2] |
+ pix[1] << 8 |
+ pix[0] << 16);
+ }
}
if (msg->flags & MIPI_DSI_MSG_USE_LPM)
@@ -1493,6 +1514,7 @@ static const struct drm_encoder_funcs vc4_dsi_encoder_funcs = {
static const struct vc4_dsi_variant bcm2711_dsi1_variant = {
.port = 1,
+ .cmd_fifo_width = 4,
.debugfs_name = "dsi1_regs",
.regs = dsi1_regs,
.nregs = ARRAY_SIZE(dsi1_regs),
@@ -1500,6 +1522,7 @@ static const struct vc4_dsi_variant bcm2711_dsi1_variant = {
static const struct vc4_dsi_variant bcm2835_dsi0_variant = {
.port = 0,
+ .cmd_fifo_width = 3,
.debugfs_name = "dsi0_regs",
.regs = dsi0_regs,
.nregs = ARRAY_SIZE(dsi0_regs),
@@ -1507,6 +1530,7 @@ static const struct vc4_dsi_variant bcm2835_dsi0_variant = {
static const struct vc4_dsi_variant bcm2835_dsi1_variant = {
.port = 1,
+ .cmd_fifo_width = 4,
.broken_axi_workaround = true,
.debugfs_name = "dsi1_regs",
.regs = dsi1_regs,
@@ -0,0 +1,51 @@
From 9975a8fd3fb000644606269a4e13a62f5b43180a Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Tue, 9 Jan 2024 17:37:00 +0000
Subject: [PATCH 39/41] drm/bridge: tc358762: Program the DPI mode into the
chip
Organization: Wires
The autodetection of resolution/timing by the TC358762 can lead
to the display being shifted by a pixel or two.
Program the TC358762 with the requested mode timing so that
it can reproduce it accurately.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/bridge/tc358762.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/gpu/drm/bridge/tc358762.c b/drivers/gpu/drm/bridge/tc358762.c
index 98df3e667d4aa..73b169026e63b 100644
--- a/drivers/gpu/drm/bridge/tc358762.c
+++ b/drivers/gpu/drm/bridge/tc358762.c
@@ -53,6 +53,12 @@
#define LCDCTRL_VSPOL BIT(19) /* Polarity of VSYNC signal */
#define LCDCTRL_VSDELAY(v) (((v) & 0xfff) << 20) /* VSYNC delay */
+/* First parameter is in the 16bits, second is in the top 16bits */
+#define LCD_HS_HBP 0x0424
+#define LCD_HDISP_HFP 0x0428
+#define LCD_VS_VBP 0x042c
+#define LCD_VDISP_VFP 0x0430
+
/* SPI Master Registers */
#define SPICMR 0x0450
#define SPITCR 0x0454
@@ -139,6 +145,15 @@ static int tc358762_init(struct tc358762 *ctx)
tc358762_write(ctx, LCDCTRL, lcdctrl);
tc358762_write(ctx, SYSCTRL, 0x040f);
+
+ tc358762_write(ctx, LCD_HS_HBP, (ctx->mode.hsync_end - ctx->mode.hsync_start) |
+ ((ctx->mode.htotal - ctx->mode.hsync_end) << 16));
+ tc358762_write(ctx, LCD_HDISP_HFP, ctx->mode.hdisplay |
+ ((ctx->mode.hsync_start - ctx->mode.hdisplay) << 16));
+ tc358762_write(ctx, LCD_VS_VBP, (ctx->mode.vsync_end - ctx->mode.vsync_start) |
+ ((ctx->mode.vtotal - ctx->mode.vsync_end) << 16));
+ tc358762_write(ctx, LCD_VDISP_VFP, ctx->mode.vdisplay |
+ ((ctx->mode.vsync_start - ctx->mode.vdisplay) << 16));
msleep(100);
tc358762_write(ctx, PPI_STARTPPI, PPI_START_FUNCTION);
@@ -0,0 +1,42 @@
From 469cee798fdbcde99cd78ac7fc6d8ab61902d806 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Tue, 9 Jan 2024 18:44:49 +0000
Subject: [PATCH 40/41] drm/bridge: tc358762: revert move ops to enable
Organization: Wires
Reverts 8a4b2fc9c91a ("drm/bridge: tc358762: Split register programming from pre-enable to enable")
as we want the config commands sent before video starts.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/bridge/tc358762.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/gpu/drm/bridge/tc358762.c b/drivers/gpu/drm/bridge/tc358762.c
index 73b169026e63b..6164932edfec9 100644
--- a/drivers/gpu/drm/bridge/tc358762.c
+++ b/drivers/gpu/drm/bridge/tc358762.c
@@ -202,15 +202,6 @@ static void tc358762_pre_enable(struct drm_bridge *bridge,
usleep_range(5000, 10000);
}
- ctx->pre_enabled = true;
-}
-
-static void tc358762_enable(struct drm_bridge *bridge,
- struct drm_atomic_state *state)
-{
- struct tc358762 *ctx = bridge_to_tc358762(bridge);
- int ret;
-
ret = tc358762_init(ctx);
if (ret < 0)
dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
@@ -238,7 +229,6 @@ static void tc358762_bridge_mode_set(struct drm_bridge *bridge,
static const struct drm_bridge_funcs tc358762_bridge_funcs = {
.atomic_post_disable = tc358762_post_disable,
.atomic_pre_enable = tc358762_pre_enable,
- .atomic_enable = tc358762_enable,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
@@ -0,0 +1,31 @@
From 3d1db425ec44e6c885e7b83d5a53b48b235aaa2f Mon Sep 17 00:00:00 2001
From: Mattias Walström <lazzer@gmail.com>
Date: Sat, 4 Apr 2026 18:04:19 +0200
Subject: [PATCH 41/41] drm/bridge: tc358762: Set pre_enabled on pre_enable to
prevent regulator imbalance
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Organization: Wires
The RPi cherry-pick moved tc358762_init() to pre_enable but dropped the pre_enabled = true assignment.
Without it, post_disable always bails out early and never disables the regulator.
Signed-off-by: Mattias Walström <lazzer@gmail.com>
---
drivers/gpu/drm/bridge/tc358762.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/bridge/tc358762.c b/drivers/gpu/drm/bridge/tc358762.c
index 6164932edfec9..8da66b06d6b63 100644
--- a/drivers/gpu/drm/bridge/tc358762.c
+++ b/drivers/gpu/drm/bridge/tc358762.c
@@ -205,6 +205,8 @@ static void tc358762_pre_enable(struct drm_bridge *bridge,
ret = tc358762_init(ctx);
if (ret < 0)
dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
+
+ ctx->pre_enabled = true;
}
static int tc358762_attach(struct drm_bridge *bridge,