aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
diff options
context:
space:
mode:
authorÁlvaro Fernández Rojas <noltari@gmail.com>2022-05-16 23:40:32 +0200
committerÁlvaro Fernández Rojas <noltari@gmail.com>2022-05-17 15:11:22 +0200
commit20ea6adbf199097c4f5f591ffee088340630dae4 (patch)
treed6719d95e136611a1c25bbf7789652d6d402779d /target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
parentbca05bd072180dc38ef740b37ded9572a6db1981 (diff)
downloadupstream-20ea6adbf199097c4f5f591ffee088340630dae4.tar.gz
upstream-20ea6adbf199097c4f5f591ffee088340630dae4.tar.bz2
upstream-20ea6adbf199097c4f5f591ffee088340630dae4.zip
bcm27xx: add support for linux v5.15
Build system: x86_64 Build-tested: bcm2708, bcm2709, bcm2710, bcm2711 Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B Signed-off-by: Marty Jones <mj8263788@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch b/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
new file mode 100644
index 0000000000..7c60e7763b
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
@@ -0,0 +1,110 @@
+From b5e5e7a57e2a0475826df547921d2bc72f0daf02 Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.com>
+Date: Wed, 15 Dec 2021 17:44:49 +0000
+Subject: [PATCH] drm/vc4: Remove splitting the bridge chain from the
+ driver.
+
+Splitting the bridge chain fails for atomic bridges as the
+framework can't add the relevant state in
+drm_atomic_add_encoder_bridges.
+The chain was split because we needed to power up before
+calling pre_enable, but that is now done in mode_set, and will
+move into the framework.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
+---
+ drivers/gpu/drm/vc4/vc4_dsi.c | 38 -----------------------------------
+ 1 file changed, 38 deletions(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_dsi.c
++++ b/drivers/gpu/drm/vc4/vc4_dsi.c
+@@ -554,7 +554,6 @@ struct vc4_dsi {
+ struct mipi_dsi_host dsi_host;
+ struct drm_encoder *encoder;
+ struct drm_bridge *out_bridge;
+- struct list_head bridge_chain;
+
+ void __iomem *regs;
+
+@@ -798,23 +797,9 @@ static void vc4_dsi_encoder_disable(stru
+ struct vc4_dsi_encoder *vc4_encoder = to_vc4_dsi_encoder(encoder);
+ struct vc4_dsi *dsi = vc4_encoder->dsi;
+ struct device *dev = &dsi->pdev->dev;
+- struct drm_bridge *iter;
+-
+- list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
+- if (iter->funcs->disable)
+- iter->funcs->disable(iter);
+-
+- if (iter == dsi->out_bridge)
+- break;
+- }
+
+ vc4_dsi_ulps(dsi, true);
+
+- list_for_each_entry_from(iter, &dsi->bridge_chain, chain_node) {
+- if (iter->funcs->post_disable)
+- iter->funcs->post_disable(iter);
+- }
+-
+ clk_disable_unprepare(dsi->pll_phy_clock);
+ clk_disable_unprepare(dsi->escape_clock);
+ clk_disable_unprepare(dsi->pixel_clock);
+@@ -1118,12 +1103,6 @@ static void vc4_dsi_encoder_enable(struc
+ struct vc4_dsi_encoder *vc4_encoder = to_vc4_dsi_encoder(encoder);
+ struct vc4_dsi *dsi = vc4_encoder->dsi;
+ bool debug_dump_regs = false;
+- struct drm_bridge *iter;
+-
+- list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
+- if (iter->funcs->pre_enable)
+- iter->funcs->pre_enable(iter);
+- }
+
+ if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) {
+ DSI_PORT_WRITE(DISP0_CTRL,
+@@ -1140,11 +1119,6 @@ static void vc4_dsi_encoder_enable(struc
+ DSI_DISP0_ENABLE);
+ }
+
+- list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
+- if (iter->funcs->enable)
+- iter->funcs->enable(iter);
+- }
+-
+ if (debug_dump_regs) {
+ struct drm_printer p = drm_info_printer(&dsi->pdev->dev);
+ dev_info(&dsi->pdev->dev, "DSI regs after:\n");
+@@ -1578,7 +1552,6 @@ static int vc4_dsi_bind(struct device *d
+ if (!vc4_dsi_encoder)
+ return -ENOMEM;
+
+- INIT_LIST_HEAD(&dsi->bridge_chain);
+ vc4_dsi_encoder->base.type = dsi->variant->port ?
+ VC4_ENCODER_TYPE_DSI1 : VC4_ENCODER_TYPE_DSI0;
+ vc4_dsi_encoder->dsi = dsi;
+@@ -1718,12 +1691,6 @@ static int vc4_dsi_bind(struct device *d
+ dev_err(dev, "bridge attach failed: %d\n", ret);
+ goto err_free_dma;
+ }
+- /* Disable the atomic helper calls into the bridge. We
+- * manually call the bridge pre_enable / enable / etc. calls
+- * from our driver, since we need to sequence them within the
+- * encoder's enable/disable paths.
+- */
+- list_splice_init(&dsi->encoder->bridge_chain, &dsi->bridge_chain);
+
+ vc4_debugfs_add_regset32(drm, dsi->variant->debugfs_name, &dsi->regset);
+
+@@ -1753,11 +1720,6 @@ static void vc4_dsi_unbind(struct device
+ if (dsi->out_bridge)
+ pm_runtime_disable(dev);
+
+- /*
+- * Restore the bridge_chain so the bridge detach procedure can happen
+- * normally.
+- */
+- list_splice_init(&dsi->bridge_chain, &dsi->encoder->bridge_chain);
+ drm_encoder_cleanup(dsi->encoder);
+
+ if (dsi->reg_dma_chan) {