From nobody Mon Aug 24 07:10:13 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 97DEF2571B8 for ; Sat, 4 Jul 2026 18:32:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783189973; cv=none; b=llzYFI/9npCFHBfYYNfMFnPCRlpjvYZ9Ar5OoFVPMaWyUXlTpQqi1WTs3QSL0Papsqb4NOF6KHZO3EV+2bY1pulSHvUWa4CwGZb9l2CFMK9KN5/VlnOJlqCJkN/5xEksPienBtQ2Yrl4jAS8imXyZ0TziXfH2G3D/FIBi+hdiZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783189973; c=relaxed/simple; bh=suiX1hb7hxWElnQ47l4ZCuVeZgtDba91LFdURswfwJM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zs/3Iyua+SM+iB9YvN6O7TBtEp//wqtIWWkVxEuy2JfhOtUv9nm/wWhAKHZsiup0Xtlj6ib6O4gO1jGi+n3vBeZ0daTv/8FysnI8zd+/ESHIY/soFjf5mFhn8Zkl2KxXx8+e44/6O8hB8UTX17I43qGC70LQs+DaGrJZHEQan5o= 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=Qrwax7K6; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LZSmrWku; arc=none smtp.client-ip=205.220.180.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="Qrwax7K6"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LZSmrWku" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 664G8fuM3272951 for ; Sat, 4 Jul 2026 18:32:50 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= rk9PzaJeJ1EubyHB5y8nJAfHMdVNPP8w0v4lujL2p6c=; b=Qrwax7K6YbrhBQ+0 pw5YoGjmckdXdtTMrOJifM6TUsW9/L+f3162b/N7ycpx8Q6K05ntOpb20DTDXR35 y24nTN2BxtwosIAeooPcsvkonEW+KBecNEd9EQYag7gtQ+5oAcJ5brHcHpzyycEP Du7bAu+Nm0Xq9MHCBdrk2v/5ROHjYYd/hD/W33tUwjtZ8ttZ73urgo2S9lEOX4Lv JzEs62tCpLl8TUZi/j3noo29PbSvnuu4LuxHyuD5vc4oxbsnYaZUo43jiaR7FWB2 Evjgh7EzPNUfD//h5eFX9KkBxFZbusLStDX4U6M6fIz1gBY/7o9K1/qVkZ+crZRm TgA2LQ== 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 4f6tj8hawn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 04 Jul 2026 18:32:50 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8479b7c3adbso2479662b3a.3 for ; Sat, 04 Jul 2026 11:32:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783189969; x=1783794769; 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=rk9PzaJeJ1EubyHB5y8nJAfHMdVNPP8w0v4lujL2p6c=; b=LZSmrWkuqPnG0FnPIoHCDC+YORU5KjzUDURUZjGGvNU+HZstd2abAmtKS2n8/V6NLI UWXBpt9m+A8L92s9taVQEN5yG0UleaFhzCpD7c9D0wgAJMbe53f3YYHgyF6iXZe8crjo V5OtWhdQ331rG6WvX4k1QTl6US3sSzQMTrT0fQXF+m+XnDSv4foRKfPQABpU4N17UxMi qoknuMsCalHAkTt3rarbni0OchdwQQplIRrR3rptjsYmXrvYgb/cV+PdikAmj9pEYztr RhQ2hfOLrjUtXSnjp/ZAC90pvb2wvaEy7wXfoTGgXpKNdBuHLQrapqj8uYeEIXnfgaD3 p27Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783189969; x=1783794769; 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=rk9PzaJeJ1EubyHB5y8nJAfHMdVNPP8w0v4lujL2p6c=; b=eComGXPSjnHor8wKQps3voI6ROPn0JKgVd8IQwJxxPzL/sHrJzPu2ks5mDoT4Cg7eN DBsUh6N63VdTkYpxFbd/lI50SulNrQNUxaV3cMtMHC/MsMVvjRu5KJYkvOGMFXHyWGZA FUHrzzRN+tCaQSdXUhU9dL+VrvXoOCPq9nOsFoIf3lloPMqF46X2vkiP77139kfuFUUr lb+dkdjqhE2zmXIB/bUqJfrNuCGFcZCJbdq5o9lBo9i/c4RBAhkSCMjtz5wfUhYR3GSv WmeSTFa6M0Nltsjpll2TTr66y4E/k9XfLb3aHC56Gbm0Pr2+NNqQSIasMRZaylm1uKDq pdnA== X-Forwarded-Encrypted: i=1; AHgh+RpiSKpMkEkT2i4H3ZHk9FB1m1dt7XYV1UFZQGkN65cCDZHtGEfR9TQM4Y9JOTZywMn53EuWOHdVQXUUDAQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxwP94mfJuRMUvSufzE8EnzxVMsS8ReHqiX0yQzv2q00qh4hONT VaoJ1/h/PsPg2iGbPcSZyoTYDwX2NGg48xKZdkwtWW5XGi/QxNtZHd7yHeNkHbTT9f3Z5Z2vMqa eXegXGv3JxLByYAZfR7iSaW93fPc/TRse1k1Nn03n3djt2cg85IXgCKgK3kJ836wjWCs5IYM7j2 LPPr6u X-Gm-Gg: AfdE7ckg7QDBEu3K1OsRrH1oBEpR6TxRY44KKkV3PihCpRVYlWp78yqrLX4N5i1I+cm ELdAv0JncmZEpGTsskrLDfD33B1DSYr9gEINavdXIFrkcetRHP9nUPfkglMAWP3tAp4fFOfu6aC dp1mZTmKw/1yS9wppNXLS5jxJ81BPV8ct1x/kFFvyD+z5gQhAMdEVTcij+U8XpQSWKS8dt23yx8 bTBr8T8jnoqvcb5QWQ8ly2q8o1Wv8m6pkNlqlJm5BNT0xb1xY8xO21Zro2+ypPQjgHOycLmxHPO e8IeD36MSyK5WhiEJ40m+VhbvhWSNhtf5NTwrFCLpp2zRjoxvOcTsxV0CO4veRz4AWfYLGPDlHO T2QJCkNbMKbd+QxSVZN4OmT4= X-Received: by 2002:a05:6a00:22c7:b0:845:48be:b046 with SMTP id d2e1a72fcca58-847f6f1025fmr3763180b3a.36.1783189969405; Sat, 04 Jul 2026 11:32:49 -0700 (PDT) X-Received: by 2002:a05:6a00:22c7:b0:845:48be:b046 with SMTP id d2e1a72fcca58-847f6f1025fmr3763155b3a.36.1783189968830; Sat, 04 Jul 2026 11:32:48 -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.32.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 11:32:47 -0700 (PDT) From: Ze Huang Date: Sun, 05 Jul 2026 02:31:11 +0800 Subject: [PATCH 2/9] drm/aspeed: 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-2-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=10745; i=ze.huang@oss.qualcomm.com; s=20260704; h=from:subject:message-id; bh=suiX1hb7hxWElnQ47l4ZCuVeZgtDba91LFdURswfwJM=; b=5HcbGp99V2Yint2Jmx7p8cBU7PhrqcJUqaDUpsMgk9Dpg7lpIs6PwliMmRMT1Cqd+Ytp1FY6y 1+s74fAS33WArqXbTG0K/2A23KDYGxAhQXpnwL68qGMAyrr2jzcMy3Z X-Developer-Key: i=ze.huang@oss.qualcomm.com; a=ed25519; pk=pSsISLZF2ubEjJRmslsa6Ps4W3yAuPY7yaircQTlQQU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX9cU/e2Ef0xe3 ujlp+PmrnkoAr95z4/1HoHZJOegLBiAlHdFpvNMXNQv9ttP/vsNrBsrPaO8fBGfEFR7ONiRqljZ icECtmWc1zJbPxQkYh2XIGjEIGde5hbYBMPXmTYmCBrSXDF3uM+zFF10n8FN3tBm8rIIvOFkNos 1UI2013AZPNiD9UfCIy0U0IUfQQBVfTPrCH6QhNwPIlt9zZkKRZFJt+R2O/Nrk4E0a+10vnS8tY aUTm2bWYpeK+AxYjGymj32lhWdi/gzVKnuJ9JiIJ+4yObFp/9jQK1gYwV4+8hErR32AKaeuulU/ S2SOSTCB2Z/ERuDgZlxdr42jKa6ljtGc2h6aE+GQBqTOQZ4SZJGI0xXGijgg8J1hCXY5xWy+Ejc Dv2vBoJV2tXYMDIA513IlNerxgHtF4pUOl+0kx5qzv6H4rIrphpP0Vgc7N6gejsfdKM3QGjHKSJ 5IuL5c+7LOWBpVtgCbA== X-Proofpoint-ORIG-GUID: VfQ_qwjlkA0hFieeaBDJtHRzqurdofen X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA0MDE5MiBTYWx0ZWRfX7+EMlsNYXvCQ YNwZ5imGsgOvuNV1ngU3QUo+szKfNvrmYNKXtd2p/W/79B+cVhlY1UMOqP4qrdBaPXDBOcCg5ME 4a3fWDEiCn38DfedE5sPAl7qXj15JQM= X-Proofpoint-GUID: VfQ_qwjlkA0hFieeaBDJtHRzqurdofen X-Authority-Analysis: v=2.4 cv=H6TrBeYi c=1 sm=1 tr=0 ts=6a4951d2 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=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=QAKNwy68QAf-n9tFDZYA:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq: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 malwarescore=0 phishscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 adultscore=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 Replace simple display pipe with explicit plane, CRTC and encoder objects. Move callbacks to plane and CRTC helpers, with vblank handling through drm_crtc_funcs. This removes intermediate simple-pipe layer and uses standard atomic helper wiring. Signed-off-by: Ze Huang --- drivers/gpu/drm/aspeed/aspeed_gfx.h | 5 +- drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c | 156 +++++++++++++++++++++++----= ---- drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 3 +- 3 files changed, 123 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx.h b/drivers/gpu/drm/aspeed/a= speed_gfx.h index 4e6a442c3886..a34811564c0d 100644 --- a/drivers/gpu/drm/aspeed/aspeed_gfx.h +++ b/drivers/gpu/drm/aspeed/aspeed_gfx.h @@ -2,7 +2,6 @@ /* Copyright 2018 IBM Corporation */ =20 #include -#include =20 struct aspeed_gfx { struct drm_device drm; @@ -17,7 +16,9 @@ struct aspeed_gfx { u32 throd_val; u32 scan_line_max; =20 - struct drm_simple_display_pipe pipe; + struct drm_plane plane; + struct drm_crtc crtc; + struct drm_encoder encoder; struct drm_connector connector; }; #define to_aspeed_gfx(x) container_of(x, struct aspeed_gfx, drm) diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c b/drivers/gpu/drm/asp= eed/aspeed_gfx_crtc.c index 7877a57b8e26..3294795c31c4 100644 --- a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c @@ -5,6 +5,8 @@ #include #include =20 +#include +#include #include #include #include @@ -12,20 +14,13 @@ #include #include #include -#include #include =20 #include "aspeed_gfx.h" =20 -static struct aspeed_gfx * -drm_pipe_to_aspeed_gfx(struct drm_simple_display_pipe *pipe) -{ - return container_of(pipe, struct aspeed_gfx, pipe); -} - static int aspeed_gfx_set_pixel_fmt(struct aspeed_gfx *priv, u32 *bpp) { - struct drm_crtc *crtc =3D &priv->pipe.crtc; + struct drm_crtc *crtc =3D &priv->crtc; struct drm_device *drm =3D crtc->dev; const u32 format =3D crtc->primary->state->fb->format->format; u32 ctrl1; @@ -79,7 +74,7 @@ static void aspeed_gfx_disable_controller(struct aspeed_g= fx *priv) =20 static void aspeed_gfx_crtc_mode_set_nofb(struct aspeed_gfx *priv) { - struct drm_display_mode *m =3D &priv->pipe.crtc.state->adjusted_mode; + struct drm_display_mode *m =3D &priv->crtc.state->adjusted_mode; u32 ctrl1, d_offset, t_count, bpp; int err; =20 @@ -139,33 +134,31 @@ static void aspeed_gfx_crtc_mode_set_nofb(struct aspe= ed_gfx *priv) writel(priv->throd_val, priv->base + CRT_THROD); } =20 -static void aspeed_gfx_pipe_enable(struct drm_simple_display_pipe *pipe, - struct drm_crtc_state *crtc_state, - struct drm_plane_state *plane_state) +static void aspeed_gfx_crtc_helper_atomic_enable(struct drm_crtc *crtc, + struct drm_atomic_commit *state) { - struct aspeed_gfx *priv =3D drm_pipe_to_aspeed_gfx(pipe); - struct drm_crtc *crtc =3D &pipe->crtc; + struct aspeed_gfx *priv =3D container_of(crtc, struct aspeed_gfx, crtc); =20 aspeed_gfx_crtc_mode_set_nofb(priv); aspeed_gfx_enable_controller(priv); drm_crtc_vblank_on(crtc); } =20 -static void aspeed_gfx_pipe_disable(struct drm_simple_display_pipe *pipe) +static void aspeed_gfx_crtc_helper_atomic_disable(struct drm_crtc *crtc, + struct drm_atomic_commit *state) { - struct aspeed_gfx *priv =3D drm_pipe_to_aspeed_gfx(pipe); - struct drm_crtc *crtc =3D &pipe->crtc; + struct aspeed_gfx *priv =3D container_of(crtc, struct aspeed_gfx, crtc); =20 drm_crtc_vblank_off(crtc); aspeed_gfx_disable_controller(priv); } =20 -static void aspeed_gfx_pipe_update(struct drm_simple_display_pipe *pipe, - struct drm_plane_state *plane_state) +static void aspeed_gfx_plane_helper_atomic_update(struct drm_plane *plane, + struct drm_atomic_commit *state) { - struct aspeed_gfx *priv =3D drm_pipe_to_aspeed_gfx(pipe); - struct drm_crtc *crtc =3D &pipe->crtc; - struct drm_framebuffer *fb =3D pipe->plane.state->fb; + struct aspeed_gfx *priv =3D container_of(plane, struct aspeed_gfx, plane); + struct drm_crtc *crtc =3D &priv->crtc; + struct drm_framebuffer *fb =3D plane->state->fb; struct drm_pending_vblank_event *event; struct drm_gem_dma_object *gem; =20 @@ -190,9 +183,9 @@ static void aspeed_gfx_pipe_update(struct drm_simple_di= splay_pipe *pipe, writel(gem->dma_addr, priv->base + CRT_ADDR); } =20 -static int aspeed_gfx_enable_vblank(struct drm_simple_display_pipe *pipe) +static int aspeed_gfx_crtc_enable_vblank(struct drm_crtc *crtc) { - struct aspeed_gfx *priv =3D drm_pipe_to_aspeed_gfx(pipe); + struct aspeed_gfx *priv =3D container_of(crtc, struct aspeed_gfx, crtc); u32 reg =3D readl(priv->base + CRT_CTRL1); =20 /* Clear pending VBLANK IRQ */ @@ -204,9 +197,9 @@ static int aspeed_gfx_enable_vblank(struct drm_simple_d= isplay_pipe *pipe) return 0; } =20 -static void aspeed_gfx_disable_vblank(struct drm_simple_display_pipe *pipe) +static void aspeed_gfx_crtc_disable_vblank(struct drm_crtc *crtc) { - struct aspeed_gfx *priv =3D drm_pipe_to_aspeed_gfx(pipe); + struct aspeed_gfx *priv =3D container_of(crtc, struct aspeed_gfx, crtc); u32 reg =3D readl(priv->base + CRT_CTRL1); =20 reg &=3D ~CRT_CTRL_VERTICAL_INTR_EN; @@ -216,12 +209,75 @@ static void aspeed_gfx_disable_vblank(struct drm_simp= le_display_pipe *pipe) writel(reg | CRT_CTRL_VERTICAL_INTR_STS, priv->base + CRT_CTRL1); } =20 -static const struct drm_simple_display_pipe_funcs aspeed_gfx_funcs =3D { - .enable =3D aspeed_gfx_pipe_enable, - .disable =3D aspeed_gfx_pipe_disable, - .update =3D aspeed_gfx_pipe_update, - .enable_vblank =3D aspeed_gfx_enable_vblank, - .disable_vblank =3D aspeed_gfx_disable_vblank, +static int aspeed_gfx_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 aspeed_gfx_plane_helper_funcs = =3D { + .prepare_fb =3D drm_gem_plane_helper_prepare_fb, + .atomic_check =3D aspeed_gfx_plane_helper_atomic_check, + .atomic_update =3D aspeed_gfx_plane_helper_atomic_update, +}; + +static const struct drm_plane_funcs aspeed_gfx_plane_funcs =3D { + .update_plane =3D drm_atomic_helper_update_plane, + .disable_plane =3D drm_atomic_helper_disable_plane, + .destroy =3D drm_plane_cleanup, + .reset =3D drm_atomic_helper_plane_reset, + .atomic_duplicate_state =3D drm_atomic_helper_plane_duplicate_state, + .atomic_destroy_state =3D drm_atomic_helper_plane_destroy_state, +}; + +static int aspeed_gfx_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 aspeed_gfx_crtc_helper_funcs =3D= { + .atomic_check =3D aspeed_gfx_crtc_helper_atomic_check, + .atomic_enable =3D aspeed_gfx_crtc_helper_atomic_enable, + .atomic_disable =3D aspeed_gfx_crtc_helper_atomic_disable, +}; + +static const struct drm_crtc_funcs aspeed_gfx_crtc_funcs =3D { + .reset =3D drm_atomic_helper_crtc_reset, + .destroy =3D drm_crtc_cleanup, + .set_config =3D drm_atomic_helper_set_config, + .page_flip =3D drm_atomic_helper_page_flip, + .atomic_duplicate_state =3D drm_atomic_helper_crtc_duplicate_state, + .atomic_destroy_state =3D drm_atomic_helper_crtc_destroy_state, + .enable_vblank =3D aspeed_gfx_crtc_enable_vblank, + .disable_vblank =3D aspeed_gfx_crtc_disable_vblank, +}; + +static const struct drm_encoder_funcs aspeed_gfx_encoder_funcs =3D { + .destroy =3D drm_encoder_cleanup, }; =20 static const uint32_t aspeed_gfx_formats[] =3D { @@ -232,10 +288,36 @@ static const uint32_t aspeed_gfx_formats[] =3D { int aspeed_gfx_create_pipe(struct drm_device *drm) { struct aspeed_gfx *priv =3D to_aspeed_gfx(drm); + struct drm_plane *plane =3D &priv->plane; + struct drm_crtc *crtc =3D &priv->crtc; + struct drm_encoder *encoder =3D &priv->encoder; + int ret; + + ret =3D drm_universal_plane_init(drm, plane, 0, + &aspeed_gfx_plane_funcs, + aspeed_gfx_formats, + ARRAY_SIZE(aspeed_gfx_formats), + NULL, + DRM_PLANE_TYPE_PRIMARY, NULL); + if (ret) + return ret; + drm_plane_helper_add(plane, &aspeed_gfx_plane_helper_funcs); + + ret =3D drm_crtc_init_with_planes(drm, crtc, plane, NULL, + &aspeed_gfx_crtc_funcs, NULL); + if (ret) + return ret; + drm_crtc_helper_add(crtc, &aspeed_gfx_crtc_helper_funcs); + + ret =3D drm_encoder_init(drm, encoder, &aspeed_gfx_encoder_funcs, + DRM_MODE_ENCODER_NONE, NULL); + if (ret) + return ret; + encoder->possible_crtcs =3D drm_crtc_mask(crtc); + + ret =3D drm_connector_attach_encoder(&priv->connector, encoder); + if (ret) + return ret; =20 - return drm_simple_display_pipe_init(drm, &priv->pipe, &aspeed_gfx_funcs, - aspeed_gfx_formats, - ARRAY_SIZE(aspeed_gfx_formats), - NULL, - &priv->connector); + return 0; } diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspe= ed/aspeed_gfx_drv.c index 46094cca2974..b2d805f0c16d 100644 --- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include =20 @@ -130,7 +129,7 @@ static irqreturn_t aspeed_gfx_irq_handler(int irq, void= *data) reg =3D readl(priv->base + CRT_CTRL1); =20 if (reg & CRT_CTRL_VERTICAL_INTR_STS) { - drm_crtc_handle_vblank(&priv->pipe.crtc); + drm_crtc_handle_vblank(&priv->crtc); writel(reg, priv->base + priv->int_clr_reg); return IRQ_HANDLED; } --=20 2.55.0