]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jul 2021 13:06:24 +0000 (15:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jul 2021 13:06:24 +0000 (15:06 +0200)
added patches:
drm-dp_mst-add-missing-drm-parameters-to-recently-added-call-to-drm_dbg_kms.patch
drm-dp_mst-avoid-to-mess-up-payload-table-by-ports-in-stale-topology.patch
drm-dp_mst-do-not-set-proposed-vcpi-directly.patch
drm-ingenic-fix-non-osd-mode.patch
drm-ingenic-switch-ipu-plane-to-type-overlay.patch
revert-drm-ast-remove-reference-to-struct-drm_device.pdev.patch

queue-5.10/drm-dp_mst-add-missing-drm-parameters-to-recently-added-call-to-drm_dbg_kms.patch [new file with mode: 0644]
queue-5.10/drm-dp_mst-avoid-to-mess-up-payload-table-by-ports-in-stale-topology.patch [new file with mode: 0644]
queue-5.10/drm-dp_mst-do-not-set-proposed-vcpi-directly.patch [new file with mode: 0644]
queue-5.10/drm-ingenic-fix-non-osd-mode.patch [new file with mode: 0644]
queue-5.10/drm-ingenic-switch-ipu-plane-to-type-overlay.patch [new file with mode: 0644]
queue-5.10/revert-drm-ast-remove-reference-to-struct-drm_device.pdev.patch [new file with mode: 0644]
queue-5.10/series

diff --git a/queue-5.10/drm-dp_mst-add-missing-drm-parameters-to-recently-added-call-to-drm_dbg_kms.patch b/queue-5.10/drm-dp_mst-add-missing-drm-parameters-to-recently-added-call-to-drm_dbg_kms.patch
new file mode 100644 (file)
index 0000000..3d159ff
--- /dev/null
@@ -0,0 +1,53 @@
+From 24ff3dc18b99c4b912ab1746e803ddb3be5ced4c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= <jose.souza@intel.com>
+Date: Wed, 16 Jun 2021 12:44:15 -0700
+Subject: drm/dp_mst: Add missing drm parameters to recently added call to drm_dbg_kms()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: José Roberto de Souza <jose.souza@intel.com>
+
+commit 24ff3dc18b99c4b912ab1746e803ddb3be5ced4c upstream.
+
+Commit 3769e4c0af5b ("drm/dp_mst: Avoid to mess up payload table by
+ports in stale topology") added to calls to drm_dbg_kms() but it
+missed the first parameter, the drm device breaking the build.
+
+Fixes: 3769e4c0af5b ("drm/dp_mst: Avoid to mess up payload table by ports in stale topology")
+Cc: Wayne Lin <Wayne.Lin@amd.com>
+Cc: Lyude Paul <lyude@redhat.com>
+Cc: dri-devel@lists.freedesktop.org
+Cc: stable@vger.kernel.org
+Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210616194415.36926-1-jose.souza@intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -3385,7 +3385,9 @@ int drm_dp_update_payload_part1(struct d
+                       mutex_unlock(&mgr->lock);
+                       if (skip) {
+-                              drm_dbg_kms("Virtual channel %d is not in current topology\n", i);
++                              drm_dbg_kms(mgr->dev,
++                                          "Virtual channel %d is not in current topology\n",
++                                          i);
+                               continue;
+                       }
+                       /* Validated ports don't matter if we're releasing
+@@ -3400,7 +3402,8 @@ int drm_dp_update_payload_part1(struct d
+                                               payload->start_slot = req_payload.start_slot;
+                                               continue;
+                                       } else {
+-                                              drm_dbg_kms("Fail:set payload to invalid sink");
++                                              drm_dbg_kms(mgr->dev,
++                                                          "Fail:set payload to invalid sink");
+                                               mutex_unlock(&mgr->payload_lock);
+                                               return -EINVAL;
+                                       }
diff --git a/queue-5.10/drm-dp_mst-avoid-to-mess-up-payload-table-by-ports-in-stale-topology.patch b/queue-5.10/drm-dp_mst-avoid-to-mess-up-payload-table-by-ports-in-stale-topology.patch
new file mode 100644 (file)
index 0000000..d581d00
--- /dev/null
@@ -0,0 +1,121 @@
+From 3769e4c0af5b82c8ea21d037013cb9564dfaa51f Mon Sep 17 00:00:00 2001
+From: Wayne Lin <Wayne.Lin@amd.com>
+Date: Wed, 16 Jun 2021 11:55:01 +0800
+Subject: drm/dp_mst: Avoid to mess up payload table by ports in stale topology
+
+From: Wayne Lin <Wayne.Lin@amd.com>
+
+commit 3769e4c0af5b82c8ea21d037013cb9564dfaa51f upstream.
+
+[Why]
+After unplug/hotplug hub from the system, userspace might start to
+clear stale payloads gradually. If we call drm_dp_mst_deallocate_vcpi()
+to release stale VCPI of those ports which are not relating to current
+topology, we have chane to wrongly clear active payload table entry for
+current topology.
+
+E.g.
+We have allocated VCPI 1 in current payload table and we call
+drm_dp_mst_deallocate_vcpi() to clean VCPI 1 in stale topology. In
+drm_dp_mst_deallocate_vcpi(), it will call drm_dp_mst_put_payload_id()
+tp put VCPI 1 and which means ID 1 is available again. Thereafter, if we
+want to allocate a new payload stream, it will find ID 1 is available by
+drm_dp_mst_assign_payload_id(). However, ID 1 is being used
+
+[How]
+Check target sink is relating to current topology or not before doing
+any payload table update.
+Searching upward to find the target sink's relevant root branch device.
+If the found root branch device is not the same root of current
+topology, don't update payload table.
+
+Changes since v1:
+* Change debug macro to use drm_dbg_kms() instead
+* Amend the commit message to add Cc tag.
+
+Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210616035501.3776-3-Wayne.Lin@amd.com
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |   29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -94,6 +94,9 @@ static int drm_dp_mst_register_i2c_bus(s
+ static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port);
+ static void drm_dp_mst_kick_tx(struct drm_dp_mst_topology_mgr *mgr);
++static bool drm_dp_mst_port_downstream_of_branch(struct drm_dp_mst_port *port,
++                                               struct drm_dp_mst_branch *branch);
++
+ #define DBG_PREFIX "[dp_mst]"
+ #define DP_STR(x) [DP_ ## x] = #x
+@@ -3362,6 +3365,7 @@ int drm_dp_update_payload_part1(struct d
+       struct drm_dp_mst_port *port;
+       int i, j;
+       int cur_slots = 1;
++      bool skip;
+       mutex_lock(&mgr->payload_lock);
+       for (i = 0; i < mgr->max_payloads; i++) {
+@@ -3376,6 +3380,14 @@ int drm_dp_update_payload_part1(struct d
+                       port = container_of(vcpi, struct drm_dp_mst_port,
+                                           vcpi);
++                      mutex_lock(&mgr->lock);
++                      skip = !drm_dp_mst_port_downstream_of_branch(port, mgr->mst_primary);
++                      mutex_unlock(&mgr->lock);
++
++                      if (skip) {
++                              drm_dbg_kms("Virtual channel %d is not in current topology\n", i);
++                              continue;
++                      }
+                       /* Validated ports don't matter if we're releasing
+                        * VCPI
+                        */
+@@ -3475,6 +3487,7 @@ int drm_dp_update_payload_part2(struct d
+       struct drm_dp_mst_port *port;
+       int i;
+       int ret = 0;
++      bool skip;
+       mutex_lock(&mgr->payload_lock);
+       for (i = 0; i < mgr->max_payloads; i++) {
+@@ -3484,6 +3497,13 @@ int drm_dp_update_payload_part2(struct d
+               port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);
++              mutex_lock(&mgr->lock);
++              skip = !drm_dp_mst_port_downstream_of_branch(port, mgr->mst_primary);
++              mutex_unlock(&mgr->lock);
++
++              if (skip)
++                      continue;
++
+               DRM_DEBUG_KMS("payload %d %d\n", i, mgr->payloads[i].payload_state);
+               if (mgr->payloads[i].payload_state == DP_PAYLOAD_LOCAL) {
+                       ret = drm_dp_create_payload_step2(mgr, port, mgr->proposed_vcpis[i]->vcpi, &mgr->payloads[i]);
+@@ -4565,9 +4585,18 @@ EXPORT_SYMBOL(drm_dp_mst_reset_vcpi_slot
+ void drm_dp_mst_deallocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
+                               struct drm_dp_mst_port *port)
+ {
++      bool skip;
++
+       if (!port->vcpi.vcpi)
+               return;
++      mutex_lock(&mgr->lock);
++      skip = !drm_dp_mst_port_downstream_of_branch(port, mgr->mst_primary);
++      mutex_unlock(&mgr->lock);
++
++      if (skip)
++              return;
++
+       drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
+       port->vcpi.num_slots = 0;
+       port->vcpi.pbn = 0;
diff --git a/queue-5.10/drm-dp_mst-do-not-set-proposed-vcpi-directly.patch b/queue-5.10/drm-dp_mst-do-not-set-proposed-vcpi-directly.patch
new file mode 100644 (file)
index 0000000..a30f908
--- /dev/null
@@ -0,0 +1,126 @@
+From 35d3e8cb35e75450f87f87e3d314e2d418b6954b Mon Sep 17 00:00:00 2001
+From: Wayne Lin <Wayne.Lin@amd.com>
+Date: Wed, 16 Jun 2021 11:55:00 +0800
+Subject: drm/dp_mst: Do not set proposed vcpi directly
+
+From: Wayne Lin <Wayne.Lin@amd.com>
+
+commit 35d3e8cb35e75450f87f87e3d314e2d418b6954b upstream.
+
+[Why]
+When we receive CSN message to notify one port is disconnected, we will
+implicitly set its corresponding num_slots to 0. Later on, we will
+eventually call drm_dp_update_payload_part1() to arrange down streams.
+
+In drm_dp_update_payload_part1(), we iterate over all proposed_vcpis[]
+to do the update. Not specific to a target sink only. For example, if we
+light up 2 monitors, Monitor_A and Monitor_B, and then we unplug
+Monitor_B. Later on, when we call drm_dp_update_payload_part1() to try
+to update payload for Monitor_A, we'll also implicitly clean payload for
+Monitor_B at the same time. And finally, when we try to call
+drm_dp_update_payload_part1() to clean payload for Monitor_B, we will do
+nothing at this time since payload for Monitor_B has been cleaned up
+previously.
+
+For StarTech 1to3 DP hub, it seems like if we didn't update DPCD payload
+ID table then polling for "ACT Handled"(BIT_1 of DPCD 002C0h) will fail
+and this polling will last for 3 seconds.
+
+Therefore, guess the best way is we don't set the proposed_vcpi[]
+diretly. Let user of these herlper functions to set the proposed_vcpi
+directly.
+
+[How]
+1. Revert commit 7617e9621bf2 ("drm/dp_mst: clear time slots for ports
+invalid")
+2. Tackle the issue in previous commit by skipping those trasient
+proposed VCPIs. These stale VCPIs shoulde be explicitly cleared by
+user later on.
+
+Changes since v1:
+* Change debug macro to use drm_dbg_kms() instead
+* Amend the commit message to add Fixed & Cc tags
+
+Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
+Fixes: 7617e9621bf2 ("drm/dp_mst: clear time slots for ports invalid")
+Cc: Lyude Paul <lyude@redhat.com>
+Cc: Wayne Lin <Wayne.Lin@amd.com>
+Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
+Cc: Maxime Ripard <mripard@kernel.org>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: dri-devel@lists.freedesktop.org
+Cc: <stable@vger.kernel.org> # v5.5+
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210616035501.3776-2-Wayne.Lin@amd.com
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |   36 +++++++++-------------------------
+ 1 file changed, 10 insertions(+), 26 deletions(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -2499,7 +2499,7 @@ drm_dp_mst_handle_conn_stat(struct drm_d
+ {
+       struct drm_dp_mst_topology_mgr *mgr = mstb->mgr;
+       struct drm_dp_mst_port *port;
+-      int old_ddps, old_input, ret, i;
++      int old_ddps, ret;
+       u8 new_pdt;
+       bool new_mcs;
+       bool dowork = false, create_connector = false;
+@@ -2531,7 +2531,6 @@ drm_dp_mst_handle_conn_stat(struct drm_d
+       }
+       old_ddps = port->ddps;
+-      old_input = port->input;
+       port->input = conn_stat->input_port;
+       port->ldps = conn_stat->legacy_device_plug_status;
+       port->ddps = conn_stat->displayport_device_plug_status;
+@@ -2554,28 +2553,6 @@ drm_dp_mst_handle_conn_stat(struct drm_d
+               dowork = false;
+       }
+-      if (!old_input && old_ddps != port->ddps && !port->ddps) {
+-              for (i = 0; i < mgr->max_payloads; i++) {
+-                      struct drm_dp_vcpi *vcpi = mgr->proposed_vcpis[i];
+-                      struct drm_dp_mst_port *port_validated;
+-
+-                      if (!vcpi)
+-                              continue;
+-
+-                      port_validated =
+-                              container_of(vcpi, struct drm_dp_mst_port, vcpi);
+-                      port_validated =
+-                              drm_dp_mst_topology_get_port_validated(mgr, port_validated);
+-                      if (!port_validated) {
+-                              mutex_lock(&mgr->payload_lock);
+-                              vcpi->num_slots = 0;
+-                              mutex_unlock(&mgr->payload_lock);
+-                      } else {
+-                              drm_dp_mst_topology_put_port(port_validated);
+-                      }
+-              }
+-      }
+-
+       if (port->connector)
+               drm_modeset_unlock(&mgr->base.lock);
+       else if (create_connector)
+@@ -3406,8 +3383,15 @@ int drm_dp_update_payload_part1(struct d
+                               port = drm_dp_mst_topology_get_port_validated(
+                                   mgr, port);
+                               if (!port) {
+-                                      mutex_unlock(&mgr->payload_lock);
+-                                      return -EINVAL;
++                                      if (vcpi->num_slots == payload->num_slots) {
++                                              cur_slots += vcpi->num_slots;
++                                              payload->start_slot = req_payload.start_slot;
++                                              continue;
++                                      } else {
++                                              drm_dbg_kms("Fail:set payload to invalid sink");
++                                              mutex_unlock(&mgr->payload_lock);
++                                              return -EINVAL;
++                                      }
+                               }
+                               put_port = true;
+                       }
diff --git a/queue-5.10/drm-ingenic-fix-non-osd-mode.patch b/queue-5.10/drm-ingenic-fix-non-osd-mode.patch
new file mode 100644 (file)
index 0000000..3e52480
--- /dev/null
@@ -0,0 +1,71 @@
+From 7b4957684e5d813fcbdc98144e3cc5c4467b3e2e Mon Sep 17 00:00:00 2001
+From: Paul Cercueil <paul@crapouillou.net>
+Date: Sun, 24 Jan 2021 08:55:52 +0000
+Subject: drm/ingenic: Fix non-OSD mode
+
+From: Paul Cercueil <paul@crapouillou.net>
+
+commit 7b4957684e5d813fcbdc98144e3cc5c4467b3e2e upstream.
+
+Even though the JZ4740 did not have the OSD mode, it had (according to
+the documentation) two DMA channels, but there is absolutely no
+information about how to select the second DMA channel.
+
+Make the ingenic-drm driver work in non-OSD mode by using the
+foreground0 plane (which is bound to the DMA0 channel) as the primary
+plane, instead of the foreground1 plane, which is the primary plane
+when in OSD mode.
+
+Fixes: 3c9bea4ef32b ("drm/ingenic: Add support for OSD mode")
+Cc: <stable@vger.kernel.org> # v5.8+
+Signed-off-by: Paul Cercueil <paul@crapouillou.net>
+Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Tested-by: H. Nikolaus Schaller <hns@goldelico.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210124085552.29146-5-paul@crapouillou.net
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/ingenic/ingenic-drm-drv.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
++++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+@@ -455,7 +455,7 @@ static void ingenic_drm_plane_atomic_upd
+               height = state->src_h >> 16;
+               cpp = state->fb->format->cpp[0];
+-              if (priv->soc_info->has_osd && plane->type == DRM_PLANE_TYPE_OVERLAY)
++              if (!priv->soc_info->has_osd || plane->type == DRM_PLANE_TYPE_OVERLAY)
+                       hwdesc = priv->dma_hwdesc_f0;
+               else
+                       hwdesc = priv->dma_hwdesc_f1;
+@@ -692,6 +692,7 @@ static int ingenic_drm_bind(struct devic
+       const struct jz_soc_info *soc_info;
+       struct ingenic_drm *priv;
+       struct clk *parent_clk;
++      struct drm_plane *primary;
+       struct drm_bridge *bridge;
+       struct drm_panel *panel;
+       struct drm_encoder *encoder;
+@@ -784,9 +785,11 @@ static int ingenic_drm_bind(struct devic
+       if (soc_info->has_osd)
+               priv->ipu_plane = drm_plane_from_index(drm, 0);
+-      drm_plane_helper_add(&priv->f1, &ingenic_drm_plane_helper_funcs);
++      primary = priv->soc_info->has_osd ? &priv->f1 : &priv->f0;
+-      ret = drm_universal_plane_init(drm, &priv->f1, 1,
++      drm_plane_helper_add(primary, &ingenic_drm_plane_helper_funcs);
++
++      ret = drm_universal_plane_init(drm, primary, 1,
+                                      &ingenic_drm_primary_plane_funcs,
+                                      ingenic_drm_primary_formats,
+                                      ARRAY_SIZE(ingenic_drm_primary_formats),
+@@ -798,7 +801,7 @@ static int ingenic_drm_bind(struct devic
+       drm_crtc_helper_add(&priv->crtc, &ingenic_drm_crtc_helper_funcs);
+-      ret = drm_crtc_init_with_planes(drm, &priv->crtc, &priv->f1,
++      ret = drm_crtc_init_with_planes(drm, &priv->crtc, primary,
+                                       NULL, &ingenic_drm_crtc_funcs, NULL);
+       if (ret) {
+               dev_err(dev, "Failed to init CRTC: %i\n", ret);
diff --git a/queue-5.10/drm-ingenic-switch-ipu-plane-to-type-overlay.patch b/queue-5.10/drm-ingenic-switch-ipu-plane-to-type-overlay.patch
new file mode 100644 (file)
index 0000000..6389f4c
--- /dev/null
@@ -0,0 +1,82 @@
+From 68b433fe6937cfa3f8975d18643d5956254edd6a Mon Sep 17 00:00:00 2001
+From: Paul Cercueil <paul@crapouillou.net>
+Date: Mon, 29 Mar 2021 18:50:45 +0100
+Subject: drm/ingenic: Switch IPU plane to type OVERLAY
+
+From: Paul Cercueil <paul@crapouillou.net>
+
+commit 68b433fe6937cfa3f8975d18643d5956254edd6a upstream.
+
+It should have been an OVERLAY from the beginning. The documentation
+stipulates that there should be an unique PRIMARY plane per CRTC.
+
+Fixes: fc1acf317b01 ("drm/ingenic: Add support for the IPU")
+Cc: <stable@vger.kernel.org> # 5.8+
+Signed-off-by: Paul Cercueil <paul@crapouillou.net>
+Acked-by: Simon Ser <contact@emersion.fr>
+Link: https://patchwork.freedesktop.org/patch/msgid/20210329175046.214629-2-paul@crapouillou.net
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/ingenic/ingenic-drm-drv.c |   11 +++++------
+ drivers/gpu/drm/ingenic/ingenic-ipu.c     |    2 +-
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
++++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+@@ -347,7 +347,7 @@ static void ingenic_drm_plane_enable(str
+       unsigned int en_bit;
+       if (priv->soc_info->has_osd) {
+-              if (plane->type == DRM_PLANE_TYPE_PRIMARY)
++              if (plane != &priv->f0)
+                       en_bit = JZ_LCD_OSDC_F1EN;
+               else
+                       en_bit = JZ_LCD_OSDC_F0EN;
+@@ -362,7 +362,7 @@ void ingenic_drm_plane_disable(struct de
+       unsigned int en_bit;
+       if (priv->soc_info->has_osd) {
+-              if (plane->type == DRM_PLANE_TYPE_PRIMARY)
++              if (plane != &priv->f0)
+                       en_bit = JZ_LCD_OSDC_F1EN;
+               else
+                       en_bit = JZ_LCD_OSDC_F0EN;
+@@ -389,8 +389,7 @@ void ingenic_drm_plane_config(struct dev
+       ingenic_drm_plane_enable(priv, plane);
+-      if (priv->soc_info->has_osd &&
+-          plane->type == DRM_PLANE_TYPE_PRIMARY) {
++      if (priv->soc_info->has_osd && plane != &priv->f0) {
+               switch (fourcc) {
+               case DRM_FORMAT_XRGB1555:
+                       ctrl |= JZ_LCD_OSDCTRL_RGB555;
+@@ -423,7 +422,7 @@ void ingenic_drm_plane_config(struct dev
+       }
+       if (priv->soc_info->has_osd) {
+-              if (plane->type == DRM_PLANE_TYPE_PRIMARY) {
++              if (plane != &priv->f0) {
+                       xy_reg = JZ_REG_LCD_XYP1;
+                       size_reg = JZ_REG_LCD_SIZE1;
+               } else {
+@@ -455,7 +454,7 @@ static void ingenic_drm_plane_atomic_upd
+               height = state->src_h >> 16;
+               cpp = state->fb->format->cpp[0];
+-              if (!priv->soc_info->has_osd || plane->type == DRM_PLANE_TYPE_OVERLAY)
++              if (!priv->soc_info->has_osd || plane == &priv->f0)
+                       hwdesc = priv->dma_hwdesc_f0;
+               else
+                       hwdesc = priv->dma_hwdesc_f1;
+--- a/drivers/gpu/drm/ingenic/ingenic-ipu.c
++++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c
+@@ -753,7 +753,7 @@ static int ingenic_ipu_bind(struct devic
+       err = drm_universal_plane_init(drm, plane, 1, &ingenic_ipu_plane_funcs,
+                                      soc_info->formats, soc_info->num_formats,
+-                                     NULL, DRM_PLANE_TYPE_PRIMARY, NULL);
++                                     NULL, DRM_PLANE_TYPE_OVERLAY, NULL);
+       if (err) {
+               dev_err(dev, "Failed to init plane: %i\n", err);
+               return err;
diff --git a/queue-5.10/revert-drm-ast-remove-reference-to-struct-drm_device.pdev.patch b/queue-5.10/revert-drm-ast-remove-reference-to-struct-drm_device.pdev.patch
new file mode 100644 (file)
index 0000000..b110d98
--- /dev/null
@@ -0,0 +1,48 @@
+From cb1b21b946f3fc0ac01547c1a4f04927ad0090bd Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Mon, 19 Jul 2021 15:01:49 +0200
+Subject: Revert "drm/ast: Remove reference to struct drm_device.pdev"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit fcb041ca5c7787b096aafc899e45f93583e66cbd which is
+commit 0ecb51824e838372e01330752503ddf9c0430ef7 upstream.
+
+Turns out this was incomplete, as it is missing a dependancy, so drop it
+from the tree.
+
+Link: https://lore.kernel.org/r/CAJn8CcHHKSo7GF29Z1ufXJJpMUzn6+fdvwiqe9=JvgpcfvnbHQ@mail.gmail.com
+Reported-by: Xiaotian Feng <xtfeng@gmail.com>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: Michael J. Ruhl <michael.j.ruhl@intel.com>
+Cc: KuoHsiang Chou <kuohsiang_chou@aspeedtech.com>
+Cc: kernel test robot <lkp@intel.com>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: Dave Airlie <airlied@redhat.com>
+Cc: dri-devel@lists.freedesktop.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/ast/ast_main.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/ast/ast_main.c
++++ b/drivers/gpu/drm/ast/ast_main.c
+@@ -406,6 +406,7 @@ struct ast_private *ast_device_create(st
+               return ast;
+       dev = &ast->base;
++      dev->pdev = pdev;
+       pci_set_drvdata(pdev, dev);
+       ast->regs = pcim_iomap(pdev, 1, 0);
+@@ -447,8 +448,8 @@ struct ast_private *ast_device_create(st
+       /* map reserved buffer */
+       ast->dp501_fw_buf = NULL;
+-      if (dev->vram_mm->vram_size < pci_resource_len(pdev, 0)) {
+-              ast->dp501_fw_buf = pci_iomap_range(pdev, 0, dev->vram_mm->vram_size, 0);
++      if (dev->vram_mm->vram_size < pci_resource_len(dev->pdev, 0)) {
++              ast->dp501_fw_buf = pci_iomap_range(dev->pdev, 0, dev->vram_mm->vram_size, 0);
+               if (!ast->dp501_fw_buf)
+                       drm_info(dev, "failed to map reserved buffer!\n");
+       }
index b1181c9302509683cc96488045651c374f3f752d..3c719e81c411c5bf6bae5718204fb63711c4eca7 100644 (file)
@@ -11,3 +11,9 @@ drm-i915-gtt-drop-the-page-table-optimisation.patch
 drm-i915-gt-fix-edeadlk-handling-regression.patch
 cgroup-verify-that-source-is-a-string.patch
 fbmem-do-not-delete-the-mode-that-is-still-in-use.patch
+drm-dp_mst-do-not-set-proposed-vcpi-directly.patch
+drm-dp_mst-avoid-to-mess-up-payload-table-by-ports-in-stale-topology.patch
+drm-dp_mst-add-missing-drm-parameters-to-recently-added-call-to-drm_dbg_kms.patch
+drm-ingenic-fix-non-osd-mode.patch
+drm-ingenic-switch-ipu-plane-to-type-overlay.patch
+revert-drm-ast-remove-reference-to-struct-drm_device.pdev.patch