From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 98C0FC001DC for ; Fri, 21 Jul 2023 16:14:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 208D810E6BD; Fri, 21 Jul 2023 16:14:40 +0000 (UTC) Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2EDCA10E6BC; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 763FA61D2B; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D258C433C7; Fri, 21 Jul 2023 16:13:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689956035; bh=qbnodRkJmbR4UceeOvYhu4OqsChhMCKncTD483gVVBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BKJQdgm6wWlvcl36q2AvT84cIFnAUmjcnX4iS32xI7tdvu4zJMBAcEPxfFfxUdInz TpczzgeEZKj67r4k9VYV3PO8lnYYYZYB3xl121za9h/+UVs+GJPi99z8tcYSbBulIS LXvvVCbqmq0JpUAqgBi1uDfSvY6nKHPmGEPVNLpc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Subject: [PATCH 6.4 111/292] drm/client: Send hotplug event after registering a client Date: Fri, 21 Jul 2023 18:03:40 +0200 Message-ID: <20230721160533.588771953@linuxfoundation.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721160528.800311148@linuxfoundation.org> References: <20230721160528.800311148@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Fri, 21 Jul 2023 16:14:38 +0000 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomi Valkeinen , dri-devel@lists.freedesktop.org, Russell King , Thierry Reding , Rob Clark , amd-gfx@lists.freedesktop.org, David Airlie , linux-samsung-soc@vger.kernel.org, Javier Martinez Canillas , Patrik Jakobsson , freedreno@lists.freedesktop.org, Daniel Vetter , Kyungmin Park , Paul Schyska , Torsten Krah , linux-arm-msm@vger.kernel.org, Maarten Lankhorst , Abhinav Kumar , Maxime Ripard , Inki Dae , Alex Deucher , linux-tegra@vger.kernel.org, Mikko Perttunen , linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , "Pan, Xinhui" , Seung-Woo Kim , patches@lists.linux.dev, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Thomas Zimmermann , Dmitry Baryshkov , Moritz Duge , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" From: Thomas Zimmermann commit 27655b9bb9f0d9c32b8de8bec649b676898c52d5 upstream. Generate a hotplug event after registering a client to allow the client to configure its display. Remove the hotplug calls from the existing clients for fbdev emulation. This change fixes a concurrency bug between registering a client and receiving events from the DRM core. The bug is present in the fbdev emulation of all drivers. The fbdev emulation currently generates a hotplug event before registering the client to the device. For each new output, the DRM core sends an additional hotplug event to each registered client. If the DRM core detects first output between sending the artificial hotplug and registering the device, the output's hotplug event gets lost. If this is the first output, the fbdev console display remains dark. This has been observed with amdgpu and fbdev-generic. Fix this by adding hotplug generation directly to the client's register helper drm_client_register(). Registering the client and receiving events are serialized by struct drm_device.clientlist_mutex. So an output is either configured by the initial hotplug event, or the client has already been registered. The bug was originally added in commit 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done"), in which adding a client and receiving a hotplug event switched order. It was hidden, as most hardware and drivers have at least on static output configured. Other drivers didn't use the internal DRM client or still had struct drm_mode_config_funcs.output_poll_changed set. That callback handled hotplug events as well. After not setting the callback in amdgpu in commit 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed"), amdgpu did not show a framebuffer console if output events got lost. The bug got copy-pasted from fbdev-generic into the other fbdev emulation. Reported-by: Moritz Duge Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649 Fixes: 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done") Fixes: 8ab59da26bc0 ("drm/fb-helper: Move generic fbdev emulation into separate source file") Fixes: b79fe9abd58b ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers") Fixes: 63c381552f69 ("drm/armada: Implement fbdev emulation as in-kernel client") Fixes: 49953b70e7d3 ("drm/exynos: Implement fbdev emulation as in-kernel client") Fixes: 8f1aaccb04b7 ("drm/gma500: Implement client-based fbdev emulation") Fixes: 940b869c2f2f ("drm/msm: Implement fbdev emulation as in-kernel client") Fixes: 9e69bcd88e45 ("drm/omapdrm: Implement fbdev emulation as in-kernel client") Fixes: e317a69fe891 ("drm/radeon: Implement client-based fbdev emulation") Fixes: 71ec16f45ef8 ("drm/tegra: Implement fbdev emulation as in-kernel client") Fixes: 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed") Signed-off-by: Thomas Zimmermann Tested-by: Moritz Duge Tested-by: Torsten Krah Tested-by: Paul Schyska Cc: Daniel Vetter Cc: David Airlie Cc: Noralf Trønnes Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Javier Martinez Canillas Cc: Russell King Cc: Inki Dae Cc: Seung-Woo Kim Cc: Kyungmin Park Cc: Krzysztof Kozlowski Cc: Patrik Jakobsson Cc: Rob Clark Cc: Abhinav Kumar Cc: Dmitry Baryshkov Cc: Tomi Valkeinen Cc: Alex Deucher Cc: "Christian König" Cc: "Pan, Xinhui" Cc: Thierry Reding Cc: Mikko Perttunen Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: amd-gfx@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: # v5.2+ Reviewed-by: Javier Martinez Canillas Reviewed-by: Dmitry Baryshkov # msm Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de [ Dropped changes to drivers/gpu/drm/armada/armada_fbdev.c as 174c3c38e3a2 drm/armada: Initialize fbdev DRM client was introduced in 6.5-rc1 ] Signed-off-by: Mario Limonciello Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_client.c | 21 +++++++++++++++++++++ drivers/gpu/drm/drm_fbdev_dma.c | 4 ---- drivers/gpu/drm/drm_fbdev_generic.c | 4 ---- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 4 ---- drivers/gpu/drm/gma500/fbdev.c | 4 ---- drivers/gpu/drm/msm/msm_fbdev.c | 4 ---- drivers/gpu/drm/omapdrm/omap_fbdev.c | 4 ---- drivers/gpu/drm/radeon/radeon_fbdev.c | 4 ---- drivers/gpu/drm/tegra/fbdev.c | 4 ---- 9 files changed, 21 insertions(+), 32 deletions(-) --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -122,13 +122,34 @@ EXPORT_SYMBOL(drm_client_init); * drm_client_register() it is no longer permissible to call drm_client_release() * directly (outside the unregister callback), instead cleanup will happen * automatically on driver unload. + * + * Registering a client generates a hotplug event that allows the client + * to set up its display from pre-existing outputs. The client must have + * initialized its state to able to handle the hotplug event successfully. */ void drm_client_register(struct drm_client_dev *client) { struct drm_device *dev = client->dev; + int ret; mutex_lock(&dev->clientlist_mutex); list_add(&client->list, &dev->clientlist); + + if (client->funcs && client->funcs->hotplug) { + /* + * Perform an initial hotplug event to pick up the + * display configuration for the client. This step + * has to be performed *after* registering the client + * in the list of clients, or a concurrent hotplug + * event might be lost; leaving the display off. + * + * Hold the clientlist_mutex as for a regular hotplug + * event. + */ + ret = client->funcs->hotplug(client); + if (ret) + drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); + } mutex_unlock(&dev->clientlist_mutex); } EXPORT_SYMBOL(drm_client_register); --- a/drivers/gpu/drm/drm_fbdev_dma.c +++ b/drivers/gpu/drm/drm_fbdev_dma.c @@ -253,10 +253,6 @@ void drm_fbdev_dma_setup(struct drm_devi goto err_drm_client_init; } - ret = drm_fbdev_dma_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/drm_fbdev_generic.c +++ b/drivers/gpu/drm/drm_fbdev_generic.c @@ -340,10 +340,6 @@ void drm_fbdev_generic_setup(struct drm_ goto err_drm_client_init; } - ret = drm_fbdev_generic_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -216,10 +216,6 @@ void exynos_drm_fbdev_setup(struct drm_d if (ret) goto err_drm_client_init; - ret = exynos_drm_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/gma500/fbdev.c +++ b/drivers/gpu/drm/gma500/fbdev.c @@ -330,10 +330,6 @@ void psb_fbdev_setup(struct drm_psb_priv goto err_drm_fb_helper_unprepare; } - ret = psb_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/msm/msm_fbdev.c +++ b/drivers/gpu/drm/msm/msm_fbdev.c @@ -227,10 +227,6 @@ void msm_fbdev_setup(struct drm_device * goto err_drm_fb_helper_unprepare; } - ret = msm_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c @@ -323,10 +323,6 @@ void omap_fbdev_setup(struct drm_device INIT_WORK(&fbdev->work, pan_worker); - ret = omap_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/radeon/radeon_fbdev.c +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c @@ -386,10 +386,6 @@ void radeon_fbdev_setup(struct radeon_de goto err_drm_client_init; } - ret = radeon_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(rdev->ddev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/tegra/fbdev.c +++ b/drivers/gpu/drm/tegra/fbdev.c @@ -227,10 +227,6 @@ void tegra_fbdev_setup(struct drm_device if (ret) goto err_drm_client_init; - ret = tegra_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1347C04E69 for ; Fri, 21 Jul 2023 16:14:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231793AbjGUQOm (ORCPT ); Fri, 21 Jul 2023 12:14:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39078 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231803AbjGUQO2 (ORCPT ); Fri, 21 Jul 2023 12:14:28 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C0E03AA3; Fri, 21 Jul 2023 09:13:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 79A8161D14; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D258C433C7; Fri, 21 Jul 2023 16:13:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689956035; bh=qbnodRkJmbR4UceeOvYhu4OqsChhMCKncTD483gVVBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BKJQdgm6wWlvcl36q2AvT84cIFnAUmjcnX4iS32xI7tdvu4zJMBAcEPxfFfxUdInz TpczzgeEZKj67r4k9VYV3PO8lnYYYZYB3xl121za9h/+UVs+GJPi99z8tcYSbBulIS LXvvVCbqmq0JpUAqgBi1uDfSvY6nKHPmGEPVNLpc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Moritz Duge , Thomas Zimmermann , Torsten Krah , Paul Schyska , Daniel Vetter , David Airlie , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Maarten Lankhorst , Maxime Ripard , Javier Martinez Canillas , Russell King , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Patrik Jakobsson , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Tomi Valkeinen , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , "Pan, Xinhui" , Thierry Reding , Mikko Perttunen , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-tegra@vger.kernel.org, Mario Limonciello Subject: [PATCH 6.4 111/292] drm/client: Send hotplug event after registering a client Date: Fri, 21 Jul 2023 18:03:40 +0200 Message-ID: <20230721160533.588771953@linuxfoundation.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721160528.800311148@linuxfoundation.org> References: <20230721160528.800311148@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org From: Thomas Zimmermann commit 27655b9bb9f0d9c32b8de8bec649b676898c52d5 upstream. Generate a hotplug event after registering a client to allow the client to configure its display. Remove the hotplug calls from the existing clients for fbdev emulation. This change fixes a concurrency bug between registering a client and receiving events from the DRM core. The bug is present in the fbdev emulation of all drivers. The fbdev emulation currently generates a hotplug event before registering the client to the device. For each new output, the DRM core sends an additional hotplug event to each registered client. If the DRM core detects first output between sending the artificial hotplug and registering the device, the output's hotplug event gets lost. If this is the first output, the fbdev console display remains dark. This has been observed with amdgpu and fbdev-generic. Fix this by adding hotplug generation directly to the client's register helper drm_client_register(). Registering the client and receiving events are serialized by struct drm_device.clientlist_mutex. So an output is either configured by the initial hotplug event, or the client has already been registered. The bug was originally added in commit 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done"), in which adding a client and receiving a hotplug event switched order. It was hidden, as most hardware and drivers have at least on static output configured. Other drivers didn't use the internal DRM client or still had struct drm_mode_config_funcs.output_poll_changed set. That callback handled hotplug events as well. After not setting the callback in amdgpu in commit 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed"), amdgpu did not show a framebuffer console if output events got lost. The bug got copy-pasted from fbdev-generic into the other fbdev emulation. Reported-by: Moritz Duge Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649 Fixes: 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done") Fixes: 8ab59da26bc0 ("drm/fb-helper: Move generic fbdev emulation into separate source file") Fixes: b79fe9abd58b ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers") Fixes: 63c381552f69 ("drm/armada: Implement fbdev emulation as in-kernel client") Fixes: 49953b70e7d3 ("drm/exynos: Implement fbdev emulation as in-kernel client") Fixes: 8f1aaccb04b7 ("drm/gma500: Implement client-based fbdev emulation") Fixes: 940b869c2f2f ("drm/msm: Implement fbdev emulation as in-kernel client") Fixes: 9e69bcd88e45 ("drm/omapdrm: Implement fbdev emulation as in-kernel client") Fixes: e317a69fe891 ("drm/radeon: Implement client-based fbdev emulation") Fixes: 71ec16f45ef8 ("drm/tegra: Implement fbdev emulation as in-kernel client") Fixes: 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed") Signed-off-by: Thomas Zimmermann Tested-by: Moritz Duge Tested-by: Torsten Krah Tested-by: Paul Schyska Cc: Daniel Vetter Cc: David Airlie Cc: Noralf Trønnes Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Javier Martinez Canillas Cc: Russell King Cc: Inki Dae Cc: Seung-Woo Kim Cc: Kyungmin Park Cc: Krzysztof Kozlowski Cc: Patrik Jakobsson Cc: Rob Clark Cc: Abhinav Kumar Cc: Dmitry Baryshkov Cc: Tomi Valkeinen Cc: Alex Deucher Cc: "Christian König" Cc: "Pan, Xinhui" Cc: Thierry Reding Cc: Mikko Perttunen Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: amd-gfx@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: # v5.2+ Reviewed-by: Javier Martinez Canillas Reviewed-by: Dmitry Baryshkov # msm Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de [ Dropped changes to drivers/gpu/drm/armada/armada_fbdev.c as 174c3c38e3a2 drm/armada: Initialize fbdev DRM client was introduced in 6.5-rc1 ] Signed-off-by: Mario Limonciello Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_client.c | 21 +++++++++++++++++++++ drivers/gpu/drm/drm_fbdev_dma.c | 4 ---- drivers/gpu/drm/drm_fbdev_generic.c | 4 ---- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 4 ---- drivers/gpu/drm/gma500/fbdev.c | 4 ---- drivers/gpu/drm/msm/msm_fbdev.c | 4 ---- drivers/gpu/drm/omapdrm/omap_fbdev.c | 4 ---- drivers/gpu/drm/radeon/radeon_fbdev.c | 4 ---- drivers/gpu/drm/tegra/fbdev.c | 4 ---- 9 files changed, 21 insertions(+), 32 deletions(-) --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -122,13 +122,34 @@ EXPORT_SYMBOL(drm_client_init); * drm_client_register() it is no longer permissible to call drm_client_release() * directly (outside the unregister callback), instead cleanup will happen * automatically on driver unload. + * + * Registering a client generates a hotplug event that allows the client + * to set up its display from pre-existing outputs. The client must have + * initialized its state to able to handle the hotplug event successfully. */ void drm_client_register(struct drm_client_dev *client) { struct drm_device *dev = client->dev; + int ret; mutex_lock(&dev->clientlist_mutex); list_add(&client->list, &dev->clientlist); + + if (client->funcs && client->funcs->hotplug) { + /* + * Perform an initial hotplug event to pick up the + * display configuration for the client. This step + * has to be performed *after* registering the client + * in the list of clients, or a concurrent hotplug + * event might be lost; leaving the display off. + * + * Hold the clientlist_mutex as for a regular hotplug + * event. + */ + ret = client->funcs->hotplug(client); + if (ret) + drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); + } mutex_unlock(&dev->clientlist_mutex); } EXPORT_SYMBOL(drm_client_register); --- a/drivers/gpu/drm/drm_fbdev_dma.c +++ b/drivers/gpu/drm/drm_fbdev_dma.c @@ -253,10 +253,6 @@ void drm_fbdev_dma_setup(struct drm_devi goto err_drm_client_init; } - ret = drm_fbdev_dma_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/drm_fbdev_generic.c +++ b/drivers/gpu/drm/drm_fbdev_generic.c @@ -340,10 +340,6 @@ void drm_fbdev_generic_setup(struct drm_ goto err_drm_client_init; } - ret = drm_fbdev_generic_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -216,10 +216,6 @@ void exynos_drm_fbdev_setup(struct drm_d if (ret) goto err_drm_client_init; - ret = exynos_drm_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/gma500/fbdev.c +++ b/drivers/gpu/drm/gma500/fbdev.c @@ -330,10 +330,6 @@ void psb_fbdev_setup(struct drm_psb_priv goto err_drm_fb_helper_unprepare; } - ret = psb_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/msm/msm_fbdev.c +++ b/drivers/gpu/drm/msm/msm_fbdev.c @@ -227,10 +227,6 @@ void msm_fbdev_setup(struct drm_device * goto err_drm_fb_helper_unprepare; } - ret = msm_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c @@ -323,10 +323,6 @@ void omap_fbdev_setup(struct drm_device INIT_WORK(&fbdev->work, pan_worker); - ret = omap_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/radeon/radeon_fbdev.c +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c @@ -386,10 +386,6 @@ void radeon_fbdev_setup(struct radeon_de goto err_drm_client_init; } - ret = radeon_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(rdev->ddev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/tegra/fbdev.c +++ b/drivers/gpu/drm/tegra/fbdev.c @@ -227,10 +227,6 @@ void tegra_fbdev_setup(struct drm_device if (ret) goto err_drm_client_init; - ret = tegra_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A8638EB64DC for ; Fri, 21 Jul 2023 16:14:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WS6rmtQgL6UGaI/EqQum2mC9ONfdqYbIqeXshQu5IOs=; b=H7+d6M+ub2cIs5 ktgMEzIV26b2oO69nyT2YNMBEPH9uN2pj5w+Vk0FS1EpAz4jVRWJkPO9q1GA1siY3YGZhy6KQr5l6 PuwqwOP6RTiMoSMDytCm+Up+wbhMLytuIsteAksgEKOKN6qUpzEZPsmNOp3JaNpQesZyzm+qwhOlQ 3X5LenLwNAt7UD+3fuM5LBar4cq2mQYvB1St0Leh8ldJqwyPf4H03a90eRrrEibV/Xh4IYNrKYSGc K/2ff85wU2sh/6QkAQnwnwHbsXheetAzzzz/VZM1o9HVEeaTUjLvghaBenG9PrlpN4M1SZu8aza9D FLDSvMyVcsHq9f5x3lOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qMslU-00EXxv-2V; Fri, 21 Jul 2023 16:14:00 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qMslR-00EXwP-02 for linux-arm-kernel@lists.infradead.org; Fri, 21 Jul 2023 16:13:59 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 763FA61D2B; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D258C433C7; Fri, 21 Jul 2023 16:13:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689956035; bh=qbnodRkJmbR4UceeOvYhu4OqsChhMCKncTD483gVVBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BKJQdgm6wWlvcl36q2AvT84cIFnAUmjcnX4iS32xI7tdvu4zJMBAcEPxfFfxUdInz TpczzgeEZKj67r4k9VYV3PO8lnYYYZYB3xl121za9h/+UVs+GJPi99z8tcYSbBulIS LXvvVCbqmq0JpUAqgBi1uDfSvY6nKHPmGEPVNLpc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Moritz Duge , Thomas Zimmermann , Torsten Krah , Paul Schyska , Daniel Vetter , David Airlie , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Maarten Lankhorst , Maxime Ripard , Javier Martinez Canillas , Russell King , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Patrik Jakobsson , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Tomi Valkeinen , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , "Pan, Xinhui" , Thierry Reding , Mikko Perttunen , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-tegra@vger.kernel.org, Mario Limonciello Subject: [PATCH 6.4 111/292] drm/client: Send hotplug event after registering a client Date: Fri, 21 Jul 2023 18:03:40 +0200 Message-ID: <20230721160533.588771953@linuxfoundation.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721160528.800311148@linuxfoundation.org> References: <20230721160528.800311148@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230721_091357_137488_4EAD2981 X-CRM114-Status: GOOD ( 25.52 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cgpjb21taXQgMjc2 NTViOWJiOWYwZDljMzJiOGRlOGJlYzY0OWI2NzY4OThjNTJkNSB1cHN0cmVhbS4KCkdlbmVyYXRl IGEgaG90cGx1ZyBldmVudCBhZnRlciByZWdpc3RlcmluZyBhIGNsaWVudCB0byBhbGxvdyB0aGUK Y2xpZW50IHRvIGNvbmZpZ3VyZSBpdHMgZGlzcGxheS4gUmVtb3ZlIHRoZSBob3RwbHVnIGNhbGxz IGZyb20gdGhlCmV4aXN0aW5nIGNsaWVudHMgZm9yIGZiZGV2IGVtdWxhdGlvbi4gVGhpcyBjaGFu Z2UgZml4ZXMgYSBjb25jdXJyZW5jeQpidWcgYmV0d2VlbiByZWdpc3RlcmluZyBhIGNsaWVudCBh bmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIHRoZSBEUk0KY29yZS4gVGhlIGJ1ZyBpcyBwcmVzZW50 IGluIHRoZSBmYmRldiBlbXVsYXRpb24gb2YgYWxsIGRyaXZlcnMuCgpUaGUgZmJkZXYgZW11bGF0 aW9uIGN1cnJlbnRseSBnZW5lcmF0ZXMgYSBob3RwbHVnIGV2ZW50IGJlZm9yZQpyZWdpc3Rlcmlu ZyB0aGUgY2xpZW50IHRvIHRoZSBkZXZpY2UuIEZvciBlYWNoIG5ldyBvdXRwdXQsIHRoZSBEUk0K Y29yZSBzZW5kcyBhbiBhZGRpdGlvbmFsIGhvdHBsdWcgZXZlbnQgdG8gZWFjaCByZWdpc3RlcmVk IGNsaWVudC4KCklmIHRoZSBEUk0gY29yZSBkZXRlY3RzIGZpcnN0IG91dHB1dCBiZXR3ZWVuIHNl bmRpbmcgdGhlIGFydGlmaWNpYWwKaG90cGx1ZyBhbmQgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSwg dGhlIG91dHB1dCdzIGhvdHBsdWcgZXZlbnQgZ2V0cwpsb3N0LiBJZiB0aGlzIGlzIHRoZSBmaXJz dCBvdXRwdXQsIHRoZSBmYmRldiBjb25zb2xlIGRpc3BsYXkgcmVtYWlucwpkYXJrLiBUaGlzIGhh cyBiZWVuIG9ic2VydmVkIHdpdGggYW1kZ3B1IGFuZCBmYmRldi1nZW5lcmljLgoKRml4IHRoaXMg YnkgYWRkaW5nIGhvdHBsdWcgZ2VuZXJhdGlvbiBkaXJlY3RseSB0byB0aGUgY2xpZW50J3MKcmVn aXN0ZXIgaGVscGVyIGRybV9jbGllbnRfcmVnaXN0ZXIoKS4gUmVnaXN0ZXJpbmcgdGhlIGNsaWVu dCBhbmQKcmVjZWl2aW5nIGV2ZW50cyBhcmUgc2VyaWFsaXplZCBieSBzdHJ1Y3QgZHJtX2Rldmlj ZS5jbGllbnRsaXN0X211dGV4LgpTbyBhbiBvdXRwdXQgaXMgZWl0aGVyIGNvbmZpZ3VyZWQgYnkg dGhlIGluaXRpYWwgaG90cGx1ZyBldmVudCwgb3IKdGhlIGNsaWVudCBoYXMgYWxyZWFkeSBiZWVu IHJlZ2lzdGVyZWQuCgpUaGUgYnVnIHdhcyBvcmlnaW5hbGx5IGFkZGVkIGluIGNvbW1pdCA2ZTNm MTdlZTczZjcgKCJkcm0vZmItaGVscGVyOgpnZW5lcmljOiBDYWxsIGRybV9jbGllbnRfYWRkKCkg YWZ0ZXIgc2V0dXAgaXMgZG9uZSIpLCBpbiB3aGljaCBhZGRpbmcKYSBjbGllbnQgYW5kIHJlY2Vp dmluZyBhIGhvdHBsdWcgZXZlbnQgc3dpdGNoZWQgb3JkZXIuIEl0IHdhcyBoaWRkZW4sCmFzIG1v c3QgaGFyZHdhcmUgYW5kIGRyaXZlcnMgaGF2ZSBhdCBsZWFzdCBvbiBzdGF0aWMgb3V0cHV0IGNv bmZpZ3VyZWQuCk90aGVyIGRyaXZlcnMgZGlkbid0IHVzZSB0aGUgaW50ZXJuYWwgRFJNIGNsaWVu dCBvciBzdGlsbCBoYWQgc3RydWN0CmRybV9tb2RlX2NvbmZpZ19mdW5jcy5vdXRwdXRfcG9sbF9j aGFuZ2VkIHNldC4gVGhhdCBjYWxsYmFjayBoYW5kbGVkCmhvdHBsdWcgZXZlbnRzIGFzIHdlbGwu IEFmdGVyIG5vdCBzZXR0aW5nIHRoZSBjYWxsYmFjayBpbiBhbWRncHUgaW4KY29tbWl0IDBlMzE3 MmJhYzNmNCAoImRybS9hbWRncHU6IERvbid0IHNldCBzdHJ1Y3QKZHJtX2RyaXZlci5vdXRwdXRf cG9sbF9jaGFuZ2VkIiksIGFtZGdwdSBkaWQgbm90IHNob3cgYSBmcmFtZWJ1ZmZlcgpjb25zb2xl IGlmIG91dHB1dCBldmVudHMgZ290IGxvc3QuIFRoZSBidWcgZ290IGNvcHktcGFzdGVkIGZyb20K ZmJkZXYtZ2VuZXJpYyBpbnRvIHRoZSBvdGhlciBmYmRldiBlbXVsYXRpb24uCgpSZXBvcnRlZC1i eTogTW9yaXR6IER1Z2UgPE1vcml0ekR1Z2VAa29sYWhpbGZ0LmRlPgpDbG9zZXM6IGh0dHBzOi8v Z2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9kcm0vYW1kLy0vaXNzdWVzLzI2NDkKRml4ZXM6IDZlM2Yx N2VlNzNmNyAoImRybS9mYi1oZWxwZXI6IGdlbmVyaWM6IENhbGwgZHJtX2NsaWVudF9hZGQoKSBh ZnRlciBzZXR1cCBpcyBkb25lIikKRml4ZXM6IDhhYjU5ZGEyNmJjMCAoImRybS9mYi1oZWxwZXI6 IE1vdmUgZ2VuZXJpYyBmYmRldiBlbXVsYXRpb24gaW50byBzZXBhcmF0ZSBzb3VyY2UgZmlsZSIp CkZpeGVzOiBiNzlmZTlhYmQ1OGIgKCJkcm0vZmJkZXYtZG1hOiBJbXBsZW1lbnQgZmJkZXYgZW11 bGF0aW9uIGZvciBHRU0gRE1BIGhlbHBlcnMiKQpGaXhlczogNjNjMzgxNTUyZjY5ICgiZHJtL2Fy bWFkYTogSW1wbGVtZW50IGZiZGV2IGVtdWxhdGlvbiBhcyBpbi1rZXJuZWwgY2xpZW50IikKRml4 ZXM6IDQ5OTUzYjcwZTdkMyAoImRybS9leHlub3M6IEltcGxlbWVudCBmYmRldiBlbXVsYXRpb24g YXMgaW4ta2VybmVsIGNsaWVudCIpCkZpeGVzOiA4ZjFhYWNjYjA0YjcgKCJkcm0vZ21hNTAwOiBJ bXBsZW1lbnQgY2xpZW50LWJhc2VkIGZiZGV2IGVtdWxhdGlvbiIpCkZpeGVzOiA5NDBiODY5YzJm MmYgKCJkcm0vbXNtOiBJbXBsZW1lbnQgZmJkZXYgZW11bGF0aW9uIGFzIGluLWtlcm5lbCBjbGll bnQiKQpGaXhlczogOWU2OWJjZDg4ZTQ1ICgiZHJtL29tYXBkcm06IEltcGxlbWVudCBmYmRldiBl bXVsYXRpb24gYXMgaW4ta2VybmVsIGNsaWVudCIpCkZpeGVzOiBlMzE3YTY5ZmU4OTEgKCJkcm0v cmFkZW9uOiBJbXBsZW1lbnQgY2xpZW50LWJhc2VkIGZiZGV2IGVtdWxhdGlvbiIpCkZpeGVzOiA3 MWVjMTZmNDVlZjggKCJkcm0vdGVncmE6IEltcGxlbWVudCBmYmRldiBlbXVsYXRpb24gYXMgaW4t a2VybmVsIGNsaWVudCIpCkZpeGVzOiAwZTMxNzJiYWMzZjQgKCJkcm0vYW1kZ3B1OiBEb24ndCBz ZXQgc3RydWN0IGRybV9kcml2ZXIub3V0cHV0X3BvbGxfY2hhbmdlZCIpClNpZ25lZC1vZmYtYnk6 IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgpUZXN0ZWQtYnk6IE1vcml0 eiBEdWdlIDxNb3JpdHpEdWdlQGtvbGFoaWxmdC5kZT4KVGVzdGVkLWJ5OiBUb3JzdGVuIEtyYWgg PGtyYWgudG1AZ21haWwuY29tPgpUZXN0ZWQtYnk6IFBhdWwgU2NoeXNrYSA8cHNjaHlza2FAZ21h aWwuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KQ2M6IERh dmlkIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+CkNjOiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFs ZkB0cm9ubmVzLm9yZz4KQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+CkNjOiBNYXhpbWUgUmlwYXJkIDxtcmlwYXJkQGtlcm5lbC5vcmc+CkNj OiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT4KQ2M6IFJ1c3Nl bGwgS2luZyA8bGludXhAYXJtbGludXgub3JnLnVrPgpDYzogSW5raSBEYWUgPGlua2kuZGFlQHNh bXN1bmcuY29tPgpDYzogU2V1bmctV29vIEtpbSA8c3cwMzEyLmtpbUBzYW1zdW5nLmNvbT4KQ2M6 IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CkNjOiBLcnp5c3p0b2Yg S296bG93c2tpIDxrcnp5c3p0b2Yua296bG93c2tpQGxpbmFyby5vcmc+CkNjOiBQYXRyaWsgSmFr b2Jzc29uIDxwYXRyaWsuci5qYWtvYnNzb25AZ21haWwuY29tPgpDYzogUm9iIENsYXJrIDxyb2Jk Y2xhcmtAZ21haWwuY29tPgpDYzogQWJoaW5hdiBLdW1hciA8cXVpY19hYmhpbmF2a0BxdWljaW5j LmNvbT4KQ2M6IERtaXRyeSBCYXJ5c2hrb3YgPGRtaXRyeS5iYXJ5c2hrb3ZAbGluYXJvLm9yZz4K Q2M6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkBpZGVhc29uYm9hcmQuY29tPgpDYzog QWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPgpDYzogIkNocmlzdGlhbiBL w7ZuaWciIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkNjOiAiUGFuLCBYaW5odWkiIDxYaW5o dWkuUGFuQGFtZC5jb20+CkNjOiBUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAZ21haWwu Y29tPgpDYzogTWlra28gUGVydHR1bmVuIDxtcGVydHR1bmVuQG52aWRpYS5jb20+CkNjOiBkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwu b3JnCkNjOiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKQ2M6IGxpbnV4LXNh bXN1bmctc29jQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtYXJtLW1zbUB2Z2VyLmtlcm5lbC5v cmcKQ2M6IGZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IGFtZC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCkNjOiBsaW51eC10ZWdyYUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IDxzdGFibGVAdmdlci5rZXJuZWwub3JnPiAj IHY1LjIrClJldmlld2VkLWJ5OiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllcm1AcmVk aGF0LmNvbT4KUmV2aWV3ZWQtYnk6IERtaXRyeSBCYXJ5c2hrb3YgPGRtaXRyeS5iYXJ5c2hrb3ZA bGluYXJvLm9yZz4gIyBtc20KTGluazogaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3Jn L3BhdGNoL21zZ2lkLzIwMjMwNzEwMDkxMDI5LjI3NTAzLTEtdHppbW1lcm1hbm5Ac3VzZS5kZQpb IERyb3BwZWQgY2hhbmdlcyB0byBkcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9mYmRldi5j IGFzCiAgMTc0YzNjMzhlM2EyIGRybS9hcm1hZGE6IEluaXRpYWxpemUgZmJkZXYgRFJNIGNsaWVu dAogIHdhcyBpbnRyb2R1Y2VkIGluIDYuNS1yYzEgXQpTaWduZWQtb2ZmLWJ5OiBNYXJpbyBMaW1v bmNpZWxsbyA8bWFyaW8ubGltb25jaWVsbG9AYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogR3JlZyBL cm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vZHJtX2NsaWVudC5jICAgICAgICAgICAgICB8ICAgMjEgKysrKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiZGV2X2RtYS5jICAgICAgICAgICB8ICAgIDQgLS0t LQogZHJpdmVycy9ncHUvZHJtL2RybV9mYmRldl9nZW5lcmljLmMgICAgICAgfCAgICA0IC0tLS0K IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9mYmRldi5jIHwgICAgNCAtLS0tCiBk cml2ZXJzL2dwdS9kcm0vZ21hNTAwL2ZiZGV2LmMgICAgICAgICAgICB8ICAgIDQgLS0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZmJkZXYuYyAgICAgICAgICAgfCAgICA0IC0tLS0KIGRyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYyAgICAgIHwgICAgNCAtLS0tCiBkcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYmRldi5jICAgICB8ICAgIDQgLS0tLQogZHJpdmVycy9n cHUvZHJtL3RlZ3JhL2ZiZGV2LmMgICAgICAgICAgICAgfCAgICA0IC0tLS0KIDkgZmlsZXMgY2hh bmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2NsaWVudC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKQEAg LTEyMiwxMyArMTIyLDM0IEBAIEVYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9pbml0KTsKICAqIGRy bV9jbGllbnRfcmVnaXN0ZXIoKSBpdCBpcyBubyBsb25nZXIgcGVybWlzc2libGUgdG8gY2FsbCBk cm1fY2xpZW50X3JlbGVhc2UoKQogICogZGlyZWN0bHkgKG91dHNpZGUgdGhlIHVucmVnaXN0ZXIg Y2FsbGJhY2spLCBpbnN0ZWFkIGNsZWFudXAgd2lsbCBoYXBwZW4KICAqIGF1dG9tYXRpY2FsbHkg b24gZHJpdmVyIHVubG9hZC4KKyAqCisgKiBSZWdpc3RlcmluZyBhIGNsaWVudCBnZW5lcmF0ZXMg YSBob3RwbHVnIGV2ZW50IHRoYXQgYWxsb3dzIHRoZSBjbGllbnQKKyAqIHRvIHNldCB1cCBpdHMg ZGlzcGxheSBmcm9tIHByZS1leGlzdGluZyBvdXRwdXRzLiBUaGUgY2xpZW50IG11c3QgaGF2ZQor ICogaW5pdGlhbGl6ZWQgaXRzIHN0YXRlIHRvIGFibGUgdG8gaGFuZGxlIHRoZSBob3RwbHVnIGV2 ZW50IHN1Y2Nlc3NmdWxseS4KICAqLwogdm9pZCBkcm1fY2xpZW50X3JlZ2lzdGVyKHN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGll bnQtPmRldjsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5jbGllbnRsaXN0X211dGV4 KTsKIAlsaXN0X2FkZCgmY2xpZW50LT5saXN0LCAmZGV2LT5jbGllbnRsaXN0KTsKKworCWlmIChj bGllbnQtPmZ1bmNzICYmIGNsaWVudC0+ZnVuY3MtPmhvdHBsdWcpIHsKKwkJLyoKKwkJICogUGVy Zm9ybSBhbiBpbml0aWFsIGhvdHBsdWcgZXZlbnQgdG8gcGljayB1cCB0aGUKKwkJICogZGlzcGxh eSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2xpZW50LiBUaGlzIHN0ZXAKKwkJICogaGFzIHRvIGJl IHBlcmZvcm1lZCAqYWZ0ZXIqIHJlZ2lzdGVyaW5nIHRoZSBjbGllbnQKKwkJICogaW4gdGhlIGxp c3Qgb2YgY2xpZW50cywgb3IgYSBjb25jdXJyZW50IGhvdHBsdWcKKwkJICogZXZlbnQgbWlnaHQg YmUgbG9zdDsgbGVhdmluZyB0aGUgZGlzcGxheSBvZmYuCisJCSAqCisJCSAqIEhvbGQgdGhlIGNs aWVudGxpc3RfbXV0ZXggYXMgZm9yIGEgcmVndWxhciBob3RwbHVnCisJCSAqIGV2ZW50LgorCQkg Ki8KKwkJcmV0ID0gY2xpZW50LT5mdW5jcy0+aG90cGx1ZyhjbGllbnQpOworCQlpZiAocmV0KQor CQkJZHJtX2RiZ19rbXMoZGV2LCAiY2xpZW50IGhvdHBsdWcgcmV0PSVkXG4iLCByZXQpOworCX0K IAltdXRleF91bmxvY2soJmRldi0+Y2xpZW50bGlzdF9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9M KGRybV9jbGllbnRfcmVnaXN0ZXIpOwotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiZGV2X2Rt YS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJkZXZfZG1hLmMKQEAgLTI1MywxMCArMjUz LDYgQEAgdm9pZCBkcm1fZmJkZXZfZG1hX3NldHVwKHN0cnVjdCBkcm1fZGV2aQogCQlnb3RvIGVy cl9kcm1fY2xpZW50X2luaXQ7CiAJfQogCi0JcmV0ID0gZHJtX2ZiZGV2X2RtYV9jbGllbnRfaG90 cGx1ZygmZmJfaGVscGVyLT5jbGllbnQpOwotCWlmIChyZXQpCi0JCWRybV9kYmdfa21zKGRldiwg ImNsaWVudCBob3RwbHVnIHJldD0lZFxuIiwgcmV0KTsKLQogCWRybV9jbGllbnRfcmVnaXN0ZXIo JmZiX2hlbHBlci0+Y2xpZW50KTsKIAogCXJldHVybjsKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYmRldl9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYmRldl9nZW5lcmlj LmMKQEAgLTM0MCwxMCArMzQwLDYgQEAgdm9pZCBkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChzdHJ1 Y3QgZHJtXwogCQlnb3RvIGVycl9kcm1fY2xpZW50X2luaXQ7CiAJfQogCi0JcmV0ID0gZHJtX2Zi ZGV2X2dlbmVyaWNfY2xpZW50X2hvdHBsdWcoJmZiX2hlbHBlci0+Y2xpZW50KTsKLQlpZiAocmV0 KQotCQlkcm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0K IAlkcm1fY2xpZW50X3JlZ2lzdGVyKCZmYl9oZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9mYmRldi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9mYmRldi5jCkBAIC0yMTYsMTAgKzIxNiw2IEBA IHZvaWQgZXh5bm9zX2RybV9mYmRldl9zZXR1cChzdHJ1Y3QgZHJtX2QKIAlpZiAocmV0KQogCQln b3RvIGVycl9kcm1fY2xpZW50X2luaXQ7CiAKLQlyZXQgPSBleHlub3NfZHJtX2ZiZGV2X2NsaWVu dF9ob3RwbHVnKCZmYl9oZWxwZXItPmNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZHJtX2RiZ19rbXMo ZGV2LCAiY2xpZW50IGhvdHBsdWcgcmV0PSVkXG4iLCByZXQpOwotCiAJZHJtX2NsaWVudF9yZWdp c3RlcigmZmJfaGVscGVyLT5jbGllbnQpOwogCiAJcmV0dXJuOwotLS0gYS9kcml2ZXJzL2dwdS9k cm0vZ21hNTAwL2ZiZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9mYmRldi5jCkBA IC0zMzAsMTAgKzMzMCw2IEBAIHZvaWQgcHNiX2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1fcHNiX3By aXYKIAkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl91bnByZXBhcmU7CiAJfQogCi0JcmV0ID0gcHNi X2ZiZGV2X2NsaWVudF9ob3RwbHVnKCZmYl9oZWxwZXItPmNsaWVudCk7Ci0JaWYgKHJldCkKLQkJ ZHJtX2RiZ19rbXMoZGV2LCAiY2xpZW50IGhvdHBsdWcgcmV0PSVkXG4iLCByZXQpOwotCiAJZHJt X2NsaWVudF9yZWdpc3RlcigmZmJfaGVscGVyLT5jbGllbnQpOwogCiAJcmV0dXJuOwotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2ZiZGV2LmMKQEAgLTIyNywxMCArMjI3LDYgQEAgdm9pZCBtc21fZmJkZXZfc2V0dXAoc3Ry dWN0IGRybV9kZXZpY2UgKgogCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX3VucHJlcGFyZTsKIAl9 CiAKLQlyZXQgPSBtc21fZmJkZXZfY2xpZW50X2hvdHBsdWcoJmhlbHBlci0+Y2xpZW50KTsKLQlp ZiAocmV0KQotCQlkcm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJl dCk7Ci0KIAlkcm1fY2xpZW50X3JlZ2lzdGVyKCZoZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmMKQEAgLTMyMywxMCArMzIzLDYgQEAgdm9pZCBv bWFwX2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlCiAKIAlJTklUX1dPUksoJmZiZGV2LT53 b3JrLCBwYW5fd29ya2VyKTsKIAotCXJldCA9IG9tYXBfZmJkZXZfY2xpZW50X2hvdHBsdWcoJmhl bHBlci0+Y2xpZW50KTsKLQlpZiAocmV0KQotCQlkcm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90 cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0KIAlkcm1fY2xpZW50X3JlZ2lzdGVyKCZoZWxwZXItPmNs aWVudCk7CiAKIAlyZXR1cm47Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Zi ZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmJkZXYuYwpAQCAtMzg2 LDEwICszODYsNiBAQCB2b2lkIHJhZGVvbl9mYmRldl9zZXR1cChzdHJ1Y3QgcmFkZW9uX2RlCiAJ CWdvdG8gZXJyX2RybV9jbGllbnRfaW5pdDsKIAl9CiAKLQlyZXQgPSByYWRlb25fZmJkZXZfY2xp ZW50X2hvdHBsdWcoJmZiX2hlbHBlci0+Y2xpZW50KTsKLQlpZiAocmV0KQotCQlkcm1fZGJnX2tt cyhyZGV2LT5kZGV2LCAiY2xpZW50IGhvdHBsdWcgcmV0PSVkXG4iLCByZXQpOwotCiAJZHJtX2Ns aWVudF9yZWdpc3RlcigmZmJfaGVscGVyLT5jbGllbnQpOwogCiAJcmV0dXJuOwotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvZmJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZmJk ZXYuYwpAQCAtMjI3LDEwICsyMjcsNiBAQCB2b2lkIHRlZ3JhX2ZiZGV2X3NldHVwKHN0cnVjdCBk cm1fZGV2aWNlCiAJaWYgKHJldCkKIAkJZ290byBlcnJfZHJtX2NsaWVudF9pbml0OwogCi0JcmV0 ID0gdGVncmFfZmJkZXZfY2xpZW50X2hvdHBsdWcoJmhlbHBlci0+Y2xpZW50KTsKLQlpZiAocmV0 KQotCQlkcm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0K IAlkcm1fY2xpZW50X3JlZ2lzdGVyKCZoZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47CgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 39B97C001E0 for ; Fri, 21 Jul 2023 16:13:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 984EB10E6BC; Fri, 21 Jul 2023 16:13:58 +0000 (UTC) Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2EDCA10E6BC; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 763FA61D2B; Fri, 21 Jul 2023 16:13:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D258C433C7; Fri, 21 Jul 2023 16:13:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689956035; bh=qbnodRkJmbR4UceeOvYhu4OqsChhMCKncTD483gVVBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BKJQdgm6wWlvcl36q2AvT84cIFnAUmjcnX4iS32xI7tdvu4zJMBAcEPxfFfxUdInz TpczzgeEZKj67r4k9VYV3PO8lnYYYZYB3xl121za9h/+UVs+GJPi99z8tcYSbBulIS LXvvVCbqmq0JpUAqgBi1uDfSvY6nKHPmGEPVNLpc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Subject: [PATCH 6.4 111/292] drm/client: Send hotplug event after registering a client Date: Fri, 21 Jul 2023 18:03:40 +0200 Message-ID: <20230721160533.588771953@linuxfoundation.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230721160528.800311148@linuxfoundation.org> References: <20230721160528.800311148@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomi Valkeinen , dri-devel@lists.freedesktop.org, Russell King , Thierry Reding , amd-gfx@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, Javier Martinez Canillas , freedreno@lists.freedesktop.org, Daniel Vetter , Kyungmin Park , Paul Schyska , Torsten Krah , linux-arm-msm@vger.kernel.org, Abhinav Kumar , Maxime Ripard , Alex Deucher , linux-tegra@vger.kernel.org, Mikko Perttunen , linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , "Pan, Xinhui" , Seung-Woo Kim , patches@lists.linux.dev, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Thomas Zimmermann , Dmitry Baryshkov , Moritz Duge , =?UTF-8?q?Christian=20K=C3=B6nig?= , Mario Limonciello Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thomas Zimmermann commit 27655b9bb9f0d9c32b8de8bec649b676898c52d5 upstream. Generate a hotplug event after registering a client to allow the client to configure its display. Remove the hotplug calls from the existing clients for fbdev emulation. This change fixes a concurrency bug between registering a client and receiving events from the DRM core. The bug is present in the fbdev emulation of all drivers. The fbdev emulation currently generates a hotplug event before registering the client to the device. For each new output, the DRM core sends an additional hotplug event to each registered client. If the DRM core detects first output between sending the artificial hotplug and registering the device, the output's hotplug event gets lost. If this is the first output, the fbdev console display remains dark. This has been observed with amdgpu and fbdev-generic. Fix this by adding hotplug generation directly to the client's register helper drm_client_register(). Registering the client and receiving events are serialized by struct drm_device.clientlist_mutex. So an output is either configured by the initial hotplug event, or the client has already been registered. The bug was originally added in commit 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done"), in which adding a client and receiving a hotplug event switched order. It was hidden, as most hardware and drivers have at least on static output configured. Other drivers didn't use the internal DRM client or still had struct drm_mode_config_funcs.output_poll_changed set. That callback handled hotplug events as well. After not setting the callback in amdgpu in commit 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed"), amdgpu did not show a framebuffer console if output events got lost. The bug got copy-pasted from fbdev-generic into the other fbdev emulation. Reported-by: Moritz Duge Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649 Fixes: 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done") Fixes: 8ab59da26bc0 ("drm/fb-helper: Move generic fbdev emulation into separate source file") Fixes: b79fe9abd58b ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers") Fixes: 63c381552f69 ("drm/armada: Implement fbdev emulation as in-kernel client") Fixes: 49953b70e7d3 ("drm/exynos: Implement fbdev emulation as in-kernel client") Fixes: 8f1aaccb04b7 ("drm/gma500: Implement client-based fbdev emulation") Fixes: 940b869c2f2f ("drm/msm: Implement fbdev emulation as in-kernel client") Fixes: 9e69bcd88e45 ("drm/omapdrm: Implement fbdev emulation as in-kernel client") Fixes: e317a69fe891 ("drm/radeon: Implement client-based fbdev emulation") Fixes: 71ec16f45ef8 ("drm/tegra: Implement fbdev emulation as in-kernel client") Fixes: 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed") Signed-off-by: Thomas Zimmermann Tested-by: Moritz Duge Tested-by: Torsten Krah Tested-by: Paul Schyska Cc: Daniel Vetter Cc: David Airlie Cc: Noralf Trønnes Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Javier Martinez Canillas Cc: Russell King Cc: Inki Dae Cc: Seung-Woo Kim Cc: Kyungmin Park Cc: Krzysztof Kozlowski Cc: Patrik Jakobsson Cc: Rob Clark Cc: Abhinav Kumar Cc: Dmitry Baryshkov Cc: Tomi Valkeinen Cc: Alex Deucher Cc: "Christian König" Cc: "Pan, Xinhui" Cc: Thierry Reding Cc: Mikko Perttunen Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: amd-gfx@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: # v5.2+ Reviewed-by: Javier Martinez Canillas Reviewed-by: Dmitry Baryshkov # msm Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de [ Dropped changes to drivers/gpu/drm/armada/armada_fbdev.c as 174c3c38e3a2 drm/armada: Initialize fbdev DRM client was introduced in 6.5-rc1 ] Signed-off-by: Mario Limonciello Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_client.c | 21 +++++++++++++++++++++ drivers/gpu/drm/drm_fbdev_dma.c | 4 ---- drivers/gpu/drm/drm_fbdev_generic.c | 4 ---- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 4 ---- drivers/gpu/drm/gma500/fbdev.c | 4 ---- drivers/gpu/drm/msm/msm_fbdev.c | 4 ---- drivers/gpu/drm/omapdrm/omap_fbdev.c | 4 ---- drivers/gpu/drm/radeon/radeon_fbdev.c | 4 ---- drivers/gpu/drm/tegra/fbdev.c | 4 ---- 9 files changed, 21 insertions(+), 32 deletions(-) --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -122,13 +122,34 @@ EXPORT_SYMBOL(drm_client_init); * drm_client_register() it is no longer permissible to call drm_client_release() * directly (outside the unregister callback), instead cleanup will happen * automatically on driver unload. + * + * Registering a client generates a hotplug event that allows the client + * to set up its display from pre-existing outputs. The client must have + * initialized its state to able to handle the hotplug event successfully. */ void drm_client_register(struct drm_client_dev *client) { struct drm_device *dev = client->dev; + int ret; mutex_lock(&dev->clientlist_mutex); list_add(&client->list, &dev->clientlist); + + if (client->funcs && client->funcs->hotplug) { + /* + * Perform an initial hotplug event to pick up the + * display configuration for the client. This step + * has to be performed *after* registering the client + * in the list of clients, or a concurrent hotplug + * event might be lost; leaving the display off. + * + * Hold the clientlist_mutex as for a regular hotplug + * event. + */ + ret = client->funcs->hotplug(client); + if (ret) + drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); + } mutex_unlock(&dev->clientlist_mutex); } EXPORT_SYMBOL(drm_client_register); --- a/drivers/gpu/drm/drm_fbdev_dma.c +++ b/drivers/gpu/drm/drm_fbdev_dma.c @@ -253,10 +253,6 @@ void drm_fbdev_dma_setup(struct drm_devi goto err_drm_client_init; } - ret = drm_fbdev_dma_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/drm_fbdev_generic.c +++ b/drivers/gpu/drm/drm_fbdev_generic.c @@ -340,10 +340,6 @@ void drm_fbdev_generic_setup(struct drm_ goto err_drm_client_init; } - ret = drm_fbdev_generic_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -216,10 +216,6 @@ void exynos_drm_fbdev_setup(struct drm_d if (ret) goto err_drm_client_init; - ret = exynos_drm_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/gma500/fbdev.c +++ b/drivers/gpu/drm/gma500/fbdev.c @@ -330,10 +330,6 @@ void psb_fbdev_setup(struct drm_psb_priv goto err_drm_fb_helper_unprepare; } - ret = psb_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/msm/msm_fbdev.c +++ b/drivers/gpu/drm/msm/msm_fbdev.c @@ -227,10 +227,6 @@ void msm_fbdev_setup(struct drm_device * goto err_drm_fb_helper_unprepare; } - ret = msm_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c @@ -323,10 +323,6 @@ void omap_fbdev_setup(struct drm_device INIT_WORK(&fbdev->work, pan_worker); - ret = omap_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/radeon/radeon_fbdev.c +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c @@ -386,10 +386,6 @@ void radeon_fbdev_setup(struct radeon_de goto err_drm_client_init; } - ret = radeon_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(rdev->ddev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/tegra/fbdev.c +++ b/drivers/gpu/drm/tegra/fbdev.c @@ -227,10 +227,6 @@ void tegra_fbdev_setup(struct drm_device if (ret) goto err_drm_client_init; - ret = tegra_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return;