From nobody Wed Sep 23 05:44:06 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7687C3CD8B8 for ; Thu, 16 Jul 2026 09:03:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784192622; cv=none; b=C3q6mZhCoBQnIVziEbcnyX0vi9kZ2PR6GRsUZTAlJ75QiY2AmXbeVe/oeBf9jzP6dQsCpO/2ExJI9nQpM6wpedhzi8aM9Pf/QBGKgVS4xghsTE/1iZT7VXQ5+eTCRSYjrC7Cw87I+z/os67aDUQpleLs4lXR890dMnG6l0kDli0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784192622; c=relaxed/simple; bh=ERhc4h2BzyHq4SLA1KLZmwEBYZNamx9DmYFgd02zfJM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rZnwzIcZAtctnOVkclgTHSXa41gd8TC6DfWbd6iuBESSj6x77//xVG9IW6dOkYYxH2lI83pTkBr8y2RmnaVdSgI/5zRHvApwBVep4HG6tu7g5W1rrRETIx55dYz42yp5lX1KqtBW3dCMLwS5mjpTlJ6yfFHwZpny/TH27bDSwPA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=jmdPtyHr; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ad2Cu3tk; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="jmdPtyHr"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ad2Cu3tk" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66G7E1GP1849096 for ; Thu, 16 Jul 2026 09:03:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 9iNA4KkLXptEcrV9SWqVHRxO4EssLZecMFzgSPlpRjI=; b=jmdPtyHrCF2ywVB5 hrIupyUZanurfxmEAAZZ9jT2a9GiC7DNBF9beXbCihI0oOgPiHl6BO02ffL65YC3 Ml8DHtUml5SlEAFpiJH/Dtb/oMSdbQmCltUTV0UCcBQzR6i2nSupZUHzgs53gvpf 0CuwKKNG6m/2oUZwVF1Fxj0qGjRKn+D5sauSFkjNF3N0YaT04xnKd2NO1uwOBkIi 7jGDbMssRNsnFvcksJU8BVY0/XvgQQMlH4mgG3CboAdbQk/WVYgn+vnXsWdCZfnv 1lr0LgmPqqPkzSGIBnWZL8F3BCDLwKEn+Jq16zrFVDveUw8Rq0C7x0JhFggTEvZv UBiZwQ== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fetb7rgj4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 16 Jul 2026 09:03:31 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cacf17c7e0so46095995ad.0 for ; Thu, 16 Jul 2026 02:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784192611; x=1784797411; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9iNA4KkLXptEcrV9SWqVHRxO4EssLZecMFzgSPlpRjI=; b=ad2Cu3tkbs7kO9B+29uPS+XfBprLqXUtb6+1iD62KoVdyUpP2Bp2mO2zzzh46y0FLj FwvKKbBH8uzcLXd4KZSXzqDG078sNkHyG7SrkSXwJ4K/1GjQP55loRN+pZysp5Xd2guB mZRm8CsfILMlL+rrz1/LnJZ9D0IBaJHMg22maEmn093Cq8JBHp8YYcU+uqvWj3YN5C4B Y896ywkfz4/3ePjdeFeHHN1BiWCMuZLjwv/D7Dlcf1q8fv1XQrhdCumBxkvHcGb1qNoX lrZ587VErTWl8YJoyYyQ00cvt67rNEFyVJd4WJK74ytS8oUlMBhWyLHl+xC9PRvCUELq OgkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784192611; x=1784797411; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9iNA4KkLXptEcrV9SWqVHRxO4EssLZecMFzgSPlpRjI=; b=g5RamOWYJz3+ObOiZVxGVBxbXWFq7Czsnc/btYMOHmPO2puqjpH6SgFpz4D3HQUZRy AtWsRiTX5etNhdiKU3FiQOu3XtgMF8KB1Rc8Igraudxjg9TpBQ0s3mQ/weafsim8tk9O qL43PKc9C56cpzI+ob6hQJyJTbK/rsC5DS58X9CkzuvCYWLzqD1Sm9ncqXixcFmF/GbE FihmQKMgZ+mbTHjDOhXzAdkIqYUi99oZQ7smmsThDjpNiigPoppQ2Jdx1zlnW7dKZZcQ tT06mNskq7kzVV3N0X011d0fFC9bu5vllgmV+SlBPKaLOeyJd8D/mem2dkdc3R2A+bZW +VoA== X-Forwarded-Encrypted: i=1; AHgh+RpyiEVWYaMjQeNzolnB8nf5Uxqn1up46g8C3OA53uPe0XLjj5vlMsglXxBMG/jdlbYHZMc2R5OT/yWaa8k=@vger.kernel.org X-Gm-Message-State: AOJu0YydvAwRF0NidggLSycvpxaXGZ8UMiaJesyOs6GahQn9FdJXIr5d ziMT/otMItIG6wcMqBiHl20PESebWdncEqd9zVBsTEb2WN7zm/fWObF3Y3C4HFimg4/v+7pDwc4 JUocjAyKGhXarrHB0LLPh3SrHBQGHGEXbfpwiJ4GgplWDppXQ+U8x9C/9T2TMqPXV0ZU= X-Gm-Gg: AfdE7clWY98+KZp7Tjb4d1y0LRJKnaTK/LqnzL1UWd50zyBMrXIyONRlfj2wdFgmc8D gfe1QO6YMTgxjIAhlGPxSuNB+ImG2s0rH1cknh08ob8Xp4HxFdng8WRDeOJbN9ZDdtiCh4BbqBl mpaGYpRWv3Hr3gcl6ZvrtwM8yyAkvxzwaE16QWeUTG7ko8iQHwo9AQCS2zZgJB7mBmMBslbcVrX wzGCLUblqGRoHeKkOnklUsWuvKinAgn8OFr0/TdMyOx5GdqDwaHJMdWmVyIL9+Bj3kZdkoAiPs1 vDx3Xqb+5gwiB4xngMMqChmjZeyYazx7GLay7vG+YSy6AgH+BzTqlIMMNMK4Wy8kApOkvKJOceE tBZbtBAj/HUtFkNDo0mKS X-Received: by 2002:a17:902:fda3:b0:2ca:b4b9:4586 with SMTP id d9443c01a7336-2ce9e9ada87mr215357745ad.19.1784192610932; Thu, 16 Jul 2026 02:03:30 -0700 (PDT) X-Received: by 2002:a17:902:fda3:b0:2ca:b4b9:4586 with SMTP id d9443c01a7336-2ce9e9ada87mr215357475ad.19.1784192610502; Thu, 16 Jul 2026 02:03:30 -0700 (PDT) Received: from le-cd01-lnx.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf106b271asm16592555ad.64.2026.07.16.02.03.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 02:03:30 -0700 (PDT) From: Ze Huang Date: Thu, 16 Jul 2026 17:01:58 +0800 Subject: [PATCH v2 6/8] drm/repaper: replace struct drm_simple_display_pipe with regular atomic helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-drm-simple-kms-removal-v2-6-1133a8fc3785@oss.qualcomm.com> References: <20260716-drm-simple-kms-removal-v2-0-1133a8fc3785@oss.qualcomm.com> In-Reply-To: <20260716-drm-simple-kms-removal-v2-0-1133a8fc3785@oss.qualcomm.com> To: Alexey Brodkin , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Joel Stanley , Andrew Jeffery , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Linus Walleij , Hans de Goede , Alex Lanzano , Oleksandr Andrushchenko Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-aspeed@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, imx@lists.linux.dev, xen-devel@lists.xenproject.org, Ze Huang X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784192560; l=7829; i=ze.huang@oss.qualcomm.com; s=20260716; h=from:subject:message-id; bh=ERhc4h2BzyHq4SLA1KLZmwEBYZNamx9DmYFgd02zfJM=; b=BatRP4ZlOB9sgvvfbYOlQ/D1wW3PwwrZ6A1gMipy1O2m71Q4YyK+bKZTb/u3/NYEQiEn6Dhv6 uZCR4AWmSRVD/lNWPgDwsLkctZsl2PnzSt6mINbJ4PIs6X8p3eiyZg+ X-Developer-Key: i=ze.huang@oss.qualcomm.com; a=ed25519; pk=8uGhlZHInA8NXq7G6u/g59qEcwXwuMRI7nBSnT/ijtY= X-Proofpoint-Spam-Info: AW1haW4tMjYwNzE2MDA5MSBTYWx0ZWRfX9wjfgldxJ90Y LTZgqF01Cy+6GtHmxettpgMhTNphczq6KPnyGbjqWv0FnUMMOPQeEAn3ZQinVqA0lcRA+9cocBg CGr5kfNEDXKui3z76dIui9R4blNPJ80= X-Authority-Analysis: v=2.4 cv=dM2WXuZb c=1 sm=1 tr=0 ts=6a589e63 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=rSXZLFMjQQqjKu18WoMA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzE2MDA5MSBTYWx0ZWRfX1r0gAnuMA+61 DPOxTdc7LLkCRibLgnW9TLqxsuBWF+bKzeg+tqufnKEnTm3jPSC7wgm0mA2rvBGHealXYDaVVVZ ZNbNkNYzTNLbKyOTpYmFhiTGNvTs1v/Gmc996xn6Wi1xnYESLwlplErWDxkX6/Xvm9dVOIz0MEN eIL0QdKCWYyuZRfwhCD5kw5nj3J9QxUgDiHSsm0NUKLGsV3Txos7W0tqk/rhTJjrbeKjByxpVBF zJScikFdNWDR0PT4tndqM7eia/r+NdhpVe9shvZi8YkEAttZVT1X1NBpFH1CRgWkIbaGd2ssPq/ 7cC79g+koTWz1gwbRj+2sqzoPpeuA63eByXUgC9+aXGDjMonPI9XsiJLnLDBztvvEC5B0qAoUx9 nTe4ssunUV7i//K0hBt0efYIYSSulUKmWggRt38fCV4VzftHcGzxDVdEI6kovKsXZDLAwdfw2An U1N3DZCqtzX0944yghw== X-Proofpoint-ORIG-GUID: qEo5KPuSr5YMHHAt6SZxvGS3yDebCghh X-Proofpoint-GUID: qEo5KPuSr5YMHHAt6SZxvGS3yDebCghh X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-16_03,2026-07-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 adultscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 clxscore=1015 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607160091 Convert repaper to explicit primary plane, CRTC and encoder objects. Keep shadow-plane helpers, framebuffer access handling and no-scaling plane-state validation from simple-KMS path. Signed-off-by: Ze Huang --- drivers/gpu/drm/tiny/repaper.c | 132 ++++++++++++++++++++++++++++++++-----= ---- 1 file changed, 104 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/tiny/repaper.c b/drivers/gpu/drm/tiny/repaper.c index c8270591afc7..7057075161c4 100644 --- a/drivers/gpu/drm/tiny/repaper.c +++ b/drivers/gpu/drm/tiny/repaper.c @@ -22,6 +22,7 @@ #include =20 #include +#include #include #include #include @@ -38,7 +39,6 @@ #include #include #include -#include =20 #define REPAPER_RID_G2_COG_ID 0x12 =20 @@ -65,7 +65,9 @@ enum repaper_epd_border_byte { =20 struct repaper_epd { struct drm_device drm; - struct drm_simple_display_pipe pipe; + struct drm_plane plane; + struct drm_crtc crtc; + struct drm_encoder encoder; const struct drm_display_mode *mode; struct drm_connector connector; struct spi_device *spi; @@ -622,26 +624,24 @@ static void power_off(struct repaper_epd *epd) gpiod_set_value_cansleep(epd->discharge, 0); } =20 -static enum drm_mode_status repaper_pipe_mode_valid(struct drm_simple_disp= lay_pipe *pipe, - const struct drm_display_mode *mode) +static enum drm_mode_status repaper_crtc_helper_mode_valid(struct drm_crtc= *crtc, + const struct drm_display_mode *mode) { - struct drm_crtc *crtc =3D &pipe->crtc; struct repaper_epd *epd =3D drm_to_epd(crtc->dev); =20 return drm_crtc_helper_mode_valid_fixed(crtc, mode, epd->mode); } =20 -static void repaper_pipe_enable(struct drm_simple_display_pipe *pipe, - struct drm_crtc_state *crtc_state, - struct drm_plane_state *plane_state) +static void repaper_crtc_helper_atomic_enable(struct drm_crtc *crtc, + struct drm_atomic_commit *commit) { - struct repaper_epd *epd =3D drm_to_epd(pipe->crtc.dev); + struct repaper_epd *epd =3D drm_to_epd(crtc->dev); struct spi_device *spi =3D epd->spi; struct device *dev =3D &spi->dev; bool dc_ok =3D false; int i, ret, idx; =20 - if (!drm_dev_enter(pipe->crtc.dev, &idx)) + if (!drm_dev_enter(crtc->dev, &idx)) return; =20 DRM_DEBUG_DRIVER("\n"); @@ -771,9 +771,10 @@ static void repaper_pipe_enable(struct drm_simple_disp= lay_pipe *pipe, drm_dev_exit(idx); } =20 -static void repaper_pipe_disable(struct drm_simple_display_pipe *pipe) +static void repaper_crtc_helper_atomic_disable(struct drm_crtc *crtc, + struct drm_atomic_commit *commit) { - struct repaper_epd *epd =3D drm_to_epd(pipe->crtc.dev); + struct repaper_epd *epd =3D drm_to_epd(crtc->dev); struct spi_device *spi =3D epd->spi; unsigned int line; =20 @@ -827,27 +828,84 @@ static void repaper_pipe_disable(struct drm_simple_di= splay_pipe *pipe) power_off(epd); } =20 -static void repaper_pipe_update(struct drm_simple_display_pipe *pipe, - struct drm_plane_state *old_state) +static void repaper_plane_helper_atomic_update(struct drm_plane *plane, + struct drm_atomic_commit *commit) { - struct drm_plane_state *state =3D pipe->plane.state; - struct drm_shadow_plane_state *shadow_plane_state =3D to_drm_shadow_plane= _state(state); + struct drm_plane_state *old_pstate =3D drm_atomic_get_old_plane_state(com= mit, plane); + struct drm_plane_state *pstate =3D drm_atomic_get_new_plane_state(commit,= plane); + struct drm_shadow_plane_state *shadow_plane_state =3D to_drm_shadow_plane= _state(pstate); struct drm_rect rect; =20 - if (!pipe->crtc.state->active) + if (!pstate->fb) return; =20 - if (drm_atomic_helper_damage_merged(old_state, state, &rect)) - repaper_fb_dirty(state->fb, shadow_plane_state->data, + if (drm_atomic_helper_damage_merged(old_pstate, pstate, &rect)) + repaper_fb_dirty(pstate->fb, shadow_plane_state->data, &shadow_plane_state->fmtcnv_state); } =20 -static const struct drm_simple_display_pipe_funcs repaper_pipe_funcs =3D { - .mode_valid =3D repaper_pipe_mode_valid, - .enable =3D repaper_pipe_enable, - .disable =3D repaper_pipe_disable, - .update =3D repaper_pipe_update, - DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, +static const struct drm_plane_funcs repaper_plane_funcs =3D { + .update_plane =3D drm_atomic_helper_update_plane, + .disable_plane =3D drm_atomic_helper_disable_plane, + .destroy =3D drm_plane_cleanup, + DRM_GEM_SHADOW_PLANE_FUNCS, +}; + +static int repaper_plane_helper_atomic_check(struct drm_plane *plane, + struct drm_atomic_commit *state) +{ + struct drm_plane_state *plane_state =3D drm_atomic_get_new_plane_state(st= ate, plane); + struct drm_crtc *crtc =3D plane_state->crtc; + struct drm_crtc_state *crtc_state =3D NULL; + + if (crtc) + crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); + + return drm_atomic_helper_check_plane_state(plane_state, crtc_state, + DRM_PLANE_NO_SCALING, + DRM_PLANE_NO_SCALING, + false, false); +} + +static const struct drm_plane_helper_funcs repaper_plane_helper_funcs =3D { + DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, + .atomic_check =3D repaper_plane_helper_atomic_check, + .atomic_update =3D repaper_plane_helper_atomic_update, +}; + +static int repaper_crtc_helper_atomic_check(struct drm_crtc *crtc, + struct drm_atomic_commit *state) +{ + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + int ret; + + if (crtc_state->enable) { + ret =3D drm_atomic_helper_check_crtc_primary_plane(crtc_state); + if (ret) + return ret; + } + + return drm_atomic_add_affected_planes(state, crtc); +} + +static const struct drm_crtc_helper_funcs repaper_crtc_helper_funcs =3D { + .mode_valid =3D repaper_crtc_helper_mode_valid, + .atomic_check =3D repaper_crtc_helper_atomic_check, + .atomic_enable =3D repaper_crtc_helper_atomic_enable, + .atomic_disable =3D repaper_crtc_helper_atomic_disable, +}; + +static const struct drm_crtc_funcs repaper_crtc_funcs =3D { + .set_config =3D drm_atomic_helper_set_config, + .page_flip =3D drm_atomic_helper_page_flip, + .reset =3D drm_atomic_helper_crtc_reset, + .destroy =3D drm_crtc_cleanup, + .atomic_duplicate_state =3D drm_atomic_helper_crtc_duplicate_state, + .atomic_destroy_state =3D drm_atomic_helper_crtc_destroy_state, +}; + +static const struct drm_encoder_funcs repaper_encoder_funcs =3D { + .destroy =3D drm_encoder_cleanup, }; =20 static int repaper_connector_get_modes(struct drm_connector *connector) @@ -1102,9 +1160,27 @@ static int repaper_probe(struct spi_device *spi) if (ret) return ret; =20 - ret =3D drm_simple_display_pipe_init(drm, &epd->pipe, &repaper_pipe_funcs, - repaper_formats, ARRAY_SIZE(repaper_formats), - NULL, &epd->connector); + ret =3D drm_universal_plane_init(drm, &epd->plane, 0, + &repaper_plane_funcs, + repaper_formats, ARRAY_SIZE(repaper_formats), + NULL, DRM_PLANE_TYPE_PRIMARY, NULL); + if (ret) + return ret; + drm_plane_helper_add(&epd->plane, &repaper_plane_helper_funcs); + + ret =3D drm_crtc_init_with_planes(drm, &epd->crtc, &epd->plane, NULL, + &repaper_crtc_funcs, NULL); + if (ret) + return ret; + drm_crtc_helper_add(&epd->crtc, &repaper_crtc_helper_funcs); + + ret =3D drm_encoder_init(drm, &epd->encoder, &repaper_encoder_funcs, + DRM_MODE_ENCODER_NONE, NULL); + if (ret) + return ret; + epd->encoder.possible_crtcs =3D drm_crtc_mask(&epd->crtc); + + ret =3D drm_connector_attach_encoder(&epd->connector, &epd->encoder); if (ret) return ret; =20 --=20 2.43.0