]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.5
authorSasha Levin <sashal@kernel.org>
Mon, 13 Nov 2023 19:39:38 +0000 (14:39 -0500)
committerSasha Levin <sashal@kernel.org>
Mon, 13 Nov 2023 19:39:38 +0000 (14:39 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-6.5/revert-drm-ast-report-connection-status-on-display-p.patch [new file with mode: 0644]
queue-6.5/series

diff --git a/queue-6.5/revert-drm-ast-report-connection-status-on-display-p.patch b/queue-6.5/revert-drm-ast-report-connection-status-on-display-p.patch
new file mode 100644 (file)
index 0000000..240d8f0
--- /dev/null
@@ -0,0 +1,199 @@
+From cd42d412bac4c9495ef885e62edf58c85a64441e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 13 Nov 2023 11:36:36 -0500
+Subject: Revert "drm/ast: report connection status on Display Port."
+
+This reverts commit f81bb0ac7872893241319ea82504956676ef02fd.
+
+The commit depends on e329cb53b45d ("drm/ast: Add BMC virtual
+connector") and will cause hangs on boot without that dependency.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/ast/ast_dp.c    | 11 ----------
+ drivers/gpu/drm/ast/ast_dp501.c | 37 +++++++++++----------------------
+ drivers/gpu/drm/ast/ast_drv.h   |  2 --
+ drivers/gpu/drm/ast/ast_mode.c  | 30 ++------------------------
+ 4 files changed, 14 insertions(+), 66 deletions(-)
+
+diff --git a/drivers/gpu/drm/ast/ast_dp.c b/drivers/gpu/drm/ast/ast_dp.c
+index fdd9a493aa9c0..6dc1a09504e13 100644
+--- a/drivers/gpu/drm/ast/ast_dp.c
++++ b/drivers/gpu/drm/ast/ast_dp.c
+@@ -7,17 +7,6 @@
+ #include <drm/drm_print.h>
+ #include "ast_drv.h"
+-bool ast_astdp_is_connected(struct ast_device *ast)
+-{
+-      if (!ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xD1, ASTDP_MCU_FW_EXECUTING))
+-              return false;
+-      if (!ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xDF, ASTDP_HPD))
+-              return false;
+-      if (!ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xDC, ASTDP_LINK_SUCCESS))
+-              return false;
+-      return true;
+-}
+-
+ int ast_astdp_read_edid(struct drm_device *dev, u8 *ediddata)
+ {
+       struct ast_device *ast = to_ast_device(dev);
+diff --git a/drivers/gpu/drm/ast/ast_dp501.c b/drivers/gpu/drm/ast/ast_dp501.c
+index fa7442b0c2612..1bc35a992369d 100644
+--- a/drivers/gpu/drm/ast/ast_dp501.c
++++ b/drivers/gpu/drm/ast/ast_dp501.c
+@@ -272,9 +272,11 @@ static bool ast_launch_m68k(struct drm_device *dev)
+       return true;
+ }
+-bool ast_dp501_is_connected(struct ast_device *ast)
++bool ast_dp501_read_edid(struct drm_device *dev, u8 *ediddata)
+ {
+-      u32 boot_address, offset, data;
++      struct ast_device *ast = to_ast_device(dev);
++      u32 i, boot_address, offset, data;
++      u32 *pEDIDidx;
+       if (ast->config_mode == ast_use_p2a) {
+               boot_address = get_fw_base(ast);
+@@ -290,6 +292,14 @@ bool ast_dp501_is_connected(struct ast_device *ast)
+               data = ast_mindwm(ast, boot_address + offset);
+               if (!(data & AST_DP501_PNP_CONNECTED))
+                       return false;
++
++              /* Read EDID */
++              offset = AST_DP501_EDID_DATA;
++              for (i = 0; i < 128; i += 4) {
++                      data = ast_mindwm(ast, boot_address + offset + i);
++                      pEDIDidx = (u32 *)(ediddata + i);
++                      *pEDIDidx = data;
++              }
+       } else {
+               if (!ast->dp501_fw_buf)
+                       return false;
+@@ -309,30 +319,7 @@ bool ast_dp501_is_connected(struct ast_device *ast)
+               data = readl(ast->dp501_fw_buf + offset);
+               if (!(data & AST_DP501_PNP_CONNECTED))
+                       return false;
+-      }
+-      return true;
+-}
+-
+-bool ast_dp501_read_edid(struct drm_device *dev, u8 *ediddata)
+-{
+-      struct ast_device *ast = to_ast_device(dev);
+-      u32 i, boot_address, offset, data;
+-      u32 *pEDIDidx;
+-
+-      if (!ast_dp501_is_connected(ast))
+-              return false;
+-
+-      if (ast->config_mode == ast_use_p2a) {
+-              boot_address = get_fw_base(ast);
+-              /* Read EDID */
+-              offset = AST_DP501_EDID_DATA;
+-              for (i = 0; i < 128; i += 4) {
+-                      data = ast_mindwm(ast, boot_address + offset + i);
+-                      pEDIDidx = (u32 *)(ediddata + i);
+-                      *pEDIDidx = data;
+-              }
+-      } else {
+               /* Read EDID */
+               offset = AST_DP501_EDID_DATA;
+               for (i = 0; i < 128; i += 4) {
+diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
+index 8a0ffa8b5939b..5498a6676f2e8 100644
+--- a/drivers/gpu/drm/ast/ast_drv.h
++++ b/drivers/gpu/drm/ast/ast_drv.h
+@@ -468,7 +468,6 @@ void ast_patch_ahb_2500(struct ast_device *ast);
+ /* ast dp501 */
+ void ast_set_dp501_video_output(struct drm_device *dev, u8 mode);
+ bool ast_backup_fw(struct drm_device *dev, u8 *addr, u32 size);
+-bool ast_dp501_is_connected(struct ast_device *ast);
+ bool ast_dp501_read_edid(struct drm_device *dev, u8 *ediddata);
+ u8 ast_get_dp501_max_clk(struct drm_device *dev);
+ void ast_init_3rdtx(struct drm_device *dev);
+@@ -477,7 +476,6 @@ void ast_init_3rdtx(struct drm_device *dev);
+ struct ast_i2c_chan *ast_i2c_create(struct drm_device *dev);
+ /* aspeed DP */
+-bool ast_astdp_is_connected(struct ast_device *ast);
+ int ast_astdp_read_edid(struct drm_device *dev, u8 *ediddata);
+ void ast_dp_launch(struct drm_device *dev);
+ void ast_dp_power_on_off(struct drm_device *dev, bool no);
+diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
+index 0724516f29737..b3c670af6ef2b 100644
+--- a/drivers/gpu/drm/ast/ast_mode.c
++++ b/drivers/gpu/drm/ast/ast_mode.c
+@@ -1585,20 +1585,8 @@ static int ast_dp501_connector_helper_get_modes(struct drm_connector *connector)
+       return 0;
+ }
+-static int ast_dp501_connector_helper_detect_ctx(struct drm_connector *connector,
+-                                               struct drm_modeset_acquire_ctx *ctx,
+-                                               bool force)
+-{
+-      struct ast_device *ast = to_ast_device(connector->dev);
+-
+-      if (ast_dp501_is_connected(ast))
+-              return connector_status_connected;
+-      return connector_status_disconnected;
+-}
+-
+ static const struct drm_connector_helper_funcs ast_dp501_connector_helper_funcs = {
+       .get_modes = ast_dp501_connector_helper_get_modes,
+-      .detect_ctx = ast_dp501_connector_helper_detect_ctx,
+ };
+ static const struct drm_connector_funcs ast_dp501_connector_funcs = {
+@@ -1623,7 +1611,7 @@ static int ast_dp501_connector_init(struct drm_device *dev, struct drm_connector
+       connector->interlace_allowed = 0;
+       connector->doublescan_allowed = 0;
+-      connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
++      connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+       return 0;
+ }
+@@ -1695,20 +1683,8 @@ static int ast_astdp_connector_helper_get_modes(struct drm_connector *connector)
+       return 0;
+ }
+-static int ast_astdp_connector_helper_detect_ctx(struct drm_connector *connector,
+-                                               struct drm_modeset_acquire_ctx *ctx,
+-                                               bool force)
+-{
+-      struct ast_device *ast = to_ast_device(connector->dev);
+-
+-      if (ast_astdp_is_connected(ast))
+-              return connector_status_connected;
+-      return connector_status_disconnected;
+-}
+-
+ static const struct drm_connector_helper_funcs ast_astdp_connector_helper_funcs = {
+       .get_modes = ast_astdp_connector_helper_get_modes,
+-      .detect_ctx = ast_astdp_connector_helper_detect_ctx,
+ };
+ static const struct drm_connector_funcs ast_astdp_connector_funcs = {
+@@ -1733,7 +1709,7 @@ static int ast_astdp_connector_init(struct drm_device *dev, struct drm_connector
+       connector->interlace_allowed = 0;
+       connector->doublescan_allowed = 0;
+-      connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
++      connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+       return 0;
+ }
+@@ -1872,7 +1848,5 @@ int ast_mode_config_init(struct ast_device *ast)
+       drm_mode_config_reset(dev);
+-      drm_kms_helper_poll_init(dev);
+-
+       return 0;
+ }
+-- 
+2.42.0
+
index b050a2945c0d4bae8c3d8be876d72506a2422d54..f019c71fdc0a4356f295651db5b1ed704645c2ff 100644 (file)
@@ -540,3 +540,4 @@ fbdev-imsttfb-fix-a-resource-leak-in-probe.patch
 alsa-hda-realtek-add-support-dual-speaker-for-dell.patch
 fbdev-fsl-diu-fb-mark-wr_reg_wa-static.patch
 tracing-kprobes-fix-the-order-of-argument-descriptio.patch
+revert-drm-ast-report-connection-status-on-display-p.patch