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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 8F518FED2E4 for ; Thu, 12 Mar 2026 08:28:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D491A10E9F6; Thu, 12 Mar 2026 08:28:36 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="I8KQ01cM"; dkim-atps=neutral Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 69E6710E9F6 for ; Thu, 12 Mar 2026 08:28:35 +0000 (UTC) Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-439cb5af25bso746935f8f.1 for ; Thu, 12 Mar 2026 01:28:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1773304114; x=1773908914; darn=lists.freedesktop.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=wPddzVJSVtkRrcRhnsRvT/Hf7HSSWz/56c2ZASviYjw=; b=I8KQ01cMgm46/6Ew9F5EH8yiNoW9GZMQXtFUnoirxzN2jxIPXIacXPcFMnrYLpk3EB vzETUwYRfs66RYwgTYtSVDbP2AJMxD5bT4sfihcG0vNA6zATW7S8KOv6VfPPUYA0fkgH qiWQflvctBrVdXRva1/dpZfcN2niU31YibfySL/526J4UGuVgj/YIaDCJto/Bhq5fmAX dlDlewtvuQp9X4D3kUMemedauUB0AC64k1zT0RV0aTCY96qlcWK4oj0OHWpVrCafv7tg vZX/au479GJYpwgvpYhw/6RBCYqIBk5ZvDwI2RO9Dm5Ow85QHRyO0Ohtv2n92+ASva2K 8iSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773304114; x=1773908914; 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=wPddzVJSVtkRrcRhnsRvT/Hf7HSSWz/56c2ZASviYjw=; b=ww23Afi4GajrVho8pXex8nGNy5iSyCjpHfBu656mS+BsGzOqrZJWTHpSoZfeWhi+Vj SmAYa7G4EAZMxBHWfnXoJubDPBwwozxnvsyvfLOiSgXCux4DnivxDl5/WD3G/rAKHuLN EAapHZEhCr9rsmB0g4C/V8/6cADffGHbruiCNdjT0FaGvQOhFj6jbcHvEx/PG44TvRfd aElU81C6W2j5cct8ProRhNLqSMPf5Fgj6kDyuXBMJSzSQ0UppgFP5GCRP0SL/ot3eceQ XQzo0AjXnV8FJnoEmyUOs1Z0X5dyew1w8bW/OdgxnKrgNsNdpzJeoMDZOkAcfwyo7Gv+ 9PYQ== X-Forwarded-Encrypted: i=1; AJvYcCURMox7+ODRFzzX1EHJO5bbOj6qX4yBfpjU7/QWui+1MoFXT/vaS6QoOUxoouUgG//v/WgG2MeJkus=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxNLPKc1pBS9I57YU6lswepe/gM5guDD8lfL6T1/8yrvep/Zsrt xFxyvIZmGI0i4gWcP5XTC/etwf+ujQJ167QgBTIW9dHTWbGDtfzH2AXxqCfScc3PEnY= X-Gm-Gg: ATEYQzwNWYfcDJc2FBdzD9dgZFzVTskUEhKu8eblhCrZ06K/68b47Zz7kleJ1BFabDe GKBxvCaf2ZlXFYRdiMvirz1/JfXN0dd8N91Ep6DKQWlVxYl1gidI4nGJOIei5ytyDL2BIbPL05X 0vgi+3/khwm+P5ga8+d9meR8SOzxwiELVLuVjKj81hRVuhAWPuSax7LOqYUHhvcX5jgbajvYsBy vF06P0pZcnGO//lsSERUu7TktSltnS8mt4tt4S583374IGJEztRzFD6br0Jo0TI/fpDukQhRm3Q JwRF2aWvDN3a1ZlEXye+sMC3j3b0mNtGEYF5bTMaSs4GGRcQ89IkrQkpHOKMbhYik6GIx/QZzVR VDXahaJPlkgG/gfCrLo0F/9XbvurxUxhxTPAPKQ4wD5jLke5EWSy03HF+jGgYV7lF72x1AImR4E 9IhjA= X-Received: by 2002:a5d:5f82:0:b0:439:b5f9:eeba with SMTP id ffacd0b85a97d-439f81f2288mr10505269f8f.3.1773304113877; Thu, 12 Mar 2026 01:28:33 -0700 (PDT) Received: from [127.0.1.1] ([2a04:6f00:1::ee:b:1015]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439fe219c41sm6273780f8f.29.2026.03.12.01.28.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 01:28:33 -0700 (PDT) From: Jun Nie Date: Thu, 12 Mar 2026 16:28:10 +0800 Subject: [PATCH v19 1/4] drm/msm/dpu: Extract plane splitting into a dedicated function MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260312-msm-next-quad-pipe-split-v19-1-4ffa2b06c996@linaro.org> References: <20260312-msm-next-quad-pipe-split-v19-0-4ffa2b06c996@linaro.org> In-Reply-To: <20260312-msm-next-quad-pipe-split-v19-0-4ffa2b06c996@linaro.org> To: Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Rob Clark , Neil Armstrong Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773304094; l=4057; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=RE3qeIJFMCJw+TbGo280DpJf2sHQjKNb5z8KylWcMU4=; b=M8/3vPKx/BLiXkMrb7SgSN2c/ye0Xo7pQ+VC1zKC3aDaybDQ5LizP8tMXUHdtiJ9hhKam2YbG BukVpt3O9A8Da7+yG3rBWBNQ+tM2Pd80pmWYCIOmnafEQ+B+vmf6LU3 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" dpu_plane_atomic_check_nosspp() currently handles both plane validation and plane splitting. For better simplicity and to facilitate future refactoring, move the splitting logic into its own dedicated function. Reviewed-by: Dmitry Baryshkov Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 48 +++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c index 9b7a8b46bfa91..4ed14f203c315 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -821,13 +821,8 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, { int i, ret = 0, min_scale, max_scale; struct dpu_plane *pdpu = to_dpu_plane(plane); - struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base); - u64 max_mdp_clk_rate = kms->perf.max_core_clk_rate; struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe_cfg *pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg; struct drm_rect fb_rect = { 0 }; - uint32_t max_linewidth; min_scale = FRAC_16_16(1, MAX_UPSCALE_RATIO); max_scale = MAX_DOWNSCALE_RATIO << 16; @@ -850,14 +845,6 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, return -EINVAL; } - /* move the assignment here, to ease handling to another pairs later */ - pipe_cfg = &pstate->pipe_cfg[0]; - r_pipe_cfg = &pstate->pipe_cfg[1]; - /* state->src is 16.16, src_rect is not */ - drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); - - pipe_cfg->dst_rect = new_plane_state->dst; - fb_rect.x2 = new_plane_state->fb->width; fb_rect.y2 = new_plane_state->fb->height; @@ -879,6 +866,31 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, if (pstate->layout.plane_pitch[i] > DPU_SSPP_MAX_PITCH_SIZE) return -E2BIG; + pstate->needs_qos_remap = drm_atomic_crtc_needs_modeset(crtc_state); + + return 0; +} + +static int dpu_plane_split(struct drm_plane *plane, + struct drm_plane_state *new_plane_state, + const struct drm_crtc_state *crtc_state) +{ + struct dpu_plane *pdpu = to_dpu_plane(plane); + struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base); + u64 max_mdp_clk_rate = kms->perf.max_core_clk_rate; + struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state); + struct dpu_sw_pipe_cfg *pipe_cfg; + struct dpu_sw_pipe_cfg *r_pipe_cfg; + uint32_t max_linewidth; + + /* move the assignment here, to ease handling to another pairs later */ + pipe_cfg = &pstate->pipe_cfg[0]; + r_pipe_cfg = &pstate->pipe_cfg[1]; + /* state->src is 16.16, src_rect is not */ + drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + + pipe_cfg->dst_rect = new_plane_state->dst; + max_linewidth = pdpu->catalog->caps->max_linewidth; drm_rect_rotate(&pipe_cfg->src_rect, @@ -910,8 +922,6 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, new_plane_state->fb->width, new_plane_state->fb->height, new_plane_state->rotation); - pstate->needs_qos_remap = drm_atomic_crtc_needs_modeset(crtc_state); - return 0; } @@ -1132,6 +1142,10 @@ static int dpu_plane_atomic_check(struct drm_plane *plane, if (!new_plane_state->visible) return 0; + ret = dpu_plane_split(plane, new_plane_state, crtc_state); + if (ret) + return ret; + if (!dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, pipe->sspp, msm_framebuffer_format(new_plane_state->fb), @@ -1180,6 +1194,10 @@ static int dpu_plane_virtual_atomic_check(struct drm_plane *plane, return 0; } + ret = dpu_plane_split(plane, plane_state, crtc_state); + if (ret) + return ret; + /* * Force resource reallocation if the format of FB or src/dst have * changed. We might need to allocate different SSPP or SSPPs for this -- 2.43.0