From nobody Mon Aug 24 04:09:19 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 744B4372662 for ; Sat, 4 Jul 2026 18:33:18 +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=1783189999; cv=none; b=oUZoKgeOXk/Kn0HbYTZeY8MVtotML9ZSFrIO+Cw5wv9+rmyiTrHnEoMFvoM95tr2SWUxhYpzjsUMtnH2bbMTHumCM3Bv65bZHLSJWZavkWs+pqADDJBCh/CIa33l6J71yVYl6tg7e20sjFT9g+qnBSG5MS9RN4dpeVD0V4QspTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783189999; c=relaxed/simple; bh=r2DdGfAWLZ7vlivcGlngDUbsQreUWLRRttkb80TMXtg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FeUqmgMuwGnLCaVx+qM6KbACuvsF1svfk6EYH32lkRpD274MI4UtcooOFZQAk/v3Qr7yWcTpkLbs8LS6LE1ERwu28ncz7ceJ8Cn/NR1f5TfbicTSWoABeOIueZeEa8NFan6tFKECj4GGdODNKL2a7Wm607iRw7FXFRBlpshrYZ0= 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=chGpCVDh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Aqg/Tl0v; 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="chGpCVDh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Aqg/Tl0v" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 664IKbLC3719070 for ; Sat, 4 Jul 2026 18:33:17 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= /kuFitKvD+N+j3LNjGp20fDGgGetUmMinD8vCRF2MSU=; b=chGpCVDhexRvJ6rr wnmP0f94vr8luGOm/++TME2IvEnl0eKIx55FeM3CXaEiwLRW7vXHIKtqjy4o6v06 SAHgN+sR0Jj96ZfmMzcgh335WxtjOsMExrklcuQvZl0uYzFXYR3+G1qMf7iQJMSH wgjWX8QkGys5zg3B0KSZEaLe+bq/Tq1HzMGUDBzrixKO/XaeUaogKOUhmMN/5fE/ Bo4+ixv+GyB7BhGd3crg1HcJOQ2aynBeUQUP5g/YAQXiZVkBVQpbEnRJF5Z03g49 fz0f/Vv79d7TcM4jozs0CKmd2kiry+IbhZSW0rpic/qx3/3xor4rojO9WILwcw0Y /TyXkw== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f6s4ssfvc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 04 Jul 2026 18:33:17 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-8479c6c6cbeso1492779b3a.0 for ; Sat, 04 Jul 2026 11:33:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783189997; x=1783794797; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/kuFitKvD+N+j3LNjGp20fDGgGetUmMinD8vCRF2MSU=; b=Aqg/Tl0vEli/p5itUn+BCFqhtU0oHh3OyDgF9zODJ8XgL0Y308dcmAx4ijlaQNEySI 8cX3T++Ty/GYu9uHtChCTuT+UO+WLnLNEfMaLLFzq8jmwjMKqlq2EKAptpkDyV3sXeWC 5llkQJvdZBWAAZmAXlumIh1MPX6bysqUMKxrv0KtbXl4/Cleu1wK515oxKsgceQ3mkKj LpNdMTDu3KQDqpS+pJPXXhLbZ3lIh0BndyiOFcwstiscmCZeqPQSIJsAhOMXvdwvT/bf 2MRKv5ew9A5fKlIB7QjegjqcMIqIaiP3YaWtyR1JasGiPm1CfZEsmPK3hX/NuoLDKAKB i1qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783189997; x=1783794797; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/kuFitKvD+N+j3LNjGp20fDGgGetUmMinD8vCRF2MSU=; b=V+FTNVjWVpye2upgjX1SKhm+oLpn8YivyQQBICsJq/4EnkM0R1fHmoKTHvhrO19tQA g1ENdytI0wLDeo6UspiS61+Gn9uExbOZG3NSiQEZMWAjtl6D0ePrSm9OjpBX8GGf4vau /5pkDiIwc/RUnConEONJf4T5GmBiR5M2p7fHOweP5nCdtKtXJf+ibbAp6XxMCtZ+cyYr vKQVutZIBdCqUtJe6JeWGttfoDUra7a1M4jNdIjR1jeldwh/Pq1UReFtoIq06BWxil12 PvaUJFoqN+xCi+jKVRGqiBZtxgZaEE3Sp7sKSz0Q0e9NzsfB3NVygCV53os2ll9lLY9M 7dWQ== X-Forwarded-Encrypted: i=1; AHgh+RoJHTaIVzAYJ/W8q8y1+2k/vSYL6l2JNE844gIVxc0Pbpv+nanadcajMCqsHHg8cpU0KlSlaJHUl4AWat8=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3e6svyR43YV9uAxL603/mQQEmBjbdyBkP3N4KM121usIemGbV 080hj8vrdiQKJF1Fb89D0SSV7adgz1zxJsKZZcAXKN+y9R2g1uXkC5Va73pficq8P/B4Xg7+wzw kUITIBDMu4SFZG+8oQHfccxHfv4mPGHqXgzjf3WhGvVZacOg1D9xNQnz5IULng2SMdsY= X-Gm-Gg: AfdE7ckQ/3hd2v6CDSZ1WbrmdNdotheRqfpk18vxqfP0ara9Swr/6GxnkCoodb2fyFO YbAoazrwjaO9C7SDD44mziNr0nQzxR9opmlVPRkTo6cnioqAgfOa6Ir0W7w8aqcTREN6JOe47rC 9wQQcon9SOD2yks31a9FcN5+QsRQ5ho6B1QTL/gBVjQkIPPzHct0wgTrweXvpcTCOeV6DnRq3Zq JDWN6GMBbKkH1nfNvJwo6SqDLt4s2bz8wxyGdZekblUmIFQa1oO9uwLa5Fc78dBDSdvwKdAIf8W zDmE8E0jNaveBk1jCB+W7nE8+3H2zajkJokYjAjXcdXDo+2oSruHsS9iJfiR8xoIn0b6FMPhpcW GlT4pyzTOUwXtBxjfpGKxKXc= X-Received: by 2002:a05:6a00:b481:b0:846:2f3d:6275 with SMTP id d2e1a72fcca58-847f6fd61e8mr3673891b3a.58.1783189996845; Sat, 04 Jul 2026 11:33:16 -0700 (PDT) X-Received: by 2002:a05:6a00:b481:b0:846:2f3d:6275 with SMTP id d2e1a72fcca58-847f6fd61e8mr3673864b3a.58.1783189996356; Sat, 04 Jul 2026 11:33:16 -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.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 11:33:15 -0700 (PDT) From: Ze Huang Date: Sun, 05 Jul 2026 02:31:15 +0800 Subject: [PATCH 6/9] drm/gm12u320: 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-6-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=7466; i=ze.huang@oss.qualcomm.com; s=20260704; h=from:subject:message-id; bh=r2DdGfAWLZ7vlivcGlngDUbsQreUWLRRttkb80TMXtg=; b=ZpiamN8SsvzwHpSl4AWbZvzEzxMPS4b0qx+XHy2MamxT7sudsnCfhp6cfZmSMvpCePwkCMiIy rN1rIEme/zqBMPX9TVQFYz/cgOxWF7zd0K0T0G1rbbrGY1RY1W5avTu X-Developer-Key: i=ze.huang@oss.qualcomm.com; a=ed25519; pk=pSsISLZF2ubEjJRmslsa6Ps4W3yAuPY7yaircQTlQQU= X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX+8DbIMOPEs4h pLhSWjn8Ul3qU3w9ohDb6PR6ZveyZWa64fvEA9MjM2sVUIEpRu7zoeWgfiGkov2MDj72YIdTbMD vmy9V3IYzvUGpVC0nn1Pv022bm52u80= X-Proofpoint-ORIG-GUID: X_jzx1RW70pNszbK_M_jqW8hhoUiK3rW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX7CpawlJIXB2K XoPBs6Qeidqa8Py+O9cg+Qb5lEQSTKLcdkN874OwB4n7Ch4L8vs/pNOeVaPXhgiU27sUzW01sYB +kz0f8KIZ3CzUpAJFqAI984Djq6tMarfkdZSahh9gAdHOddN8S/WQDydlN4j6zu/5vTFyklFQ75 URA3zoOcfSl4nfp67gKDebiBG7tIOjOKpY5XcM6PXrGCK0LgjvOEN2qE+CDLVjY67adlNKDzoOQ ObUQ9xMQdiNZQWBnd6TbqsPAuTvHWWZX9eq4D4lRrvJJlo+twCQBsgFZFdt2SdEQPfpi5bgaykJ sCtJuomXyep0lwoYtRkAPUlYzQI1V7rAyVn/vL3oyT0+7nbJ1MWuClO8h3vrYZC8Ecs1uj0SZqO 6+7oGHNf8k40TdZtDYVO0SPvqlqzWcsZhgieMM63hPpA7ZLQIJVuCJcji81fyQre+mVucP4JUpu RcfDPRlnpVhX2ei6spg== X-Proofpoint-GUID: X_jzx1RW70pNszbK_M_jqW8hhoUiK3rW X-Authority-Analysis: v=2.4 cv=ZfQt8MVA c=1 sm=1 tr=0 ts=6a4951ed cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=cNux22OjBTKCC6TmznXXXA==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=g95SU4BBbiomblFqym4A:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 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 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 phishscore=0 priorityscore=1501 clxscore=1015 suspectscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607040192 Convert gm12u320 to direct primary plane, CRTC and encoder setup. Keep shadow-plane helper state, framebuffer access helpers and no-scaling plane-state check from simple-KMS path. Signed-off-by: Ze Huang Reviewed-by: Thomas Zimmermann Tested-by: Thomas Zimmermann --- drivers/gpu/drm/tiny/gm12u320.c | 128 ++++++++++++++++++++++++++++++++----= ---- 1 file changed, 104 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/tiny/gm12u320.c b/drivers/gpu/drm/tiny/gm12u32= 0.c index d73dfebb4353..992160ea794d 100644 --- a/drivers/gpu/drm/tiny/gm12u320.c +++ b/drivers/gpu/drm/tiny/gm12u320.c @@ -8,6 +8,7 @@ #include =20 #include +#include #include #include #include @@ -27,7 +28,6 @@ #include #include #include -#include =20 static bool eco_mode; module_param(eco_mode, bool, 0644); @@ -87,7 +87,9 @@ MODULE_PARM_DESC(eco_mode, "Turn on Eco mode (less bright= , more silent)"); =20 struct gm12u320_device { struct drm_device dev; - struct drm_simple_display_pipe pipe; + struct drm_plane plane; + struct drm_crtc crtc; + struct drm_encoder encoder; struct drm_connector conn; unsigned char *cmd_buf; unsigned char *data_buf[GM12U320_BLOCK_COUNT]; @@ -554,31 +556,33 @@ static int gm12u320_conn_init(struct gm12u320_device = *gm12u320) } =20 /* ------------------------------------------------------------------ */ -/* gm12u320 (simple) display pipe */ +/* gm12u320 display pipe */ =20 -static void gm12u320_pipe_enable(struct drm_simple_display_pipe *pipe, - struct drm_crtc_state *crtc_state, - struct drm_plane_state *plane_state) +static void gm12u320_crtc_helper_atomic_enable(struct drm_crtc *crtc, + struct drm_atomic_commit *commit) { struct drm_rect rect =3D { 0, 0, GM12U320_USER_WIDTH, GM12U320_HEIGHT }; - struct gm12u320_device *gm12u320 =3D to_gm12u320(pipe->crtc.dev); + struct gm12u320_device *gm12u320 =3D to_gm12u320(crtc->dev); + struct drm_plane_state *plane_state =3D crtc->primary->state; struct drm_shadow_plane_state *shadow_plane_state =3D to_drm_shadow_plane= _state(plane_state); =20 gm12u320->fb_update.draw_status_timeout =3D FIRST_FRAME_TIMEOUT; gm12u320_fb_mark_dirty(plane_state->fb, &shadow_plane_state->data[0], &re= ct); } =20 -static void gm12u320_pipe_disable(struct drm_simple_display_pipe *pipe) +static void gm12u320_crtc_helper_atomic_disable(struct drm_crtc *crtc, + struct drm_atomic_commit *commit) { - struct gm12u320_device *gm12u320 =3D to_gm12u320(pipe->crtc.dev); + struct gm12u320_device *gm12u320 =3D to_gm12u320(crtc->dev); =20 gm12u320_stop_fb_update(gm12u320); } =20 -static void gm12u320_pipe_update(struct drm_simple_display_pipe *pipe, - struct drm_plane_state *old_state) +static void gm12u320_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 @@ -586,11 +590,71 @@ static void gm12u320_pipe_update(struct drm_simple_di= splay_pipe *pipe, gm12u320_fb_mark_dirty(state->fb, &shadow_plane_state->data[0], &rect); } =20 -static const struct drm_simple_display_pipe_funcs gm12u320_pipe_funcs =3D { - .enable =3D gm12u320_pipe_enable, - .disable =3D gm12u320_pipe_disable, - .update =3D gm12u320_pipe_update, - DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, +static const struct drm_plane_funcs gm12u320_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 gm12u320_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 gm12u320_plane_helper_funcs =3D= { + DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, + .atomic_check =3D gm12u320_plane_helper_atomic_check, + .atomic_update =3D gm12u320_plane_helper_atomic_update, +}; + +static int gm12u320_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 gm12u320_crtc_helper_funcs =3D { + .atomic_check =3D gm12u320_crtc_helper_atomic_check, + .atomic_enable =3D gm12u320_crtc_helper_atomic_enable, + .atomic_disable =3D gm12u320_crtc_helper_atomic_disable, +}; + +static const struct drm_crtc_funcs gm12u320_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 gm12u320_encoder_funcs =3D { + .destroy =3D drm_encoder_cleanup, }; =20 static const uint32_t gm12u320_pipe_formats[] =3D { @@ -677,13 +741,29 @@ static int gm12u320_usb_probe(struct usb_interface *i= nterface, if (ret) return ret; =20 - ret =3D drm_simple_display_pipe_init(&gm12u320->dev, - &gm12u320->pipe, - &gm12u320_pipe_funcs, - gm12u320_pipe_formats, - ARRAY_SIZE(gm12u320_pipe_formats), - gm12u320_pipe_modifiers, - &gm12u320->conn); + ret =3D drm_universal_plane_init(dev, &gm12u320->plane, 0, + &gm12u320_plane_funcs, + gm12u320_pipe_formats, + ARRAY_SIZE(gm12u320_pipe_formats), + gm12u320_pipe_modifiers, + DRM_PLANE_TYPE_PRIMARY, NULL); + if (ret) + return ret; + drm_plane_helper_add(&gm12u320->plane, &gm12u320_plane_helper_funcs); + + ret =3D drm_crtc_init_with_planes(dev, &gm12u320->crtc, &gm12u320->plane,= NULL, + &gm12u320_crtc_funcs, NULL); + if (ret) + return ret; + drm_crtc_helper_add(&gm12u320->crtc, &gm12u320_crtc_helper_funcs); + + ret =3D drm_encoder_init(dev, &gm12u320->encoder, &gm12u320_encoder_funcs, + DRM_MODE_ENCODER_NONE, NULL); + if (ret) + return ret; + gm12u320->encoder.possible_crtcs =3D drm_crtc_mask(&gm12u320->crtc); + + ret =3D drm_connector_attach_encoder(&gm12u320->conn, &gm12u320->encoder); if (ret) return ret; =20 --=20 2.55.0