From nobody Wed Aug 26 07:48:35 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 A7C4B2BE02C for ; Sat, 4 Jul 2026 18:33:24 +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=1783190006; cv=none; b=h7ge33s38fkKnwi6bcUuCtiZ7DNrvDXboSPahrK2EPWrK6l8LQPRdZZslHRvWIwsUrK/VgpMa8KMFob2iKMy6v2ovG1pVEoRT7oyG01lQzXCTZjNJqCNKFxEvav17ly4scxqXzXp2jQyvEaby/Vwh6Y629Iv8SKVj6m0epT/YUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783190006; c=relaxed/simple; bh=X0UwoE9ZxeInLb/TsbQTXm8HFa5R2/0dvM/cIQQ4UA0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FqTLu+ah0ycfvVmJT3LtKyu8NuPaMrETozXPdqrclqZ6X1wzq8PcoSDeJgAFTA+Oqt8jl+H6iuUl+Y9KipPfZhDjjDPrlyYcKC3085xzp8hYMq58QbyslrTCmG5DvQRfg7/Wi3BcDybpbmRmDVyAulbncuI28ZRBtHm8QMpYGIk= 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=JAoIYFLi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Aze4Q6VH; 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="JAoIYFLi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Aze4Q6VH" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 664INqwD3704449 for ; Sat, 4 Jul 2026 18:33:24 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= d9o/IQZq06TE0+/STQz+x6iRc27qZ5OMF6+HG6X3OyU=; b=JAoIYFLieW2sulob 8aKS9YKc17lyfb7CkmeQiYpno8SQEG5nYVlB2llF6oJ6jwMVnyQ3d+KGfvB4W4DH GZyHLai4/8DV1JBbnmoHe90LsTRqlQS3Nu8VfpFis3FvhONuKHSAhKid03HvVmcF BR7uU3TTQPutgDXECfOEHCyox2dbQiV7g+MKxnrcBmUQcur2B8CxZSmdFWoJJYmG TJB4Pk9pQPuqNJlT9bQxqfANLuIW771S6dai19iy1YU+s2AVfvymkJk6qipOrE1y b1+ByW4lEXfIKKI6m+ZVxSF5QLjt831FP0iy6aX8qC91V0Td7yh/ILPUkmBNWF3A ykGHbA== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f6qvgspb5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 04 Jul 2026 18:33:23 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8478e9c4bd2so1568914b3a.1 for ; Sat, 04 Jul 2026 11:33:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783190003; x=1783794803; 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=d9o/IQZq06TE0+/STQz+x6iRc27qZ5OMF6+HG6X3OyU=; b=Aze4Q6VHJwa1VmrGKugAPP4UZxgGVf7R/EOPOQcP9BCiwlNvn6yXDP2WM4ckgzjJS7 PiolbjxFvCp05D07rWzqBnxqD3oYjfrVzallDws2EOfqb0AKnCONFd2HaGu9D6mRR1+e Br6daV8PJ6I/50kh7JiTQxZGGgKcNN1gmwYD97pXdElKuiZ1v4hMLS0WxJI/FuCpZHdm KG9SjUZgMUeCm7jSnFiSombFPZzVqBL95c4iqcAMdRoh7lQtUf3SLlSOuuMWa+Eub1cZ k0TsMPvH4SuQykJmzr1GIjhbJtCl1LDbcnMayNaijzObY7dKbj53XS1elDweewCavANl Kd/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783190003; x=1783794803; 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=d9o/IQZq06TE0+/STQz+x6iRc27qZ5OMF6+HG6X3OyU=; b=JBguWr0ZfTbWG30JSa0phxb9OCGRH3JrEQv9ULw6kX2XSIF80MSovm/D/PPujTRXFF R08wBbSx76F4WwZ/Co8Udx3SE+cFMe6hr90fGWs2kdk14GmzaXxpYTUbBZf/fKTpuZgd dLa6DhID4nEpoAPi6Bi9kVRSaFYkPvbR/3ZhJ6jDBoC9ZE6AanfAM/XeCayE1QvFSJB+ 2uHMyaJ5qh6vFr2uEg/nQfvDUMhjrm6Q9oWkzWseaB53bvt3isxe6EE0xFNSV/CqaA2Y qwmfDtVF/Fr2K034jttf4OPPd4gRT6mN7km/+PFu+gzDBe/ZV10R+wdoptCAWZFEz6zR cNDA== X-Forwarded-Encrypted: i=1; AHgh+Rptl3r9AHhaPHwQIcxB0SJw/2aOzPrlAU86E5yMVE6s9lsWn7pFo0ZkDe9EBrJsahJ4q0MQMwSnbxD5nB8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywo/N1HFX8ycVYDaRsJ+C0iI5i80MLPFYY0w+CCIfmwSZPJ1B2p w7JV1QxeFgEU7//gEARiUJkW+fP4UdmJ89w80kVnjNjJVlYlBujRQyuGVtOAzUgffuB1xwf9yZ5 +AxkUtx/c3zQRpqLaL4f7MPXrKeFVnpXnhZt5oDk4PcrkgRsbp2mQ9rYQD3w4gGHxeks= X-Gm-Gg: AfdE7cl1co++dex25qZh3HmRbWi6+aWg//PUNf8iSWbxzJgMp4+2r1WeUknorc2JPup GwNcHaILtFL62mhqCRXuXsrglXcnRjfsrlWKGCRvrit+JbsqPxKPlkkyVuf1QdQR/rQMJ5C0Pvd 0p2CUnPOOEF1KbjbZH7hKoO/xq4w4H4s9XcfeFoSxkv5sq5CAN+BPC/qvn9AypK6saeA0Xz4SJ1 bmFme8Le0bVjv+iXqaldEezqYlAjzrrvihSAeAlKwcfRR5lgZsBL31VRU1VB0lxYZEtffQb6B1G 2KgADu8HqqBeDbpmGOnlRxRe2RSU5kS791IDecZTM5WZitkY9J4Kv/Qe4Ex2TQHlR+EDrNIduqG A9+hUlD1vUy2H17dQtZGlRRU= X-Received: by 2002:a05:6a00:1399:b0:847:9518:a6fe with SMTP id d2e1a72fcca58-847f6dd54b8mr3903005b3a.26.1783190003089; Sat, 04 Jul 2026 11:33:23 -0700 (PDT) X-Received: by 2002:a05:6a00:1399:b0:847:9518:a6fe with SMTP id d2e1a72fcca58-847f6dd54b8mr3902984b3a.26.1783190002572; Sat, 04 Jul 2026 11:33:22 -0700 (PDT) Received: from [192.168.1.100] ([151.243.38.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-847f6b6057dsm1508437b3a.7.2026.07.04.11.33.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 11:33:22 -0700 (PDT) From: Ze Huang Date: Sun, 05 Jul 2026 02:31:16 +0800 Subject: [PATCH 7/9] 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: <20260705-drm-simple-kms-removal-v1-7-b4e1ca053623@oss.qualcomm.com> References: <20260705-drm-simple-kms-removal-v1-0-b4e1ca053623@oss.qualcomm.com> In-Reply-To: <20260705-drm-simple-kms-removal-v1-0-b4e1ca053623@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.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783189912; l=7683; i=ze.huang@oss.qualcomm.com; s=20260704; h=from:subject:message-id; bh=X0UwoE9ZxeInLb/TsbQTXm8HFa5R2/0dvM/cIQQ4UA0=; b=3r4r5kIqIqgZijf/Kqr49p7Qlhtwg622PqfbalukoH6sC56FcuoGH9O2XainORoxzzo+57CBd 48iBMIor2dOCYnCxiNIqiB3V0iSu79Fbb/lbiQqldwHfi0N4kpAgnXv X-Developer-Key: i=ze.huang@oss.qualcomm.com; a=ed25519; pk=pSsISLZF2ubEjJRmslsa6Ps4W3yAuPY7yaircQTlQQU= X-Authority-Analysis: v=2.4 cv=VvoTxe2n c=1 sm=1 tr=0 ts=6a4951f3 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=cNux22OjBTKCC6TmznXXXA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=rSXZLFMjQQqjKu18WoMA:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-ORIG-GUID: okAREhv1YEqxFJGxUiI7SvXv2k5YOQSy X-Proofpoint-GUID: okAREhv1YEqxFJGxUiI7SvXv2k5YOQSy X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX77m/e05Bbi9B cv8bhxV+mf0BsKgmtFEPJTbXnic751n3JcxBItEzmYC0BwjJZ4e+HeP6tyh5+lGDVQGeT9RTqZ1 5ws4/lBge/hPKOs5eZ4iFZc7yccurxc= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX91mobiOsavHT 5MH33FCGCfeinHpSq0HTJcJ0KzP14s8XPeYLjzDt7qteCJQaj1ihBi8noqq1MBLBUoizUa/PqdV 4ShvuXGvC1WVUGMSIxCFbgHHeoUihGUVHz0ZWRs3NomTfJIxwduHo50cTUnvUmTjGKc1SkAoCK7 fE5nmFb17I1edLTf4ktn25pdoWika4C7czfkEYNrA1qITHupGW69aHrWlKxQ2sWINIJ975B0qE7 TX0yDij5DpGawDiSBoETJ6Ncb3SNSeyeTcUCIcAY6aUhnivDc59lBbehcDoAdYYTAtl6Fs/aGkX Q6xiuNw5/Ny8nc3/KoT/1e5AOU7OBJBhtzTG6sq7LOLv3wUzlemlKNw7otxn5vsMGW7X1uq0rim WLLT0FuiNN27u2wlKTIRA3Icdp9AvhLGllRrWlcQnLNCH2nPyEGGNSP2su6l08JugUUK+WYIV8s CrBwfdwUprk/4lzy5sg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-07-04_02,2026-07-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 suspectscore=0 impostorscore=0 clxscore=1015 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607040192 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 | 130 +++++++++++++++++++++++++++++++++----= ---- 1 file changed, 105 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/tiny/repaper.c b/drivers/gpu/drm/tiny/repaper.c index c8270591afc7..23be9c762803 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,14 +828,15 @@ 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_plane_state *old_state =3D drm_atomic_get_old_plane_state(comm= it, plane); + struct drm_plane_state *state =3D plane->state; struct drm_shadow_plane_state *shadow_plane_state =3D to_drm_shadow_plane= _state(state); struct drm_rect rect; =20 - if (!pipe->crtc.state->active) + if (!state->crtc || !state->crtc->state->active) return; =20 if (drm_atomic_helper_damage_merged(old_state, state, &rect)) @@ -842,12 +844,72 @@ static void repaper_pipe_update(struct drm_simple_dis= play_pipe *pipe, &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; + int ret; + + if (crtc) + crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); + + ret =3D drm_atomic_helper_check_plane_state(plane_state, crtc_state, + DRM_PLANE_NO_SCALING, + DRM_PLANE_NO_SCALING, + false, false); + return ret; +} + +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) + goto out; + + ret =3D drm_atomic_helper_check_crtc_primary_plane(crtc_state); + if (ret) + return ret; + +out: + 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 +1164,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.55.0