From: Sasha Levin Date: Mon, 13 Nov 2023 19:39:38 +0000 (-0500) Subject: Fixes for 6.5 X-Git-Tag: v4.14.330~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e1ff411d088aca829b9cdb8ea5e53aff2824bc8;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.5 Signed-off-by: Sasha Levin --- 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 index 00000000000..240d8f01694 --- /dev/null +++ b/queue-6.5/revert-drm-ast-report-connection-status-on-display-p.patch @@ -0,0 +1,199 @@ +From cd42d412bac4c9495ef885e62edf58c85a64441e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 +--- + 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 + #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 + diff --git a/queue-6.5/series b/queue-6.5/series index b050a2945c0..f019c71fdc0 100644 --- a/queue-6.5/series +++ b/queue-6.5/series @@ -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