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 3F232F364A6 for ; Thu, 9 Apr 2026 17:09:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=4zTCftcFdbHfd09YrMB7pNOLoJLsMARPpzU+VDQDU9A=; b=zX+X2jxkZWTkAa5FsgDBMJoZPp hFBXSW/X0zlDW2eCQUtqMb7MX1swDqXOxOtP5oTtj8ll0TTQeuVwKYd3rJwbyMBclovDsYjXeScMn qonin+d1L54M0ZnAFFtk05SSQ5uzw/LgcZv1jEhWytflUJgX7jg0bKuqeWHNfGirtSQ9BI7s8JgVM 33wm1lIVo9YrZaGEgf0J0yjKk8aEOVWlJxI2v1fVp/gT6oFiZ4a56X2xFECAu79tv2KbMxfCBgCku 7sWu/x/BMwSn1UMDq7Tll+/5s6UGFhsVZaefRBMN0XlcgsMIkQWd9Kf1ZaENHZb2gpIQFIAnBDW85 M51KRdgQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wAssi-0000000Ayy2-1Mmz; Thu, 09 Apr 2026 17:09:28 +0000 Received: from smtpout-04.galae.net ([185.171.202.116]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wAssa-0000000Ayoz-2vjM for linux-arm-kernel@lists.infradead.org; Thu, 09 Apr 2026 17:09:26 +0000 Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id F3CA9C5C18D; Thu, 9 Apr 2026 17:09:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 34F8E603E4; Thu, 9 Apr 2026 17:09:19 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 126CF104501D0; Thu, 9 Apr 2026 19:09:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1775754557; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=4zTCftcFdbHfd09YrMB7pNOLoJLsMARPpzU+VDQDU9A=; b=f4o385lfqOAkrmNLvJ9Gebbr6dmxUMzNZxPRmLmKv3kF/71x+Ts4PIonuNEqt/77LxftL/ Is2Z+9xyBGoCTHvwhCaImazbNjTtN+QA/OMrCr0ceczKRJhX4d43m+xpAyfVfR1odEfkzr vEeSPQh0tamrA+yZG/lLfboIdgIZ5LxjaWcS6AfiSRz7FCl+vv+So0j/tmq2BU6ztDP+pt MfbixRkFrTpcbRgpgpzXzIB8w6WvhyHebsM5tGZHoDxebemRb+2NQp2wHxuDcNYlGLng9P 57c7aqybDXWFS8E1UpI7Y5jZw70rubz7/KbxN3JHbDLw11GVVq3G71fsTIX9Aw== From: Kory Maincent Date: Thu, 09 Apr 2026 19:08:23 +0200 Subject: [PATCH RFC 07/12] drm/i915/display: Switch to managed for encoder MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260409-feat_link_cap-v1-7-7069e8199ce2@bootlin.com> References: <20260409-feat_link_cap-v1-0-7069e8199ce2@bootlin.com> In-Reply-To: <20260409-feat_link_cap-v1-0-7069e8199ce2@bootlin.com> To: Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , Dave Airlie , Jesse Barnes , Eric Anholt , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Chun-Kuang Hu , Philipp Zabel , Matthias Brugger , AngeloGioacchino Del Regno , Chris Wilson Cc: Thomas Petazzoni , Mark Yacoub , Sean Paul , Louis Chauvet , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Simona Vetter , Kory Maincent X-Mailer: b4 0.14-dev-d4707 X-Last-TLS-Session-Version: TLSv1.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260409_100921_104274_F0507705 X-CRM114-Status: GOOD ( 17.43 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The current i915 driver uses non-managed function to create encoder. It is not an issue yet, but in order to comply with the latest DRM requirement, convert this code to use drm and device managed helpers. Assisted-by: Claude Code:2.1.90 Signed-off-by: Kory Maincent --- drivers/gpu/drm/i915/display/g4x_dp.c | 31 ++++++++--------- drivers/gpu/drm/i915/display/g4x_hdmi.c | 19 ++++------- drivers/gpu/drm/i915/display/icl_dsi.c | 20 +++-------- drivers/gpu/drm/i915/display/intel_crt.c | 9 +++-- drivers/gpu/drm/i915/display/intel_ddi.c | 50 +++++++++++++++------------- drivers/gpu/drm/i915/display/intel_display.c | 8 ----- drivers/gpu/drm/i915/display/intel_display.h | 1 - drivers/gpu/drm/i915/display/intel_dp_mst.c | 20 +++-------- drivers/gpu/drm/i915/display/intel_dvo.c | 22 ++++++------ drivers/gpu/drm/i915/display/intel_encoder.c | 6 ++-- drivers/gpu/drm/i915/display/intel_encoder.h | 3 +- drivers/gpu/drm/i915/display/intel_lvds.c | 13 +++----- drivers/gpu/drm/i915/display/intel_sdvo.c | 45 +++++++++++-------------- drivers/gpu/drm/i915/display/intel_tv.c | 11 +++--- drivers/gpu/drm/i915/display/vlv_dsi.c | 22 +++++------- 15 files changed, 114 insertions(+), 166 deletions(-) diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c index 5e74d8a3ba5c8..99b6c5ce39b2a 100644 --- a/drivers/gpu/drm/i915/display/g4x_dp.c +++ b/drivers/gpu/drm/i915/display/g4x_dp.c @@ -7,6 +7,7 @@ #include +#include #include #include "g4x_dp.h" @@ -1250,12 +1251,9 @@ static void g4x_dp_suspend_complete(struct intel_encoder *encoder) intel_encoder_link_check_flush_work(encoder); } -static void intel_dp_encoder_destroy(struct drm_encoder *encoder) +static void intel_dp_encoder_flush_work_cleanup(struct drm_device *drm, void *data) { - intel_dp_encoder_flush_work(encoder); - - drm_encoder_cleanup(encoder); - kfree(enc_to_dig_port(to_intel_encoder(encoder))); + intel_dp_encoder_flush_work(data); } static void intel_dp_encoder_reset(struct drm_encoder *encoder) @@ -1276,7 +1274,6 @@ static void intel_dp_encoder_reset(struct drm_encoder *encoder) static const struct drm_encoder_funcs intel_dp_enc_funcs = { .reset = intel_dp_encoder_reset, - .destroy = intel_dp_encoder_destroy, }; bool g4x_dp_init(struct intel_display *display, @@ -1298,22 +1295,26 @@ bool g4x_dp_init(struct intel_display *display, drm_dbg_kms(display->drm, "No VBT child device for DP-%c\n", port_name(port)); - dig_port = intel_dig_port_alloc(); + dig_port = intel_dig_port_alloc(display->drm); if (!dig_port) return false; intel_connector = intel_connector_alloc(); if (!intel_connector) - goto err_connector_alloc; + return false; intel_encoder = &dig_port->base; encoder = &intel_encoder->base; intel_encoder->devdata = devdata; - if (drm_encoder_init(display->drm, &intel_encoder->base, - &intel_dp_enc_funcs, DRM_MODE_ENCODER_TMDS, - "DP %c", port_name(port))) + if (drmm_encoder_init(display->drm, &intel_encoder->base, + &intel_dp_enc_funcs, DRM_MODE_ENCODER_TMDS, + "DP %c", port_name(port))) + goto err_encoder_init; + + if (drmm_add_action_or_reset(display->drm, + intel_dp_encoder_flush_work_cleanup, encoder)) goto err_encoder_init; intel_encoder_link_check_init(intel_encoder, intel_dp_link_check); @@ -1411,18 +1412,14 @@ bool g4x_dp_init(struct intel_display *display, dig_port->aux_ch = intel_dp_aux_ch(intel_encoder); if (dig_port->aux_ch == AUX_CH_NONE) - goto err_init_connector; + goto err_encoder_init; if (!intel_dp_init_connector(dig_port, intel_connector)) - goto err_init_connector; + goto err_encoder_init; return true; -err_init_connector: - drm_encoder_cleanup(encoder); err_encoder_init: kfree(intel_connector); -err_connector_alloc: - kfree(dig_port); return false; } diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c b/drivers/gpu/drm/i915/display/g4x_hdmi.c index 5fe5067c4237c..45ee1ad504bc1 100644 --- a/drivers/gpu/drm/i915/display/g4x_hdmi.c +++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c @@ -5,6 +5,7 @@ * HDMI support for G4x,ILK,SNB,IVB,VLV,CHV (HSW+ handled by the DDI code). */ +#include #include #include "g4x_hdmi.h" @@ -562,7 +563,6 @@ static void chv_hdmi_pre_enable(struct intel_atomic_state *state, } static const struct drm_encoder_funcs intel_hdmi_enc_funcs = { - .destroy = intel_encoder_destroy, }; static enum intel_hotplug_state @@ -686,21 +686,21 @@ bool g4x_hdmi_init(struct intel_display *display, drm_dbg_kms(display->drm, "No VBT child device for HDMI-%c\n", port_name(port)); - dig_port = intel_dig_port_alloc(); + dig_port = intel_dig_port_alloc(display->drm); if (!dig_port) return false; intel_connector = intel_connector_alloc(); if (!intel_connector) - goto err_connector_alloc; + return false; intel_encoder = &dig_port->base; intel_encoder->devdata = devdata; - if (drm_encoder_init(display->drm, &intel_encoder->base, - &intel_hdmi_enc_funcs, DRM_MODE_ENCODER_TMDS, - "HDMI %c", port_name(port))) + if (drmm_encoder_init(display->drm, &intel_encoder->base, + &intel_hdmi_enc_funcs, DRM_MODE_ENCODER_TMDS, + "HDMI %c", port_name(port))) goto err_encoder_init; intel_encoder->hotplug = intel_hdmi_hotplug; @@ -763,16 +763,11 @@ bool g4x_hdmi_init(struct intel_display *display, intel_infoframe_init(dig_port); if (!intel_hdmi_init_connector(dig_port, intel_connector)) - goto err_init_connector; + goto err_encoder_init; return true; - -err_init_connector: - drm_encoder_cleanup(&intel_encoder->base); err_encoder_init: kfree(intel_connector); -err_connector_alloc: - kfree(dig_port); return false; } diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c index afbaa0465842a..cfee173a2367a 100644 --- a/drivers/gpu/drm/i915/display/icl_dsi.c +++ b/drivers/gpu/drm/i915/display/icl_dsi.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -1775,13 +1776,7 @@ static bool gen11_dsi_initial_fastset_check(struct intel_encoder *encoder, return true; } -static void gen11_dsi_encoder_destroy(struct drm_encoder *encoder) -{ - intel_encoder_destroy(encoder); -} - static const struct drm_encoder_funcs gen11_dsi_encoder_funcs = { - .destroy = gen11_dsi_encoder_destroy, }; static const struct drm_connector_funcs gen11_dsi_connector_funcs = { @@ -1934,8 +1929,10 @@ void icl_dsi_init(struct intel_display *display, if (port == PORT_NONE) return; - intel_dsi = kzalloc_obj(*intel_dsi); - if (!intel_dsi) + intel_dsi = drmm_encoder_alloc(display->drm, struct intel_dsi, base.base, + &gen11_dsi_encoder_funcs, + DRM_MODE_ENCODER_DSI, "DSI %c", port_name(port)); + if (IS_ERR(intel_dsi)) return; intel_connector = intel_connector_alloc(); @@ -1950,11 +1947,6 @@ void icl_dsi_init(struct intel_display *display, encoder->devdata = devdata; - /* register DSI encoder with DRM subsystem */ - drm_encoder_init(display->drm, &encoder->base, - &gen11_dsi_encoder_funcs, - DRM_MODE_ENCODER_DSI, "DSI %c", port_name(port)); - encoder->pre_pll_enable = gen11_dsi_pre_pll_enable; encoder->pre_enable = gen11_dsi_pre_enable; encoder->enable = gen11_dsi_enable; @@ -2037,7 +2029,5 @@ void icl_dsi_init(struct intel_display *display, err: drm_connector_cleanup(connector); - drm_encoder_cleanup(&encoder->base); - kfree(intel_dsi); kfree(intel_connector); } diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c index 6aa6a1dd6e1b0..39bb115955f5a 100644 --- a/drivers/gpu/drm/i915/display/intel_crt.c +++ b/drivers/gpu/drm/i915/display/intel_crt.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include