]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.8-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Aug 2020 08:44:16 +0000 (10:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Aug 2020 08:44:16 +0000 (10:44 +0200)
added patches:
drm-added-orientation-quirk-for-asus-tablet-model-t103haf.patch
drm-amd-display-dchubbub-p-state-warning-during-surface-planes-switch.patch
drm-amd-display-fix-dmesg-warning-from-setting-abm-level.patch
drm-amdgpu-fix-bug-where-dpm-is-not-enabled-after-hibernate-and-resume.patch
drm-dp_mst-fix-the-ddc-i2c-device-registration-of-an-mst-port.patch
drm-dp_mst-fix-the-ddc-i2c-device-unregistration-of-an-mst-port.patch
drm-dp_mst-fix-timeout-handling-of-mst-down-messages.patch
drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst_allocate_vcpi.patch
drm-i915-gt-force-the-gt-reset-on-shutdown.patch
drm-omap-force-runtime-pm-suspend-on-system-suspend.patch
drm-panfrost-use-kvfree-to-free-bo-sgts.patch
drm-radeon-fix-fb_div-check-in-ni_init_smc_spll_table.patch
drm-tidss-fix-modeset-init-for-dpi-panels.patch

14 files changed:
queue-5.8/drm-added-orientation-quirk-for-asus-tablet-model-t103haf.patch [new file with mode: 0644]
queue-5.8/drm-amd-display-dchubbub-p-state-warning-during-surface-planes-switch.patch [new file with mode: 0644]
queue-5.8/drm-amd-display-fix-dmesg-warning-from-setting-abm-level.patch [new file with mode: 0644]
queue-5.8/drm-amdgpu-fix-bug-where-dpm-is-not-enabled-after-hibernate-and-resume.patch [new file with mode: 0644]
queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-registration-of-an-mst-port.patch [new file with mode: 0644]
queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-unregistration-of-an-mst-port.patch [new file with mode: 0644]
queue-5.8/drm-dp_mst-fix-timeout-handling-of-mst-down-messages.patch [new file with mode: 0644]
queue-5.8/drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst_allocate_vcpi.patch [new file with mode: 0644]
queue-5.8/drm-i915-gt-force-the-gt-reset-on-shutdown.patch [new file with mode: 0644]
queue-5.8/drm-omap-force-runtime-pm-suspend-on-system-suspend.patch [new file with mode: 0644]
queue-5.8/drm-panfrost-use-kvfree-to-free-bo-sgts.patch [new file with mode: 0644]
queue-5.8/drm-radeon-fix-fb_div-check-in-ni_init_smc_spll_table.patch [new file with mode: 0644]
queue-5.8/drm-tidss-fix-modeset-init-for-dpi-panels.patch [new file with mode: 0644]
queue-5.8/series

diff --git a/queue-5.8/drm-added-orientation-quirk-for-asus-tablet-model-t103haf.patch b/queue-5.8/drm-added-orientation-quirk-for-asus-tablet-model-t103haf.patch
new file mode 100644 (file)
index 0000000..bcf70e6
--- /dev/null
@@ -0,0 +1,34 @@
+From b5ac98cbb8e5e30c34ebc837d1e5a3982d2b5f5c Mon Sep 17 00:00:00 2001
+From: Marius Iacob <themariusus@gmail.com>
+Date: Sat, 1 Aug 2020 15:34:46 +0300
+Subject: drm: Added orientation quirk for ASUS tablet model T103HAF
+
+From: Marius Iacob <themariusus@gmail.com>
+
+commit b5ac98cbb8e5e30c34ebc837d1e5a3982d2b5f5c upstream.
+
+Signed-off-by: Marius Iacob <themariusus@gmail.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200801123445.1514567-1-themariusus@gmail.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/drm_panel_orientation_quirks.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
++++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
+@@ -121,6 +121,12 @@ static const struct dmi_system_id orient
+                 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T101HA"),
+               },
+               .driver_data = (void *)&lcd800x1280_rightside_up,
++      }, {    /* Asus T103HAF */
++              .matches = {
++                DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
++                DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"),
++              },
++              .driver_data = (void *)&lcd800x1280_rightside_up,
+       }, {    /* GPD MicroPC (generic strings, also match on bios date) */
+               .matches = {
+                 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
diff --git a/queue-5.8/drm-amd-display-dchubbub-p-state-warning-during-surface-planes-switch.patch b/queue-5.8/drm-amd-display-dchubbub-p-state-warning-during-surface-planes-switch.patch
new file mode 100644 (file)
index 0000000..ebc0c62
--- /dev/null
@@ -0,0 +1,168 @@
+From 8b0379a85762b516c7b46aed7dbf2a4947c00564 Mon Sep 17 00:00:00 2001
+From: hersen wu <hersenxs.wu@amd.com>
+Date: Sun, 19 Jul 2020 17:21:59 -0400
+Subject: drm/amd/display: dchubbub p-state warning during surface planes switch
+
+From: hersen wu <hersenxs.wu@amd.com>
+
+commit 8b0379a85762b516c7b46aed7dbf2a4947c00564 upstream.
+
+[Why]
+ramp_up_dispclk_with_dpp is to change dispclk, dppclk and dprefclk
+according to bandwidth requirement. call stack: rv1_update_clocks -->
+update_clocks --> dcn10_prepare_bandwidth / dcn10_optimize_bandwidth
+--> prepare_bandwidth / optimize_bandwidth. before change dcn hw,
+prepare_bandwidth will be called first to allow enough clock,
+watermark for change, after end of dcn hw change, optimize_bandwidth
+is executed to lower clock to save power for new dcn hw settings.
+
+below is sequence of commit_planes_for_stream:
+step 1: prepare_bandwidth - raise clock to have enough bandwidth
+step 2: lock_doublebuffer_enable
+step 3: pipe_control_lock(true) - make dchubp register change will
+not take effect right way
+step 4: apply_ctx_for_surface - program dchubp
+step 5: pipe_control_lock(false) - dchubp register change take effect
+step 6: optimize_bandwidth --> dc_post_update_surfaces_to_stream
+for full_date, optimize clock to save power
+
+at end of step 1, dcn clocks (dprefclk, dispclk, dppclk) may be
+changed for new dchubp configuration. but real dcn hub dchubps are
+still running with old configuration until end of step 5. this need
+clocks settings at step 1 should not less than that before step 1.
+this is checked by two conditions: 1. if (should_set_clock(safe_to_lower
+, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) ||
+new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz)
+2. request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz
+
+the second condition is based on new dchubp configuration. dppclk
+for new dchubp may be different from dppclk before step 1.
+for example, before step 1, dchubps are as below:
+pipe 0: recout=(0,40,1920,980) viewport=(0,0,1920,979)
+pipe 1: recout=(0,0,1920,1080) viewport=(0,0,1920,1080)
+for dppclk for pipe0 need dppclk = dispclk
+
+new dchubp pipe split configuration:
+pipe 0: recout=(0,0,960,1080) viewport=(0,0,960,1080)
+pipe 1: recout=(960,0,960,1080) viewport=(960,0,960,1080)
+dppclk only needs dppclk = dispclk /2.
+
+dispclk, dppclk are not lock by otg master lock. they take effect
+after step 1. during this transition, dispclk are the same, but
+dppclk is changed to half of previous clock for old dchubp
+configuration between step 1 and step 6. This may cause p-state
+warning intermittently.
+
+[How]
+for new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz, we
+need make sure dppclk are not changed to less between step 1 and 6.
+for new_clocks->dispclk_khz > clk_mgr_base->clks.dispclk_khz,
+new display clock is raised, but we do not know ratio of
+new_clocks->dispclk_khz and clk_mgr_base->clks.dispclk_khz,
+new_clocks->dispclk_khz /2 does not guarantee equal or higher than
+old dppclk. we could ignore power saving different between
+dppclk = displck and dppclk = dispclk / 2 between step 1 and step 6.
+as long as safe_to_lower = false, set dpclk = dispclk to simplify
+condition check.
+
+CC: Stable <stable@vger.kernel.org>
+Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
+Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
+Acked-by: Eryk Brol <eryk.brol@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c |   69 ++++++++++++-
+ 1 file changed, 67 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c
++++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr.c
+@@ -85,12 +85,77 @@ static int rv1_determine_dppclk_threshol
+       return disp_clk_threshold;
+ }
+-static void ramp_up_dispclk_with_dpp(struct clk_mgr_internal *clk_mgr, struct dc *dc, struct dc_clocks *new_clocks)
++static void ramp_up_dispclk_with_dpp(
++              struct clk_mgr_internal *clk_mgr,
++              struct dc *dc,
++              struct dc_clocks *new_clocks,
++              bool safe_to_lower)
+ {
+       int i;
+       int dispclk_to_dpp_threshold = rv1_determine_dppclk_threshold(clk_mgr, new_clocks);
+       bool request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz;
++      /* this function is to change dispclk, dppclk and dprefclk according to
++       * bandwidth requirement. Its call stack is rv1_update_clocks -->
++       * update_clocks --> dcn10_prepare_bandwidth / dcn10_optimize_bandwidth
++       * --> prepare_bandwidth / optimize_bandwidth. before change dcn hw,
++       * prepare_bandwidth will be called first to allow enough clock,
++       * watermark for change, after end of dcn hw change, optimize_bandwidth
++       * is executed to lower clock to save power for new dcn hw settings.
++       *
++       * below is sequence of commit_planes_for_stream:
++       *
++       * step 1: prepare_bandwidth - raise clock to have enough bandwidth
++       * step 2: lock_doublebuffer_enable
++       * step 3: pipe_control_lock(true) - make dchubp register change will
++       * not take effect right way
++       * step 4: apply_ctx_for_surface - program dchubp
++       * step 5: pipe_control_lock(false) - dchubp register change take effect
++       * step 6: optimize_bandwidth --> dc_post_update_surfaces_to_stream
++       * for full_date, optimize clock to save power
++       *
++       * at end of step 1, dcn clocks (dprefclk, dispclk, dppclk) may be
++       * changed for new dchubp configuration. but real dcn hub dchubps are
++       * still running with old configuration until end of step 5. this need
++       * clocks settings at step 1 should not less than that before step 1.
++       * this is checked by two conditions: 1. if (should_set_clock(safe_to_lower
++       * , new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) ||
++       * new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz)
++       * 2. request_dpp_div = new_clocks->dispclk_khz > new_clocks->dppclk_khz
++       *
++       * the second condition is based on new dchubp configuration. dppclk
++       * for new dchubp may be different from dppclk before step 1.
++       * for example, before step 1, dchubps are as below:
++       * pipe 0: recout=(0,40,1920,980) viewport=(0,0,1920,979)
++       * pipe 1: recout=(0,0,1920,1080) viewport=(0,0,1920,1080)
++       * for dppclk for pipe0 need dppclk = dispclk
++       *
++       * new dchubp pipe split configuration:
++       * pipe 0: recout=(0,0,960,1080) viewport=(0,0,960,1080)
++       * pipe 1: recout=(960,0,960,1080) viewport=(960,0,960,1080)
++       * dppclk only needs dppclk = dispclk /2.
++       *
++       * dispclk, dppclk are not lock by otg master lock. they take effect
++       * after step 1. during this transition, dispclk are the same, but
++       * dppclk is changed to half of previous clock for old dchubp
++       * configuration between step 1 and step 6. This may cause p-state
++       * warning intermittently.
++       *
++       * for new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz, we
++       * need make sure dppclk are not changed to less between step 1 and 6.
++       * for new_clocks->dispclk_khz > clk_mgr_base->clks.dispclk_khz,
++       * new display clock is raised, but we do not know ratio of
++       * new_clocks->dispclk_khz and clk_mgr_base->clks.dispclk_khz,
++       * new_clocks->dispclk_khz /2 does not guarantee equal or higher than
++       * old dppclk. we could ignore power saving different between
++       * dppclk = displck and dppclk = dispclk / 2 between step 1 and step 6.
++       * as long as safe_to_lower = false, set dpclk = dispclk to simplify
++       * condition check.
++       * todo: review this change for other asic.
++       **/
++      if (!safe_to_lower)
++              request_dpp_div = false;
++
+       /* set disp clk to dpp clk threshold */
+       clk_mgr->funcs->set_dispclk(clk_mgr, dispclk_to_dpp_threshold);
+@@ -209,7 +274,7 @@ static void rv1_update_clocks(struct clk
+       /* program dispclk on = as a w/a for sleep resume clock ramping issues */
+       if (should_set_clock(safe_to_lower, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz)
+                       || new_clocks->dispclk_khz == clk_mgr_base->clks.dispclk_khz) {
+-              ramp_up_dispclk_with_dpp(clk_mgr, dc, new_clocks);
++              ramp_up_dispclk_with_dpp(clk_mgr, dc, new_clocks, safe_to_lower);
+               clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz;
+               send_request_to_lower = true;
+       }
diff --git a/queue-5.8/drm-amd-display-fix-dmesg-warning-from-setting-abm-level.patch b/queue-5.8/drm-amd-display-fix-dmesg-warning-from-setting-abm-level.patch
new file mode 100644 (file)
index 0000000..8a3db2d
--- /dev/null
@@ -0,0 +1,59 @@
+From c5892a10218214d729699ab61bad6fc109baf0ce Mon Sep 17 00:00:00 2001
+From: Stylon Wang <stylon.wang@amd.com>
+Date: Tue, 30 Jun 2020 17:55:29 +0800
+Subject: drm/amd/display: Fix dmesg warning from setting abm level
+
+From: Stylon Wang <stylon.wang@amd.com>
+
+commit c5892a10218214d729699ab61bad6fc109baf0ce upstream.
+
+[Why]
+Setting abm level does not correctly update CRTC state. As a result
+no surface update is added to dc stream state and triggers warning.
+
+[How]
+Correctly update CRTC state when setting abm level property.
+
+CC: Stable <stable@vger.kernel.org>
+Signed-off-by: Stylon Wang <stylon.wang@amd.com>
+Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
+Acked-by: Eryk Brol <eryk.brol@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |   23 ++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -8686,6 +8686,29 @@ static int amdgpu_dm_atomic_check(struct
+               if (ret)
+                       goto fail;
++      /* Check connector changes */
++      for_each_oldnew_connector_in_state(state, connector, old_con_state, new_con_state, i) {
++              struct dm_connector_state *dm_old_con_state = to_dm_connector_state(old_con_state);
++              struct dm_connector_state *dm_new_con_state = to_dm_connector_state(new_con_state);
++
++              /* Skip connectors that are disabled or part of modeset already. */
++              if (!old_con_state->crtc && !new_con_state->crtc)
++                      continue;
++
++              if (!new_con_state->crtc)
++                      continue;
++
++              new_crtc_state = drm_atomic_get_crtc_state(state, new_con_state->crtc);
++              if (IS_ERR(new_crtc_state)) {
++                      ret = PTR_ERR(new_crtc_state);
++                      goto fail;
++              }
++
++              if (dm_old_con_state->abm_level !=
++                  dm_new_con_state->abm_level)
++                      new_crtc_state->connectors_changed = true;
++      }
++
+ #if defined(CONFIG_DRM_AMD_DC_DCN)
+               if (!compute_mst_dsc_configs_for_state(state, dm_state->context))
+                       goto fail;
diff --git a/queue-5.8/drm-amdgpu-fix-bug-where-dpm-is-not-enabled-after-hibernate-and-resume.patch b/queue-5.8/drm-amdgpu-fix-bug-where-dpm-is-not-enabled-after-hibernate-and-resume.patch
new file mode 100644 (file)
index 0000000..cc47905
--- /dev/null
@@ -0,0 +1,60 @@
+From f87812284172a9809820d10143b573d833cd3f75 Mon Sep 17 00:00:00 2001
+From: Sandeep Raghuraman <sandy.8925@gmail.com>
+Date: Thu, 6 Aug 2020 22:52:20 +0530
+Subject: drm/amdgpu: Fix bug where DPM is not enabled after hibernate and resume
+
+From: Sandeep Raghuraman <sandy.8925@gmail.com>
+
+commit f87812284172a9809820d10143b573d833cd3f75 upstream.
+
+Reproducing bug report here:
+After hibernating and resuming, DPM is not enabled. This remains the case
+even if you test hibernate using the steps here:
+https://www.kernel.org/doc/html/latest/power/basic-pm-debugging.html
+
+I debugged the problem, and figured out that in the file hardwaremanager.c,
+in the function, phm_enable_dynamic_state_management(), the check
+'if (!hwmgr->pp_one_vf && smum_is_dpm_running(hwmgr) && !amdgpu_passthrough(adev) && adev->in_suspend)'
+returns true for the hibernate case, and false for the suspend case.
+
+This means that for the hibernate case, the AMDGPU driver doesn't enable DPM
+(even though it should) and simply returns from that function.
+In the suspend case, it goes ahead and enables DPM, even though it doesn't need to.
+
+I debugged further, and found out that in the case of suspend, for the
+CIK/Hawaii GPUs, smum_is_dpm_running(hwmgr) returns false, while in the case of
+hibernate, smum_is_dpm_running(hwmgr) returns true.
+
+For CIK, the ci_is_dpm_running() function calls the ci_is_smc_ram_running() function,
+which is ultimately used to determine if DPM is currently enabled or not,
+and this seems to provide the wrong answer.
+
+I've changed the ci_is_dpm_running() function to instead use the same method that
+some other AMD GPU chips do (e.g Fiji), which seems to read the voltage controller.
+I've tested on my R9 390 and it seems to work correctly for both suspend and
+hibernate use cases, and has been stable so far.
+
+Bug: https://bugzilla.kernel.org/show_bug.cgi?id=208839
+Signed-off-by: Sandeep Raghuraman <sandy.8925@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
++++ b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
+@@ -2725,7 +2725,10 @@ static int ci_initialize_mc_reg_table(st
+ static bool ci_is_dpm_running(struct pp_hwmgr *hwmgr)
+ {
+-      return ci_is_smc_ram_running(hwmgr);
++      return (1 == PHM_READ_INDIRECT_FIELD(hwmgr->device,
++                                           CGS_IND_REG__SMC, FEATURE_STATUS,
++                                           VOLTAGE_CONTROLLER_ON))
++              ? true : false;
+ }
+ static int ci_smu_init(struct pp_hwmgr *hwmgr)
diff --git a/queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-registration-of-an-mst-port.patch b/queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-registration-of-an-mst-port.patch
new file mode 100644 (file)
index 0000000..8711d9c
--- /dev/null
@@ -0,0 +1,112 @@
+From d8bd15b37d328a935a4fc695fed8b19157503950 Mon Sep 17 00:00:00 2001
+From: Imre Deak <imre.deak@intel.com>
+Date: Mon, 8 Jun 2020 00:25:21 +0300
+Subject: drm/dp_mst: Fix the DDC I2C device registration of an MST port
+
+From: Imre Deak <imre.deak@intel.com>
+
+commit d8bd15b37d328a935a4fc695fed8b19157503950 upstream.
+
+During the initial MST probing an MST port's I2C device will be
+registered using the kdev of the DRM device as a parent. Later after MST
+Connection Status Notifications this I2C device will be re-registered
+with the kdev of the port's connector. This will also move
+inconsistently the I2C device's sysfs entry from the DRM device's sysfs
+dir to the connector's dir.
+
+Fix the above by keeping the DRM kdev as the parent of the I2C device.
+
+Ideally the connector's kdev would be used as a parent, similarly to
+non-MST connectors, however that needs some more refactoring to ensure
+the connector's kdev is already available early enough. So keep the
+existing (initial) behavior for now.
+
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Imre Deak <imre.deak@intel.com>
+Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200607212522.16935-2-imre.deak@intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |   28 ++++++++++++++++------------
+ 1 file changed, 16 insertions(+), 12 deletions(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -88,8 +88,8 @@ static int drm_dp_send_enum_path_resourc
+ static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
+                                u8 *guid);
+-static int drm_dp_mst_register_i2c_bus(struct drm_dp_aux *aux);
+-static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_aux *aux);
++static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port);
++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);
+ #define DBG_PREFIX "[dp_mst]"
+@@ -1966,7 +1966,7 @@ drm_dp_port_set_pdt(struct drm_dp_mst_po
+                       }
+                       /* remove i2c over sideband */
+-                      drm_dp_mst_unregister_i2c_bus(&port->aux);
++                      drm_dp_mst_unregister_i2c_bus(port);
+               } else {
+                       mutex_lock(&mgr->lock);
+                       drm_dp_mst_topology_put_mstb(port->mstb);
+@@ -1981,7 +1981,7 @@ drm_dp_port_set_pdt(struct drm_dp_mst_po
+       if (port->pdt != DP_PEER_DEVICE_NONE) {
+               if (drm_dp_mst_is_end_device(port->pdt, port->mcs)) {
+                       /* add i2c over sideband */
+-                      ret = drm_dp_mst_register_i2c_bus(&port->aux);
++                      ret = drm_dp_mst_register_i2c_bus(port);
+               } else {
+                       lct = drm_dp_calculate_rad(port, rad);
+                       mstb = drm_dp_add_mst_branch_device(lct, rad);
+@@ -5346,22 +5346,26 @@ static const struct i2c_algorithm drm_dp
+ /**
+  * drm_dp_mst_register_i2c_bus() - register an I2C adapter for I2C-over-AUX
+- * @aux: DisplayPort AUX channel
++ * @port: The port to add the I2C bus on
+  *
+  * Returns 0 on success or a negative error code on failure.
+  */
+-static int drm_dp_mst_register_i2c_bus(struct drm_dp_aux *aux)
++static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port)
+ {
++      struct drm_dp_aux *aux = &port->aux;
++      struct device *parent_dev = port->mgr->dev->dev;
++
+       aux->ddc.algo = &drm_dp_mst_i2c_algo;
+       aux->ddc.algo_data = aux;
+       aux->ddc.retries = 3;
+       aux->ddc.class = I2C_CLASS_DDC;
+       aux->ddc.owner = THIS_MODULE;
+-      aux->ddc.dev.parent = aux->dev;
+-      aux->ddc.dev.of_node = aux->dev->of_node;
++      /* FIXME: set the kdev of the port's connector as parent */
++      aux->ddc.dev.parent = parent_dev;
++      aux->ddc.dev.of_node = parent_dev->of_node;
+-      strlcpy(aux->ddc.name, aux->name ? aux->name : dev_name(aux->dev),
++      strlcpy(aux->ddc.name, aux->name ? aux->name : dev_name(parent_dev),
+               sizeof(aux->ddc.name));
+       return i2c_add_adapter(&aux->ddc);
+@@ -5369,11 +5373,11 @@ static int drm_dp_mst_register_i2c_bus(s
+ /**
+  * drm_dp_mst_unregister_i2c_bus() - unregister an I2C-over-AUX adapter
+- * @aux: DisplayPort AUX channel
++ * @port: The port to remove the I2C bus from
+  */
+-static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_aux *aux)
++static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port)
+ {
+-      i2c_del_adapter(&aux->ddc);
++      i2c_del_adapter(&port->aux.ddc);
+ }
+ /**
diff --git a/queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-unregistration-of-an-mst-port.patch b/queue-5.8/drm-dp_mst-fix-the-ddc-i2c-device-unregistration-of-an-mst-port.patch
new file mode 100644 (file)
index 0000000..bdec9d5
--- /dev/null
@@ -0,0 +1,93 @@
+From 7d11507605a75fcb2159b93d1fe8213b363a2c20 Mon Sep 17 00:00:00 2001
+From: Imre Deak <imre.deak@intel.com>
+Date: Mon, 8 Jun 2020 00:25:20 +0300
+Subject: drm/dp_mst: Fix the DDC I2C device unregistration of an MST port
+
+From: Imre Deak <imre.deak@intel.com>
+
+commit 7d11507605a75fcb2159b93d1fe8213b363a2c20 upstream.
+
+The WARN below triggers during the removal of an MST port. The problem
+is that the parent device's (the connector's kdev) sysfs directory is
+removed recursively when the connector is unregistered (even though the
+I2C device holds a reference on the parent device). To fix this set
+first the Peer Device Type to none which will remove the I2C device.
+
+Note that atm, inconsistently, the parent of the I2C device is initially set to
+the DRM kdev and after a Connection Status Notification the parent may be reset
+to be the connector's kdev. This problem is addressed by the next patch.
+
+[ 4462.989299] ------------[ cut here ]------------
+[ 4463.014940] sysfs group 'power' not found for kobject 'i2c-24'
+[ 4463.034664] WARNING: CPU: 0 PID: 970 at fs/sysfs/group.c:281 sysfs_remove_group+0x71/0x80
+[ 4463.044357] Modules linked in: snd_hda_intel i915 drm_kms_helper(O) drm netconsole snd_hda_codec_hdmi mei_hdcp x86_pkg_temp_thermal coretemp crct10dif_pclmul snd_intel_dspcf
+g crc32_pclmul snd_hda_codec snd_hwdep ghash_clmulni_intel snd_hda_core asix usbnet kvm_intel mii i2c_algo_bit snd_pcm syscopyarea sysfillrect e1000e sysimgblt fb_sys_fops prim
+e_numbers ptp pps_core i2c_i801 r8169 mei_me realtek mei [last unloaded: drm]
+[ 4463.044399] CPU: 0 PID: 970 Comm: kworker/0:2 Tainted: G           O      5.7.0+ #172
+[ 4463.044402] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP
+[ 4463.044423] Workqueue: events drm_dp_delayed_destroy_work [drm_kms_helper]
+[ 4463.044428] RIP: 0010:sysfs_remove_group+0x71/0x80
+[ 4463.044431] Code: 48 89 df 5b 5d 41 5c e9 cd b6 ff ff 48 89 df e8 95 b4 ff ff eb cb 49 8b 14 24 48 8b 75 00 48 c7 c7 20 0f 3f 82 e8 9f c5 d7 ff <0f> 0b 5b 5d 41 5c c3 0f 1f
+84 00 00 00 00 00 48 85 f6 74 31 41 54
+[ 4463.044433] RSP: 0018:ffffc900018bfbf0 EFLAGS: 00010282
+[ 4463.044436] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000001
+[ 4463.044439] RDX: 0000000080000001 RSI: ffff88849e828f38 RDI: 00000000ffffffff
+[ 4463.052970] [drm:drm_atomic_get_plane_state [drm]] Added [PLANE:100:plane 2B] 00000000c2160caa state to 00000000d172564a
+[ 4463.070533] RBP: ffffffff820cea20 R08: ffff88847f4b8958 R09: 0000000000000000
+[ 4463.070535] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848a725018
+[ 4463.070537] R13: 0000000000000000 R14: ffffffff827090e0 R15: 0000000000000002
+[ 4463.070539] FS:  0000000000000000(0000) GS:ffff88849e800000(0000) knlGS:0000000000000000
+[ 4463.070541] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[ 4463.070543] CR2: 00007fdf8a756538 CR3: 0000000489684001 CR4: 0000000000760ef0
+[ 4463.070545] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+[ 4463.070547] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+[ 4463.070549] PKRU: 55555554
+[ 4463.070551] Call Trace:
+[ 4463.070560]  device_del+0x84/0x400
+[ 4463.070571]  cdev_device_del+0x10/0x30
+[ 4463.070578]  put_i2c_dev+0x69/0x80
+[ 4463.070584]  i2cdev_detach_adapter+0x2e/0x60
+[ 4463.070591]  notifier_call_chain+0x34/0x90
+[ 4463.070599]  blocking_notifier_call_chain+0x3f/0x60
+[ 4463.070606]  device_del+0x7c/0x400
+[ 4463.087817]  ? lockdep_init_map_waits+0x57/0x210
+[ 4463.087825]  device_unregister+0x11/0x60
+[ 4463.087829]  i2c_del_adapter+0x249/0x310
+[ 4463.087846]  drm_dp_port_set_pdt+0x6b/0x2c0 [drm_kms_helper]
+[ 4463.087862]  drm_dp_delayed_destroy_work+0x2af/0x350 [drm_kms_helper]
+[ 4463.087876]  process_one_work+0x268/0x600
+[ 4463.105438]  ? __schedule+0x30c/0x920
+[ 4463.105451]  worker_thread+0x37/0x380
+[ 4463.105457]  ? process_one_work+0x600/0x600
+[ 4463.105462]  kthread+0x140/0x160
+[ 4463.105466]  ? kthread_park+0x80/0x80
+[ 4463.105474]  ret_from_fork+0x24/0x50
+
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Imre Deak <imre.deak@intel.com>
+Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200607212522.16935-1-imre.deak@intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -4642,12 +4642,13 @@ static void drm_dp_tx_work(struct work_s
+ static inline void
+ drm_dp_delayed_destroy_port(struct drm_dp_mst_port *port)
+ {
++      drm_dp_port_set_pdt(port, DP_PEER_DEVICE_NONE, port->mcs);
++
+       if (port->connector) {
+               drm_connector_unregister(port->connector);
+               drm_connector_put(port->connector);
+       }
+-      drm_dp_port_set_pdt(port, DP_PEER_DEVICE_NONE, port->mcs);
+       drm_dp_mst_put_port_malloc(port);
+ }
diff --git a/queue-5.8/drm-dp_mst-fix-timeout-handling-of-mst-down-messages.patch b/queue-5.8/drm-dp_mst-fix-timeout-handling-of-mst-down-messages.patch
new file mode 100644 (file)
index 0000000..5e73a8b
--- /dev/null
@@ -0,0 +1,79 @@
+From 58c1721787be8a6ff28b4e5b6ce395915476871e Mon Sep 17 00:00:00 2001
+From: Imre Deak <imre.deak@intel.com>
+Date: Wed, 13 May 2020 13:31:55 +0300
+Subject: drm/dp_mst: Fix timeout handling of MST down messages
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Imre Deak <imre.deak@intel.com>
+
+commit 58c1721787be8a6ff28b4e5b6ce395915476871e upstream.
+
+This fixes the following use-after-free problem in case an MST down
+message times out, while waiting for the response for it:
+
+[  449.022841] [drm:drm_dp_mst_wait_tx_reply.isra.26] timedout msg send 0000000080ba7fa2 2 0
+[  449.022898] ------------[ cut here ]------------
+[  449.022903] list_add corruption. prev->next should be next (ffff88847dae32c0), but was 6b6b6b6b6b6b6b6b. (prev=ffff88847db1c140).
+[  449.022931] WARNING: CPU: 2 PID: 22 at lib/list_debug.c:28 __list_add_valid+0x4d/0x70
+[  449.022935] Modules linked in: asix usbnet mii snd_hda_codec_hdmi mei_hdcp i915 x86_pkg_temp_thermal coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep e1000e snd_hda_core ptp snd_pcm pps_core mei_me mei intel_lpss_pci prime_numbers
+[  449.022966] CPU: 2 PID: 22 Comm: kworker/2:0 Not tainted 5.7.0-rc3-CI-Patchwork_17536+ #1
+[  449.022970] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.R00.2457.A16.1912270059 12/27/2019
+[  449.022976] Workqueue: events_long drm_dp_mst_link_probe_work
+[  449.022982] RIP: 0010:__list_add_valid+0x4d/0x70
+[  449.022987] Code: c3 48 89 d1 48 c7 c7 f0 e7 32 82 48 89 c2 e8 3a 49 b7 ff 0f 0b 31 c0 c3 48 89 c1 4c 89 c6 48 c7 c7 40 e8 32 82 e8 23 49 b7 ff <0f> 0b 31 c0 c3 48 89 f2 4c 89 c1 48 89 fe 48 c7 c7 90 e8 32 82 e8
+[  449.022991] RSP: 0018:ffffc900001abcb0 EFLAGS: 00010286
+[  449.022995] RAX: 0000000000000000 RBX: ffff88847dae2d58 RCX: 0000000000000001
+[  449.022999] RDX: 0000000080000001 RSI: ffff88849d914978 RDI: 00000000ffffffff
+[  449.023002] RBP: ffff88847dae32c0 R08: ffff88849d914978 R09: 0000000000000000
+[  449.023006] R10: ffffc900001abcb8 R11: 0000000000000000 R12: ffff888490d98400
+[  449.023009] R13: ffff88847dae3230 R14: ffff88847db1c140 R15: ffff888490d98540
+[  449.023013] FS:  0000000000000000(0000) GS:ffff88849ff00000(0000) knlGS:0000000000000000
+[  449.023017] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[  449.023021] CR2: 00007fb96fafdc63 CR3: 0000000005610004 CR4: 0000000000760ee0
+[  449.023025] PKRU: 55555554
+[  449.023028] Call Trace:
+[  449.023034]  drm_dp_queue_down_tx+0x59/0x110
+[  449.023041]  ? rcu_read_lock_sched_held+0x4d/0x80
+[  449.023050]  ? kmem_cache_alloc_trace+0x2a6/0x2d0
+[  449.023060]  drm_dp_send_link_address+0x74/0x870
+[  449.023065]  ? __slab_free+0x3e1/0x5c0
+[  449.023071]  ? lockdep_hardirqs_on+0xe0/0x1c0
+[  449.023078]  ? lockdep_hardirqs_on+0xe0/0x1c0
+[  449.023097]  drm_dp_check_and_send_link_address+0x9a/0xc0
+[  449.023106]  drm_dp_mst_link_probe_work+0x9e/0x160
+[  449.023117]  process_one_work+0x268/0x600
+[  449.023124]  ? __schedule+0x307/0x8d0
+[  449.023139]  worker_thread+0x37/0x380
+[  449.023149]  ? process_one_work+0x600/0x600
+[  449.023153]  kthread+0x140/0x160
+[  449.023159]  ? kthread_park+0x80/0x80
+[  449.023169]  ret_from_fork+0x24/0x50
+
+Fixes: d308a881a591 ("drm/dp_mst: Kill the second sideband tx slot, save the world")
+Cc: Lyude Paul <lyude@redhat.com>
+Cc: Sean Paul <sean@poorly.run>
+Cc: Wayne Lin <Wayne.Lin@amd.com>
+Cc: <stable@vger.kernel.org> # v3.17+
+Signed-off-by: Imre Deak <imre.deak@intel.com>
+Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200513103155.12336-1-imre.deak@intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -1197,7 +1197,8 @@ static int drm_dp_mst_wait_tx_reply(stru
+               /* remove from q */
+               if (txmsg->state == DRM_DP_SIDEBAND_TX_QUEUED ||
+-                  txmsg->state == DRM_DP_SIDEBAND_TX_START_SEND)
++                  txmsg->state == DRM_DP_SIDEBAND_TX_START_SEND ||
++                  txmsg->state == DRM_DP_SIDEBAND_TX_SENT)
+                       list_del(&txmsg->next);
+       }
+ out:
diff --git a/queue-5.8/drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst_allocate_vcpi.patch b/queue-5.8/drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst_allocate_vcpi.patch
new file mode 100644 (file)
index 0000000..58e10f8
--- /dev/null
@@ -0,0 +1,65 @@
+From a34a0a632dd991a371fec56431d73279f9c54029 Mon Sep 17 00:00:00 2001
+From: Xin Xiong <xiongx18@fudan.edu.cn>
+Date: Sun, 19 Jul 2020 23:45:45 +0800
+Subject: drm: fix drm_dp_mst_port refcount leaks in drm_dp_mst_allocate_vcpi
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Xin Xiong <xiongx18@fudan.edu.cn>
+
+commit a34a0a632dd991a371fec56431d73279f9c54029 upstream.
+
+drm_dp_mst_allocate_vcpi() invokes
+drm_dp_mst_topology_get_port_validated(), which increases the refcount
+of the "port".
+
+These reference counting issues take place in two exception handling
+paths separately. Either when “slots” is less than 0 or when
+drm_dp_init_vcpi() returns a negative value, the function forgets to
+reduce the refcnt increased drm_dp_mst_topology_get_port_validated(),
+which results in a refcount leak.
+
+Fix these issues by pulling up the error handling when "slots" is less
+than 0, and calling drm_dp_mst_topology_put_port() before termination
+when drm_dp_init_vcpi() returns a negative value.
+
+Fixes: 1e797f556c61 ("drm/dp: Split drm_dp_mst_allocate_vcpi")
+Cc: <stable@vger.kernel.org> # v4.12+
+Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
+Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
+Signed-off-by: Xin Xiong <xiongx18@fudan.edu.cn>
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200719154545.GA41231@xin-virtual-machine
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/drm_dp_mst_topology.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/drm_dp_mst_topology.c
++++ b/drivers/gpu/drm/drm_dp_mst_topology.c
+@@ -4262,11 +4262,11 @@ bool drm_dp_mst_allocate_vcpi(struct drm
+ {
+       int ret;
+-      port = drm_dp_mst_topology_get_port_validated(mgr, port);
+-      if (!port)
++      if (slots < 0)
+               return false;
+-      if (slots < 0)
++      port = drm_dp_mst_topology_get_port_validated(mgr, port);
++      if (!port)
+               return false;
+       if (port->vcpi.vcpi > 0) {
+@@ -4282,6 +4282,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm
+       if (ret) {
+               DRM_DEBUG_KMS("failed to init vcpi slots=%d max=63 ret=%d\n",
+                             DIV_ROUND_UP(pbn, mgr->pbn_div), ret);
++              drm_dp_mst_topology_put_port(port);
+               goto out;
+       }
+       DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n",
diff --git a/queue-5.8/drm-i915-gt-force-the-gt-reset-on-shutdown.patch b/queue-5.8/drm-i915-gt-force-the-gt-reset-on-shutdown.patch
new file mode 100644 (file)
index 0000000..d59d6bb
--- /dev/null
@@ -0,0 +1,41 @@
+From 7c4541a37bbbf83c0f16f779e85eb61d9348ed29 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Mon, 25 May 2020 16:14:59 +0100
+Subject: drm/i915/gt: Force the GT reset on shutdown
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit 7c4541a37bbbf83c0f16f779e85eb61d9348ed29 upstream.
+
+Before we return control to the system, and letting it reuse all the
+pages being accessed by HW, we must disable the HW. At the moment, we
+dare not reset the GPU if it will clobber the display, but once we know
+the display has been disabled, we can proceed with the reset as we
+shutdown the module. We know the next user must reinitialise the HW for
+their purpose.
+
+Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/489
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: stable@kernel.org
+Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200525151459.12083-1-chris@chris-wilson.co.uk
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/gt/intel_gt.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/gpu/drm/i915/gt/intel_gt.c
++++ b/drivers/gpu/drm/i915/gt/intel_gt.c
+@@ -616,6 +616,11 @@ void intel_gt_driver_unregister(struct i
+ void intel_gt_driver_release(struct intel_gt *gt)
+ {
+       struct i915_address_space *vm;
++      intel_wakeref_t wakeref;
++
++      /* Scrub all HW state upon release */
++      with_intel_runtime_pm(gt->uncore->rpm, wakeref)
++              __intel_gt_reset(gt, ALL_ENGINES);
+       vm = fetch_and_zero(&gt->vm);
+       if (vm) /* FIXME being called twice on error paths :( */
diff --git a/queue-5.8/drm-omap-force-runtime-pm-suspend-on-system-suspend.patch b/queue-5.8/drm-omap-force-runtime-pm-suspend-on-system-suspend.patch
new file mode 100644 (file)
index 0000000..0d0568a
--- /dev/null
@@ -0,0 +1,71 @@
+From ecfdedd7da5d54416db5ca0f851264dca8736f59 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 18 Jun 2020 12:51:52 +0300
+Subject: drm/omap: force runtime PM suspend on system suspend
+
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+
+commit ecfdedd7da5d54416db5ca0f851264dca8736f59 upstream.
+
+Use SET_LATE_SYSTEM_SLEEP_PM_OPS in DSS submodules to force runtime PM
+suspend and resume.
+
+We use suspend late version so that omapdrm's system suspend callback is
+called first, as that will disable all the display outputs after which
+it's safe to force DSS into suspend.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200618095153.611071-1-tomi.valkeinen@ti.com
+Acked-by: Tony Lindgren <tony@atomide.com>
+Fixes: cef766300353 ("drm/omap: Prepare DSS for probing without legacy platform data")
+Cc: stable@vger.kernel.org # v5.7+
+Tested-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/omapdrm/dss/dispc.c |    1 +
+ drivers/gpu/drm/omapdrm/dss/dsi.c   |    1 +
+ drivers/gpu/drm/omapdrm/dss/dss.c   |    1 +
+ drivers/gpu/drm/omapdrm/dss/venc.c  |    1 +
+ 4 files changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
++++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
+@@ -4915,6 +4915,7 @@ static int dispc_runtime_resume(struct d
+ static const struct dev_pm_ops dispc_pm_ops = {
+       .runtime_suspend = dispc_runtime_suspend,
+       .runtime_resume = dispc_runtime_resume,
++      SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
+ };
+ struct platform_driver omap_dispchw_driver = {
+--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
++++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
+@@ -5467,6 +5467,7 @@ static int dsi_runtime_resume(struct dev
+ static const struct dev_pm_ops dsi_pm_ops = {
+       .runtime_suspend = dsi_runtime_suspend,
+       .runtime_resume = dsi_runtime_resume,
++      SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
+ };
+ struct platform_driver omap_dsihw_driver = {
+--- a/drivers/gpu/drm/omapdrm/dss/dss.c
++++ b/drivers/gpu/drm/omapdrm/dss/dss.c
+@@ -1614,6 +1614,7 @@ static int dss_runtime_resume(struct dev
+ static const struct dev_pm_ops dss_pm_ops = {
+       .runtime_suspend = dss_runtime_suspend,
+       .runtime_resume = dss_runtime_resume,
++      SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
+ };
+ struct platform_driver omap_dsshw_driver = {
+--- a/drivers/gpu/drm/omapdrm/dss/venc.c
++++ b/drivers/gpu/drm/omapdrm/dss/venc.c
+@@ -902,6 +902,7 @@ static int venc_runtime_resume(struct de
+ static const struct dev_pm_ops venc_pm_ops = {
+       .runtime_suspend = venc_runtime_suspend,
+       .runtime_resume = venc_runtime_resume,
++      SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
+ };
+ static const struct of_device_id venc_of_match[] = {
diff --git a/queue-5.8/drm-panfrost-use-kvfree-to-free-bo-sgts.patch b/queue-5.8/drm-panfrost-use-kvfree-to-free-bo-sgts.patch
new file mode 100644 (file)
index 0000000..f02d5af
--- /dev/null
@@ -0,0 +1,47 @@
+From 114427b8927a4def2942b2b886f7e4aeae289ccb Mon Sep 17 00:00:00 2001
+From: Denis Efremov <efremov@linux.com>
+Date: Mon, 8 Jun 2020 18:17:28 +0300
+Subject: drm/panfrost: Use kvfree() to free bo->sgts
+
+From: Denis Efremov <efremov@linux.com>
+
+commit 114427b8927a4def2942b2b886f7e4aeae289ccb upstream.
+
+Use kvfree() to free bo->sgts, because the memory is allocated with
+kvmalloc_array() in panfrost_mmu_map_fault_addr().
+
+Fixes: 187d2929206e ("drm/panfrost: Add support for GPU heap allocations")
+Cc: stable@vger.kernel.org
+Signed-off-by: Denis Efremov <efremov@linux.com>
+Reviewed-by: Steven Price <steven.price@arm.com>
+Signed-off-by: Steven Price <steven.price@arm.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200608151728.234026-1-efremov@linux.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/panfrost/panfrost_gem.c |    2 +-
+ drivers/gpu/drm/panfrost/panfrost_mmu.c |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/panfrost/panfrost_gem.c
++++ b/drivers/gpu/drm/panfrost/panfrost_gem.c
+@@ -46,7 +46,7 @@ static void panfrost_gem_free_object(str
+                               sg_free_table(&bo->sgts[i]);
+                       }
+               }
+-              kfree(bo->sgts);
++              kvfree(bo->sgts);
+       }
+       drm_gem_shmem_free_object(obj);
+--- a/drivers/gpu/drm/panfrost/panfrost_mmu.c
++++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c
+@@ -486,7 +486,7 @@ static int panfrost_mmu_map_fault_addr(s
+               pages = kvmalloc_array(bo->base.base.size >> PAGE_SHIFT,
+                                      sizeof(struct page *), GFP_KERNEL | __GFP_ZERO);
+               if (!pages) {
+-                      kfree(bo->sgts);
++                      kvfree(bo->sgts);
+                       bo->sgts = NULL;
+                       mutex_unlock(&bo->base.pages_lock);
+                       ret = -ENOMEM;
diff --git a/queue-5.8/drm-radeon-fix-fb_div-check-in-ni_init_smc_spll_table.patch b/queue-5.8/drm-radeon-fix-fb_div-check-in-ni_init_smc_spll_table.patch
new file mode 100644 (file)
index 0000000..1f9fa7a
--- /dev/null
@@ -0,0 +1,33 @@
+From f29aa08852e1953e461f2d47ab13c34e14bc08b3 Mon Sep 17 00:00:00 2001
+From: Denis Efremov <efremov@linux.com>
+Date: Mon, 22 Jun 2020 23:31:22 +0300
+Subject: drm/radeon: fix fb_div check in ni_init_smc_spll_table()
+
+From: Denis Efremov <efremov@linux.com>
+
+commit f29aa08852e1953e461f2d47ab13c34e14bc08b3 upstream.
+
+clk_s is checked twice in a row in ni_init_smc_spll_table().
+fb_div should be checked instead.
+
+Fixes: 69e0b57a91ad ("drm/radeon/kms: add dpm support for cayman (v5)")
+Cc: stable@vger.kernel.org
+Signed-off-by: Denis Efremov <efremov@linux.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/ni_dpm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/ni_dpm.c
++++ b/drivers/gpu/drm/radeon/ni_dpm.c
+@@ -2124,7 +2124,7 @@ static int ni_init_smc_spll_table(struct
+               if (p_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_PDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_PDIV_SHIFT))
+                       ret = -EINVAL;
+-              if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
++              if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
+                       ret = -EINVAL;
+               if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
diff --git a/queue-5.8/drm-tidss-fix-modeset-init-for-dpi-panels.patch b/queue-5.8/drm-tidss-fix-modeset-init-for-dpi-panels.patch
new file mode 100644 (file)
index 0000000..19c0d30
--- /dev/null
@@ -0,0 +1,37 @@
+From a72a6a16d51034045cb6355924b62221a8221ca3 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 4 Jun 2020 11:02:14 +0300
+Subject: drm/tidss: fix modeset init for DPI panels
+
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+
+commit a72a6a16d51034045cb6355924b62221a8221ca3 upstream.
+
+The connector type for DISPC's DPI videoport was set the LVDS instead of
+DPI. This causes any DPI panel setup to fail with tidss, making all DPI
+panels unusable.
+
+Fix this by using correct connector type.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Fixes: 32a1795f57eecc39749017 ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
+Cc: stable@vger.kernel.org # v5.7+
+Link: https://patchwork.freedesktop.org/patch/msgid/20200604080214.107159-1-tomi.valkeinen@ti.com
+Reviewed-by: Jyri Sarha <jsarha@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/tidss/tidss_kms.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/tidss/tidss_kms.c
++++ b/drivers/gpu/drm/tidss/tidss_kms.c
+@@ -154,7 +154,7 @@ static int tidss_dispc_modeset_init(stru
+                               break;
+                       case DISPC_VP_DPI:
+                               enc_type = DRM_MODE_ENCODER_DPI;
+-                              conn_type = DRM_MODE_CONNECTOR_LVDS;
++                              conn_type = DRM_MODE_CONNECTOR_DPI;
+                               break;
+                       default:
+                               WARN_ON(1);
index 63db19d499d4e10c14a745fc7bb767ef7280f7fd..5af74966cec8f4282738ceba74f484db45efe30c 100644 (file)
@@ -217,3 +217,16 @@ tools-build-feature-quote-cc-and-cxx-for-their-argum.patch
 perf-x86-rapl-fix-missing-psys-sysfs-attributes.patch
 sh-landisk-add-missing-initialization-of-sh_io_port_.patch
 sh-fault-fix-duplicate-printing-of-pc.patch
+drm-radeon-fix-fb_div-check-in-ni_init_smc_spll_table.patch
+drm-i915-gt-force-the-gt-reset-on-shutdown.patch
+drm-panfrost-use-kvfree-to-free-bo-sgts.patch
+drm-dp_mst-fix-the-ddc-i2c-device-registration-of-an-mst-port.patch
+drm-dp_mst-fix-timeout-handling-of-mst-down-messages.patch
+drm-dp_mst-fix-the-ddc-i2c-device-unregistration-of-an-mst-port.patch
+drm-omap-force-runtime-pm-suspend-on-system-suspend.patch
+drm-tidss-fix-modeset-init-for-dpi-panels.patch
+drm-added-orientation-quirk-for-asus-tablet-model-t103haf.patch
+drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst_allocate_vcpi.patch
+drm-amdgpu-fix-bug-where-dpm-is-not-enabled-after-hibernate-and-resume.patch
+drm-amd-display-fix-dmesg-warning-from-setting-abm-level.patch
+drm-amd-display-dchubbub-p-state-warning-during-surface-planes-switch.patch