From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCFBB4690 for ; Fri, 1 Aug 2025 15:07:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060876; cv=none; b=F9cnf5QwlVovfULkom7ksqNvwIKW6YWKw3IKaMjnBGj0GULsuYx/C3zLLALwlHRzRtZo6ztrn8k66+3C+Ge5gVNRBvoCCF6mjliGQ2eTVs1mUKEInoPcVWqP8YyBBxu1BcQgdX0w+UdjkRSQj9W5u87BNE3YkDTtgLLbDGYMeNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060876; c=relaxed/simple; bh=9ht+oIknXVETOXX8rjQohyBmYIl3DM9qFfNv7xyAMHw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dsxAaRfGmynFsemOkjADe4TSKFO3l/NBLQ/6L4YM7pKEFLhFZ8Hfe3UygiP30rXNWsMBNx0dIlt0kS9Jw0luzdwwqseBHUbkd/sZdR3Oi1LTU3rfRKIIKOpeu60LGyWZViKIKYIcaSrfYEAzto6IGVe0y/6Gk+UKzLI/LvLfN98= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=DNddIxIA; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="DNddIxIA" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-76bc68cc9e4so1890561b3a.2 for ; Fri, 01 Aug 2025 08:07:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060874; x=1754665674; 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=6HElflEfsinspJ/DdnkdPizhD2gGfhcyAYKhTylGTXk=; b=DNddIxIAeLXCxhQFJHXAa5jskOYwUWuhHPtwXT00zg3vuHf2/xM3zqC+WXJ5U/9zjy Dj+0MD2a9W499tNPT+LZ6xqETd6EJUC4TIXtYoBJ7thKV/UAVxFTtm1jlzj8TvmS5FzG pDxgRw/nQDAsQxKiaMu4k/lD19WNHEeVnTVt4s7bTM6B7gcQuQa26+vp/D5Qv8ZEhhoz zARzdcKiqkdPJ7jBex93k5woN93BREuSYGWvEW23UvsDOVE9YGxrw6R6TvXmXYqvfyGi uBN0VdPBzwhtznCVrlywTB1vxHn7SlLDdpOVMPYAnOIYPcnbYrye1oC8+3l8aG+TgQjw tknQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060874; x=1754665674; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6HElflEfsinspJ/DdnkdPizhD2gGfhcyAYKhTylGTXk=; b=DrdRZzcmlrs9nUAVjFMZ8imef2Wr+gSOR304Nwhpa3oD44lfAo38YirQl1BT9ct9Yy DzYYhqceYquIO8Iv4ZBgaAxMJz8yvhuWGPvJ/XPMeFp4qMLnJdCkZjqGsk5njCCN5g0G xyAaCQiBVrxDiBSpeGSk93DVA8Y88fQu3RHKEOBFS3ENSfp/8LCxbhI0p5yZO8TJazvu fPKKLTw6VNgqQz/w/bU2QKP/rj3QhV7QGyAUaT/0KWKHdY8nyseO4tvxo20CmBBE+bnq rzlASGMMQw0hjmGsGoq1stJIrL+6QXOJZn1lbYkGKeHUTge6IR2Tfo8tGx32kGnITvLk hHIg== X-Forwarded-Encrypted: i=1; AJvYcCW9WEsDq0WIgWz+6g3GvE9VfFoiCFvqKRDh+lugW03Ucpdl1J8BGD8dQ+QvrpiOkdUQj4X4tplwSs4TFq4=@vger.kernel.org X-Gm-Message-State: AOJu0YwDrrpHQILV87jqyaRXTodiTV4HWxTXq0aTqlcv9/kvx40t5WI0 jFtU/xg6WjMoLB74t/99DjhF4Q4rHO/oKo7ld76rTS6yHzJ0d2z4JOef5X3SK0uaZ+qcWCwd1mC LPVK2sfCJ1Q== X-Gm-Gg: ASbGncvAAODszTwANJzRB58CDMlfnupLhk9iDp4i1qOOa2fdLhQOO38g3nKJr3rPqW/ pl30Px4B4+IUNhcY6tlu0FGkfzLyCb9a4dT6O62xVgrgTSXXKu38TKtKByaaq4xN0QZcrk4yJ6y STyHnH7xJpfRVLpk50kFzL8cHFy+8KqKskIq5JQ3iRzsMPJR++MtaNQBPWiBE0hxrmvWFONDOzi wBXI7KOZJKn2urmR5sGB8z6jOqBZ1Dl6FbnpyqPb/bozxRmvsIqN0XbAX9+dc8SpfKwvSUGRvfy UY1qAVVPwrC9epZRZUKT3IiQ50Ysc5mHXgm4EMzlrSwWyiJImpCc6SxR62bJGinvwvR9BeX66Fn /UhX1etn9w0aEbAF1iA== X-Google-Smtp-Source: AGHT+IE9vqhvZHVeT2mesAM1GoV9wuun+cXk6KfC6cbfEqNe+tQq56rzrKH9YVTcF8lX6urjV3i3kA== X-Received: by 2002:a17:902:f54a:b0:240:72bb:db0b with SMTP id d9443c01a7336-2422a44ca8dmr44336005ad.21.1754060874033; Fri, 01 Aug 2025 08:07:54 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.07.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:07:53 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:25 +0800 Subject: [PATCH v14 01/13] drm/msm: Do not validate SSPP when it is not ready 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-1-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=5074; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=9ht+oIknXVETOXX8rjQohyBmYIl3DM9qFfNv7xyAMHw=; b=txR5i6WizSOLGRs/7BMXzQAU0nKVyjbxHVukZQ/EMqT9W+Nb4Xv1Vm4H3G5WMpW8AO5I1+XCC lUlzaIVaIlbB7DGl8SP4EMx7fDB32CrHU9SclrtBoYhG7+UzYRv+plf X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Current code will validate current plane and previous plane to confirm they can share a SSPP with multi-rect mode. The SSPP is already allocated for previous plane, while current plane is not associated with any SSPP yet. Null pointer is referenced when validating the SSPP of current plane. Skip SSPP validation for current plane. Unable to handle kernel NULL pointer dereference at virtual address 0000000= 000000020 Mem abort info: ESR =3D 0x0000000096000004 EC =3D 0x25: DABT (current EL), IL =3D 32 bits SET =3D 0, FnV =3D 0 EA =3D 0, S1PTW =3D 0 FSC =3D 0x04: level 0 translation fault Data abort info: ISV =3D 0, ISS =3D 0x00000004, ISS2 =3D 0x00000000 CM =3D 0, WnR =3D 0, TnD =3D 0, TagAccess =3D 0 GCS =3D 0, Overlay =3D 0, DirtyBit =3D 0, Xs =3D 0 user pgtable: 4k pages, 48-bit VAs, pgdp=3D0000000888ac3000 [0000000000000020] pgd=3D0000000000000000, p4d=3D0000000000000000 Internal error: Oops: 0000000096000004 [#1] SMP Modules linked in: CPU: 4 UID: 0 PID: 1891 Comm: modetest Tainted: G S 6.15.0= -rc2-g3ee3f6e1202e #335 PREEMPT Tainted: [S]=3DCPU_OUT_OF_SPEC Hardware name: SM8650 EV1 rev1 4slam 2et (DT) pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=3D--) pc : dpu_plane_is_multirect_capable+0x68/0x90 lr : dpu_assign_plane_resources+0x288/0x410 sp : ffff800093dcb770 x29: ffff800093dcb770 x28: 0000000000002000 x27: ffff000817c6c000 x26: ffff000806b46368 x25: ffff0008013f6080 x24: ffff00080cbf4800 x23: ffff000810842680 x22: ffff0008013f1080 x21: ffff00080cc86080 x20: ffff000806b463b0 x19: ffff00080cbf5a00 x18: 00000000ffffffff x17: 707a5f657a696c61 x16: 0000000000000003 x15: 0000000000002200 x14: 00000000ffffffff x13: 00aaaaaa00aaaaaa x12: 0000000000000000 x11: ffff000817c6e2b8 x10: 0000000000000000 x9 : ffff80008106a950 x8 : ffff00080cbf48f4 x7 : 0000000000000000 x6 : 0000000000000000 x5 : 0000000000000000 x4 : 0000000000000438 x3 : 0000000000000438 x2 : ffff800082e245e0 x1 : 0000000000000008 x0 : 0000000000000000 Call trace: dpu_plane_is_multirect_capable+0x68/0x90 (P) dpu_crtc_atomic_check+0x5bc/0x650 drm_atomic_helper_check_planes+0x13c/0x220 drm_atomic_helper_check+0x58/0xb8 msm_atomic_check+0xd8/0xf0 drm_atomic_check_only+0x4a8/0x968 drm_atomic_commit+0x50/0xd8 drm_atomic_helper_update_plane+0x140/0x188 __setplane_atomic+0xfc/0x148 drm_mode_setplane+0x164/0x378 drm_ioctl_kernel+0xc0/0x140 drm_ioctl+0x20c/0x500 __arm64_sys_ioctl+0xbc/0xf8 invoke_syscall+0x50/0x120 el0_svc_common.constprop.0+0x48/0xf8 do_el0_svc+0x28/0x40 el0_svc+0x30/0xd0 el0t_64_sync_handler+0x144/0x168 el0t_64_sync+0x198/0x1a0 Code: b9402021 370fffc1 f9401441 3707ff81 (f94010a1) ---[ end trace 0000000000000000 ]--- Fixes: 3ed12a3664b36 ("drm/msm/dpu: allow sharing SSPP between planes") Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 01171c535a27c8983aab6450d6f7a4316ae9c4ee..4371c8e1602126bdd0860c5de26= 3db3dd2d3291a 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -910,7 +910,8 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, =20 static int dpu_plane_is_multirect_capable(struct dpu_hw_sspp *sspp, struct dpu_sw_pipe_cfg *pipe_cfg, - const struct msm_format *fmt) + const struct msm_format *fmt, + bool validate_sspp) { if (drm_rect_width(&pipe_cfg->src_rect) !=3D drm_rect_width(&pipe_cfg->ds= t_rect) || drm_rect_height(&pipe_cfg->src_rect) !=3D drm_rect_height(&pipe_cfg->= dst_rect)) @@ -922,6 +923,9 @@ static int dpu_plane_is_multirect_capable(struct dpu_hw= _sspp *sspp, if (MSM_FORMAT_IS_YUV(fmt)) return false; =20 + if (!validate_sspp) + return true; + if (!test_bit(DPU_SSPP_SMART_DMA_V1, &sspp->cap->features) && !test_bit(DPU_SSPP_SMART_DMA_V2, &sspp->cap->features)) return false; @@ -945,7 +949,7 @@ static int dpu_plane_is_multirect_parallel_capable(stru= ct dpu_hw_sspp *sspp, const struct msm_format *fmt, uint32_t max_linewidth) { - return dpu_plane_is_multirect_capable(sspp, pipe_cfg, fmt) && + return dpu_plane_is_multirect_capable(sspp, pipe_cfg, fmt, true) && dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth); } =20 @@ -1028,8 +1032,9 @@ static int dpu_plane_try_multirect_shared(struct dpu_= plane_state *pstate, prev_pipe->multirect_mode !=3D DPU_SSPP_MULTIRECT_NONE) return false; =20 - if (!dpu_plane_is_multirect_capable(pipe->sspp, pipe_cfg, fmt) || - !dpu_plane_is_multirect_capable(prev_pipe->sspp, prev_pipe_cfg, prev_= fmt)) + /* Do not validate SSPP of current plane when it is not ready */ + if (!dpu_plane_is_multirect_capable(pipe->sspp, pipe_cfg, fmt, false) || + !dpu_plane_is_multirect_capable(prev_pipe->sspp, prev_pipe_cfg, prev_= fmt, true)) return false; =20 if (MSM_FORMAT_IS_UBWC(fmt)) --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8D084690 for ; Fri, 1 Aug 2025 15:08:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060882; cv=none; b=hFRbBRuwTxUFs/4sWiw8G2y8+PIh5Vf0Tz8eiw0gTRIX29tJ04lWcVMJ8d47DcBswpE3T8qI5ZGyMGdrt010ZEM3nRA+e17Rv3n66HjEq3+DZZqkRQz8UFEpnLQdDxKGIh6o5dEEVoof+llDB0rR4hTWAxdep9N24kFIT2+LCEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060882; c=relaxed/simple; bh=xSbmnUPPIXthlmIB0KVW45Mr6GQu0WXNqCZGA6y0yZ0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nU2JB7rhnFTxqxQQ/zNO15yhxdeed8q3++h+qdTbdH/fNy7q1iaxoPtvD0Wnc+FdqcTWADH02N1DYxQDtp+9Vcxzf1cti5ETKW/oLQv0FgQsbBOWy7KdhIh6mqFd2E4AY3yIv3VfGz8A9jXdXQi30KCe9PHBdVFjiIGumC3DIh8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=w/jgZmIG; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="w/jgZmIG" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2403df11a2aso12937845ad.0 for ; Fri, 01 Aug 2025 08:08:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060880; x=1754665680; 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=M7fMxwobhtU9Fs42SW34CXR4Ei37EeIi3/yq4e+ZyyI=; b=w/jgZmIGM/72X977g68k+tvAro8SfMcjtb83LYbnXdolyxAWmL41CSywqaEG9rB5C7 zAqs2tHkcQQWqLQPm/X0N0ci/3HplIP4MwbVwi3TCPVySeYQQN2t8ouGgpyHEm6qnBIn wRhW9ngc60X1HiWMTq6L2otBoceFyeMYNDLSN79YkWDULHZD7lYv+g+JTKXA6PIC4i8u LL6ts3HA38xCP0s76jYA1uk+F9hyTILqlqJEEnoTkPOPY2Krb99WhAIJJQN7pVQ1u7FA z7nbn4Ccqt5ftWVajv0+gmqbAYYZQ8gp7aEXf+Ow7z/NXDNnGjI+QzeEGkdvU0WscVyi puXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060880; x=1754665680; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M7fMxwobhtU9Fs42SW34CXR4Ei37EeIi3/yq4e+ZyyI=; b=I4uWjvc8Afvq4RC2UWjVJ8I4tW6oG+hrUJJMl4aWrC5IPFkFgbDSlEzODfrjkY21sv znEv8Onmsh5Q/r5GrG5MONFGcLnV6jcPngcT46aeJFGYcoSJyMnt1gSGDLodfYUrDpxG cNpUHP7gdTrgkB4PJZtV02c6CzD4foUkEwYw07wbFFtpB1XWzOFYvQwmnmH418tycTt4 tHMlqlRwp5iLO6YjYs1M3tSej8HToJPKrrsa904DSrRzCWlspKRTN0J3m8F2P6TdVyAJ csRxR1uEdXnUG+3wnZb4exatv6Wp5FLUk1oiQzqMyl+EkBOK1ZRX05YEi5H1cBhBI5Vs Pyww== X-Forwarded-Encrypted: i=1; AJvYcCUpC6xCQbc4y8SISYBiBeF9QmhHIktCOeM+OOXLTv+zp6iwcDLe8xeDk53uSAwEZ1i1CC8sGRjLqLZbSOU=@vger.kernel.org X-Gm-Message-State: AOJu0YwzRCTaO8Ftpao/uCH60H/XSuZ2AZD3KMIDOvygu1GTPELvZpLG wy0CXD24R/I1fzuG2vmi+H5V4j9E+YwfHp2bfl0/h4/hRdkB1c0twwQyEYiFHVP3pOs= X-Gm-Gg: ASbGnctAqsW/J0z4kDTKu2MQJhsPBnt6+8g3aNgwJ8KwzvdWBlyl1Xy2W8TLUnRKSMZ h34U3kXkGlF7omyMcSX03hcdg+q5MkJmYfnVdhwiD1MzoOEQRCpP/dRAO675SchboJW8/urd6Ug uzbGV/p5WedYLtupD/COFbfhP/2PftRduioq0a6v2e7tnv4QDConaTMBXn/JCuXg99tbGz67SP/ pG3h4bpJXAOSIXQGSHruvWzHpgjDF/HptMNTpZy1GRtwkuNilSA0d8+2ZVygcbcnR9459s82UDM ha/+IL3Ukyc6YdXLEo2dCP33lFtLQh+SrMu5IQYh+uPbgtj9pHCJJo6HOZBTX8hcdoqFdPMylhF +RvZtYpApZ+18DUbpxg== X-Google-Smtp-Source: AGHT+IH3qH1C2C/DUvH+RVcCZ2KshGNz0QCudBxgmDLP9cSlPWRBKjVKTxVWslYj7VJGc7sAdPEqKQ== X-Received: by 2002:a17:903:2351:b0:234:f580:a11 with SMTP id d9443c01a7336-2422a44b2efmr47017025ad.19.1754060880024; Fri, 01 Aug 2025 08:08:00 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:07:59 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:26 +0800 Subject: [PATCH v14 02/13] drm/msm/dpu: polish log for resource allocation 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-2-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=2319; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=xSbmnUPPIXthlmIB0KVW45Mr6GQu0WXNqCZGA6y0yZ0=; b=uf55jKKnEF2lP7JtE+vnAiUK5b0V6GRdSs6zOt8Wg4FWSYO07vZYpVojDvT59dzvoc6lrnj5W 14tQZKfsvBtD+dC47ohiCQYc9/Y7qa6qnvsoojWR2ih1yZn1HVbdN8/ X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= It is more likely that resource allocation may fail in complex usage case, such as quad-pipe case, than existing usage cases. A resource type ID is printed on failure in the current implementation, but the raw ID number is not explicit enough to help easily understand which resource caused the failure, so add a table to match the type ID to an human readable resource name and use it in the error print. Signed-off-by: Jun Nie Reviewed-by: Jessica Zhang Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index 25382120cb1a4f2b68b0c6573371f75fb8d489ea..2c77c74fac0fda649da8ce19b7b= 3c6cb32b9535c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -865,6 +865,21 @@ void dpu_rm_release_all_sspp(struct dpu_global_state *= global_state, ARRAY_SIZE(global_state->sspp_to_crtc_id), crtc_id); } =20 +static char *dpu_hw_blk_type_name[] =3D { + [DPU_HW_BLK_TOP] =3D "TOP", + [DPU_HW_BLK_SSPP] =3D "SSPP", + [DPU_HW_BLK_LM] =3D "LM", + [DPU_HW_BLK_CTL] =3D "CTL", + [DPU_HW_BLK_PINGPONG] =3D "pingpong", + [DPU_HW_BLK_INTF] =3D "INTF", + [DPU_HW_BLK_WB] =3D "WB", + [DPU_HW_BLK_DSPP] =3D "DSPP", + [DPU_HW_BLK_MERGE_3D] =3D "merge_3d", + [DPU_HW_BLK_DSC] =3D "DSC", + [DPU_HW_BLK_CDM] =3D "CDM", + [DPU_HW_BLK_MAX] =3D "unknown", +}; + /** * dpu_rm_get_assigned_resources - Get hw resources of the given type that= are * assigned to this encoder @@ -946,13 +961,13 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, } =20 if (num_blks =3D=3D blks_size) { - DPU_ERROR("More than %d resources assigned to crtc %d\n", - blks_size, crtc_id); + DPU_ERROR("More than %d %s assigned to crtc %d\n", + blks_size, dpu_hw_blk_type_name[type], crtc_id); break; } if (!hw_blks[i]) { - DPU_ERROR("Allocated resource %d unavailable to assign to crtc %d\n", - type, crtc_id); + DPU_ERROR("%s unavailable to assign to crtc %d\n", + dpu_hw_blk_type_name[type], crtc_id); break; } blks[num_blks++] =3D hw_blks[i]; --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EECB02571AA for ; Fri, 1 Aug 2025 15:08:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060888; cv=none; b=a4l75eNxsdN6W9lGb6o2Mw0GM7QiEKy9J9MrNQ2VxNX5TRsZy1WxHOaHUCuFYnBXFj4ezIM8cnagjgcVfeLAHm1jzo6Gzfe0G1fBKHXzjEW0wTJDHxv0S2q/jFiYKWcmLZopIwnxCGOm7sNhzn+4uIq7Q0ndwmceWbQ6UF2lydI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060888; c=relaxed/simple; bh=KP97mkf4mFx6Hynpv+UvTtqAjJLhCHcsa39rmhW+j40=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CQqstWENWSvpX+ShvsdUccmZ5ZhUKqL/DIO+RRL1Ih/zvYi7wENHs1owIACGqGudi1gVpWuMKEldr3bPjMNJK40lkbR3f1tpQkcpac/DdfdSGZs3K0danDd9EDUE8k3kM0cTEbaCTzyzJ6RRAQtqHeK/VOc8aTCMPHUVo8UiQeM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=bc2xHQd6; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="bc2xHQd6" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-24014cd385bso12751605ad.0 for ; Fri, 01 Aug 2025 08:08:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060885; x=1754665685; 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=rf99YwbE+zk9ZgJ2ORD0W2vahwafwsW/a1Bh6B8t8K0=; b=bc2xHQd6D2HGLfMPkf0XPeDJyc8xtcIMI1yERSnoAnuJZMRDnhtCbywVLKNn+UjxcY ZVMs0tWCP5OT2mlFrkn46rYstCV+8Hmdr8b81HLdw5L72j1G7K4fZ/nir0NlKtCWjt7f o6JWrFS5/FWYNrwsf00DXWAPZ0WzgEjrSXE0qTyRf2CIrEfzKLPigMmDgtG1h+CEPLB+ 8xvLWQdQUNfmhoMTKObJc/ImvjWFPydypF25zorEFUQSJLEZAiCKlpAmS18xx9CPCOiQ kXI6mFaxGsxHJo+HDJjPXZ46gXtF97XLyBpI8jrIAZU1Ic4KN2+fomZixYuRV/HubJ1n Tnzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060885; x=1754665685; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rf99YwbE+zk9ZgJ2ORD0W2vahwafwsW/a1Bh6B8t8K0=; b=SAwrGdtHQwWKromMp1KeMM4ooAad++dshgNN0HNLqdAO069g6q0bRj2jBphtfzGV3F K8g0wHE+qPxohoUbJrXewc3VS397nJfHMBLM6DTMuuWHniusecPqhHDxBrh4PhUNWO/7 I94UpkDJ7H7ZKEtxshlxKK7+G/aYMwZHg6+a2lod4iB0LFytgSedAc/3ugvKR892xYxH jREPmH2JwDWR3Cm9o+8AoIsxjllFiT8XnWKx2RWhkPBI+LSXWFy9zRFqzvZ0EGQPFvvl +2i4tMN83PgP+KfumcPcT1EBVse9RRxw7hPMx4PEMN5WDWD67g2A+iihl7iRhpfR+nDK fI7A== X-Forwarded-Encrypted: i=1; AJvYcCXMLZLEYMX2w6OGS3REDpMUbvpGDIURk2SS8eGvuDA4l/wYShLfPxjmQF6Z4b6UvotKrINYVqeLCaQ4vh0=@vger.kernel.org X-Gm-Message-State: AOJu0YyJyU4SAKGZFreVmwZOqPUNmN4iELdaiq2SJvpJz3pDOe4xxpL1 /Ryh5szWK+WqELiwbHQaosId/bPIugnNjo9ZumKGdQW1+5B3xXSNtThUdzsotOwoKPw= X-Gm-Gg: ASbGncvTMtQIP7Q1U78z75QAe6oeqhT0OJ0xh9P5+E/556OEgl95OY2752x2qw7NKdw Jjjwt0iC1FOVEFF+9TtMPJ43HFBPBqDtlhVe5BQY2UcjbBxaRa4S3jB89+bVdKp9cAX1GYGfFif Tu3dUv3/rMilPOTv3gigk2OoyNikrmhj1jjBuTlTzmS/WRUDK+xjWddBmpx+y6AStSVU2IBnvoS 9/KsiX8Fp/nv54DP0rRuxZ+s+7e6xDEslzO1/R2PuKY7/j7xVvhLZFYypUJOJrEyUzeLAliYKOh QdGcVuNBPpYCCSmQd4+SVcdYgrZF0Q9X0sDl6wXUc4aXI6EAl+g6QpzAB2+UZUNuwIqsFUmdLxF ZOLEQwS5rEdL4ecDitA== X-Google-Smtp-Source: AGHT+IGiwYm32MVhjAi/R8SAhYPDtoGfgkZqyTUOInwqu82Q9+Cr13JsjqnX0HH3RV2AGlVvh596rA== X-Received: by 2002:a17:902:d2cd:b0:223:619e:71da with SMTP id d9443c01a7336-24096bb3420mr176856955ad.49.1754060885202; Fri, 01 Aug 2025 08:08:05 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:04 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:27 +0800 Subject: [PATCH v14 03/13] drm/msm/dpu: decide right side per last bit 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-3-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=1985; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=KP97mkf4mFx6Hynpv+UvTtqAjJLhCHcsa39rmhW+j40=; b=pF1qZrZf2S+wUGQF/vCeb1xQMwFfn3f+VOwpEVhumT1JmRUWshKxSjhwjlppjnAQvIBf1Y7p3 1qpy5d8fWD1BpBpuiMdy9fhYKpn68tPwOZpZ/FxZvmQCDofhsmcoE1N X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, only one pair of mixers is supported, so a non-zero counter value is sufficient to identify the correct mixer within that pair. However, future implementations may involve multiple mixer pairs. With the current implementation, all mixers within the second pair would be incorrectly selected as right mixer. To correctly select the mixer within a pair, test the least significant bit of the counter. If the least significant bit is not set, select the mixer as left one; otherwise, select the mixer as right one for all pairs. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index d4b545448d74657aafc96e9042c7756654b4f0e7..9a40492e5aa961f7180ba4ac6c8= 6e06fcccef8c2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -377,11 +377,10 @@ static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc= _mixer *mixer, static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc) { struct dpu_crtc_state *crtc_state; - int lm_idx, lm_horiz_position; + int lm_idx; =20 crtc_state =3D to_dpu_crtc_state(crtc->state); =20 - lm_horiz_position =3D 0; for (lm_idx =3D 0; lm_idx < crtc_state->num_mixers; lm_idx++) { const struct drm_rect *lm_roi =3D &crtc_state->lm_bounds[lm_idx]; struct dpu_hw_mixer *hw_lm =3D crtc_state->mixers[lm_idx].hw_lm; @@ -392,7 +391,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_= crtc *crtc) =20 cfg.out_width =3D drm_rect_width(lm_roi); cfg.out_height =3D drm_rect_height(lm_roi); - cfg.right_mixer =3D lm_horiz_position++; + cfg.right_mixer =3D lm_idx & 0x1; cfg.flags =3D 0; hw_lm->ops.setup_mixer_out(hw_lm, &cfg); } --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 895E2271A6F for ; Fri, 1 Aug 2025 15:08:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060893; cv=none; b=ZYxVTo0NIX/ruaFJ6EZgpBPuYZLUF1KrX77iLf+X7WfPhkMQEnHWCgtAdv/d+Ug7JSmwd4U12NCYvfUs3+5noQU9kzSJ9nsxuulw+tBxIbyD9nT5zEqajebR5nxNtcogAw02ScwiNTnDwkeME3KGeOJBrg+QtpNfj1CwSIoZOb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060893; c=relaxed/simple; bh=OO2Z7mIWJju/0AAWi0QFQrEeFkD+xuMhO5TmIsG9bFo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JNCcdTGr2UuqxvIWjrwK/jb8IGZwE0cPhOlzyVKz26sl2V+U2+pkiwXfuPLEuxYWOkdQ5y9cpuiLA+PXDKa1lshJNA2wzQ9+3bAB8fsaVyBf83QaUtn1RrD2oVW4ZW/q0rj4MaGbNEYsEhOPIf8urPeKg4TmyMunoSCBZs2X38g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QLhWYn7c; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QLhWYn7c" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2406fe901c4so13234465ad.1 for ; Fri, 01 Aug 2025 08:08:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060891; x=1754665691; 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=XDSLLULuQro4tZ+C6kFbdQGbu24iHgqnLikNbErS/QE=; b=QLhWYn7co9gs0vvPVRm9pFeJsuLHmNIdxeDKqG3DPnzT+Ogqp/826Homy9yZO8Gj1+ oerLQGKf1ruq5KQmVS6ZO5k2U2KS3fupQoWonzv0gPXyeGwNL03JQNJN3nXXTcpRkhQq Qa4xFRMetKeJIki27PEobrRewrG3hm0yJv/Oa8bG15zhvs+gXMUzuGQEOLEcdBflXDrm uV2ijDoCvEGEEAmkKJlgRCMyHvMumE+QoCB+Yn7KQ7iFKSbb3hiCdypv2U7qlsE+ddct wNTiGc9vFOEdkcf5ytiW0sYeIdQln3E+TSv7d3LO+1sfVhWBD7Q10RpQD1fdAZuk40F2 eyGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060891; x=1754665691; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XDSLLULuQro4tZ+C6kFbdQGbu24iHgqnLikNbErS/QE=; b=Cy9QEJHvJQzVjkmm/bQGuFxhm8+4gmZkMl1SR9Lp8F1FdgZhp1gFlY0029Y0ZoQAWS D7tTsc58P/I6CMYSHnYwPE1GIIxz37eXiAMxge4pH8KILcMeqbRqJAALbTWWcwaFH/RK BUxf05oQ+L1fPF050GqKo6yi3IvgGUDpGcaEfMX+GYyoVQchF1rBkWoQhla+nfw7DnPB KaM8W4Dhyhxb5gfxqD+WBVensfrDSxY+fePXeaoJR9t930oT3TmQAg/hBq234gF0yoUH wbMvF6Vzj5EahExCqYD6Sj1PpnmjrFMCD3ZSZiR5t+I7VbAPAx3EvdiZUQIY124UoMvx YzTQ== X-Forwarded-Encrypted: i=1; AJvYcCXdMUShVtDWG+2/NAReXKI9jxJYmk5H/e/rdhU9/wFbD5F34r1gbw4R7k64xy7QhxTi6I6y5Qi2WsBlVC4=@vger.kernel.org X-Gm-Message-State: AOJu0YyupE0DuepaMpRG4y3I65YQ35friN2/bQUL+6tyh86Rg5BsEae3 FBLF5sozr4RaozTrVsKvmwKumx4NOt8L7abwuvX12GstnQjQfgVZVv1aAeVtG5Rjbp0= X-Gm-Gg: ASbGnctTDImMCsO23elnAPjlkwFFVso62ztW2fKRHQiwBVfCd3Lt1JhqUpGtBDEE3T2 DwCQoLJfZM3y6BegmKC3J1VLoa8bf3Gi9QzzF9DqvL+bBHyp8rM671txNUPyXMI5+EswO+6XbfJ lW64O8miIVW+ZtF51dDzauxhM/olZdJKitVFs0+UahFsK4m23IpMX+REkTEpZIl8c28ARv8bjss 3SxTqhsEcN0uzH0Ile7J4WwDyMudhg7BRgWlDe9V7jVKTdCUt0i1PrAdDRxlwKwBPg7BR2VbYpv AeXqw+dzVnKNjPZfd4y1mVtR7SJIR/9RgeYiIFU2yu5EFjJjdYKIs+IR3KfsoCaEfL/t7hlpgNL H8TVjohsRTD9uUbwScw== X-Google-Smtp-Source: AGHT+IFayGqBx8hW294QxMt2k98HLw7+m+LZMmht2Y8J5kauLQORFEs1yvXOy9+cvVSKakLHEQx1Ag== X-Received: by 2002:a17:902:db11:b0:23d:dd04:28e2 with SMTP id d9443c01a7336-2422a6b1521mr43892835ad.35.1754060890630; Fri, 01 Aug 2025 08:08:10 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:10 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:28 +0800 Subject: [PATCH v14 04/13] drm/msm/dpu: fix mixer number counter on allocation 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-4-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=1366; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=OO2Z7mIWJju/0AAWi0QFQrEeFkD+xuMhO5TmIsG9bFo=; b=DETqfYzbBAU3+ZrJj8OiSBo60uswBpiJ+Fiol09/aeqJuM42nOixyKlbhgbx+R/Qv/ErHOuBJ OZ4elEmcauaA0/mjq4r+cq1buvaWss0mroaRogcSvaeaex/i2K5+B0T X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Current code only supports usage cases with one pair of mixers at most. To support quad-pipe usage case, two pairs of mixers need to be reserved. The lm_count for all pairs is cleared if a peer allocation fails in current implementation. Reset the current lm_count to an even number instead of completely clearing it. This prevents all pairs from being cleared in cases where multiple LM pairs are needed. Signed-off-by: Jun Nie Reviewed-by: Jessica Zhang Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index 2c77c74fac0fda649da8ce19b7b3c6cb32b9535c..3f344322b7f214d0050986e675b= 32522f8eb0ba7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -374,7 +374,11 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, if (!rm->mixer_blks[i]) continue; =20 - lm_count =3D 0; + /* + * Reset lm_count to an even index. This will drop the previous + * primary mixer if failed to find its peer. + */ + lm_count &=3D ~1; lm_idx[lm_count] =3D i; =20 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D1EF269AFB for ; Fri, 1 Aug 2025 15:08:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060898; cv=none; b=sME30wxou6JLMvlmTCGdQDPfTQdrddZseR9Gbj2Scq1ca3MC4NQjLr0J3hhQIdMMS2DVW0/mqTtjRaOipUdqIEsG5vIYeiq1dEl+40mG0XHoWKwY6QWb9LR1uX596IaUf2hlycDSKgzSqEYwvAMnIZbjSaPLAYah9BRWA+arfnw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060898; c=relaxed/simple; bh=flbnou7XSx1ETCmAxdlZnvB3+bqdNxru9LUU48yIE7A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k28fjYvR8363zq77uGwCRNG+JdktSof5blqVo3TyJF5bPA/2sPjjp+quui/I8gq09+ce6B9YUrdpsqbQMId9VjqtRpxQ+0l7nvMsxvC31fyvDgel0dIdpuzlOB15tlxKhvmqb2MKm/tlD6JR9jJVswh9pFpQkXh0nYBfQWJjDnw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=iUQW0Kf6; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="iUQW0Kf6" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2406fe901fcso9889595ad.3 for ; Fri, 01 Aug 2025 08:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060896; x=1754665696; 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=gZKppSrZ04BhPYsPEMDVl7eb2YZ+sFy//28ARL2GCmc=; b=iUQW0Kf6gHdTiuX3KSi0Ut1jxx2T26Imb34Q5ju3lvlFCWkqbhc/qeUXKNTnGCTjvz l2rkI9WXoyl1/qaKfhhU07UI+OWwsl1yp6eWDb7mEOzabw4QeL9ESHsAwF1NRVTlyvt0 UvLrM3VaJSia4MrdVLtIi0spR8/kk8r5oI9jirRbmuNyoYpVzm0kq4MRjqTbUCszptVw SqJVNPaVLU5+K1mGDQ7/zBwjuUgRSvmqfLcZL93Bc6TkhFmeqDlMaKYGStgmv0sa3PdW wR97Z8sN/iw6zmYUwREwdNZcl754bsZskF8XfKb3mw/XFWtaemJVUrCOdxU/zhsNrkGK uWjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060896; x=1754665696; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gZKppSrZ04BhPYsPEMDVl7eb2YZ+sFy//28ARL2GCmc=; b=fpPCdPYjr2dfQuFDlcw8CtVINQ3gHSnOqNr4djEKUOnwaxxkGwr9SsKjqQLRPm/2c5 YCuqEiYfjKbS+iLk971G8tV3R0AkYhNRBI08td1T2MDYFZek1aKIlWiVeesA1Tugtfd7 zZDod8vjCCj8r8yX+3Ys30JJW+I8qvRhqb99sus7Kt3B5/1AqyuSCGEJ1CUB+Ny5v/9L GgMMjDJ0btxbnK0IGFoqJV5S66ADgFXiLpCpyr8vLbyWTCnEF43nvrguNFjPQJCdzzoq k38Hs6VDorLRg8S+qFTYD6ySl/iPnzYtiN6YPuaRtlXqHmCbq9+U7bzfmQFWu/Bag+q5 5bTg== X-Forwarded-Encrypted: i=1; AJvYcCUusCnKzwc06ZCmGvZPdDUDB9i9RPiT9NrS4dOPfq6Nf3eg+yB99U6obs43ZxTddw4TQTqo/2FJxmOTrlg=@vger.kernel.org X-Gm-Message-State: AOJu0YxlJZu8cM5GijJohvw0FR9ti3+EYcGel9oza477/tOdc02+YYmf 4PyDN2e2Qvv//lkpoZriGaHBwd6oj6BPMQghvOSMLMsownXtUr9/+cqe8SHt1BP6kyE= X-Gm-Gg: ASbGncukjoQYu0Lo1Pda2k+8BRgKVHzZGVXsw7YAW2hzsZQ8ospZZjr0cP1FMjEekpt 4SjuElmJoS85rtVwALw+52FPiJuzhad/YOdk7ryyVa1BStIPXvfaXII36uKkXuf7GNjZ0WRNY1c /M3IGl4Le0+alLpn3T0HWJm529LdpE9ewd9ydt8gDlGSoIFzQcx5JdpScWrNB6SUoC+CL2PFq+X zCYX7Ac3/Pesh8Csz+Eoj4xqRPRpp2D7sf3utueVYmiI7fXZ7+7z/NFx9F3Qmw5zEOQasOW1dRM h5XEcx4AhIzj1N4XkxCu5nFxxEzFh/KM5nG6PukyPfxPxGsSIaDzG5m2og1XVrhk75D8DaB1r5/ WFfCJSe5+FkfBjL7bJVB7krWolDp3 X-Google-Smtp-Source: AGHT+IHudz1t4fJf3sr8khfrKOYSdpVB9IVdyhQgqd2MsVqkvh+5HSblDsMSI50Mcf3k+J4yGJSyHQ== X-Received: by 2002:a17:902:e78e:b0:240:52c8:2555 with SMTP id d9443c01a7336-24096b3f541mr149384245ad.42.1754060896367; Fri, 01 Aug 2025 08:08:16 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:16 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:29 +0800 Subject: [PATCH v14 05/13] drm/msm/dpu: bind correct pingpong for quad pipe 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-5-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=1809; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=flbnou7XSx1ETCmAxdlZnvB3+bqdNxru9LUU48yIE7A=; b=piKOAwo5yTEkcr2BKcOKNaF1Sf+XaCU5mD8ANyKGtHNopaY0lKYvdcYkzc6Ljvv8AJiJv1oFF 3tJ60/0cxGuAYLKcYSUzmhTMvdls+3vKwYdvvosKNc6928YAsDKk9Hv X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= There are 2 interfaces and 4 pingpong in quad pipe. Map the 2nd interface to 3rd PP instead of the 2nd PP. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index b476d3c97ac9b6b4c5ca2963aa4a5805d57c8d7e..2d88d9129ec787df6dac70e6f44= 88ab77c6aeeed 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1158,7 +1158,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct d= rm_encoder *drm_enc, struct dpu_hw_blk *hw_ctl[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_cwb[MAX_CHANNELS_PER_ENC]; - int num_ctl, num_pp, num_dsc; + int num_ctl, num_pp, num_dsc, num_pp_per_intf; int num_cwb =3D 0; bool is_cwb_encoder; unsigned int dsc_mask =3D 0; @@ -1237,10 +1237,16 @@ static void dpu_encoder_virt_atomic_mode_set(struct= drm_encoder *drm_enc, dpu_enc->cur_master->hw_cdm =3D hw_cdm ? to_dpu_hw_cdm(hw_cdm) : NULL; } =20 + /* + * There may be 4 PP and 2 INTF for quad pipe case, so INTF is not + * mapped to PP 1:1. Let's calculate the stride with pipe/INTF + */ + num_pp_per_intf =3D num_pp / dpu_enc->num_phys_encs; + for (i =3D 0; i < dpu_enc->num_phys_encs; i++) { struct dpu_encoder_phys *phys =3D dpu_enc->phys_encs[i]; =20 - phys->hw_pp =3D dpu_enc->hw_pp[i]; + phys->hw_pp =3D dpu_enc->hw_pp[num_pp_per_intf * i]; if (!phys->hw_pp) { DPU_ERROR_ENC(dpu_enc, "no pp block assigned at idx: %d\n", i); --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8083E26D4DE for ; Fri, 1 Aug 2025 15:08:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060907; cv=none; b=Jtoabu2bmi6rdXNRi5R3hRP0nAWJDx1C7L1jEvrYe866J+RUjC8LvsQJBIP6CS4gQtDylpxIN4AmxqBA9tDuAKU+aOnbrY2KS+cSxD5iJKy2CrbFB59i3Z1xHukL46zoev3JRqZfjhtROJuOYcjbLH6ywsBMI4lw+xOx0nucBTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060907; c=relaxed/simple; bh=3U0bowJZD1UHEussz5PlKOBS3bAoQPdxBHy2P4TuJ5A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rKO5ar8o6I5e5QgqPxEK/5lhk1VpWx555p9aViYcnCE61M1xSkmFIDm5iGAJOT5gD8Tmzvl1adEeVBlq0evzPnl430PJ4KN1s7g0puhs3Lu6WrBJzkHIZ5SfL6lYTVdQIbOrxqEDF0EJ2FfEnlYhIRZhAmHwWbBOUe03jewXynM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=PIjphZkN; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="PIjphZkN" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b421b70f986so1911785a12.1 for ; Fri, 01 Aug 2025 08:08:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060905; x=1754665705; 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=IKfocSyum6c+ZXGva6cBv+Qtfqbf1qkUCIjZpV0tOYg=; b=PIjphZkNp4eZ3DXXdxZnn92guYHcTP25oH4NBY2TdxBGueCPNtO8Nj3+GRS+gvCeAI eMP48MozRBRHd7cMWZxE8RUMf5nD5rm9g3TfTux4tXZPEh5BGFT/RFWvfllNpmd4DgI0 0wQKKhJr86gdM80Y9LUPg9wlSYWxBNwBN/bYpjwZ6ZAVbCv5zcRbRgNAsXNyHbjhCbJq HGOvlzd9kn5vBcxfQTHyWbVoAB15K1MbT6AaOL9z3McCD6hP6D6P4cvzTDzpkgKxyoAb lErtq3swXXrdrl/OKxo6aarPwpxRubsLLhJMgMn896Gma5AF47dnZMhggfIeyjIXnbfw OFIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060905; x=1754665705; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IKfocSyum6c+ZXGva6cBv+Qtfqbf1qkUCIjZpV0tOYg=; b=qSqeHE7q1jZ9v4OYvY/IjLpukO4AOTe+UzWacyWhg3SUJGQ3qct5fVHciZtswGRkLh 26Cc9e3Q0t9tdjvUsRuvRW19nQwX5cte1+fzEg6G9hjd3YW5YV6KZexjlph0smoIrRB+ DX0p1ariqClkSdTqaLSUlgk0IR+B3YVoGLceT1iHJftVHwKpFvRbF3/SoRbo19ECNwOz 7Dd9m2wSSzhQmgJ1Ig7/FNZ3SQkS64ka5XSEipEMpD82URh1B118LYWf/cgH6Prrw4nV 4boAlHZqvDUN25sfWDgdSErsDBNwv07ydmz+tiyF1FwlxabZ1X7BEoznHKAvvM/va6jr msfQ== X-Forwarded-Encrypted: i=1; AJvYcCVxVswaG0zwVghRBcoUcIs2bypEg9U6AAbUpBVdrHTAD6GM+/qcIUlgTZNDBL2LAjP7Kz+uLr6PylsT3gQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxzv36TfMU+8OW3Xd1nLHUFHKAdl/I4QeyBHCdi6JNLP7bgL2l3 jKQxZFmfv09KNYHMZewpxaCLy1/4C6Zgovc0P72Cus6kMdxMblWnkrH9rNIdNPigWzU= X-Gm-Gg: ASbGnct7rVzuKd7zu7BuhBpQzC/2l1M25XpjGLeKh7EXtURLNl8Tha6t3WszWionS4g Jk2Gge4/B2qra5ByT7sxdfscPq9ShyUF6h0EiuGjB0ZN7Sf3a1BLPeI9JSGvtE8VRqOY84mezQ0 up5RpZ81L4lYg3S2qzazQ39bZ0LdlNxXnXVmZdTzGgD5F44vSDC9nFnc+shii3FVHW3S4GKYsFe uod/MVeY4nVvWnsLg56TF5zGvEcc+1SaRW6vdPzDyA7VdX77DjT/TvvIDVNJJVyQA3Kl4uSXoWO bqywWycwdlB3iiJN3KJFNuNDyZtlYo7ldtpD+oyr4nhCyfLxZZeZplgn5Ovlfp6hlzSdGB8wRCx 780LW6gFs7oYvS8h5OA== X-Google-Smtp-Source: AGHT+IH3rFRxJbNEGoIdlXfKI3ngk9xo4zAbircoTLi1exmZLBTo2nsmpqb/YUonhRbOCVX2aImZLw== X-Received: by 2002:a17:902:8604:b0:240:7fb:cb05 with SMTP id d9443c01a7336-24096a4735emr123884225ad.10.1754060904805; Fri, 01 Aug 2025 08:08:24 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:24 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:30 +0800 Subject: [PATCH v14 06/13] drm/msm/dpu: Add pipe as trace argument 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-6-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=2487; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=3U0bowJZD1UHEussz5PlKOBS3bAoQPdxBHy2P4TuJ5A=; b=PumtsqWG7lAhrbJemwLfsU2Y/RTvVTcmMraC19wGoL0TORM9byUPT7MayzR9kpGKNZg9iVH2X PxhaWYom6+sAVwBecB/T1mVg7v9mGANR84aZ/A4gNhLkC6vykj8nEdQ X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Add pipe as trace argument in trace_dpu_crtc_setup_mixer() to ease converting pipe into pipe array later. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 9a40492e5aa961f7180ba4ac6c86e06fcccef8c2..cd0ec3edfe2fa8132e114bc1544= c389141d1c1ec 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -419,7 +419,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, =20 trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane), state, to_dpu_plane_state(state), stage_idx, - format->pixel_format, + format->pixel_format, pipe, modifier); =20 DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx= %d\n", diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_trace.h index 5307cbc2007c5044c5b897c53b44a8e356f1ad0f..cb24ad2a6d8d386bbc97b173854= c410220725a0d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h @@ -651,9 +651,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, TP_PROTO(uint32_t crtc_id, uint32_t plane_id, struct drm_plane_state *state, struct dpu_plane_state *pstate, uint32_t stage_idx, uint32_t pixel_format, - uint64_t modifier), + struct dpu_sw_pipe *pipe, uint64_t modifier), TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx, - pixel_format, modifier), + pixel_format, pipe, modifier), TP_STRUCT__entry( __field( uint32_t, crtc_id ) __field( uint32_t, plane_id ) @@ -676,9 +676,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, __entry->dst_rect =3D drm_plane_state_dest(state); __entry->stage_idx =3D stage_idx; __entry->stage =3D pstate->stage; - __entry->sspp =3D pstate->pipe.sspp->idx; - __entry->multirect_idx =3D pstate->pipe.multirect_index; - __entry->multirect_mode =3D pstate->pipe.multirect_mode; + __entry->sspp =3D pipe->sspp->idx; + __entry->multirect_idx =3D pipe->multirect_index; + __entry->multirect_mode =3D pipe->multirect_mode; __entry->pixel_format =3D pixel_format; __entry->modifier =3D modifier; ), --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B72124690 for ; Fri, 1 Aug 2025 15:08:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060915; cv=none; b=T04IBe6bEcpomB7+lnDz20FJWF8CN+hNd6BblJaVlPMnSbRrnYgtn738yBapWZzd1lFA5Qvabkf+/v02iMLre26uoXNgoFta+cjP8tWNg+P81EwEw018yQKkGEUnhlNccqpZlO+GhIIu0YsaSrtsXPkHZoAyupSxLLp1tHgavyo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060915; c=relaxed/simple; bh=cLobm7UmnQulH541jMcuwSseQZa7KtbE/9q8Xb9Qknw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aukttw2TFCjUfEPkzfaMh64SO4pKjKTI1x9mjXHtIPDmkfAGdyV0BXaQztZmgUahFQ1r+rWAU9/ZG9OD1InRATmEJ2mngBD+pE7d4n+aD/ZngS04a2DPVMBcidEcUZpVgQNNbVbqoJZPcOhVXiP3B+/y6E51L3yU9pGP5StPYps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=hHFjcGVt; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="hHFjcGVt" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-240b3335c20so12418045ad.3 for ; Fri, 01 Aug 2025 08:08:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060913; x=1754665713; 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=/y7f4mSkoCX4O+uwRMqPd2HCSjhgIuLCgIziXUkkhZA=; b=hHFjcGVtpTcA+i/zp+iUNoxvpgg6HWB1tay9zjb8QdxbuQ2Sz3YPpNuEsYEDSkWD26 d9pU4MpjjnMad5MZ+36m8FgPdbLyRkZfKZgK1vsN5YCByHHLVE7P0ZzQ93Az21G+4n8e y2MDTTiKytQtM3flUOjiNoTXRBtMpHKW8udsL8H/5Q1g1pCegrUKqqB7vGT9NGT5MRss ugYwYZxwam5FkTkzJUmPn6UajGu/fsui26+bCIsEZaOrtmwVtsXtVHPkU41ausXlkYQ2 oChKbpWDohwYc/Db6smgagETd0FoSnHQhP5k/h2v+gUE9bGaEN+BQViOXu5ra9bu8zNJ 4XfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060913; x=1754665713; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/y7f4mSkoCX4O+uwRMqPd2HCSjhgIuLCgIziXUkkhZA=; b=Qh4Q9GdQqrN+XuBybR1UO0uEh/lkpBq7Ww0WOxpk/nOW4MBxFtNKxAp2urMuVnxs3T BRGaxKDTZHguwi12ZtjlmmROM3pDSag42SWli8qzpesqyrmkjPQdxeBxaqaYXlpvs9X0 345002VC6Z8UponHqJhmaFE4oVAzzZPTeCr8oYetWVUT847Xun+UR2Tzxc7WeM0bXPuD RLyaWZUMdWZ8WQLTxkcUTEagV+CO5npBvDNRuKjZF3S6FbPsZ4DNk7zM3iXdsNuP3/x1 jnbk6nhszWyQ4GByllm+RK+ECjhSXvc1AZ6ts9V+7p6q7GzUK2bUL6RBA7hHrOTO1lsb ARdw== X-Forwarded-Encrypted: i=1; AJvYcCVddJxi/Sz030ylN5KiQqTcpBj+iKng8JSbUr8MpU3Pu4hJpV3Q7ubFQol8UfrCr3Pp24WGSjYqSt7a4nM=@vger.kernel.org X-Gm-Message-State: AOJu0YwDsSbE4H6HvexeNVj1p3tkKihe8CSYrClRvuUUjsR3BuPmCSOA Eb/wenQELkZIzQn26nN91wTSxIwPAWGTIi1YMWpyRED4u8SEsI/WupDg8PEsVh/Hz2k= X-Gm-Gg: ASbGnctZlv9zhfR1iALH1WwkofDL4JDgbQMQWNouDlvPo3gMX+IPjYOpGWQPyDcWBuE ZYnhMRLm6J6SLnu8T+nd6inJ+rIzMSFhEUNTw1R0WEc4nUz20VJWHE0GbeOMPIjLiYdPhU7vJzE Zsdo5hna1JMz9UauuWd5dXsFPCszt0qmlCLIN51Lo6Exes5ACclyWPglOlteyQxOr1Jj2TlnXaA hKR29Cva3gXYcfRPb1KfU0ZomvvAYogJmBzUEtm8t/Ns4prqzDy5ri4zSBCH+eJJslkTU/gYZpz of6dC/06IBuphn69WDlOJuKWdnpoz+1FUdVuPorzp+KdQQJF/uFREyMY9a4tDnNN2W3ZsagSh3R /DbBsJvJ1/nwCN/Hnwg== X-Google-Smtp-Source: AGHT+IHEFks85x4WzhaQnaXhsKApngwpcPlZH3JrsSrH9W8EGkeESjO7ewRdA+8kSVGlObrqzkiC4g== X-Received: by 2002:a17:903:3bcb:b0:23d:fa9a:80ac with SMTP id d9443c01a7336-24096a9ddcdmr178004435ad.16.1754060911685; Fri, 01 Aug 2025 08:08:31 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:31 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:31 +0800 Subject: [PATCH v14 07/13] drm/msm/dpu: handle pipes as array 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-7-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=18175; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=cLobm7UmnQulH541jMcuwSseQZa7KtbE/9q8Xb9Qknw=; b=7iSraBhE5QqST24VOQat2rVfEDc/zL3YrCR+Gq6fpIo8+V+wa5Wit6fFnvrUjxRHG8eu2tHYh N+r2hUHmSI4D3zXAFS8onimqJKag33vg2VBI6Ly0098NqdwZzDqAKQL X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= There are 2 pipes in a drm plane at most currently, while 4 pipes are required for quad-pipe case. Generalize the handling to pipe pair and ease handling to another pipe pair later. Store pipes in array with removing dedicated r_pipe. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 39 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 181 +++++++++++++++++---------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 12 +- 3 files changed, 121 insertions(+), 111 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index cd0ec3edfe2fa8132e114bc1544c389141d1c1ec..121bd0d304b308bcd7226784eda= 14d7c7f5a46f4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -449,7 +449,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, struct dpu_plane_state *pstate =3D NULL; const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; - u32 lm_idx; + u32 lm_idx, i; bool bg_alpha_enable =3D false; DECLARE_BITMAP(active_fetch, SSPP_MAX); DECLARE_BITMAP(active_pipes, SSPP_MAX); @@ -472,22 +472,17 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_cr= tc *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - set_bit(pstate->pipe.sspp->idx, active_fetch); - set_bit(pstate->pipe.sspp->idx, active_pipes); - _dpu_crtc_blend_setup_pipe(crtc, plane, - mixer, cstate->num_mixers, - pstate->stage, - format, fb ? fb->modifier : 0, - &pstate->pipe, 0, stage_cfg); - - if (pstate->r_pipe.sspp) { - set_bit(pstate->r_pipe.sspp->idx, active_fetch); - set_bit(pstate->r_pipe.sspp->idx, active_pipes); + + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + set_bit(pstate->pipe[i].sspp->idx, active_fetch); + set_bit(pstate->pipe[i].sspp->idx, active_pipes); _dpu_crtc_blend_setup_pipe(crtc, plane, mixer, cstate->num_mixers, pstate->stage, format, fb ? fb->modifier : 0, - &pstate->r_pipe, 1, stage_cfg); + &pstate->pipe[i], i, stage_cfg); } =20 /* blend config update */ @@ -1667,15 +1662,15 @@ static int _dpu_debugfs_status_show(struct seq_file= *s, void *data) seq_printf(s, "\tdst x:%4d dst_y:%4d dst_w:%4d dst_h:%4d\n", state->crtc_x, state->crtc_y, state->crtc_w, state->crtc_h); - seq_printf(s, "\tsspp[0]:%s\n", - pstate->pipe.sspp->cap->name); - seq_printf(s, "\tmultirect[0]: mode: %d index: %d\n", - pstate->pipe.multirect_mode, pstate->pipe.multirect_index); - if (pstate->r_pipe.sspp) { - seq_printf(s, "\tsspp[1]:%s\n", - pstate->r_pipe.sspp->cap->name); - seq_printf(s, "\tmultirect[1]: mode: %d index: %d\n", - pstate->r_pipe.multirect_mode, pstate->r_pipe.multirect_index); + + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + seq_printf(s, "\tsspp[%d]:%s\n", + i, pstate->pipe[i].sspp->cap->name); + seq_printf(s, "\tmultirect[%d]: mode: %d index: %d\n", + i, pstate->pipe[i].multirect_mode, + pstate->pipe[i].multirect_index); } =20 seq_puts(s, "\n"); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 4371c8e1602126bdd0860c5de263db3dd2d3291a..5e8703b0e2abb89887a5661adb3= 542a0c10d2b32 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -620,6 +620,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdp= u, struct msm_drm_private *priv =3D plane->dev->dev_private; struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); u32 fill_color =3D (color & 0xFFFFFF) | ((alpha & 0xFF) << 24); + int i; =20 DPU_DEBUG_PLANE(pdpu, "\n"); =20 @@ -633,12 +634,13 @@ static void _dpu_plane_color_fill(struct dpu_plane *p= dpu, return; =20 /* update sspp */ - _dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_r= ect, - fill_color, fmt); - - if (pstate->r_pipe.sspp) - _dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.= dst_rect, + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i], + &pstate->pipe_cfg[i].dst_rect, fill_color, fmt); + } } =20 static int dpu_plane_prepare_fb(struct drm_plane *plane, @@ -820,8 +822,8 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, struct dpu_kms *kms =3D _dpu_plane_get_kms(&pdpu->base); u64 max_mdp_clk_rate =3D kms->perf.max_core_clk_rate; struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + struct dpu_sw_pipe_cfg *pipe_cfg; + struct dpu_sw_pipe_cfg *r_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; uint32_t max_linewidth; =20 @@ -846,6 +848,9 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, return -EINVAL; } =20 + /* move the assignment here, to ease handling to another pairs later */ + pipe_cfg =3D &pstate->pipe_cfg[0]; + r_pipe_cfg =3D &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); =20 @@ -962,10 +967,10 @@ static int dpu_plane_atomic_check_sspp(struct drm_pla= ne *plane, drm_atomic_get_new_plane_state(state, plane); struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe *pipe =3D &pstate->pipe; - struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; + struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; + struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; + struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->pipe_cfg[1]; int ret =3D 0; =20 ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, @@ -1020,15 +1025,15 @@ static int dpu_plane_try_multirect_shared(struct dp= u_plane_state *pstate, const struct msm_format *fmt, uint32_t max_linewidth) { - struct dpu_sw_pipe *pipe =3D &pstate->pipe; - struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe *prev_pipe =3D &prev_adjacent_pstate->pipe; - struct dpu_sw_pipe_cfg *prev_pipe_cfg =3D &prev_adjacent_pstate->pipe_cfg; + struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; + struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; + struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; + struct dpu_sw_pipe *prev_pipe =3D &prev_adjacent_pstate->pipe[0]; + struct dpu_sw_pipe_cfg *prev_pipe_cfg =3D &prev_adjacent_pstate->pipe_cfg= [0]; const struct msm_format *prev_fmt =3D msm_framebuffer_format(prev_adjacen= t_pstate->base.fb); u16 max_tile_height =3D 1; =20 - if (prev_adjacent_pstate->r_pipe.sspp !=3D NULL || + if (prev_adjacent_pstate->pipe[1].sspp !=3D NULL || prev_pipe->multirect_mode !=3D DPU_SSPP_MULTIRECT_NONE) return false; =20 @@ -1088,10 +1093,10 @@ static int dpu_plane_atomic_check(struct drm_plane = *plane, struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); - struct dpu_sw_pipe *pipe =3D &pstate->pipe; - struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; + struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; + struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; + struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->pipe_cfg[1]; const struct drm_crtc_state *crtc_state =3D NULL; uint32_t max_linewidth =3D dpu_kms->catalog->caps->max_linewidth; =20 @@ -1135,7 +1140,7 @@ static int dpu_plane_virtual_atomic_check(struct drm_= plane *plane, drm_atomic_get_old_plane_state(state, plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane_state); struct drm_crtc_state *crtc_state; - int ret; + int ret, i; =20 if (IS_ERR(plane_state)) return PTR_ERR(plane_state); @@ -1153,8 +1158,8 @@ static int dpu_plane_virtual_atomic_check(struct drm_= plane *plane, * resources are freed by dpu_crtc_assign_plane_resources(), * but clean them here. */ - pstate->pipe.sspp =3D NULL; - pstate->r_pipe.sspp =3D NULL; + for (i =3D 0; i < PIPES_PER_STAGE; i++) + pstate->pipe[i].sspp =3D NULL; =20 return 0; } @@ -1192,6 +1197,7 @@ static int dpu_plane_virtual_assign_resources(struct = drm_crtc *crtc, struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; const struct msm_format *fmt; + int i; =20 if (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, @@ -1200,13 +1206,14 @@ static int dpu_plane_virtual_assign_resources(struc= t drm_crtc *crtc, pstate =3D to_dpu_plane_state(plane_state); prev_adjacent_pstate =3D prev_adjacent_plane_state ? to_dpu_plane_state(prev_adjacent_plane_state) : NULL; - pipe =3D &pstate->pipe; - r_pipe =3D &pstate->r_pipe; - pipe_cfg =3D &pstate->pipe_cfg; - r_pipe_cfg =3D &pstate->r_pipe_cfg; =20 - pipe->sspp =3D NULL; - r_pipe->sspp =3D NULL; + pipe =3D &pstate->pipe[0]; + r_pipe =3D &pstate->pipe[1]; + pipe_cfg =3D &pstate->pipe_cfg[0]; + r_pipe_cfg =3D &pstate->pipe_cfg[1]; + + for (i =3D 0; i < PIPES_PER_STAGE; i++) + pstate->pipe[i].sspp =3D NULL; =20 if (!plane_state->fb) return -EINVAL; @@ -1317,6 +1324,7 @@ void dpu_plane_flush(struct drm_plane *plane) { struct dpu_plane *pdpu; struct dpu_plane_state *pstate; + int i; =20 if (!plane || !plane->state) { DPU_ERROR("invalid plane\n"); @@ -1337,8 +1345,8 @@ void dpu_plane_flush(struct drm_plane *plane) /* force 100% alpha */ _dpu_plane_color_fill(pdpu, pdpu->color_fill, 0xFF); else { - dpu_plane_flush_csc(pdpu, &pstate->pipe); - dpu_plane_flush_csc(pdpu, &pstate->r_pipe); + for (i =3D 0; i < PIPES_PER_STAGE; i++) + dpu_plane_flush_csc(pdpu, &pstate->pipe[i]); } =20 /* flag h/w flush complete */ @@ -1439,15 +1447,12 @@ static void dpu_plane_sspp_atomic_update(struct drm= _plane *plane, struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct drm_plane_state *state =3D plane->state; struct dpu_plane_state *pstate =3D to_dpu_plane_state(state); - struct dpu_sw_pipe *pipe =3D &pstate->pipe; - struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; struct drm_crtc *crtc =3D state->crtc; struct drm_framebuffer *fb =3D state->fb; bool is_rt_pipe; const struct msm_format *fmt =3D msm_framebuffer_format(fb); - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + int i; =20 pstate->pending =3D true; =20 @@ -1462,12 +1467,12 @@ static void dpu_plane_sspp_atomic_update(struct drm= _plane *plane, crtc->base.id, DRM_RECT_ARG(&state->dst), &fmt->pixel_format, MSM_FORMAT_IS_UBWC(fmt)); =20 - dpu_plane_sspp_update_pipe(plane, pipe, pipe_cfg, fmt, - drm_mode_vrefresh(&crtc->mode), - &pstate->layout); - - if (r_pipe->sspp) { - dpu_plane_sspp_update_pipe(plane, r_pipe, r_pipe_cfg, fmt, + /* move the assignment here, to ease handling to another pairs later */ + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + dpu_plane_sspp_update_pipe(plane, &pstate->pipe[i], + &pstate->pipe_cfg[i], fmt, drm_mode_vrefresh(&crtc->mode), &pstate->layout); } @@ -1475,15 +1480,17 @@ static void dpu_plane_sspp_atomic_update(struct drm= _plane *plane, if (pstate->needs_qos_remap) pstate->needs_qos_remap =3D false; =20 - pstate->plane_fetch_bw =3D _dpu_plane_calc_bw(pdpu->catalog, fmt, - &crtc->mode, pipe_cfg); - - pstate->plane_clk =3D _dpu_plane_calc_clk(&crtc->mode, pipe_cfg); - - if (r_pipe->sspp) { - pstate->plane_fetch_bw +=3D _dpu_plane_calc_bw(pdpu->catalog, fmt, &crtc= ->mode, r_pipe_cfg); + pstate->plane_fetch_bw =3D 0; + pstate->plane_clk =3D 0; + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + pstate->plane_fetch_bw +=3D _dpu_plane_calc_bw(pdpu->catalog, fmt, + &crtc->mode, &pstate->pipe_cfg[i]); =20 - pstate->plane_clk =3D max(pstate->plane_clk, _dpu_plane_calc_clk(&crtc->= mode, r_pipe_cfg)); + pstate->plane_clk =3D max(pstate->plane_clk, + _dpu_plane_calc_clk(&crtc->mode, + &pstate->pipe_cfg[i])); } } =20 @@ -1491,17 +1498,31 @@ static void _dpu_plane_atomic_disable(struct drm_pl= ane *plane) { struct drm_plane_state *state =3D plane->state; struct dpu_plane_state *pstate =3D to_dpu_plane_state(state); - struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; + struct dpu_sw_pipe *pipe; + int i; =20 - trace_dpu_plane_disable(DRMID(plane), false, - pstate->pipe.multirect_mode); + for (i =3D 0; i < PIPES_PER_STAGE; i +=3D 1) { + pipe =3D &pstate->pipe[i]; + if (!pipe->sspp) + continue; =20 - if (r_pipe->sspp) { - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + trace_dpu_plane_disable(DRMID(plane), false, + pstate->pipe[i].multirect_mode); =20 - if (r_pipe->sspp->ops.setup_multirect) - r_pipe->sspp->ops.setup_multirect(r_pipe); + if (!pipe->sspp) + continue; + + if (i % PIPES_PER_STAGE =3D=3D 0) + continue; + + /* + * clear multirect for the right pipe so that the SSPP + * can be further reused in the solo mode + */ + pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + if (pipe->sspp->ops.setup_multirect) + pipe->sspp->ops.setup_multirect(pipe); } =20 pstate->pending =3D true; @@ -1596,31 +1617,26 @@ static void dpu_plane_atomic_print_state(struct drm= _printer *p, const struct drm_plane_state *state) { const struct dpu_plane_state *pstate =3D to_dpu_plane_state(state); - const struct dpu_sw_pipe *pipe =3D &pstate->pipe; - const struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - const struct dpu_sw_pipe *r_pipe =3D &pstate->r_pipe; - const struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + const struct dpu_sw_pipe *pipe; + const struct dpu_sw_pipe_cfg *pipe_cfg; + int i; =20 drm_printf(p, "\tstage=3D%d\n", pstate->stage); =20 - if (pipe->sspp) { - drm_printf(p, "\tsspp[0]=3D%s\n", pipe->sspp->cap->name); - drm_printf(p, "\tmultirect_mode[0]=3D%s\n", + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + pipe =3D &pstate->pipe[i]; + if (!pipe->sspp) + continue; + pipe_cfg =3D &pstate->pipe_cfg[i]; + drm_printf(p, "\tsspp[%d]=3D%s\n", i, pipe->sspp->cap->name); + drm_printf(p, "\tmultirect_mode[%d]=3D%s\n", i, dpu_get_multirect_mode(pipe->multirect_mode)); - drm_printf(p, "\tmultirect_index[0]=3D%s\n", + drm_printf(p, "\tmultirect_index[%d]=3D%s\n", i, dpu_get_multirect_index(pipe->multirect_index)); - drm_printf(p, "\tsrc[0]=3D" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->s= rc_rect)); - drm_printf(p, "\tdst[0]=3D" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->d= st_rect)); - } - - if (r_pipe->sspp) { - drm_printf(p, "\tsspp[1]=3D%s\n", r_pipe->sspp->cap->name); - drm_printf(p, "\tmultirect_mode[1]=3D%s\n", - dpu_get_multirect_mode(r_pipe->multirect_mode)); - drm_printf(p, "\tmultirect_index[1]=3D%s\n", - dpu_get_multirect_index(r_pipe->multirect_index)); - drm_printf(p, "\tsrc[1]=3D" DRM_RECT_FMT "\n", DRM_RECT_ARG(&r_pipe_cfg-= >src_rect)); - drm_printf(p, "\tdst[1]=3D" DRM_RECT_FMT "\n", DRM_RECT_ARG(&r_pipe_cfg-= >dst_rect)); + drm_printf(p, "\tsrc[%d]=3D" DRM_RECT_FMT "\n", i, + DRM_RECT_ARG(&pipe_cfg->src_rect)); + drm_printf(p, "\tdst[%d]=3D" DRM_RECT_FMT "\n", i, + DRM_RECT_ARG(&pipe_cfg->dst_rect)); } } =20 @@ -1658,14 +1674,17 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane = *plane, bool enable) struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); + int i; =20 if (!pdpu->is_rt_pipe) return; =20 pm_runtime_get_sync(&dpu_kms->pdev->dev); - _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); - if (pstate->r_pipe.sspp) - _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable); + } pm_runtime_put_sync(&dpu_kms->pdev->dev); } #endif diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index a3a6e9028333052cbaa92830c68e2315c664c239..007f044499b99ac9c2e4b58e98e= 6add013a986de 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -17,10 +17,8 @@ /** * struct dpu_plane_state: Define dpu extension of drm plane state object * @base: base drm plane state object - * @pipe: software pipe description - * @r_pipe: software pipe description of the second pipe - * @pipe_cfg: software pipe configuration - * @r_pipe_cfg: software pipe configuration for the second pipe + * @pipe: software pipe description array + * @pipe_cfg: software pipe configuration array * @stage: assigned by crtc blender * @needs_qos_remap: qos remap settings need to be updated * @multirect_index: index of the rectangle of SSPP @@ -33,10 +31,8 @@ */ struct dpu_plane_state { struct drm_plane_state base; - struct dpu_sw_pipe pipe; - struct dpu_sw_pipe r_pipe; - struct dpu_sw_pipe_cfg pipe_cfg; - struct dpu_sw_pipe_cfg r_pipe_cfg; + struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DD91271471 for ; Fri, 1 Aug 2025 15:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060921; cv=none; b=iVQD7IVOeDFKCD0MluS6io8Qo8QO7QppTuvpQYvm9TFVeWVk/Ht2Xudf6SiiPAQ+QryorXqPF3n7OgJQD5KfByhaQxcu16dMW/QXrRvFLv2yO28CPHwIYmjhSZocS7IagDN8gR9B3eRWTviFSPJeQW4MBGViiAZy0Znl3V984V0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060921; c=relaxed/simple; bh=Hb90KUJ17S8+gOgWfDMqgqzT+Roe11thyHVq9dHaPkk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=csPxTjGlLkHC82JifcAPNAyahAdfnra6BqOsCXTl2ERF4zunrKzWCaiI5kVHS67Z+E0gmC9NahWwziHt39sKydQVwVLW+7TsjFLVwOX9XmZSscjPQ6/CDpkf/hup0Bo7qDVDAhAJAd4KdmAcEkNeGp415F+risDNxcwTVA/VQ2w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=nNt7wNT5; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="nNt7wNT5" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-76a3818eb9bso975969b3a.3 for ; Fri, 01 Aug 2025 08:08:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060917; x=1754665717; 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=G7QBRDiQ1Py6OddicAjGQQtBPSs4ZG5AJtXQiopnFjQ=; b=nNt7wNT52LUm21/Y+M3YbGDtdzvfLB+VpcMqbps62fhSQY+299xGjHUwozn9gH8Lzv 8et9pT4p7VOlqTHpUJH+GqIRLADUyDo7lXbATBLGTxX6ayP6422ioC3lsMMV4nvVANQg uKQ8Wv4iSD5jQUEkQAwDZx+De1IfcDKqcsTnLpV/ZcguJ9vn5rPkCdyr8JOuA5FfpWeZ +AAbFpNdM5TIcACBLvX+nxseG+hWvFIvpTl1FIlhKTiSn6TDPn5KdgltRbOwn49YQQTh epb9IzibaDuUutdHrGDp9LTntGKxZj0i2wLXsY/ywqXfoMCI1xoh7SekNLSnl1aghCMf ys/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060917; x=1754665717; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=G7QBRDiQ1Py6OddicAjGQQtBPSs4ZG5AJtXQiopnFjQ=; b=CmiabRd0VUVaTE9plNxrDN8r+n12bQMvWj3XcSzAVnw9sVZwhx0xRJyVS9YrSCPDve 8uVv2oTlg4uX6pTYqwZxuWFUH7vZhrQtUoO0CeyHjtoWmUgFCnIBYQ6AxH76kCaT57zz hX42xfuBSWiWK34NduuqRdjHj7Twt3iJrjgmTEzO332RbJGh3E/fp7yFxlwFKciSgS9f CI4Xpnvqwjq4Z2fKXY6AznzvpjvWmu/pJomPdYWu5cc152aDNeADyKodbBYdFLRnXzaH j9ukygksxz4FLG4JNof+XGSgnC5dZ7AbpPl6uyxBXLmjUxr/8cRxCD3H+nUrvyF/T/N5 dTJw== X-Forwarded-Encrypted: i=1; AJvYcCWnkAI31+s5qTpHfAAkMRo4nrfBkjcZImzEoojt0qAciw7o6TdNWjDDtWHibV9njQypMc6wrHZekVFCvWE=@vger.kernel.org X-Gm-Message-State: AOJu0YwNG8RlquyP0jeugnHGb3CmuoM2xeEkdZmxXYjnp5ZWkrP3H71N k0MhVtb9sa99ngJwrBM/IGzMHtzVDZeU5969lrd/GRS5QbuQGEufRCRprop3J+ZaPK8= X-Gm-Gg: ASbGncsJjppHkC7fHwypnOrH+nLzuj7CvyTYCBYRwF1YalAfy57XgEuNrV/aaBO0Xfo QHqwjofTdWCYxEpYbYnXvhoUsZ3NjDtUepdaWpo/nijyGQkenliLkwpbPe5mJCJ3/SMESs0s6uV pNFu84xnymMOv+x1Cfew5gIp3n6TNKd7Gfp8ogUxewo6ZsfxFIX0IaXa9HJMHkhWzRJS923RBEv dNnXlfjBTWwVqdvY+TWwz6t5GumSSRh+/5BY3R1V39UT4dizS1AaPxMktpaLJrW6Ozn9hsLEDx1 x4RszSVv+YUhaP0aW2BIXVPg4DG9mn2bymA0717DaTDlxRtXjS9FZ8RSWtG9RXg/k3ZVAd/m21a QoD8I3nXU9D2eu+6r5A== X-Google-Smtp-Source: AGHT+IFzAEg3DpUQbyLKGPQdbyhnZxkGFFkP710agH4VHUXJJ8z0bWDTjbNHmgDRdVYZyhbVACrjWw== X-Received: by 2002:a17:902:e5cb:b0:240:71a5:f30 with SMTP id d9443c01a7336-24096ab9abfmr178854565ad.22.1754060917118; Fri, 01 Aug 2025 08:08:37 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:36 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:32 +0800 Subject: [PATCH v14 08/13] drm/msm/dpu: split PIPES_PER_STAGE definition per plane and mixer 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-8-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=6393; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=Hb90KUJ17S8+gOgWfDMqgqzT+Roe11thyHVq9dHaPkk=; b=ARq+CD3pIbDTnTSnU8MGG2crxQhVsTMR5Wg9jkIAwKDFQsTHgD90EH9qKd+XSz1hWE4xn6OIb M422iesx/CXDUsWxjLOsvLpPGxAS1EK94r557qRhPi5EmvieGxNFc7O X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The stage contains configuration for a mixer pair. Currently the plane supports just one stage and 2 pipes. Quad-pipe support will require handling 2 stages and 4 pipes at the same time. In preparation for that add a separate define, PIPES_PER_PLANE, to denote number of pipes that can be used by the plane. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 7 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 1 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 18 +++++++++--------- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 121bd0d304b308bcd7226784eda14d7c7f5a46f4..30fbd7565b82c6b6b13dc3ec0f4= c91328a8e94c9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -472,8 +472,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; set_bit(pstate->pipe[i].sspp->idx, active_fetch); @@ -1305,7 +1304,7 @@ static int dpu_crtc_reassign_planes(struct drm_crtc *= crtc, struct drm_crtc_state return ret; } =20 -#define MAX_CHANNELS_PER_CRTC 2 +#define MAX_CHANNELS_PER_CRTC PIPES_PER_PLANE #define MAX_HDISPLAY_SPLIT 1080 =20 static struct msm_display_topology dpu_crtc_get_topology( @@ -1663,7 +1662,7 @@ static int _dpu_debugfs_status_show(struct seq_file *= s, void *data) state->crtc_x, state->crtc_y, state->crtc_w, state->crtc_h); =20 - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; seq_printf(s, "\tsspp[%d]:%s\n", diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index 175639c8bfbb9bbd02ed35f1780bcbd869f08c36..9f75b497aa0c939296207d58dde= 32028d0a76a6d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,6 +34,7 @@ #define DPU_MAX_PLANES 4 #endif =20 +#define PIPES_PER_PLANE 2 #define PIPES_PER_STAGE 2 #ifndef DPU_MAX_DE_CURVES #define DPU_MAX_DE_CURVES 3 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 5e8703b0e2abb89887a5661adb3542a0c10d2b32..55429f29a4b95594771d930efe4= 2aaa4126f6f07 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -634,7 +634,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdp= u, return; =20 /* update sspp */ - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; _dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i], @@ -1158,7 +1158,7 @@ static int dpu_plane_virtual_atomic_check(struct drm_= plane *plane, * resources are freed by dpu_crtc_assign_plane_resources(), * but clean them here. */ - for (i =3D 0; i < PIPES_PER_STAGE; i++) + for (i =3D 0; i < PIPES_PER_PLANE; i++) pstate->pipe[i].sspp =3D NULL; =20 return 0; @@ -1212,7 +1212,7 @@ static int dpu_plane_virtual_assign_resources(struct = drm_crtc *crtc, pipe_cfg =3D &pstate->pipe_cfg[0]; r_pipe_cfg =3D &pstate->pipe_cfg[1]; =20 - for (i =3D 0; i < PIPES_PER_STAGE; i++) + for (i =3D 0; i < PIPES_PER_PLANE; i++) pstate->pipe[i].sspp =3D NULL; =20 if (!plane_state->fb) @@ -1345,7 +1345,7 @@ void dpu_plane_flush(struct drm_plane *plane) /* force 100% alpha */ _dpu_plane_color_fill(pdpu, pdpu->color_fill, 0xFF); else { - for (i =3D 0; i < PIPES_PER_STAGE; i++) + for (i =3D 0; i < PIPES_PER_PLANE; i++) dpu_plane_flush_csc(pdpu, &pstate->pipe[i]); } =20 @@ -1468,7 +1468,7 @@ static void dpu_plane_sspp_atomic_update(struct drm_p= lane *plane, &fmt->pixel_format, MSM_FORMAT_IS_UBWC(fmt)); =20 /* move the assignment here, to ease handling to another pairs later */ - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; dpu_plane_sspp_update_pipe(plane, &pstate->pipe[i], @@ -1482,7 +1482,7 @@ static void dpu_plane_sspp_atomic_update(struct drm_p= lane *plane, =20 pstate->plane_fetch_bw =3D 0; pstate->plane_clk =3D 0; - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; pstate->plane_fetch_bw +=3D _dpu_plane_calc_bw(pdpu->catalog, fmt, @@ -1501,7 +1501,7 @@ static void _dpu_plane_atomic_disable(struct drm_plan= e *plane) struct dpu_sw_pipe *pipe; int i; =20 - for (i =3D 0; i < PIPES_PER_STAGE; i +=3D 1) { + for (i =3D 0; i < PIPES_PER_PLANE; i +=3D 1) { pipe =3D &pstate->pipe[i]; if (!pipe->sspp) continue; @@ -1623,7 +1623,7 @@ static void dpu_plane_atomic_print_state(struct drm_p= rinter *p, =20 drm_printf(p, "\tstage=3D%d\n", pstate->stage); =20 - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { pipe =3D &pstate->pipe[i]; if (!pipe->sspp) continue; @@ -1680,7 +1680,7 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane *p= lane, bool enable) return; =20 pm_runtime_get_sync(&dpu_kms->pdev->dev); - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; _dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index 007f044499b99ac9c2e4b58e98e6add013a986de..1ef5a041b8acae270826f20ea95= 53cbfa35a9f82 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -31,8 +31,8 @@ */ struct dpu_plane_state { struct drm_plane_state base; - struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; - struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; + struct dpu_sw_pipe pipe[PIPES_PER_PLANE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_PLANE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73AC6273D66 for ; Fri, 1 Aug 2025 15:08:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060926; cv=none; b=JzxZv/7/RgSEQ6BXOUCLlSA8gF3ieCfvctzOR5aWedqPci+QAUMYaOYKwqtqBgi58ALbIgpnwyzK6LLfKZ3KaWVmuk9j8SYzVpdwsjeSQav+K2u9KLK6U5aOYIM/zsnzYYhzeVOXmIk9x1IwnpHm/XTunX+BMVIsCYl0oiatiaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060926; c=relaxed/simple; bh=EMexKmSgbyJrNm4fgVgmbAaex5tIopqSAoqfoqK2ahU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EHoSrcsjI1apUqRuXGZWEieVsUQr6Wwq3uJInskt94KgWWCElGh8hz5yJDlC9szAozP2wr5hvjPF3agoFSLd9YLlME6oRagNaCu4IRErfMpyYWK2Y7BnY3UTl0h+jktNUqDrJ+8Z1QT7t2ZIlsANkQF9+rB2OeuK/CKbTwG/UMU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=HC9dgprM; arc=none smtp.client-ip=209.85.215.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HC9dgprM" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-b3be5c0eb99so1562373a12.1 for ; Fri, 01 Aug 2025 08:08:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060924; x=1754665724; 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=ILXciEgW0I//qoLe7GzIdmNaMHGieJ0bsFVXKGQw/3Y=; b=HC9dgprMTnPspTaSdJseibHLteOuIx4LRTwnOA1DLycfygzEEA2mSdiTgDdITJ73JU yNUK8tA+/E8T4nF7D+kjaKoHe4Mf+JBRGZR0ZLQCkCzl+sRRXhoYca26zur2Br3BeVwb pShGGLM4FzSpU/wrR3FWcsPsc/rBojoKMpgELn6pC712AyeBhQbBMvQrMPEk9thtz7TR THfG+Ht+cdM8cx/8HhULC3kFIn+IG3wiTFZcQRCcacJMEMZWb2YKjAdQ43JQDCZhZ4n0 YHdRc0wUii6nBd3n2FmaxSVHDVQAu5OXTIfWzw72stT1wkxxpt6BKb+66RN9VLNqxzYe KW4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060924; x=1754665724; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ILXciEgW0I//qoLe7GzIdmNaMHGieJ0bsFVXKGQw/3Y=; b=byb+2KehHCGbYFAXL7jfYfLNz03B2hjnRf7uWpxDQ9/KcqziPgFyaq2lHBsil789Hm +MJKGv42ge/66e3PO7fq8+0t56AeRc3SFUYNgjs1Kies0H/7uz9nsAHYADllUwucqlP5 WZioD0H973ftwLYQp7PppXwCL2KnDm34+EO1ULnV+goKdVUaEwAJfLg9oaFfIPz3pc0c pHcFUe+T3bk1gf0kbZyVGHA8qDTfDsy46a+PYWbmgX0hu5c3XRNFZVBtIsP2x+0bdXdu Ws4MKv1PEvheOxXrrkxEQF+l11nTN1J4Qw6zjR41DvmXTlJcrNdVfAtOPUTOPiFfrUjY LP8Q== X-Forwarded-Encrypted: i=1; AJvYcCX2x7+kteC1xou7wT3Cv4tDnQbcWim+o+BiB2w/3txkU4ySYITD7sW+xpNgii5Ft/JNyP35KOslJeEJVPE=@vger.kernel.org X-Gm-Message-State: AOJu0YzXr0+EjOQvydJGnbgcVx45HNhWuGdVqCw9f7ZiXnrXS40nr06n 1rc6tl/gxyqB93KZkNjfexOWwMurfd3UIuqxhqit3j/6hD2OcxFOgxYObzB2b90k02E= X-Gm-Gg: ASbGnctD9ujpigogXrNymgNfyhLCw/XlgHZszzmaH63I37I38AgQhWu7mqXtCdnEEMS ybFl93wi7X6OnsGpUuHStUHEvSjOJBvbs/KFo+9+JDtWOO1TmZH3WTN6An6w64Q0KQzDyUK+tiV gkcZ5fpV9Qakz+tC89So2WmUGcBgBg7zduE4aWfUGnzxHk7l3Ch9OiV/JXgT6f0N68AMEvWNzkP 6az0CYV6YAiw1LPLdkHVfCzqXZhzJmyFAcYnL7AxmCCp4pBnwI1K9mcJuEQkW/HmOgLkhD1dxIa 9PmgdxC+03lZe4kcLOZDByUvLhoisRQlWk5MAp/OqLyi5pYk7TvQMLU4KV1GVOSU3bNu6q6Gz1F eegE9P3wH2h8tCB81YjAmAKYUnXDg X-Google-Smtp-Source: AGHT+IE9UAyxTpK4FvWv3OXz+ocPajVif5bxOvOmnO1SWRMqXt2SsxSVT4XeHmgC4TDkosdykSCiGw== X-Received: by 2002:a17:903:1b45:b0:23e:3c33:6be8 with SMTP id d9443c01a7336-24096a636bbmr158574575ad.8.1754060923651; Fri, 01 Aug 2025 08:08:43 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:43 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:33 +0800 Subject: [PATCH v14 09/13] drm/msm/dpu: Use dedicated WB number definition 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-9-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=1716; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=EMexKmSgbyJrNm4fgVgmbAaex5tIopqSAoqfoqK2ahU=; b=Z+E7gfuNEZEyh4WTb79WFYqsnLg0ICLcdnjakTmbZ7RdMP3xs/RcV6+pAzmWVDpHSDX7boNRx ItHtGmVpMIDCSCe80J0k77eKAwbUpP/rS2yqTla9dZhdnhtR3pwPrMR X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently MAX_CHANNELS_PER_ENC is defined as 2, because 2 channels are supported at most in one encoder. The case of 4 channels per encoder is to be added. To avoid breaking current WB usage case, use dedicated WB definition before 4 WB usage case is supported in future. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 2d88d9129ec787df6dac70e6f4488ab77c6aeeed..4616b360812491afbe63f8ffd4a= 57bc9604382e7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -56,6 +56,7 @@ (MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES) =20 #define MAX_CHANNELS_PER_ENC 2 +#define MAX_CWB_PER_ENC 2 =20 #define IDLE_SHORT_TIMEOUT 1 =20 @@ -182,7 +183,7 @@ struct dpu_encoder_virt { struct dpu_encoder_phys *cur_master; struct dpu_encoder_phys *cur_slave; struct dpu_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC]; - struct dpu_hw_cwb *hw_cwb[MAX_CHANNELS_PER_ENC]; + struct dpu_hw_cwb *hw_cwb[MAX_CWB_PER_ENC]; struct dpu_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC]; =20 unsigned int dsc_mask; @@ -2387,7 +2388,7 @@ void dpu_encoder_helper_phys_setup_cwb(struct dpu_enc= oder_phys *phys_enc, */ cwb_cfg.input =3D INPUT_MODE_LM_OUT; =20 - for (int i =3D 0; i < MAX_CHANNELS_PER_ENC; i++) { + for (int i =3D 0; i < MAX_CWB_PER_ENC; i++) { hw_cwb =3D dpu_enc->hw_cwb[i]; if (!hw_cwb) continue; --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDBB927056A for ; Fri, 1 Aug 2025 15:08:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060933; cv=none; b=ZI6Y9HHrlwAQ22j55Hb42eJc+YDU45p+lGSqGhPM+Qi+m5zopAkGRCsAtT3m8Fqyc4Z4+MG9wR7tSP8c3T8QydBRepSAGHdnpuEsK9nk7oOn5eKQWO7TWiBptemVUgkpjYiHgL2gexQ0KQ6qaY6r2cmL5X5Vj4wmba7oaUWH5BA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060933; c=relaxed/simple; bh=CF4TPmOyKCuR1vONvBUPDXaEUNdePxwbzP99ZGSmrmQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jle+/TNEEM71ANEj+e8EwRdbeER6ef0R0ZXbLU4aOMotccq2KLMjPOfz9Qy4s2slfSUOKtlCDFRBcnG1bNvXI0DSiydr0iHkJjVNmmdmxSUfqF6oVxJ9dWg6Olur4rQIJyVNe1QKG3qWV52g1lzDzU7bQY+4rcSy5Ji0l80Cwnc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=kEyi4cHC; arc=none smtp.client-ip=209.85.215.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="kEyi4cHC" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b271f3ae786so1856530a12.3 for ; Fri, 01 Aug 2025 08:08:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060931; x=1754665731; 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=4X9gMtrXb7FnTuL7OxdpBsAZ9YfPLCWw/9fwnW/EYKc=; b=kEyi4cHCH8bdE65bfVSRiAIstZ1loj3IVv/uadBYS4afS9HSMN2BbEAJZNdMLKWSye tWV81K2rk8omt36RonbW1TKNg7UuY+mLczlTIRkHBqLgiEljG9WvuqUWXX8ralxu9auq aze0YuqOo0CzDFBEW2E8PNykyyxImMe+lkKUSo9eYo4z8bODRj5OGV2Xq0lZc1Moihry RFUikyMwsn8xlfnqDnGsLvSEfRlzT2odRGrrBt4yBj0XeG/FZYoAZfRlGXVDzi8tFQJT 9rQbGAinEV3XpJ1vGVDI979S0Dv4XsL1Q+jpNd+7wA/biuRXH+gXvtKE87UFrYU7capM Lj9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060931; x=1754665731; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4X9gMtrXb7FnTuL7OxdpBsAZ9YfPLCWw/9fwnW/EYKc=; b=RO5/KntHqsv1uvy/tUHTaBl+BAe4clI+oyFZ25koHN8zvVkKBNKE9Il2o4V3mMWErr 5K6zXwAWQJeWMHWFChILJTvoMJ25QHB//jVQNcUh+y5+ML0rKJaLwMb6S2/FXqtSrnfD 90nf0O+MpBmjBSKr2zAjH5Hcpt6+7hyynhgAlQ1zUGYamntISz+VCTQB7WG9cpfNn4S2 iglzfsCMG/+tFr/MuG5SHpyuY6+dLB6SUEJbb2QImZWWGJHDEiK8hos7iQVq25sc1YxU tpmjML2nn8MkcqEY5z3S7rpi5Zktf5JJvxOIQtKA7IvF/qhLfyERvID88r4U349fn+4L aYYw== X-Forwarded-Encrypted: i=1; AJvYcCXnfXSEKazSCg6NtmZBpDB78zmNrw67H8Iwn772rADmIp0n5OCh3TZO7oZNDKH3/6TGwpzsOkEZE0qoN7c=@vger.kernel.org X-Gm-Message-State: AOJu0YxX9YbIUBZdU5drt7gtSpBhn7oY6rcgYa6RV4Fc4qORzuLQW6h/ pjrpHH/pHt/effMA8jv0xnHopQJeyEWtggW2CEjj+bV/SGMMRJet89DmTrh7mNXW42A= X-Gm-Gg: ASbGnctvKZuEUiVfXUjbCqGg3Aey2K305mCgNK3yt4HN7c1OnL95qtK5v2IQZBs1edX lTxji0YeNgQsRBlfpsHF8xP2jxwdemleD5c4YEMl+QwEVl6G/9Dsb04nFmLmJUgs1Q+gSxqjQ7e 0xSGljjTLoTYQVPYwfVoyssD7DE6hx2nZfZ+gRfXevNf+GGBkKp4gUGDB5Eee1zdO6UL6jApOJi 4n3A7WhO27FlDF90heyDecJCA4yn5E+s4UIjWJJyqT+uPv94fZNFdjOIVrJcj61I3AG4fR8tI9C H/LRU0dbT3L6Xzsgf9W4s82BoTE0wrbOrJA8RiHyS13tFSyaR3dHIKc1t7iYgqlye+D+DC3Jpng 2A4wHaZiMGfG+WqJLRw== X-Google-Smtp-Source: AGHT+IGE0kyspgqFHJSMZn3T6Cy17X8iDSC/ePImTcwnKhgqMsgy0USzP1VOri1Q3pYP3oL/oHtc0A== X-Received: by 2002:a17:902:d4c7:b0:240:4d19:8797 with SMTP id d9443c01a7336-24096a7d37bmr169988725ad.22.1754060930899; Fri, 01 Aug 2025 08:08:50 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:50 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:34 +0800 Subject: [PATCH v14 10/13] drm/msm/dpu: blend pipes per mixer pairs config 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-10-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=5682; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=CF4TPmOyKCuR1vONvBUPDXaEUNdePxwbzP99ZGSmrmQ=; b=4NtN0lyCa7WeArznPw8dYtFLqzK/efwKlVC/tsSP9iuWrSvkcjCmjMnAEPJ9q0GZWgHWWo7dx L5gCLwwQdOICGvckADhzRLjEg5RHNGULj4y/LB4FAWQGiYealUl3lnw X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, only 2 pipes are used at most for a plane. A stage structure describes the configuration for a mixer pair. So only one stage is needed for current usage cases. The quad-pipe case will be added in future and 2 stages are used in the case. So extend the stage to an array with array size STAGES_PER_PLANE and blend pipes per mixer pair with configuration in the stage structure. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 49 ++++++++++++++++++-------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 3 +- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 30fbd7565b82c6b6b13dc3ec0f4c91328a8e94c9..c7dc5b47ae18ebd78de30d2a060= 5caa7dd547850 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -400,7 +400,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_= crtc *crtc) static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc, struct drm_plane *plane, struct dpu_crtc_mixer *mixer, - u32 num_mixers, + u32 lms_in_pair, enum dpu_stage stage, const struct msm_format *format, uint64_t modifier, @@ -434,7 +434,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, stage_cfg->multirect_index[stage][stage_idx] =3D pipe->multirect_index; =20 /* blend config update */ - for (lm_idx =3D 0; lm_idx < num_mixers; lm_idx++) + for (lm_idx =3D 0; lm_idx < lms_in_pair; lm_idx++) mixer[lm_idx].lm_ctl->ops.update_pending_flush_sspp(mixer[lm_idx].lm_ctl= , sspp_idx); } =20 @@ -449,7 +449,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, struct dpu_plane_state *pstate =3D NULL; const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; - u32 lm_idx, i; + u32 lm_idx, stage, i, pipe_idx, head_pipe_in_stage, lms_in_pair; bool bg_alpha_enable =3D false; DECLARE_BITMAP(active_fetch, SSPP_MAX); DECLARE_BITMAP(active_pipes, SSPP_MAX); @@ -472,16 +472,25 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_cr= tc *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - for (i =3D 0; i < PIPES_PER_PLANE; i++) { - if (!pstate->pipe[i].sspp) - continue; - set_bit(pstate->pipe[i].sspp->idx, active_fetch); - set_bit(pstate->pipe[i].sspp->idx, active_pipes); - _dpu_crtc_blend_setup_pipe(crtc, plane, - mixer, cstate->num_mixers, - pstate->stage, - format, fb ? fb->modifier : 0, - &pstate->pipe[i], i, stage_cfg); + /* loop pipe per mixer pair with config in stage structure */ + for (stage =3D 0; stage < STAGES_PER_PLANE; stage++) { + head_pipe_in_stage =3D stage * PIPES_PER_STAGE; + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + pipe_idx =3D i + head_pipe_in_stage; + if (!pstate->pipe[pipe_idx].sspp) + continue; + lms_in_pair =3D min(cstate->num_mixers - (stage * PIPES_PER_STAGE), + PIPES_PER_STAGE); + set_bit(pstate->pipe[pipe_idx].sspp->idx, active_fetch); + set_bit(pstate->pipe[pipe_idx].sspp->idx, active_pipes); + _dpu_crtc_blend_setup_pipe(crtc, plane, + &mixer[head_pipe_in_stage], + lms_in_pair, + pstate->stage, + format, fb ? fb->modifier : 0, + &pstate->pipe[pipe_idx], i, + &stage_cfg[stage]); + } } =20 /* blend config update */ @@ -517,7 +526,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) struct dpu_crtc_mixer *mixer =3D cstate->mixers; struct dpu_hw_ctl *ctl; struct dpu_hw_mixer *lm; - struct dpu_hw_stage_cfg stage_cfg; + struct dpu_hw_stage_cfg stage_cfg[STAGES_PER_PLANE]; DECLARE_BITMAP(active_lms, LM_MAX); int i; =20 @@ -538,10 +547,10 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *cr= tc) } =20 /* initialize stage cfg */ - memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg)); + memset(&stage_cfg, 0, sizeof(stage_cfg)); memset(active_lms, 0, sizeof(active_lms)); =20 - _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg); + _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, stage_cfg); =20 for (i =3D 0; i < cstate->num_mixers; i++) { ctl =3D mixer[i].lm_ctl; @@ -562,13 +571,17 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *cr= tc) mixer[i].mixer_op_mode, ctl->idx - CTL_0); =20 + /* + * call dpu_hw_ctl_setup_blendstage() to blend layers per stage cfg. + * stage data is shared between PIPES_PER_STAGE pipes. + */ if (ctl->ops.setup_blendstage) ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx, - &stage_cfg); + &stage_cfg[i / PIPES_PER_STAGE]); =20 if (lm->ops.setup_blendstage) lm->ops.setup_blendstage(lm, mixer[i].hw_lm->idx, - &stage_cfg); + &stage_cfg[i / PIPES_PER_STAGE]); } } =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index 9f75b497aa0c939296207d58dde32028d0a76a6d..e4875a1f638db6f1983d9c51cb3= 99319d27675e9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,8 +34,9 @@ #define DPU_MAX_PLANES 4 #endif =20 -#define PIPES_PER_PLANE 2 +#define STAGES_PER_PLANE 1 #define PIPES_PER_STAGE 2 +#define PIPES_PER_PLANE (PIPES_PER_STAGE * STAGES_PER_PLANE) #ifndef DPU_MAX_DE_CURVES #define DPU_MAX_DE_CURVES 3 #endif --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1C5B27602A for ; Fri, 1 Aug 2025 15:08:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060938; cv=none; b=pvUASYSpIB9wszEYDjHyiFWxezqqjALyLMZfu4fckNxPbj50GERCI2jlBxaJP6vTv9io3nh8rr6uguAiURy7GnqoUg+ECmXxjH1zNozBZOgCNaQnNTf/tEUs0Mqvv7MSkZ6NhwdkapJCiVJicxlQhMTmpeKkOMQ/nIrF0w6HeZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060938; c=relaxed/simple; bh=Z562NtPUXRhT8Hc4hvm8HoowSPE6ktbWnSIqtqVwrFo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n4u3CCND3IJtNC04nzrlf1KMKset97NUwCwD+nGnoGJfUWFjop3m7L7JqWozP58BHxgaErLF+7CXZUfQgR67zMyAlHCW3KiTsURmzs7uA5AnzEA/ddT7pBt/KcP3YkjgY1FllymBHSIFsB6M/0xCOO3FALK9827dwcJgAD3gSe8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ulfMDgLo; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ulfMDgLo" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-240418cbb8bso15287235ad.2 for ; Fri, 01 Aug 2025 08:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060936; x=1754665736; 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=RgwWNZrDakWTRGIAzVwji8mlNvTEY3Evic7nS2oT060=; b=ulfMDgLo2wPbjvi5gjxNsY2e8A69wzMB+r3DEgJiWPFWM+AQUARn5uxrjWhnI1k5pW /SABb53c52xeJ1EleSSbR0jihgLUnkDMyeROxQCNnUhrdjreaIQKyNTZk1hzeYmhyVzp ZmwfrNrN0TcNYv5i3TYR0cP3B8xgkC0yOvXJhybf6eW96A2NNeMzYYGHJjjWUsBk/L1N tyP+KuZcjKgIRWJRjvR247wPnt5SKCOIqZxTPD7i3vzjSTe70H5zj+ThMbKNZpmNatC5 BZze8bLy6yEggf/7FoCZqGG3tRbXm8F+hBwNCbuCROuFkwuT4pTCuuEyx8os+0IjghZs 49MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060936; x=1754665736; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RgwWNZrDakWTRGIAzVwji8mlNvTEY3Evic7nS2oT060=; b=SMEwazDHohqs6aC/z6NJ+oRcmmO7TWJKV8/iWuwQ6qcgv56SzBQXokZmxDU+PO9jVY VKBp+hQUfbkIU4HX84uw1i1OjOEQEGqdxf7VzZvmXVm3AKpBqzepJWOGWacr2p9Zhw4a FzONRyr6gNcKgDvWRVm19QqSRX/1SMIeJGDnGJn8pkZc7o1dG3ZhnwA5+Jwg8wGmmItT p3QoXvKUD31etYTL0wgGVjRXeQEJblZRGyHh4kRWk19O89PgNOiros8TAkkD5TiPje+L hpXf+Lz8emhIcIJWSc0rmMCWvKCwnBkKMoxd5g5pI6XQTWy+GrH/wGd8B2hi4/QLseKu HdrA== X-Forwarded-Encrypted: i=1; AJvYcCVbZR+Sy75Ea+lghS5pEA6vKyRAEeS/GPOoGAmDbcL82/U8o4TK2f5w1TlnOptUHmOGWLdufTTiR3vNStc=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7aB2qNBuepvwk5KtY30j00BHjvhZkwGjUrjLrKT4HGFw9Tivg 092OTKN4HQskZW2BxoDGew+AQByIvlR5HQ/gAMpj6WxHCBeLvF4+Y09xlCRkVMRIPpU= X-Gm-Gg: ASbGncsQ0SfoQ4ZoU/z3rP14FZX4GyrZBLuhbo42OPY/bio/fQQukifzmoA4796lZbk am1ZKYG8mwh+ThrCD0yPivTu4ObXV4hRM0WPmROIokf3kw8a6J0cOhGI0DxZtqvO4RIoeLeOQNL +S3ir8AWMBjTisTSsnkc3j5h+F2wdlz5XtJvpTyWXKe5qQSDDUs/EXZclX5/Skyer55oMvcNqQ3 HsxlVzmZWFg1PACjrQQL/pYBYr8J7tXahqEzij1qPfLmX1tr4TZ+Pc4fykHJFZfcR07yDweeQIX yW8bpXhMAL+ZzEa7B42ItDNgQg77kK55m6PNQ7ZQxZ/rsSzqi0u+yHLLKejtxcPZ2RLURU0xegT fKElBgojiQL2gKN61uA== X-Google-Smtp-Source: AGHT+IH3yQ2WZsf1TaouI4Sj6r8fc3DQaXgU+bRdXJZQ/Jn4uBqwLbbWcaif8+WUi7oy2XSYcv8aCQ== X-Received: by 2002:a17:902:d482:b0:234:986c:66bf with SMTP id d9443c01a7336-24096a4f534mr168491285ad.11.1754060935960; Fri, 01 Aug 2025 08:08:55 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:08:55 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:35 +0800 Subject: [PATCH v14 11/13] drm/msm/dpu: support SSPP assignment for quad-pipe case 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-11-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=9470; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=Z562NtPUXRhT8Hc4hvm8HoowSPE6ktbWnSIqtqVwrFo=; b=4u4inTWpho7OFYRJxY2nlI0TT4AavL0qXB9ZEcTY9rE6jict7U+Tf2//4tYZ86U3bE4djG1Dc wjQZCGlRQCWARxCOJh7um2hYtmQmYyPKc00DREUno9pDNHiPQ/Ja0s/ X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, SSPPs are assigned to a maximum of two pipes. However, quad-pipe usage scenarios require four pipes and involve configuring two stages. In quad-pipe case, the first two pipes share a set of mixer configurations and enable multi-rect mode when certain conditions are met. The same applies to the subsequent two pipes. Assign SSPPs to the pipes in each stage using a unified method and to loop the stages accordingly. Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 150 ++++++++++++++++++--------= ---- 1 file changed, 89 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 55429f29a4b95594771d930efe42aaa4126f6f07..9671af9620037b5c341e404bb3b= 2fc21696ce79e 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -958,6 +958,23 @@ static int dpu_plane_is_multirect_parallel_capable(str= uct dpu_hw_sspp *sspp, dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth); } =20 +static bool dpu_plane_get_single_pipe_in_stage(struct dpu_plane_state *pst= ate, + struct dpu_sw_pipe **single_pipe, + struct dpu_sw_pipe_cfg **single_pipe_cfg, + int stage_index) +{ + int pipe_idx; + + pipe_idx =3D stage_index * PIPES_PER_STAGE; + if (drm_rect_width(&pstate->pipe_cfg[pipe_idx].src_rect) !=3D 0 && + drm_rect_width(&pstate->pipe_cfg[pipe_idx + 1].src_rect) =3D=3D 0) { + *single_pipe =3D &pstate->pipe[pipe_idx]; + *single_pipe_cfg =3D &pstate->pipe_cfg[pipe_idx]; + return true; + } + + return false; +} =20 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, struct drm_atomic_state *state, @@ -1023,17 +1040,20 @@ static bool dpu_plane_try_multirect_parallel(struct= dpu_sw_pipe *pipe, struct dp static int dpu_plane_try_multirect_shared(struct dpu_plane_state *pstate, struct dpu_plane_state *prev_adjacent_pstate, const struct msm_format *fmt, - uint32_t max_linewidth) + uint32_t max_linewidth, int stage_index) { - struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; - struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; - struct dpu_sw_pipe *prev_pipe =3D &prev_adjacent_pstate->pipe[0]; - struct dpu_sw_pipe_cfg *prev_pipe_cfg =3D &prev_adjacent_pstate->pipe_cfg= [0]; + struct dpu_sw_pipe *pipe, *prev_pipe; + struct dpu_sw_pipe_cfg *pipe_cfg, *prev_pipe_cfg; const struct msm_format *prev_fmt =3D msm_framebuffer_format(prev_adjacen= t_pstate->base.fb); u16 max_tile_height =3D 1; =20 - if (prev_adjacent_pstate->pipe[1].sspp !=3D NULL || + if (!dpu_plane_get_single_pipe_in_stage(pstate, &pipe, + &pipe_cfg, stage_index)) + return false; + + if (!dpu_plane_get_single_pipe_in_stage(prev_adjacent_pstate, + &prev_pipe, &prev_pipe_cfg, + stage_index) || prev_pipe->multirect_mode !=3D DPU_SSPP_MULTIRECT_NONE) return false; =20 @@ -1048,11 +1068,6 @@ static int dpu_plane_try_multirect_shared(struct dpu= _plane_state *pstate, if (MSM_FORMAT_IS_UBWC(prev_fmt)) max_tile_height =3D max(max_tile_height, prev_fmt->tile_height); =20 - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - - r_pipe->sspp =3D NULL; - if (dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth) && dpu_plane_is_parallel_capable(prev_pipe_cfg, prev_fmt, max_linewidth)= && (pipe_cfg->dst_rect.x1 >=3D prev_pipe_cfg->dst_rect.x2 || @@ -1181,36 +1196,69 @@ static int dpu_plane_virtual_atomic_check(struct dr= m_plane *plane, return 0; } =20 +static int dpu_plane_assign_resource_in_stage(struct dpu_sw_pipe *pipe, + struct dpu_sw_pipe_cfg *pipe_cfg, + struct drm_plane_state *plane_state, + struct dpu_global_state *global_state, + struct drm_crtc *crtc, + struct dpu_rm_sspp_requirements *reqs) +{ + struct drm_plane *plane =3D plane_state->plane; + struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); + struct dpu_sw_pipe *r_pipe =3D pipe + 1; + struct dpu_sw_pipe_cfg *r_pipe_cfg =3D pipe_cfg + 1; + + if (drm_rect_width(&pipe_cfg->src_rect) !=3D 0) { + pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, req= s); + if (!pipe->sspp) + return -ENODEV; + pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + } + + if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0 && + dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, + pipe->sspp, + msm_framebuffer_format(plane_state->fb), + dpu_kms->catalog->caps->max_linewidth)) + goto stage_assinged; + + if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) { + r_pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, r= eqs); + if (!r_pipe->sspp) + return -ENODEV; + r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + } + +stage_assinged: + return 0; +} + static int dpu_plane_virtual_assign_resources(struct drm_crtc *crtc, struct dpu_global_state *global_state, struct drm_atomic_state *state, struct drm_plane_state *plane_state, - struct drm_plane_state *prev_adjacent_plane_state) + struct drm_plane_state **prev_adjacent_plane_state) { const struct drm_crtc_state *crtc_state =3D NULL; struct drm_plane *plane =3D plane_state->plane; struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); struct dpu_rm_sspp_requirements reqs; - struct dpu_plane_state *pstate, *prev_adjacent_pstate; + struct dpu_plane_state *pstate, *prev_adjacent_pstate[STAGES_PER_PLANE]; struct dpu_sw_pipe *pipe; - struct dpu_sw_pipe *r_pipe; struct dpu_sw_pipe_cfg *pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg; const struct msm_format *fmt; - int i; + int i, ret; =20 if (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, plane_state->crtc); =20 pstate =3D to_dpu_plane_state(plane_state); - prev_adjacent_pstate =3D prev_adjacent_plane_state ? - to_dpu_plane_state(prev_adjacent_plane_state) : NULL; - - pipe =3D &pstate->pipe[0]; - r_pipe =3D &pstate->pipe[1]; - pipe_cfg =3D &pstate->pipe_cfg[0]; - r_pipe_cfg =3D &pstate->pipe_cfg[1]; + for (i =3D 0; i < STAGES_PER_PLANE; i++) + prev_adjacent_pstate[i] =3D prev_adjacent_plane_state[i] ? + to_dpu_plane_state(prev_adjacent_plane_state[i]) : NULL; =20 for (i =3D 0; i < PIPES_PER_PLANE; i++) pstate->pipe[i].sspp =3D NULL; @@ -1225,42 +1273,24 @@ static int dpu_plane_virtual_assign_resources(struc= t drm_crtc *crtc, =20 reqs.rot90 =3D drm_rotation_90_or_270(plane_state->rotation); =20 - if (drm_rect_width(&r_pipe_cfg->src_rect) =3D=3D 0) { - if (!prev_adjacent_pstate || - !dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate, fmt, - dpu_kms->catalog->caps->max_linewidth)) { - pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &r= eqs); - if (!pipe->sspp) - return -ENODEV; - - r_pipe->sspp =3D NULL; - - pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - } - } else { - pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &re= qs); - if (!pipe->sspp) - return -ENODEV; - - if (!dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, - pipe->sspp, - msm_framebuffer_format(plane_state->fb), - dpu_kms->catalog->caps->max_linewidth)) { - /* multirect is not possible, use two SSPP blocks */ - r_pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, = &reqs); - if (!r_pipe->sspp) - return -ENODEV; + for (i =3D 0; i < STAGES_PER_PLANE; i++) { + if (prev_adjacent_pstate[i] && + dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate[i], fmt, + dpu_kms->catalog->caps->max_linewidth, + i)) + continue; =20 - pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + if (dpu_plane_get_single_pipe_in_stage(pstate, &pipe, &pipe_cfg, i)) + prev_adjacent_plane_state[i] =3D plane_state; =20 - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - } + pipe =3D &pstate->pipe[i * PIPES_PER_STAGE]; + pipe_cfg =3D &pstate->pipe_cfg[i * PIPES_PER_STAGE]; + ret =3D dpu_plane_assign_resource_in_stage(pipe, pipe_cfg, + plane_state, + global_state, + crtc, &reqs); + if (ret) + return ret; } =20 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); @@ -1273,7 +1303,7 @@ int dpu_assign_plane_resources(struct dpu_global_stat= e *global_state, unsigned int num_planes) { unsigned int i; - struct drm_plane_state *prev_adjacent_plane_state =3D NULL; + struct drm_plane_state *prev_adjacent_plane_state[STAGES_PER_PLANE] =3D {= NULL }; =20 for (i =3D 0; i < num_planes; i++) { struct drm_plane_state *plane_state =3D states[i]; @@ -1287,8 +1317,6 @@ int dpu_assign_plane_resources(struct dpu_global_stat= e *global_state, prev_adjacent_plane_state); if (ret) break; - - prev_adjacent_plane_state =3D plane_state; } =20 return 0; --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A94F927702A for ; Fri, 1 Aug 2025 15:09:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060944; cv=none; b=jJxqyStcMUMyDu7IXz6aW2BPpx59TkBzb2LwHRAbaMljUo1dP352Q0oZDg2Lu3ZffZqqxlUuwH666cErUhxmtfBJsB2+hMxxioZWEfHCyVOL7AAZC7Z+rf7N/4KnGL3nPWbcFXyHmNxYOxZ4xzTGkQivzs6F/mvVgF7Tx5MNdzk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060944; c=relaxed/simple; bh=Veemtj+x5rQsMyLh8xlpJx5684Alg7vW+nvGYC3hUMU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hFbRTLBekqnHlS/rtAKMIRTgwRlIfT8CzBqJVKAozOslUvtgyiciNpyTDpIvwaXWJeLgVUeB12os+KQtaXgRuiHmUKmb+gHd/3ukLoE67mQYxPVQUICaeVudLcbZpjLDmLStuQ3JEKXmF2+c6mXd5qH3UH+xefF9M0ymPa1uVX0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QPO3x3R5; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QPO3x3R5" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-76aea119891so3104357b3a.1 for ; Fri, 01 Aug 2025 08:09:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060942; x=1754665742; 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=IRtoWvRUQhNYPAX6tquholQo2pbdhlGbI6Vq2Z+/oB0=; b=QPO3x3R5Zm8riqsCDQCQo0t/zP2GeiQW6FShOB4HtvpyidgzxrWjPa5zP62LqIqMOR ApHWQ0QDCJEAzfEmLOw0lp6m2jlAx8i6dDzafTV13duh1awHQDbucDRoPAXBmOFUvbgx z/eU55crTa/NblNt0Rz0HQfVhc8sKfwOTSo+k6ILnktHlWq8D3bYT5T9vNZ1LwrTQycj 6xA3lGc7iDBf1iDtcsONL7MY4sl4svJRkvrykDwFyWsPm7kp/PPc7KdKPLJL5w/15AuC +kiFLWxXuS7DnhE2YSjWbARIrKYaG190A8ZITv/ciFxn2koVlcIglTHQqTTX4HRGgq5Z PRkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060942; x=1754665742; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IRtoWvRUQhNYPAX6tquholQo2pbdhlGbI6Vq2Z+/oB0=; b=NLL8g8Umxl3Y8bOoDee2ryaGm+Zj4suZXXybLiiSvw3dGwzI3LMsciXQPwNM2WBY7q YcmmrDrr0vIBnPVl7uUXai4Ti9HWjoiCxbQJqENOtuXt8UisWo+Lg2cFty9snvU2qaqD gHIsa5SSgTFsCSC277/r2Ve+YS205SDt90g5wNCESf66YbiYp35oZxkq0X/xCym9Qfoe jQv6KOHezAjwjxUI9nzfp8LSYeQtzefKqUG6duvu/8hnkapTm5rEfVJGv1iFdMnLwVuY GiG34LeBMQmiDy+jUGZ649ABXISEa8D7thsVzDgyrR91/pPLGhvjCcr4g6wt8thEUxxh e6Ug== X-Forwarded-Encrypted: i=1; AJvYcCVBLvb8I+V/Iejwxz/hhVyknMmaNVMxLb/6cCA26CGPFhFu0vP8WNs++T4v3v+zCsC2gUcV4WXxOIpmVWc=@vger.kernel.org X-Gm-Message-State: AOJu0YxpQ+AfVpKmHdn81YuBRPXocaRvx8kK+RufyiAZMqPDXH7x/QMb HoVgr2xyZH6fW1TuzlMgqq1MclKeqbaQi6I19Q4Bv+ixbJAQMcs4QfqH5NsNNwrSSfM= X-Gm-Gg: ASbGncurWkh1krTQIHcy13R7F345OGgpZy7RjKI8x1ogocNUYD/YLoLhWQdTDX7uE9J r1lVxUB6Qn2+poqdtIhXzTJFGVrFH+DZKmDIyB/amDohil+DckTN8ct25lbzWXwBfGjEazJHUPy H+ofoZzS1i1LW8FO44fem7wYIZJroECE0iuM4NmkcvkZw0tuatR+4v+6oLRNHMnbDHBulmFc3tb ERRay/mXh7Z8kqR+klfTMJPIlvL1xjt2UgBmN9GrSvABYrkfnr9iQziGGF/JxYBWmQWUlXAh58U dUZUol/Wsog6AFse3eEuHI67u/nnss40LnXFRW9j7nYzPxzQJLs2mqf0OYtrz0xbBge4+gey8hv A8n+94ee1uJTuqID+SuuiRsUHuBn3zRaaNFonkZ0= X-Google-Smtp-Source: AGHT+IGkFej7wA+D+9MX8Lr3kcvOnzytEv+Qp+TocL3cjiheh6H0vCnc4ppSGIDHkNR7a3JxbRCkEg== X-Received: by 2002:a17:903:41cd:b0:234:325:500b with SMTP id d9443c01a7336-24200d4d080mr105363455ad.22.1754060941855; Fri, 01 Aug 2025 08:09:01 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.08.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:09:01 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:36 +0800 Subject: [PATCH v14 12/13] drm/msm/dpu: support plane splitting in quad-pipe case 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-12-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=9601; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=Veemtj+x5rQsMyLh8xlpJx5684Alg7vW+nvGYC3hUMU=; b=VQPJ1yvQfDjR1RgN58Je64OTmw/xic8YUaczzA+ycZjESKoPYvXSLsaCEvnPYjEGqJ0GEFAm1 Z9FyUV38txOAPYvjOTrjKZVysVjMDuFHeeeHqSM6r8iP67E2SC8IWa0 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The content of every half of screen is sent out via one interface in dual-DSI case. The content for every interface is blended by a LM pair in quad-pipe case, thus a LM pair should not blend any content that cross the half of screen in this case. Clip plane into pipes per left and right half screen ROI if topology is quad pipe case. The clipped rectangle on every half of screen is futher handled by two pipes if its width exceeds a limit for a single pipe. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 11 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 137 +++++++++++++++++++++-----= ---- 3 files changed, 110 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index c7dc5b47ae18ebd78de30d2a0605caa7dd547850..1c7a5e545745320018c3e9a2d16= 3cbfd3dceaf7b 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -1592,6 +1592,17 @@ int dpu_crtc_vblank(struct drm_crtc *crtc, bool en) return 0; } =20 +/** + * dpu_crtc_get_num_lm - Get mixer number in this CRTC pipeline + * @state: Pointer to drm crtc state object + */ +unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state) +{ + struct dpu_crtc_state *cstate =3D to_dpu_crtc_state(state); + + return cstate->num_mixers; +} + #ifdef CONFIG_DEBUG_FS static int _dpu_debugfs_status_show(struct seq_file *s, void *data) { diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.h index 94392b9b924546f96e738ae20920cf9afd568e6b..6eaba5696e8e6bd1246a9895c4c= 8714ca6589b10 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -267,4 +267,6 @@ static inline enum dpu_crtc_client_type dpu_crtc_get_cl= ient_type( =20 void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event); =20 +unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state); + #endif /* _DPU_CRTC_H_ */ diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 9671af9620037b5c341e404bb3b2fc21696ce79e..1cd3d04b1d1b10cf803090c080e= 54611d943c053 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -824,8 +824,12 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pl= ane *plane, struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; + struct dpu_sw_pipe_cfg init_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; + const struct drm_display_mode *mode =3D &crtc_state->adjusted_mode; uint32_t max_linewidth; + u32 num_lm; + int stage_id, num_stages; =20 min_scale =3D FRAC_16_16(1, MAX_UPSCALE_RATIO); max_scale =3D MAX_DOWNSCALE_RATIO << 16; @@ -848,13 +852,10 @@ static int dpu_plane_atomic_check_nosspp(struct drm_p= lane *plane, return -EINVAL; } =20 - /* move the assignment here, to ease handling to another pairs later */ - pipe_cfg =3D &pstate->pipe_cfg[0]; - r_pipe_cfg =3D &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); + num_lm =3D dpu_crtc_get_num_lm(crtc_state); =20 - pipe_cfg->dst_rect =3D new_plane_state->dst; + /* state->src is 16.16, src_rect is not */ + drm_rect_fp_to_int(&init_pipe_cfg.src_rect, &new_plane_state->src); =20 fb_rect.x2 =3D new_plane_state->fb->width; fb_rect.y2 =3D new_plane_state->fb->height; @@ -879,35 +880,94 @@ static int dpu_plane_atomic_check_nosspp(struct drm_p= lane *plane, =20 max_linewidth =3D pdpu->catalog->caps->max_linewidth; =20 - drm_rect_rotate(&pipe_cfg->src_rect, + drm_rect_rotate(&init_pipe_cfg.src_rect, new_plane_state->fb->width, new_plane_state->fb->height, new_plane_state->rotation); =20 - if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) || - _dpu_plane_calc_clk(&crtc_state->adjusted_mode, pipe_cfg) > max_mdp_= clk_rate) { - if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) { - DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n", - DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth); - return -E2BIG; + /* + * We have 1 mixer pair cfg for 1:1:1 and 2:2:1 topology, 2 mixer pair + * configs for left and right half screen in case of 4:4:2 topology. + * But we may have 2 rect to split wide plane that exceeds limit with 1 + * config for 2:2:1. So need to handle both wide plane splitting, and + * two halves of screen splitting for quad-pipe case. Check dest + * rectangle left/right clipping first, then check wide rectangle + * splitting in every half next. + */ + num_stages =3D (num_lm + 1) / 2; + /* iterate mixer configs for this plane, to separate left/right with the = id */ + for (stage_id =3D 0; stage_id < num_stages; stage_id++) { + struct drm_rect mixer_rect =3D { + .x1 =3D stage_id * mode->hdisplay / num_stages, + .y1 =3D 0, + .x2 =3D (stage_id + 1) * mode->hdisplay / num_stages, + .y2 =3D mode->vdisplay + }; + int cfg_idx =3D stage_id * PIPES_PER_STAGE; + + pipe_cfg =3D &pstate->pipe_cfg[cfg_idx]; + r_pipe_cfg =3D &pstate->pipe_cfg[cfg_idx + 1]; + + drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + pipe_cfg->dst_rect =3D new_plane_state->dst; + + DPU_DEBUG_PLANE(pdpu, "checking src " DRM_RECT_FMT + " vs clip window " DRM_RECT_FMT "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), + DRM_RECT_ARG(&mixer_rect)); + + /* + * If this plane does not fall into mixer rect, check next + * mixer rect. + */ + if (!drm_rect_clip_scaled(&pipe_cfg->src_rect, + &pipe_cfg->dst_rect, + &mixer_rect)) { + memset(pipe_cfg, 0, 2 * sizeof(struct dpu_sw_pipe_cfg)); + + continue; } =20 - *r_pipe_cfg =3D *pipe_cfg; - pipe_cfg->src_rect.x2 =3D (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2= ) >> 1; - pipe_cfg->dst_rect.x2 =3D (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2= ) >> 1; - r_pipe_cfg->src_rect.x1 =3D pipe_cfg->src_rect.x2; - r_pipe_cfg->dst_rect.x1 =3D pipe_cfg->dst_rect.x2; - } else { - memset(r_pipe_cfg, 0, sizeof(*r_pipe_cfg)); - } + pipe_cfg->dst_rect.x1 -=3D mixer_rect.x1; + pipe_cfg->dst_rect.x2 -=3D mixer_rect.x1; + + DPU_DEBUG_PLANE(pdpu, "Got clip src:" DRM_RECT_FMT " dst: " DRM_RECT_FMT= "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), DRM_RECT_ARG(&pipe_cfg->dst_rect)); + + /* Split wide rect into 2 rect */ + if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) || + _dpu_plane_calc_clk(mode, pipe_cfg) > max_mdp_clk_rate) { + + if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) { + DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth); + return -E2BIG; + } + + memcpy(r_pipe_cfg, pipe_cfg, sizeof(struct dpu_sw_pipe_cfg)); + pipe_cfg->src_rect.x2 =3D (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x= 2) >> 1; + pipe_cfg->dst_rect.x2 =3D (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x= 2) >> 1; + r_pipe_cfg->src_rect.x1 =3D pipe_cfg->src_rect.x2; + r_pipe_cfg->dst_rect.x1 =3D pipe_cfg->dst_rect.x2; + DPU_DEBUG_PLANE(pdpu, "Split wide plane into:" + DRM_RECT_FMT " and " DRM_RECT_FMT "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), + DRM_RECT_ARG(&r_pipe_cfg->src_rect)); + } else { + memset(r_pipe_cfg, 0, sizeof(struct dpu_sw_pipe_cfg)); + } =20 - drm_rect_rotate_inv(&pipe_cfg->src_rect, - new_plane_state->fb->width, new_plane_state->fb->height, - new_plane_state->rotation); - if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) - drm_rect_rotate_inv(&r_pipe_cfg->src_rect, - new_plane_state->fb->width, new_plane_state->fb->height, + drm_rect_rotate_inv(&pipe_cfg->src_rect, + new_plane_state->fb->width, + new_plane_state->fb->height, new_plane_state->rotation); =20 + if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) + drm_rect_rotate_inv(&r_pipe_cfg->src_rect, + new_plane_state->fb->width, + new_plane_state->fb->height, + new_plane_state->rotation); + } + pstate->needs_qos_remap =3D drm_atomic_crtc_needs_modeset(crtc_state); =20 return 0; @@ -984,20 +1044,17 @@ static int dpu_plane_atomic_check_sspp(struct drm_pl= ane *plane, drm_atomic_get_new_plane_state(state, plane); struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; - struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->pipe_cfg[1]; - int ret =3D 0; - - ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, - &crtc_state->adjusted_mode, - new_plane_state); - if (ret) - return ret; + struct dpu_sw_pipe *pipe; + struct dpu_sw_pipe_cfg *pipe_cfg; + int ret =3D 0, i; =20 - if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) { - ret =3D dpu_plane_atomic_check_pipe(pdpu, r_pipe, r_pipe_cfg, + for (i =3D 0; i < PIPES_PER_PLANE; i++) { + pipe =3D &pstate->pipe[i]; + pipe_cfg =3D &pstate->pipe_cfg[i]; + if (!pipe->sspp) + continue; + DPU_DEBUG_PLANE(pdpu, "pipe %d is in use, validate it\n", i); + ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, &crtc_state->adjusted_mode, new_plane_state); if (ret) --=20 2.34.1 From nobody Sun Oct 5 14:34:06 2025 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D948C2777F7 for ; Fri, 1 Aug 2025 15:09:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060950; cv=none; b=LG1oJxNtjSOuIUDie7rtmQMfO+x+mAW2dq2qYNp+UoRVBF6m9FiFQID59ka1ATLCPzRVVbyLvkETAd8ZqIoyY5chXabxM0BeQJzI69O1qrA1vb47cDx5TFZ6LrSMDGt4WKDgZq2kuRdnZ3JBDRa2p58xud6nvaa7ZuENoft/uzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754060950; c=relaxed/simple; bh=L0RJjmTLlYkHLbKt8l66Y1ANmmW3YDpsTiGU9UI7WH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jwQm3AqZZCvUMr2I/AoqjxmksaaNIiy46E2byADTABKYxNOMTqNs2v0KnupKWKxvoRb35uayLg+pAh4yi+OAQDMo7azl+XQX3TZ+fhPz5Q8GcAfbej3xaUh/ANrchWE9cUVw66lEPe0RydHeHTYvmRIZmbScHdJknVSuoraG+Mw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=KgGUyWk9; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="KgGUyWk9" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-76bd202ef81so2231360b3a.3 for ; Fri, 01 Aug 2025 08:09:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1754060948; x=1754665748; 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=qMyTzj0YkyEhVsWHYdHluPcgaxyf2WjhZvLWIgnb3dk=; b=KgGUyWk9653gfLhLC0jnlIpmY4Jf/AN8iivneqkB+/zaCY8BcknvFxY+CNfMbq6LuG J+433qk5OUI4jMlwQhC89oyDXJxPsGCs5pDO3YP1aAbRFZUFE1uYR7CVxEoGXuzDXmZL EO/4EcH7xdjz0ofb+m2uQlgY4RRYtMfArAnNL1ZclZniLd51L77dELw5+Z7m/wsdjrHs IpPaHKCBB1uVEq5EejWK33HoAJPGiBg4sFBWIlZpYqaIHaju0TSpXmAtG1nz7RYmM1gO HU4UcVBQ2x2/44A2wit7HIOz31wR6YgXz83gdo9E0uK9kfN7acl014N3AjXsUX5VMdQh rnDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754060948; x=1754665748; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qMyTzj0YkyEhVsWHYdHluPcgaxyf2WjhZvLWIgnb3dk=; b=fU4cFEN+Pxb0sCexnwqN/TZQdDAr1go+qnkPsHC5dy8NIiIUukQHeB0B5EDE4kyhcl DE8EETFMR3RAYcYl2W1I/DD2Rq1haM9bil7IfEQAnTeYIAWXMqb6UWgnEWvBZitZGr00 u6UQn+3/hRa8FHss7bdKuwOyipfflLwr2ag3KPFMq2r8neRG9WRh/FIeBNyBDR9k6hyK uQvLygRKQbk7yb57OYiFVltZ3N28IzavQvQcPAmTEFu4fn1+Z22f0h4WlaOMXzB9jmG2 +9/0E+V1Ca6eQ29mkSMHVhWUBBnCJkUOeORxv859SaB2S0AzVlLt9uS8DaFYT0b0AzdL 6DEg== X-Forwarded-Encrypted: i=1; AJvYcCVZEFs/KiVWwur5j+ouqQVr7wpjtIiUJKSO+8PyHdAJb+TTBFadOZtLFje98I972SI06Ao/5pdMQvzPjTY=@vger.kernel.org X-Gm-Message-State: AOJu0YwxzS8MPcxpCKyEnXHwE7/LyGbl5Apq6JSRndZxnZ+zUOdir496 v7cp6ZZA002+Fs6kCGB0cbmoIwnZ9zDXHZJsG8pF+UmDJWiA/Jf8tN2orCflrbf/pZw= X-Gm-Gg: ASbGncsblb0hnuj8OBnupbILlAqvVjbKmrdmBYpbo01uIOVlWuoI5n+L8SKGs+oqfh4 NqjtfTR+53hm12/SHq8dkR1Khvlkl3Ua2JGOr3AC/tTd09iAALJxC1CWJskREKsG/Fv97MpNEUP V6zoZUnl250jb3dpEwKo+jH+ryHkH6GWOf37FljJQnBVCRz1WYMiH3Zia7LVq7fCknAJPRvU4pw KwkjIIYIVeJR5tMz41CRodVL2TTADEwdNjg8lyQzHsSx3grua8vlhhxwnKcEu95gYXZkbY0YLKQ pmEzTHgdG454Rm8xSHgln0rXTUvZPR2V28cdbOcPPJTCI3iEA0G+rzL7UsoXgeHlVOM54K7wWbL nmWQYgwuxs+OLJGDRkg== X-Google-Smtp-Source: AGHT+IFbIzv1RI9jaQPJA/y6fxdr9d8t/skdnwH51V+twjPoFCHjhTBO5pTmvEwfCUPhQB227TDx+w== X-Received: by 2002:a17:903:22c4:b0:240:a54e:218e with SMTP id d9443c01a7336-240a54e232cmr152369305ad.53.1754060948100; Fri, 01 Aug 2025 08:09:08 -0700 (PDT) Received: from [127.0.1.1] ([112.64.60.64]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-241e8aafa11sm45639705ad.172.2025.08.01.08.09.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Aug 2025 08:09:07 -0700 (PDT) From: Jun Nie Date: Fri, 01 Aug 2025 23:07:37 +0800 Subject: [PATCH v14 13/13] drm/msm/dpu: Enable quad-pipe for DSC and dual-DSI case 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: <20250801-v6-16-rc2-quad-pipe-upstream-v14-13-b626236f4c31@linaro.org> References: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> In-Reply-To: <20250801-v6-16-rc2-quad-pipe-upstream-v14-0-b626236f4c31@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang 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.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1754060859; l=8147; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=L0RJjmTLlYkHLbKt8l66Y1ANmmW3YDpsTiGU9UI7WH8=; b=I4x2VzIeZZcQrMOHoQWPzpCyld0+wvb0QhXLrqR0yjgWwmb5JZigsGOsJsLXSgN8SIJ6rkWQ8 JyYL9Abo2MxDMVrJVXyPrPRyQ8mz+JgNKiyZHKbfPUpZ/3D/YBwyVHV X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= To support high-resolution cases that exceed the width limitation of a pair of SSPPs, or scenarios that surpass the maximum MDP clock rate, additional pipes are necessary to enable parallel data processing within the SSPP width constraints and MDP clock rate. Request 4 mixers and 4 DSCs for high-resolution cases where both DSC and dual interfaces are enabled. More use cases can be incorporated later if quad-pipe capabilities are required. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 27 +++++++++++++++++---= --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 6 ++--- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 28 ++++++++------------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 2 +- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 1c7a5e545745320018c3e9a2d163cbfd3dceaf7b..2625ad777e477d2d5a6a746989b= b9e10493e19ad 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -200,7 +200,7 @@ static int dpu_crtc_get_lm_crc(struct drm_crtc *crtc, struct dpu_crtc_state *crtc_state) { struct dpu_crtc_mixer *m; - u32 crcs[CRTC_DUAL_MIXERS]; + u32 crcs[CRTC_QUAD_MIXERS]; =20 int rc =3D 0; int i; @@ -1328,6 +1328,7 @@ static struct msm_display_topology dpu_crtc_get_topol= ogy( struct drm_display_mode *mode =3D &crtc_state->adjusted_mode; struct msm_display_topology topology =3D {0}; struct drm_encoder *drm_enc; + u32 num_rt_intf; =20 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc_state->encoder_mask) dpu_encoder_update_topology(drm_enc, &topology, crtc_state->state, @@ -1341,11 +1342,14 @@ static struct msm_display_topology dpu_crtc_get_top= ology( * Dual display * 2 LM, 2 INTF ( Split display using 2 interfaces) * + * If DSC is enabled, try to use 4:4:2 topology if there is enough + * resource. Otherwise, use 2:2:2 topology. + * * Single display * 1 LM, 1 INTF * 2 LM, 1 INTF (stream merge to support high resolution interfaces) * - * If DSC is enabled, use 2 LMs for 2:2:1 topology + * If DSC is enabled, use 2:2:1 topology * * Add dspps to the reservation requirements if ctm is requested * @@ -1357,14 +1361,23 @@ static struct msm_display_topology dpu_crtc_get_top= ology( * (mode->hdisplay > MAX_HDISPLAY_SPLIT) check. */ =20 - if (topology.num_intf =3D=3D 2 && !topology.cwb_enabled) - topology.num_lm =3D 2; - else if (topology.num_dsc =3D=3D 2) + num_rt_intf =3D topology.num_intf; + if (topology.cwb_enabled) + num_rt_intf--; + + if (topology.num_dsc) { + if (dpu_kms->catalog->dsc_count >=3D num_rt_intf * 2) + topology.num_dsc =3D num_rt_intf * 2; + else + topology.num_dsc =3D num_rt_intf; + topology.num_lm =3D topology.num_dsc; + } else if (num_rt_intf =3D=3D 2) { topology.num_lm =3D 2; - else if (dpu_kms->catalog->caps->has_3d_merge) + } else if (dpu_kms->catalog->caps->has_3d_merge) { topology.num_lm =3D (mode->hdisplay > MAX_HDISPLAY_SPLIT) ? 2 : 1; - else + } else { topology.num_lm =3D 1; + } =20 if (crtc_state->ctm) topology.num_dspp =3D topology.num_lm; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.h index 6eaba5696e8e6bd1246a9895c4c8714ca6589b10..455073c7025b0bcb970d8817f19= 7d9bcacc6dca5 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -210,7 +210,7 @@ struct dpu_crtc_state { =20 bool bw_control; bool bw_split_vote; - struct drm_rect lm_bounds[CRTC_DUAL_MIXERS]; + struct drm_rect lm_bounds[CRTC_QUAD_MIXERS]; =20 uint64_t input_fence_timeout_ns; =20 @@ -218,10 +218,10 @@ struct dpu_crtc_state { =20 /* HW Resources reserved for the crtc */ u32 num_mixers; - struct dpu_crtc_mixer mixers[CRTC_DUAL_MIXERS]; + struct dpu_crtc_mixer mixers[CRTC_QUAD_MIXERS]; =20 u32 num_ctls; - struct dpu_hw_ctl *hw_ctls[CRTC_DUAL_MIXERS]; + struct dpu_hw_ctl *hw_ctls[CRTC_QUAD_MIXERS]; =20 enum dpu_crtc_crc_source crc_source; int crc_frame_skip_count; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 4616b360812491afbe63f8ffd4a57bc9604382e7..d13eeb3a707e186faec67ec02a6= 34c14414d9048 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -55,7 +55,7 @@ #define MAX_PHYS_ENCODERS_PER_VIRTUAL \ (MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES) =20 -#define MAX_CHANNELS_PER_ENC 2 +#define MAX_CHANNELS_PER_ENC 4 #define MAX_CWB_PER_ENC 2 =20 #define IDLE_SHORT_TIMEOUT 1 @@ -675,22 +675,12 @@ void dpu_encoder_update_topology(struct drm_encoder *= drm_enc, =20 dsc =3D dpu_encoder_get_dsc_config(drm_enc); =20 - /* We only support 2 DSC mode (with 2 LM and 1 INTF) */ - if (dsc) { - /* - * Use 2 DSC encoders, 2 layer mixers and 1 or 2 interfaces - * when Display Stream Compression (DSC) is enabled, - * and when enough DSC blocks are available. - * This is power-optimal and can drive up to (including) 4k - * screens. - */ - WARN(topology->num_intf > 2, - "DSC topology cannot support more than 2 interfaces\n"); - if (topology->num_intf >=3D 2 || dpu_kms->catalog->dsc_count >=3D 2) - topology->num_dsc =3D 2; - else - topology->num_dsc =3D 1; - } + /* + * Set DSC number as 1 to mark the enabled status, will be adjusted + * in dpu_crtc_get_topology() + */ + if (dsc) + topology->num_dsc =3D 1; =20 connector =3D drm_atomic_get_new_connector_for_encoder(state, drm_enc); if (!connector) @@ -2179,8 +2169,8 @@ static void dpu_encoder_helper_reset_mixers(struct dp= u_encoder_phys *phys_enc) struct dpu_hw_mixer_cfg mixer; int i, num_lm; struct dpu_global_state *global_state; - struct dpu_hw_blk *hw_lm[2]; - struct dpu_hw_mixer *hw_mixer[2]; + struct dpu_hw_blk *hw_lm[MAX_CHANNELS_PER_ENC]; + struct dpu_hw_mixer *hw_mixer[MAX_CHANNELS_PER_ENC]; struct dpu_hw_ctl *ctl =3D phys_enc->hw_ctl; =20 memset(&mixer, 0, sizeof(mixer)); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h b/drivers/gpu= /drm/msm/disp/dpu1/dpu_encoder_phys.h index 61b22d9494546885db609efa156222792af73d2a..09395d7910ac87c035b65cf4763= 50bf6c9619612 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h @@ -302,7 +302,7 @@ static inline enum dpu_3d_blend_mode dpu_encoder_helper= _get_3d_blend_mode( =20 /* Use merge_3d unless DSC MERGE topology is used */ if (phys_enc->split_role =3D=3D ENC_ROLE_SOLO && - dpu_cstate->num_mixers =3D=3D CRTC_DUAL_MIXERS && + (dpu_cstate->num_mixers !=3D 1) && !dpu_encoder_use_dsc_merge(phys_enc->parent)) return BLEND_3D_H_ROW_INT; =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/d= rm/msm/disp/dpu1/dpu_hw_catalog.h index a78bb2c334e30bc86554bde45355808b790c6235..ce0265c13e050fbd48ac5c3202e= 8fa23edd1220d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h @@ -24,7 +24,7 @@ #define DPU_MAX_IMG_WIDTH 0x3fff #define DPU_MAX_IMG_HEIGHT 0x3fff =20 -#define CRTC_DUAL_MIXERS 2 +#define CRTC_QUAD_MIXERS 4 =20 #define MAX_XIN_COUNT 16 =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index e4875a1f638db6f1983d9c51cb399319d27675e9..5cedcda285273a46cd6e11da63c= de92cab94b9f4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,7 +34,7 @@ #define DPU_MAX_PLANES 4 #endif =20 -#define STAGES_PER_PLANE 1 +#define STAGES_PER_PLANE 2 #define PIPES_PER_STAGE 2 #define PIPES_PER_PLANE (PIPES_PER_STAGE * STAGES_PER_PLANE) #ifndef DPU_MAX_DE_CURVES --=20 2.34.1