From nobody Fri Dec 19 17:51:35 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 B00221DF97C for ; Mon, 26 May 2025 09:28:38 +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=1748251720; cv=none; b=G3loWLEP5tnsC7w+FjIcOSL4VgB/VlWOUTuxVJvRmUrkPzbLRRDDYFb7ZMQ/0lG6k/SIUFFRs+ro2HHl5uRtFsNrG1HfEiV3gFuZUpExlL8fG0PP5hqaItpe+GyCTj8l2PrKhrg6Woj2jVR4w2HpbDmU4kget8/C+BMpbu3pC7k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251720; c=relaxed/simple; bh=2tgdYLNBOLqvrFN89J2Z5WKCnyYFo8/7L7F+T0zCRyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uK83zoenZD39phQxvvBuDhXptKT5Y/7otIm/v01YBBauBdCR/Ig4/UYmukapN4PrdSry5FbWt+Ah/3g1qNX9FBUTv9pId2UCxMJDAMD7sde4jlxxLTiuKdzl+/zrgAbxcRKdU6t0Spn10GSTbTGwhM35IBPR63ETdxUkDXKKnAo= 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=pu5MkGpP; 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="pu5MkGpP" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-736c277331eso2091472b3a.1 for ; Mon, 26 May 2025 02:28:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251718; x=1748856518; 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=1t7c3igEg2x4olSUhClV/gNMpW/HqELZn2hx26e4MFw=; b=pu5MkGpPKm+ZZT+7eVWkZ4cEvPn1km0J5ySLBBpQHDy9Rw6Ze2m3KtJ0tSAdSZYrzW EKYSyovLRpsZjfVGZip3v26mXJlmTrWur5ubpnnWaq5XaCHOcsu633WYMnD6XNprmL2i /RvQhCgHPnbhywXHQZNmCuteZ2QnL/TxDMsakYYjWL5Ct6Jug+Jr/5m+3MRg5Rqp162x I24/RVkHOu0XDdz5vRAhReRQtkUXbBCmRF8pkshuQjFdSFkEqU2b7SU/M7948sfrNkJV fOwaXv8GBVBHkFKDOiywkOPmd336ktwAV40tXpZAaskJ39bbKWItHKtQDVXwUnx4FQWZ fdCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251718; x=1748856518; 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=1t7c3igEg2x4olSUhClV/gNMpW/HqELZn2hx26e4MFw=; b=GU0qCJmdfny1fjpbXZEVFijzWIJo8UaJoew4MCFf4fBTNm4q1R1JKsy1AeHex3QuvP 54foTh/Hzy0Rudf8uZiNWQei0gvffeFnwTUJ68mD1g6Gv7IVJMZk3U9/8WUNuLwbqK0P CrNcb1cxDdz44OU6NxyegAEnbNUHPegnnnsyoCjBldWiPZT7o8GswPm/hVbLyeL6x66D vWMhYn46Q4lT88E6+cBLF72gWSsUODmZ81BDNIrSrGLi2UPoxEyeRX6xOyMRW5zh3fdy ezxsAdV2aW1oa1VX/X7MwXqtx09vYPZCBa0zwKCBkO95SrtADcGY5z+O2T/cuoWdFho9 s6hA== X-Forwarded-Encrypted: i=1; AJvYcCVCRYoSvLfx/Ilp7udg5yNgu+bakyCYVaCz88A8QO1LEMdqsvfN7n4trpJt6evtsGbTUMUTxSbp/3PdrhE=@vger.kernel.org X-Gm-Message-State: AOJu0YykPYXhe0dTSxuc7obGwf/WTwcl7Q14B/hvbCGPumijeSlOY2nc X+z5yAVu1sgCatouhBkIA64h5feVreEeBae0hQpjfV/sbvRAMlVwAWNyh67WujS0uKQ= X-Gm-Gg: ASbGncv0twVbE4zGmfNGb+PGX2Y0LiEjqC3mnYYNcN+hWxCbWvX3axYhax7/AtLEjZU EE+A8PlcrRhNIQuhnGcGG6E1EqKxkzeK+jZkXVlKIsqQiismavoCjgOfMRCiciwG/MKBauQydC6 UEtAc17VzVq63ZDD+LQ1yLBbTl57MmP+4HUJbaZlTkkfo0wn0hDTgeHuD4oLJK77KyNYSW8I8IH Un1sp6OHnBFQ7r5PW0EBjz/OhOEKsKhG5aSZIZUWFWQj2jOzAYeBmSOT/d9fnWL4urd3PvDsQ6H g8EcNsTQiTev4vGYlBlbhbCtezoU3KiJYLFr4P6rJhG2UYXfOA== X-Google-Smtp-Source: AGHT+IHIEUE39p3pm7fqUEWZFokJNuqhMaFWrAokjMrQkAg+U8O9ypjRt4CVJfbRtZXjQzdHd5A0iw== X-Received: by 2002:a05:6a20:9f4b:b0:1e1:9e9f:ae4 with SMTP id adf61e73a8af0-2188b6edb7fmr12343504637.13.1748251718059; Mon, 26 May 2025 02:28:38 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.28.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:28:37 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:19 +0800 Subject: [PATCH v10 01/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-1-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=2319; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=2tgdYLNBOLqvrFN89J2Z5WKCnyYFo8/7L7F+T0zCRyk=; b=+odY2eolbWW7KoKHW7wobHwAydvxpsitBhiFd1Xk9f2Swfkbjhr6zFt75/SJEkdUrTE7JTSrT +051B395rueB/f33ao+NIt5UbEvnIhNYQjxVznYtMEC1uOXAG0DBH7E 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 2e296f79cba1437470eeb30900a650f6f4e334b6..2d8ff4b524715c658188fe56bc3= 37e3ffa831c0a 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 Fri Dec 19 17:51:35 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 AC38D1F09BD for ; Mon, 26 May 2025 09:28:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251727; cv=none; b=XUylgQ/TZYuQ7cnpCBi8Gx6GdvCUJd+HOY7OsxQfBohXD6OKdow7ryueugRaZHNIARqaBcZsTLAJHRQWzF4Fr6unRiFn2/ZxHzaUhqphTMWWEork4oAFgIbPctkZgZZYDqFRc5yvnMkUBmqGzZH96d6ozFShhRKxaFZZ1t4jKcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251727; c=relaxed/simple; bh=S7+JCdaVrPN/DIMlTCVGutgCbXcGk68o1VHEmTYxOSE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QnL6jHDsWR0heesEFZVqZVAvM4igoDuTz/4meUOAVRs2qT5UmQHkPQ8wJobnd/qJjZ5NkSDBf9V6GgieLpkzHu0pvyFRIYfJtkdZph2lDSG3UDSQTG95R0pZWxnZqzo8eDOQIQ+kdmK78nSEiDwEqV/B6k3DElKHN4YeQ7bYDos= 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=KC1w2A7X; arc=none smtp.client-ip=209.85.210.180 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="KC1w2A7X" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-742b0840d98so1292891b3a.1 for ; Mon, 26 May 2025 02:28:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251725; x=1748856525; 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=09EQIdwbqPWaqIZsSaoyN953CphfLgGdEAZpUMvdFt0=; b=KC1w2A7Xez4VwSo6H4RVYZ8p4d5Gtm1MAickXRdhxCi09ONeC43I78kMS7CoxJ1rTK 8Waom8H0CH/eb24bK8BFWdHmiYNKD2wo1CtAp1Rsj2Af3pgq64c8KcGUkbmHbjKtjHFE +ZEacl8YwdeHGKp3amcYY0hXqYaXroYANiyD3NHHr2oKu0zHmon1gEnX6ISymBj3CtZi 0hKsemZU5gsXxSxb62J+RQsSWdZRsGQymGug1C1dwUENqBZf5JTK/dFKr67kQnWyFsaF wdV0GtGhVix3APvBcoN4DXPeCsg5Tx9Agu6F6XYtQx/wZl2eioTZPRIw2yI+zier8A/4 FjGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251725; x=1748856525; 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=09EQIdwbqPWaqIZsSaoyN953CphfLgGdEAZpUMvdFt0=; b=uWrczz0+fcbqqiA1rLXmuDpGw2b80Z4FokCJZHCJ2bG+lNMwKi9RLZtxWPhrk6SOjE /njXoZtmFQlu6D752MrQNuUl2+XFc3TVI0ACWExQokWyY/DaRJyhx9beSV8wpEWubQUo esdWn/e1JAl+iuZhtHUO5yriPBKTU2agPoCwMmy+Y2VQiQe4aUNJXuVVfhqQCHIq4esR +GotRyHPZySqIblCvr7M2CwsN2ZTT9O05an5YWBdMo2m1ijHix2nbX63H6YwL+b9PIGA Ct32DlesIG2SuiTwubShSGdaOhHHO4Q2nFnHyq8OyowlHgIKJbXwv7HqfY/YEUKM/ljq 9m/g== X-Forwarded-Encrypted: i=1; AJvYcCX3POEKDvRxWwAkUHqZS+c5Ofh5i/csaBcdMePEa1ydIpbYJtvJDWnKEhmqh/fZ7btizEuZbQTWZ/oScZk=@vger.kernel.org X-Gm-Message-State: AOJu0YxObJ1int2BNYnDbIx4gG9sLpCBX6hxG4KEJUMifiFBtBzJtCAP oq0T6z6tuC5H3b1vkKRhXdYEWq7rhjkPGXbpzq6TD6rvfS0K/LkBq65RaTlTp/ZIKVrKuoFds78 +HIo4 X-Gm-Gg: ASbGnctIA2fFf16ksqmpccciIFLtZuVh5FzmI88KpCIOXAZg1YVx9MKJqp9+WGXJcoT OIHpsvNOGMF2UUopqf/KIlm7qWkuBBu+xmN3cwIY0WHh4FG68JelSm2zegWpav24jURFR6eGUkK xpypdoy6qc/VqLB7OclphbV4io0iIufbfh/dqkoeIBjcfI7AJGrXc1n2vkXyujkLbtKhjgf1oml x7ZqkwPWjap5TegrrC6N0IUu2VSHKc/8MdfrF+LOR8k+JRljSoDh4UpnMmQGI5DX5MJxf5JKVxI JAh6+oBo8cnkjw9dW7mK0wykxwdhaqoPwKt0Ig2TvZUQ1SCfPA== X-Google-Smtp-Source: AGHT+IEK7rjKy/mvMPI79Z4WD0PENogcKdMFyBxYzHit7/FRHxn6LqQKn7YKX9/af44617gled9kLw== X-Received: by 2002:a05:6a21:458a:b0:215:f723:81b2 with SMTP id adf61e73a8af0-2188c291d4emr13919461637.21.1748251724931; Mon, 26 May 2025 02:28:44 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.28.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:28:44 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:20 +0800 Subject: [PATCH v10 02/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-2-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=1985; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=S7+JCdaVrPN/DIMlTCVGutgCbXcGk68o1VHEmTYxOSE=; b=DUdNxB0sCyTbGte5jKBqLS0uSxmc5nRMsJ9oKNzhyZSluKBN55Nfb6dKhKiY0NmrXktj394Os mj7wbw2RxNBCsqV0SEhfqN3JC/bKmjSSKSEeYgBXEQ7BNuasTvCvYJr 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 a4b0fe0d9899b32141928f0b6a16503a49b3c27a..90941ff4104f620d1f4f18ec260= 418ee59dc16b2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -369,11 +369,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; @@ -384,7 +383,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 Fri Dec 19 17:51:35 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 DFF971F09BD for ; Mon, 26 May 2025 09:28:51 +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=1748251733; cv=none; b=im/LYv/f2ElcWIN6za8tj+qPoC3JqZrzm993P6Ah8GV5oYFishXbOIXrRzeMuGoefbwYwHsMo6j6JGxpit1S3LgztA9/zwaxy9WisWx45M0D+rLqRXLPufjHbnRU4fzJtintJ5afC/SL2ZHn/ZkdXw2n3QS9ug98EMnGkwmFVRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251733; c=relaxed/simple; bh=2zVon4JQp3GbP7LIHy+YThFAabtOIovGb5UEovt+mkU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rL95kD7fzUNY/LyHmyxhYPZYkguyeTFDb3hSSf7knrhYt3aSoPsVLNJ6kbJqH42aXE3+TyClsmKXyeO7gr6sWbsKnKGjVq30QdGiqt5vjuC3GcFo3rO5L1Iz+hiUEAPzjV9PMV2islEbSjZg1hDe4otcUCjygBT01VPeMkLr6a0= 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=bXo5Itmn; 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="bXo5Itmn" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-7399838db7fso1519813b3a.0 for ; Mon, 26 May 2025 02:28:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251731; x=1748856531; 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=rt8YnN9QqmYqFYc3WnGD82J6Gb61BHncikNZ5zZQ3CM=; b=bXo5ItmnqZwYKryiSm0c1qZw5r6/RNVhAUBcHeiPbVIpCOjM/lhupVS91gxMGI8tT4 P787lciIg4lRStV7S4z5Yuio9hknaXym8WRSevHl3FueLYc4ExD7VYRv5lkCYcCUjxV0 p+nmoYnHM3MqdZm5ri5dyBis7WFcMed8fM03ouP0p/lekNFCA4yNlDMCDzpNXL24lXMV r5P1aDhBo1bRMiBuwXyxhMsn3ZlBz4ZIL3yjZE120TK41+EAvzOfHnZdFiZ7F3CEyTwx tg+LJpoEGRrUuvRmmHa4fBC+u6RKA/wwEFO4t6/Gif03X5Y4OAH5v2IdcesdskVehHfO B6Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251731; x=1748856531; 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=rt8YnN9QqmYqFYc3WnGD82J6Gb61BHncikNZ5zZQ3CM=; b=UytgjHOuNrpBiDyWHgk6T0BkZUqHOTr5G4R7Kaoeuj+t9kIaCbhv2QFLXmgb6DjH4g hCX23OpqCB8gNTGaur7+jxaZ6J5XRystcFLYdZpxHx7SL6unXtKIWvdAOiS6SH1Ifzxh NRl67pqUQUcWTgqi93Ai1pNzbCgNKVJVJSSjOvc8N2sNb5UvKgN0YufgLav2RE5D25V+ /Px9BvbuPv0dJIvpRPp8s48lcUCyT2S+W+77WgJ3MGqGj1/7yNfoHMBCchV2u+jVo3dH LAw27N0yGk3qoCZX4qZeuhXr/Pa+NQH3SHIr7ziQ/QIy5vNpild/UP+f95UmFVoJECDr Kucw== X-Forwarded-Encrypted: i=1; AJvYcCXceMuhBwNzSkwqQTqZ1i82ylX0W0VA/JU//JQldLJvUtsNSuzMiljdBRG3J1EMzw0rMs2KwluVIuTN+MU=@vger.kernel.org X-Gm-Message-State: AOJu0YwevDsdNaX8F4txJPmZy5Kvj3hRJgqePi23GPQocsUYD4ImSiCN RzAeR/cKnIau93qnq8hXDN18fzFFX/WLcUKxg2VaOQIDGEWV22fpPSyCuYVn4wL+8wY= X-Gm-Gg: ASbGncujL717pW802qZ3qLGMgJVWkxGQrbn7wyTjLlwh0L4UwbMOjptzcYr9tSj7sSC 5nDnKp6YDL7HNzu2xWNCRLinod/kv66GpXgf7+qyTHTcstv3AW7Z0K0seLkzwAWKhNq0zrVnOte rNYQqzTF9+qEm5gw7iqV3VMTg7zvMT7dxJsSWOgQGqLbupNVsj0vj5TNqhb9G3QA5+BowC39wnG eLmqgmMMJQ05oXp4dz0OVyiSjcT8uGQYUNbTvmEr/7ApL+jlU3bb8XbYG/6tjkvgGGJUeD/dkJu eT9Z1PZmN261K6ke6UxLOxhYcjykPAoWfGRZn8vNTLPOe4NDCg== X-Google-Smtp-Source: AGHT+IGJHwGsOxCdN5oGis27vb1AyYNhvNbxlgv3Kb4o4M728AI9zEGSMuLJuyD0gEFVU4qbEDu0qQ== X-Received: by 2002:a05:6a00:138d:b0:742:ccf9:317a with SMTP id d2e1a72fcca58-745ece8e29fmr18116579b3a.12.1748251731195; Mon, 26 May 2025 02:28:51 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:28:50 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:21 +0800 Subject: [PATCH v10 03/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-3-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=1366; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=2zVon4JQp3GbP7LIHy+YThFAabtOIovGb5UEovt+mkU=; b=lutuJy0IlgOtx6aUkFLZEfXbrUQnxG83yF25Vb6Q9+e+okhLrSXqHlx66bdw4JoPZ/idme+0t fsk2zMHDXoTC4OFQ469lUlWf2vO+151FQG8yJoYNfRKlvlJCcMBqOuI 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 2d8ff4b524715c658188fe56bc337e3ffa831c0a..bc7639a46386c6b9457edf3afdf= 6f747a632651f 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 Fri Dec 19 17:51:35 2025 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (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 E190B1F2C58 for ; Mon, 26 May 2025 09:28:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251740; cv=none; b=KdGUVN6pz2Hm5NbtA5xfPnlr9ot6kGHfE/tUZDZB7GRrhjBlGdYZb1MTgptR2KW1aymC9Y4JG5jr+8nPVFxddUAp51R48kRA7CE+4rThRlibDx/JLGzOeE6IemaHIDznJby9uIYAadSgjlXLANWsj4YzLxvbqj4vbDzu6gosepY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251740; c=relaxed/simple; bh=uDQ4bz8vnlfaTdZAeHvnaqmYz1iezU6QmXEPd3wO/d8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hxoJ7nU750s40iK+BJmFRZJXXLOCkGvbJY4yO75KbPZJ9ZjGLj+7ag0gZUuYnUiy81owC/oa4eHrcBCvOZ2+xWAF/tjac/X79Gah6+jO7d0b5edoXgR6LrHz3DlH6qoePW/zGJdJ3i5+lwQx4k3Ou5tPIfAnJkA8ktul5k3/guE= 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=nXA4j5ef; arc=none smtp.client-ip=209.85.215.175 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="nXA4j5ef" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-7fd35b301bdso1686550a12.2 for ; Mon, 26 May 2025 02:28:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251738; x=1748856538; 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=wtx+6yP/PZ5J4/5h8BZGfldjHe/UjZ6koSQGv1wSzO0=; b=nXA4j5efiwrHnwlCuIIE8M9zxB9KteLxcidG//nA8WAgJZBW463bO+944CoFNt+aA2 PTb1ljfg5WHO4jzWL92K3dxHaWbHpuRh/7VCqtWZGR3uxH3JnjMSmj4tKOeDZkuCEfxm WdzeM4MGLXNklHZslhu6eE2PTI0J+J3EK/O68lZ7Zqo3y7/d8Kb5XAiI+3cessNzV06N b9kXXkiyiKlnnHrML6WfKHflJFUWb40V/2jK7bw/Srdrn3jrXOjNP6eZ+5PsIZfC7KW/ 5emw9xiii085syGKUIR9DRuO955hTWGyjsMTFkGqe7HJ2kIbhJtCt8zqTKJfBmnqPy6d SvoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251738; x=1748856538; 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=wtx+6yP/PZ5J4/5h8BZGfldjHe/UjZ6koSQGv1wSzO0=; b=ADfayPO0fnBBKgp4D5DvfvzFvo+bNwcDd0OTKB/OBHlzUlyo7okUFk8ABflfX+lhQP 9zXTX+rfrmEIlQmUNL3qyYf4dtoXxWfaeKUCQhhq/opaYaM8lsMGJLeHbbimYbi1Ogy5 pbn1n/pDFtG5XIoyEATVAbvIoq5Op/FzdZ7lnarUeAp26ZfQgpDjvoc+Lf6J/CU3jxgM UwXemhte/XltOCQNrVpPfm+xDG03bkRiBQyxYkI0uyeaRp257o1jAJqWoIF8wcb6SKhK jU2fS6kTddWGh0llg1GeDG1flITErLj8wrdv8jE/SQh+GPoj0PLd7rMkG63uTWQufoNU wqbw== X-Forwarded-Encrypted: i=1; AJvYcCXCOxsZiHNpCUdYuD7V80obRQAKHCyZaRXfADN+pIVM1Asv8gPcVULWk6dbO3IROEa9IUDl0mG7NyWZDNM=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd9ejRJreeCsZ1qzayDNpe3oDpONK6UEvT1LeAjZYDFkFTQoXd rke2DVBLiHd1trfOo1w5d6Gxg3gi/ipPcexN/gdBppJbG3sAHMWrDwbei31RUY0QkqU= X-Gm-Gg: ASbGncvfDRtgplv/KHqzlxpne2DeqI8QpJ3MMwZy4q0n9/m89eGamBzANX4CUILMlEG rqibhJQt6eIxCdoEwTxQLvgbiA2HqoWan1jUkHSpMA1tlYllDEUlF5inR16fNn3xFjspR4W2QUI YB0OWY+I5qiwQXAjF2umEbB7uyf8PoLq4PO9X9PVvER0X/goSp7ZCfO/mtsqBdLNoovmBDp0Qr1 q6wBG0oVjx1al/exyfrHywXlXdZJB41PreDH9R0nYnYy/rAM9jCGwFxiJoj1+2KNepUiELLymtz 40p69XT/tPKF2de66M/AT4SVJ1H0h7rAxovt2az5l3mDgCd8JQ== X-Google-Smtp-Source: AGHT+IHg731yrBi3amdlRqRR8fJoqCAqCFFXApSAmT3tMnMtzw9du/a77ZBzV8cgtRweVYwDLfUSMw== X-Received: by 2002:a05:6a21:6f12:b0:215:ee8f:9930 with SMTP id adf61e73a8af0-2188c37400bmr13100446637.33.1748251738197; Mon, 26 May 2025 02:28:58 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.28.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:28:57 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:22 +0800 Subject: [PATCH v10 04/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-4-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=1809; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=uDQ4bz8vnlfaTdZAeHvnaqmYz1iezU6QmXEPd3wO/d8=; b=mLvib70zbFHGz2cJgp25wrBgI33CfCNwmyWLywg1zVcvHZpswrxfEMFZ+zHOGXd5FPM9dVBiY r6eiZ77IfCqAKJLC3X81da4kjM0dw5FvCZfbwjjla1aUKFNhpJTfNgW 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 7020098360e474ee149824a488d912a7ad8ed06a..be8102691b99d3b381476ff844d= dfd28fe17dc7c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1157,7 +1157,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; @@ -1236,10 +1236,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 Fri Dec 19 17:51:35 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 11CFA1F150B for ; Mon, 26 May 2025 09:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251747; cv=none; b=h3Pk7cLUL8Syn5sGTvDDNMvg+eY3oSN9gaENQr+tsOJr5fK2jmeBT5yJG4GS/9yDgglyfwOcyqRwdsPUh6dK8uKT/5vqjab0KVtdG3kKjEnkFGU65F0HR8D66Kjah1CQDwwQPQBaBk4i48gA5PSWlolsNk5vuXRP8PSxOWvq5dI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251747; c=relaxed/simple; bh=AzK35uakUtRc9B2/mkaI31Hgz37sujAtB+6mV9+2mao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pIBhZt+iK4mC/xCUKhDhP9akZBSvZSKGr9SoJqsN1KFeP4SgYyUeH9kkScX4HUxR6iES8a541Wvlsdde7VQV+Y9YYY9qo6nW+uTqcLoNhvUl/hnASJwFWJzpvxJ4vzBSHwhnuwF6PlljcPYNRMEpLYq8mhgNvzvj5cAfz4agGgI= 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=BXPk9GbT; arc=none smtp.client-ip=209.85.210.180 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="BXPk9GbT" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-742c73f82dfso1395806b3a.2 for ; Mon, 26 May 2025 02:29:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251745; x=1748856545; 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=9JA927uWtYKHWYqLpVeeOOuDkS72N+Td94lU14Gx7eE=; b=BXPk9GbTfrVGJNj0XCQqEdUyz3GDcy5eoQFiO7zgDqoPPsoB/M2lcfivkTuJ9rqUa/ MdgiaQ55V6Cm5ZFdJRaOPL1jUAtHXBenU5Vo3aMleI54He51PF1wJAyy+ShgBmLrxhW/ tqdSEBzFOrU4FugORe15xgI8ySlOnFLU+FrqKCg5TP3gUQy3aOe/YTRttKebNwCpCHso iCKTVKGvqtXBvVTn6mFiAS00gok6PwnUwDJ73nCigfEz6CT2g06Rm6/pVwEGzZKAzhj5 U4KPQJQVuYr3QxXc8uY2+P72ncg1uLBtZkT8gUdYe9ZCBTtv1PXtUxze3B/vDmAZshfj yYaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251745; x=1748856545; 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=9JA927uWtYKHWYqLpVeeOOuDkS72N+Td94lU14Gx7eE=; b=fjqKgYGU4RkA+fpbtz0UnLAo8JsvW/z92Qruo31YNZhz+hoBrBn8CLPVpRYXDh9WTc 45jIcXX3jtd2Lhu+hd4TiP7MlsnqfxQ9kuUzWEFxBur6f6X2PmQG33dMwhcWiFzTguW4 cnbKB3ZOXgjs+xjDj9cJOfFM0/hhdrUGt+eVZ8sKBByyp3twomWJ6QCD/2HOGRIv++dc m1OECmZ26YLFUj775ap0izrGtjrl+qKXyeepmW5ky41lcOkWLQko800BoYXycSgg2ePY PS0xG40eT68YRRcXK36hS4G8d8jmzajuLjIaTiXt1icpvthiQj98fyOvW5swFijqvtRf P5LA== X-Forwarded-Encrypted: i=1; AJvYcCXFHCExoEU1w4i8RhkAZJoRPtN9H1Vfir9lG6QYN1hIppQet7CPUl2X1bRzJpicN1f9fUmvorRIUkPfK68=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0BaZi+Yu392yFUaOWLyUxNTilyNcmo+Ge3s26/VMbypXW82Fs ElHo1CsP4twJBmDk09CIBSuKyQ0AINBTAvauLHV6f7Psgb+Umi6mmfLYh3xB3xmwFRM= X-Gm-Gg: ASbGncsOjQqvUtDvizU3qPHBCFk3695b3h3yCdLFs02vwq2DIDNOLAe3K/L/itIlc34 mmGGIo6aCculPiTny8TS61uhqcyywr88TE3o8VCqnYOPc0SjEfEBjJ+XhKk3/xxUdKcxJVJuPau 7z/def/rdih1Yy2vyPajrzMyO42eP+p5s688WntJcUS39qrUAfvAFeRkKOhAzGTpr7iwPF6XrJU fWml2d+sfjR+zkeWpM0wlUHVOE1SOiHbaPUxmqN1ewXMTguVRv584WeDE8LTadmM6DDO5iDxfqU nWWa7eGI2MRuisuju55ujS9TU0gIO0pVVPwQB5NJgpP4IWySXw== X-Google-Smtp-Source: AGHT+IEfpaV5RMzOqtdfCNJc96vkUVwkfQfweeWxe8pOUvEMvoqIQ+2/dZVO44+go5U/uqEDw2lwKQ== X-Received: by 2002:a05:6a20:7d9a:b0:203:bb3b:5f03 with SMTP id adf61e73a8af0-2188c20e04emr13542802637.6.1748251745296; Mon, 26 May 2025 02:29:05 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.28.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:04 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:23 +0800 Subject: [PATCH v10 05/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-5-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=2487; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=AzK35uakUtRc9B2/mkaI31Hgz37sujAtB+6mV9+2mao=; b=usJtqEGDndm7ZVeIqseoGaTQlRsnJgcsJnE8Nc6A/ggxAaKwUmry4U4M0Qz9ydHPVAiMrtzK8 V7EmjEpVEZhDBlUc+srM/VkGazsUR/SmWgJ+Tfq8Rz06SDFwMI1g6je 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 90941ff4104f620d1f4f18ec260418ee59dc16b2..3a7e030e1241a5115460a1e9d55= 2341f8dff7d85 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -411,7 +411,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 Fri Dec 19 17:51:35 2025 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (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 925901F2388 for ; Mon, 26 May 2025 09:29:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251756; cv=none; b=iU6kqGzRPPCK71ZnEOH0/lxfVso0y3B9oOXLSNUVG03ZmWSTvz3cMmV0HDohY+uItFUh2yUaEI/FCkATq8bpXk5TVxG0k0ZURNtxSnyEEXJGFDt/2Dopkc5Q5CbJm98PRKEtsYjxE2Y8wAnOWbsv0sST5tdHFtwwdBcsJIqcjss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251756; c=relaxed/simple; bh=hc6q66cKgkBOcJ7mYc6DWQLuDQTTFturaGzmFHg7IF0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AJkyKqCCKkZQ+4bnfVa1v/piImFgGBSMwpD0MKab/qHlb4/3vTBWAXS/A5HxEzh0+Hvvihdq2rcnWH7HV6riuk2CgqC/3wnrk3mzMXpCNZO7Cq/LJRkxmx1cZ63d8MkumpBZOBvfR9BzXPdEq+e2Kl3HFglVeIKzWJbstjDJpjU= 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=khB3kvyT; arc=none smtp.client-ip=209.85.210.182 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="khB3kvyT" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-7406c6dd2b1so2100029b3a.0 for ; Mon, 26 May 2025 02:29:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251753; x=1748856553; 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=zUV6CqYs5paz3rXS7jEcTHJV+cA4LT/Pp4TEwOc0Qoo=; b=khB3kvyT5ld9p7L/oFlC49SNDcqcbqmVPOVaRBAJ3voDYi9rYpiMX406MfVZBjcuSN PM6dgRPyRT7htGVJ60tHsnHBPWJWqQAk8KnNSNxqnXV0JEaLeb6ZEERgrFEN9LB9nUcN LdNqiDWugQOuJXxwmixuCtJZ8Lwnf1BiqSdZmhpXUpZThHYAg9OGmHp73YTStIbRA+Zz C7xq07+jTNG0z7HBHmAspNcwQnxxa9DAW686Uv5qgpHFfjxykheEdqkw7e/aUvxOeqXU EpBhxkAELk5qhkuMzvPUoCKA77d7TkjDfUimEpJBY+gywBAS5CTDVLNQchVrkmdktc2Y h8aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251753; x=1748856553; 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=zUV6CqYs5paz3rXS7jEcTHJV+cA4LT/Pp4TEwOc0Qoo=; b=jl+rPmjJHEnzwaNf6av3pdCug/nFGLCpDwGVgYlL1ska7S1c++Pi8PHI1MvOeVsJ3y Etf+OL5FXU28z91P0+IuQRUej0Z6FbOUCYSY0jvcPC5ZRWkWPfL2wMDW18gD0mgHZu80 pLcVr7SmKfb72AhOIfwuU0W3s5nrZ83xXwmhePp5WuWCTYeMBI6xKlYZldgot4Em6GBS FPGPzBbg1QPzUyO7LQmtZ7tOp+0M+5cgOp8X+mBtvsr+NDeIiSwhk1fTVXjNsFfjlNxb QXDqdF68cplPabg3EtjYlMZxRQlbdhq/j32F9ZEQU4yHUw2/OvsbB3K8OIcfnsDwbcTc rJ4Q== X-Forwarded-Encrypted: i=1; AJvYcCUDHS0r1bHO1+LXJQNtwYTmEZquSVBroxFPMwgTwe4mzGxQIwzv/NMq4TeXFG/4YGkh6VqCzJNtWi3gN78=@vger.kernel.org X-Gm-Message-State: AOJu0Ywzl22IsU2GgNh9YT8NGtc3W5niVFBl7wDt30GQL5MMwa6d3ld2 Rc/E4xRNiA9qw1hwz+X8JdwKPRX8oM8Z6SdOoxCM6/7s/mR5wDvwuz9SF4vZRo5Dapw= X-Gm-Gg: ASbGnctOtNUXsB+d/tYV3yJeOvYQo/PYSQFY+XBINbQYkZ6ulByoB2oCReDVhfen0Xf /f3y27YzrqB3laA3tST7GqQ4FFD4TxVpxVs0mToKDrbcUxVMuNp//zR79A170+0PR7jNgaxWelG Jl9gdMzMZm85U3pcvONI128dB4NtHDB/wS6nLpvF6Zo878sQ5vwuB72UJNt33BUQPrj+WHDJ1hn PgPpMaOW3GKyCdUfFx0fkkvODKwRxpOGFJ0x8dDTFekaC2Toj8FmIjKx6DUqL7sadHs51jeQ0yn RFgzaRGhq5A/OoNjshFtI3MoZIbRt76hMxWhOImrwDlIFHBpkhtmL6pWtvvX X-Google-Smtp-Source: AGHT+IGdAmoWQYugnl+PbBLMlbnc02yPO58njpKwG0ntq2oeE/DkpMSxUe6kb0/uvbOiVHlIvcGHPg== X-Received: by 2002:a05:6a20:9f8e:b0:218:574e:830d with SMTP id adf61e73a8af0-2188b78d232mr13330984637.21.1748251752742; Mon, 26 May 2025 02:29:12 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:12 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:24 +0800 Subject: [PATCH v10 06/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-6-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=18035; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=hc6q66cKgkBOcJ7mYc6DWQLuDQTTFturaGzmFHg7IF0=; b=BmLQh70QX5CHf9lnzOmLT3n7JFYxkAWmahghyNeDCl+5G29pqME6GHOgvS0dxV5wK/N6QSZDp RS6LbBsw4Q4Brb8hDtFNkWFkJDQlmYOEXL3I/lNkBG9oZIe8WXyX+qg 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 | 35 +++--- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 181 +++++++++++++++++---------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 12 +- 3 files changed, 119 insertions(+), 109 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 3a7e030e1241a5115460a1e9d552341f8dff7d85..8cda5ba7f4042492d7c8a7e6596= 0aeee51565615 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -442,7 +442,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; =20 - uint32_t lm_idx; + uint32_t lm_idx, i; bool bg_alpha_enable =3D false; DECLARE_BITMAP(active_fetch, SSPP_MAX); =20 @@ -463,20 +463,15 @@ 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); - _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); + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + set_bit(pstate->pipe[i].sspp->idx, active_fetch); _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 */ @@ -1636,15 +1631,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 421138bc3cb779c45fcfd5319056f0d31c862452..7efee42943866e4999b0ca04ecd= c67380a1b1d08 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -619,6 +619,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 @@ -632,12 +633,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, @@ -827,8 +829,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 @@ -853,6 +855,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 @@ -965,10 +970,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, @@ -1023,15 +1028,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 @@ -1090,10 +1095,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 @@ -1137,7 +1142,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); @@ -1155,8 +1160,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; } @@ -1194,6 +1199,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, @@ -1202,13 +1208,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; @@ -1319,6 +1326,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"); @@ -1339,8 +1347,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 */ @@ -1441,15 +1449,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 @@ -1464,12 +1469,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); } @@ -1477,15 +1482,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 @@ -1493,17 +1500,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; @@ -1598,31 +1619,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 @@ -1660,14 +1676,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 acd5725175cdde4fcf7a9f71bb446251c5a14d22..052fd046e8463855b16b30389c2= efc67c0c15281 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -18,10 +18,8 @@ * struct dpu_plane_state: Define dpu extension of drm plane state object * @base: base drm plane state object * @aspace: pointer to address space for input/output buffers - * @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 @@ -35,10 +33,8 @@ struct dpu_plane_state { struct drm_plane_state base; struct msm_gem_address_space *aspace; - 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 Fri Dec 19 17:51:35 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 52B951F4C96 for ; Mon, 26 May 2025 09:29:20 +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=1748251762; cv=none; b=p1bqR8l9uzBq7oDR3mQ/OB1muigPTyk0mOT3rUgLz3ALfap+FYUN0J1LYqDILoV85emmWuoZNy5pccj1HiqTS1hxgeL2822f6A6re6X0/lyMKGYJuQWjG3WyDiO/lZczQT/Omth2sKpN4ui3X3rI2+dQnFJARr1opV9SJgFvbG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251762; c=relaxed/simple; bh=i9jqTYWgdUcfVxledyCdB1fwWCOzjmcgPZJqlQ4gFuE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ebozdHqrHLsCoBmAYeq+MiCPYrmW4+GqoYfJkhK/Vbt4dUMxtSRsKopqdOqbvCBNVKQ7lkrSFXL4ff2KDaxCK9vzs7fKptGzXpfQZNz1GQZ0RzsDoFyEchl5/1YcpQr0OERE97Z11NBl+Gv3IWjtLK7Teuw4XRQJOfG01La6VPM= 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=GhildfbD; 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="GhildfbD" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-73c17c770a7so1961361b3a.2 for ; Mon, 26 May 2025 02:29:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251759; x=1748856559; 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=9jN7yZv9TsqhtqEO6BVaXQG7IQnYIAamV5YS7V/dpnA=; b=GhildfbDjyc1c2YavaiWfEN7R3M3XfdWD3h244lKsGTP/dRejImB97UWMnretxU96L um7oL5rF7CCrVjKDsDLbVK8dHhtN9DkW4i+hk8AULVhg3mpOiMmDZIz2sOMsdLccJ83b GWn+OPYGTM+fBBpWZupMjSh5krPLpvMZKoSM3Irvs5M2ekD32iV+ASMI4E4YpEx2Iz57 bz3/vr/1rtrDsm8iL9ed/e3g/5YE9hYn5aK86N/DAml+3Ly0pN69VrRsKNaLCojK6EVU 85WUlGIivdRGUe2wu+DD4e0v+5vtfHPIdlf4ImBdb0sZ0onSeeiPP9C9/WYVpsrJe5+Y h1pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251759; x=1748856559; 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=9jN7yZv9TsqhtqEO6BVaXQG7IQnYIAamV5YS7V/dpnA=; b=TBUeeurlqF0cA+xuc2dNDykMsBDQvALzaBq9/WPWJc+gMXN3vhYmaNR0ElgAQU2WT1 pNCLatMEk54YMwXbtsIGZH89x5O3L1/I0j/d8y9nMLFp2FkrncVkCbwpt9W5PdyDyqWi 6Pgk0hFGihggSI/+ayey0fFmEazVpXmeZSUdBG7RX+q3ivwmVwW4QVmGVphFbyhGnEUY BA+bYX7oNq86sWpLapugAijupjeZvgoYElJjZDgHnUpZfhLy4umTbA1emi+n+rvkq658 kIlFdSwYoP9LnyE6xnO9Wk155bTfkHpn5yZvUvwS8WRBgIfkASdNQFGioGNceSFqVJsk hbrg== X-Forwarded-Encrypted: i=1; AJvYcCWiyv8g+8LZ/7+kVKfQUsTDgaWn1pa+QKNa5BBibBRq/9XyC5RqI9XRZ65yiQeNx7Qu/X2sv57/o20Oob0=@vger.kernel.org X-Gm-Message-State: AOJu0YzSVEj6iwSwfrpHPmLggmhOYJy84H94xqPCFN3TFIhQA9hERby9 VzP5JtBmM1spcoiCRbtPoUWqsmnLDboPvQ6x/0PardeyNEVlY1056kt20C2NrBvUwEf1CKxfUCp o6t/s X-Gm-Gg: ASbGncu5zi+4WQDWRXrPbW9OSnG+cDfkAXec3pgWSxrbzLyRcQdwI7nGnRxXz7X0J/L mHCRfVq5nSXf1QRDrrSXRBdqua19Z1UlwupPLxyR9HfXHknU6splBkOkJY+TS3HJOhZpqWKFuLu SB1vkmPWJlsN4e5mwElA2ZkfYX3Q1OZFwhOmRTJyrOqs0KRv4dEb8GFDXpOxx31e64lKLS6a6CF 8H6P7d8nwbpCp71v9esJFNTrldE27Yg41Zr6LKGwwTwlWoJtghni0ERuzB6rnblKiieYvCEniGM grDO4kK+GY+AvD87R4ORwbPqhc4RtGfuo+BN7llWBiDYrN9bVA== X-Google-Smtp-Source: AGHT+IFDf/uJHX1F4k2DUJw2vrl0Qtn40RHap2sFuWwuVSHWe9EJL3pzA1E/hw3wNZG2kGha73S28Q== X-Received: by 2002:a05:6a20:3d8c:b0:1f5:8cc8:9cc5 with SMTP id adf61e73a8af0-2188c37d595mr16009508637.34.1748251759637; Mon, 26 May 2025 02:29:19 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:19 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:25 +0800 Subject: [PATCH v10 07/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-7-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=6424; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=i9jqTYWgdUcfVxledyCdB1fwWCOzjmcgPZJqlQ4gFuE=; b=kLI+R2uvCNn1nFSQk7uP5jHEp4bUe1eHUuwvikOdNpzsp+nTkAwFw90544L+z7U3/P3jmYG9d pUKd0D9el/4AZWkpk+CLzG7jnfv5e/5OwF6xx+SeBNxZUencE+/W34L 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 | 6 +++--- 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(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 8cda5ba7f4042492d7c8a7e65960aeee51565615..e7f1b5816511b33b106f292541f= 8f5c966c87118 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -463,7 +463,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); @@ -1274,7 +1274,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( @@ -1632,7 +1632,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 7efee42943866e4999b0ca04ecdc67380a1b1d08..0bb153a71353ca9eaca138ebbee= 4cd699414771d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -633,7 +633,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], @@ -1160,7 +1160,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; @@ -1214,7 +1214,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) @@ -1347,7 +1347,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 @@ -1470,7 +1470,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], @@ -1484,7 +1484,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, @@ -1503,7 +1503,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; @@ -1625,7 +1625,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; @@ -1682,7 +1682,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 052fd046e8463855b16b30389c2efc67c0c15281..18ff5ec2603ed63ce45f530ced3= 407d3b70c737b 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -33,8 +33,8 @@ struct dpu_plane_state { struct drm_plane_state base; struct msm_gem_address_space *aspace; - 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 Fri Dec 19 17:51:35 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 EEAAD1F63F9 for ; Mon, 26 May 2025 09:29:26 +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=1748251769; cv=none; b=TRTSWRd5aATWyFHWrgiHk6wVAgobfLgjrP1Uxk0LXO4oki9JVUjv9GJ2duAi/klmrZpyMcuw0irEghvCpTCvf6FADW6Y7dOEtzKbNvxYyV47o2oAXNEEznHz7iNW47v6DjdaUSKhti1aKV7JsJEJJ53Leg1v3eskeyfoY9nSzy0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251769; c=relaxed/simple; bh=e1upM+aOdYliO/dIh1k3i/FkzXto3qmBjVI/19UomkE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h7t2nXBk0QL5PQECOsqIJFSJnQ6z7MPe9NcgudiGDjjQ9wBA+8QH5C+h05qEWI5lgvZJ6sJqj6rOMRsPnKgh7PvJruLL6N6zoAOGoNmNaerQRTXubEgrF0b6W0jaOTidGIy9BARnFkYqLjXqB9vo7E7cleuo6JdqVEL1Iktwqt8= 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=O1DfsBJn; 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="O1DfsBJn" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-73bf5aa95e7so1382665b3a.1 for ; Mon, 26 May 2025 02:29:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251766; x=1748856566; 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=a6pBDEEcTuBgbm817Rj3tBVeinNfrDQuQQunJdnxKqw=; b=O1DfsBJnPWD4QXawsI8/O/oYpg04Wu1owXirz8BgXwUKIFD2WxErfSkC4OA5xfRxGQ XlrtE+gJ0GWWGf+lT+5P+oT2FEQfLERqlEqH3YCxfaarlDfPuMbB+u0HnFAGbOq4kFRh KA5EevM88FKaDX/iXKuDYRHAVRrnJxD+g8DoNT4cbXF9nbIpm4V3deHkFL+2e70HUDGt u38b+bVzJ9GDIs64G1FzV5pTbMKc1lxUqcxaS6xpdxhkrj2NmYzdH9I57+OXzzG5JrsP BWUTp89c71TsQbDWT9wyLs+nkVwtrNgetrEpfHq+Jt56GFKzDbk98/e/vjPAlU56BqMl cLCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251766; x=1748856566; 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=a6pBDEEcTuBgbm817Rj3tBVeinNfrDQuQQunJdnxKqw=; b=FIPmdxRA1nQXwkWLq6g/8b154qg0QWq7xwsgOFtnJYdPCeBYu2ylM9XvzkhqRvRlad ZUFcKuI5HVI0eg4L+ai7Ptu0SvJelk6ASbbN9T/vvKh1oOfjMK5wPYLjRTK05ZOJAIRB XXESBKq2otNWMPPGQceWY+vkVtbZ9o+2vjdrZT50Jx0JVVDl9gxBSjzW+IqN2OQrYxpo eCSYY1t135amGO5s1YEOzuA5lYitf0iKgL0Ijb7AUtSgUaC/f7HuLzHXkCMyDq9EFM7C teqt6DgJaJE1QJSfNIwVBUmS0mgILmyU6WTvtWPM+xxM53Bz2cj/xzK5CUrXrVfbzLp0 HZnA== X-Forwarded-Encrypted: i=1; AJvYcCVV0W9ldEhuqG8+DgVJKjvNK+XhMRtez7aUbL9F5QJLKKNHx9YiZ4bOU60giumfrJXtV2nk5+IPUVV/c+w=@vger.kernel.org X-Gm-Message-State: AOJu0YyXG5NqV/BrOTZzMcDvs+kzeioRyeNFAPh+Btjgf5BM5LAgjuVL ZV3zHpyrG3+4lNKYnqa2xrFUbJpiv81ahmws6kH67ZZyODrntZI+8FhxzaOTpWcIraE= X-Gm-Gg: ASbGncumK3HVZPs1oviVSb81EqBvaaQuyQepILEDZ1+9pWWZWSIWnPpauY4RQhOHzVr JySnfCtNd8E8NoTKToK8dPXLe4z6hTxfc5powAtCJtXxwwWoT1Mw8+a9JLcI6i3BWKOWI5MP2mz aWdt620o6t+HinVR6Tz2sEMsr0qrWfW/gWBsmLmNY6bcYyX3UPzbqGwhfr9mJaSthGAEkESLTG3 bGZ9CSokY87rziZCyhcMINyVe8X1k8I+PRV3HdnZr8/NOooaPBLLVU5pwNMspWOOlt9Etdd2eZA 147ABiuEN2Oo4D0X34WDuJzTjOWXtJnRuJzTgh/ddDRTRlm2Pg== X-Google-Smtp-Source: AGHT+IGBU2+X9RIttwmFp1d909ftMCV8QM76oVtcLcEN6kaVIzpX9cZHgBQ1cN8l9hiL0Bv/OYUGjQ== X-Received: by 2002:a05:6a00:3e20:b0:740:5977:7efd with SMTP id d2e1a72fcca58-745fe01b292mr10482210b3a.13.1748251766134; Mon, 26 May 2025 02:29:26 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:25 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:26 +0800 Subject: [PATCH v10 08/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-8-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=1716; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=e1upM+aOdYliO/dIh1k3i/FkzXto3qmBjVI/19UomkE=; b=UpshzwdRDHpc47WYogNvfnNWELf2045T5glAjSaMOQFc1v4LPx/qXu6iDqlflfI4UaZIUNLrf LWewYmH4X4FBtOCHV5q9qhM+SL745aQSzrwfrU/kXib3L9aLVxNH4V+ 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 be8102691b99d3b381476ff844ddfd28fe17dc7c..8b6fa7ef78e2c0fb38daef9090d= bf747c7ba111d 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; @@ -2377,7 +2378,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 Fri Dec 19 17:51:35 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 2178F1F4198 for ; Mon, 26 May 2025 09:29:32 +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=1748251774; cv=none; b=E/l/5KIZfeOdjT7ZzZycBwlwZHUywjn8rVGudTvbsSRXSbeYOth+brTR63JCBp2wrJbzPKisrYyDeJD5/SlaMbT7opcu5jU880mIcT1RVrSprEtzRa0BO5J+2XgB5ccL6eEZq1JAkgdvvDrTGRIPIiyhV634GPK4Y5fPVnprG2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251774; c=relaxed/simple; bh=Z+hYtg2N54oWb31O//Qk5cgPs6uNy0350+rWTK60htc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o/Fd2rgshcdto5zUZ185hupgIFg1QPxlZmorkyqyIZQBz2q8IPq7T/CoMoOHKmLuuZBvOhxu3vjC0ian73uPC/uS9lbkFO5fMrIva6sEg88D/MkzeKUCBIbf+Zd8oWAkvecGIQJvUs2qzyo0BXEO9hLltPsSu3tKETt4g/Ao/uQ= 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=SON+RjG0; 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="SON+RjG0" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-73972a54919so1469286b3a.3 for ; Mon, 26 May 2025 02:29:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251772; x=1748856572; 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=V6aNf77dZMqvgD4x/cyfNBUYMjpneTGPfqs/YVhGEJc=; b=SON+RjG0XYvkAfw/jG51HlkoLI5g41a2DoAI4vLfv8rdK3L0qbVfYSbPJqQBMYUEbX J8rAJodIFlwNqLrTZZl/TglpDPbvGqNPf32xqEAhH0bnLh3pwuMlApXd5QkA2kOvWSFj umcYZmUFvKkybjWLPQsM6LOtp+fl5nhF4L/zqZ2YOsctrN2qC9iHdwk23MDjQS6DK186 IoPqr+Z5rDmOqacpDA3iglCWVvcVIysi3rp/jsuLYAN2gf/PZmP0ipkDX1Y0JLaT/vao l8laFhJogt3by0eGR5Ox6Vzwwxob41oLZRAbs+5ktw1pg0Xwt388WCX738Ilf6gmXH6c 9b/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251772; x=1748856572; 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=V6aNf77dZMqvgD4x/cyfNBUYMjpneTGPfqs/YVhGEJc=; b=KQE6reAKir2p+6pKZf7P6R4D0hbjAr6a/4F77UxFInsn4qKUDtnzMfSl5Y35NIc3mT zFsJBkDDHRSUJdiqqvqyEAuao0TvTRV3ClcP6FVDaUnkazPszMfOnAiMPgfGTfQdzvpS 8T6xpy7Es9DbY83SrwHWnQCzGmz15V4PKMyYTzJ4Yf5pfXUwsicNO7TMiHHua1zhPB2W wtpKC2HxalB5cuxkxrJ2LGHQ1ieJMjyPqZIRjwg+IuhIpsbIZfjSYQs62OFWGUO9/lL7 wyyBRsqlm1Ck7UmgGusO1We8XC5FcEbFX3HNs/v814FMna/WYZNtGXDZBZKiyioVQI1E 34tA== X-Forwarded-Encrypted: i=1; AJvYcCVVpxVmRj6krPfql2+l6dCvBIIFEJAlWrUbi73r26nGDTJ2mlIDtoQShheBEfKgorRVulLJP/b2uW45zxU=@vger.kernel.org X-Gm-Message-State: AOJu0YwbTqa1y/SyRWzLYQTozsDbF3rwNFXrgpg+vzMSBI23ahtXMFTI P0nmOJZb5xQbgIIauU6I3+0Wvcci+m5QNMDQGjiSRuIf/B/QsfeeJMSy/b1NwQEbicw= X-Gm-Gg: ASbGncuk71gotQ97Yht7dl76IP7r2nBpHuCHK1YBjDr9bNcpKSRG8C7kfcOlW3Fubf7 QybN9uANAtfjefFtatw1vJpNeJEBOS8sNnJVL4TpMcdvGYQrZyFui4gomIP4BtscqBeRFpAgNJF iFwsp709yJXhz7qXP/6X5cxy6HwW+8aXfLoRHfd9EAfN1eXdNuHlxOL8HXbfjdc+hnDWd+6YHjP IPK1TjFxafJ8hGa5a8oumS0GYh/L6MFMZ8jPgDJoiccdTWFc3Ov/aNub2l+xplN2+Zh66XCduBb H2/Dn/gkPHerAvL2rTBkXIg19cgC+YamYHOfapSfZ/FmHAKq1w== X-Google-Smtp-Source: AGHT+IE7kn3FHZ/apvKGU9XaDEKTLsiY5A/yM9xR30w9VSJoAZ/PD49cJrGnxTztICPli6+rk8J+dQ== X-Received: by 2002:a05:6a00:1381:b0:736:339b:8296 with SMTP id d2e1a72fcca58-745fe035fb2mr14213707b3a.18.1748251772463; Mon, 26 May 2025 02:29:32 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:31 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:27 +0800 Subject: [PATCH v10 09/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-9-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=5256; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=Z+hYtg2N54oWb31O//Qk5cgPs6uNy0350+rWTK60htc=; b=6XFKw97UDC36wcA2CzOIpTP20+Pu6l9OU9emHjZkWf29fJT3/SXGjCajrd0PuuRvNiZ1hIk6K iixFzjkwRvaCV8vZ+kyoWjt47klmSqFNq4+XaJgfwSg9kykGHBipYSz 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 | 45 +++++++++++++++++++------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 3 +- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index e7f1b5816511b33b106f292541f8f5c966c87118..85f585206218f4578e18b004527= 62dbada060e9c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -392,7 +392,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, @@ -426,7 +426,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 @@ -442,7 +442,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; =20 - uint32_t lm_idx, i; + uint32_t 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); =20 @@ -463,15 +463,24 @@ 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); - _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); + _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 */ @@ -503,7 +512,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]; int i; =20 DRM_DEBUG_ATOMIC("%s\n", dpu_crtc->name); @@ -518,9 +527,9 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) } =20 /* initialize stage cfg */ - memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg)); + memset(&stage_cfg, 0, sizeof(stage_cfg)); =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; @@ -537,8 +546,12 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crt= c) 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. + */ ctl->ops.setup_blendstage(ctl, 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 Fri Dec 19 17:51:35 2025 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.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 D69691F4629 for ; Mon, 26 May 2025 09:29:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251782; cv=none; b=rCpnJrtpKvA6CPpEvvIL0RTyDHE6iGFuATK2zVN5qeLu0M062SGuekpbTUzkYghOnWLQM5DG6Q+wpmu+aRd1YK8KcT7S4n3mXhblc7gKGhPxhGN7aDq6NOeP8BJiLseo81k0q7685EfyC7Ls7HCHyGMmXWKpIV8LRMCTficTqQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251782; c=relaxed/simple; bh=8Zl+NL5K7TzgNNpnjlyYIeVHBwJv8LNZuXY9qIqoXIE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kYgivv2M9B4bsLnG4MWH3dSdDfZIFlFoeUvFoA5RQPvVuIy/cxqD8pBRNOO2vJbw9Cv+V5FJFg/DKKSjTzWie7WGE8i1cbRV3ZuR1Ui0kv2xvHf+4fOuwvBFgTaDTvQhHCKfrD12YxzOon0i7xeiCT0/2McD4qtv4gUVqLvkU9A= 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=HnbOVNz8; arc=none smtp.client-ip=209.85.210.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="HnbOVNz8" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-73bf5aa95e7so1382788b3a.1 for ; Mon, 26 May 2025 02:29:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251780; x=1748856580; 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=lxiJHc0I93PcRJQ9RbYPuxNVFGqDMtJLWv5z7mElW80=; b=HnbOVNz8wuE8t/4GE1ydHNSoxOOIdSuisUIy+bETuKyoDZRVHkP/wSdOCFWblAVQFD fBpnEWBcZoaIQl3ybIaK+6+YL8elb3Zr5sdsnaDV911nRfUYxPt3a+ljMQEUn9+ZZKmG 6qt3z6CcZYhWpkQJPr1n5neEi3+PE30vMt/P4Ol5Oh0FDuwRBN5OSn05wTV3W3ez96Uc yrC5OFjcHZG5KoSAmtgGC/SEviJoMJvTVRQvF7pzJ5DUHwcldqmI3TuoMBrmT5plmeuD sktQj5JuCI0TX5NVzPAgox3XDABGI4VXaNFrcd9SyjZXD45qbiPcctQVniiNRH38F0vV B1OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251780; x=1748856580; 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=lxiJHc0I93PcRJQ9RbYPuxNVFGqDMtJLWv5z7mElW80=; b=Zm/NqKQQvbp3SsR/qFd7wBjSiKXu2ap81jEoWNk1sr8OaLoRdTpgmVlfDPmCTcebXJ SbOp5/Mr2S1mxrYkfSxyXHEwozCGv0pudROVsD7270NQFcS161R76eT0YbPAWdmyhtLr rHrUEinUYsx2g0VVr3dB5O+6DUOx3vrTHtsG5cwGogawWXpwKiM2tCvBTJ8pxgNJku0v 3vvOGi9Ye8qXzuKXyJImRQb82PtRxxKR0RGm6VkWMcoaBo5j6HtgOcqlPVYLxzNrGT5L El9pD+8oaGN7P67f7TTURKy6z/CAvGj5Wbn3KkWCBN5dVPCGggDKEhutNQPLsaRlvkbP belQ== X-Forwarded-Encrypted: i=1; AJvYcCUFlD3JrDuDiXXnNg/SajMml4ZnHPePGLB0ocgRUMvkb445hF6g8hbE6JhDeyOQPvRREYxzsrQrl3++xyc=@vger.kernel.org X-Gm-Message-State: AOJu0Yyu07qn3XdGsLd0RSfnEVSUiM8mt93QV45plSZKyRLR2cFoQBeg 9dJ5AYrFCUyNeFnVvEinpnaZVkECxeJ0GdJKTECIx7UKlb3dkUowVoSwfFijx8hp7/A= X-Gm-Gg: ASbGncuS/QJT1dtxgmbSDfhV0Lno8I9yP8BauRGAp5JmUEawWuPslN+09DskWo7F+ti Id8eNDhVIc+nWjR//BUuAV8Hu+mf6KxS1QDjOOlk4YLN/DC7f98PE4gegKkxTg1Sego2T1Z4OkU cF48DL67TrF7sPSgdaE8nkQ7zr1/HXnfkkWIB238nnzfzKtUwyNDMyXFiWM8/BQI/Z6Rl66UOv9 Oq9yugjVbWEzZkcsQFWzGzxe7pDP79zbygKgKkCinfLcdK4xtdXbIU4YQeTH/45pHJWYK2k2dT6 4Jf53HcsZzNrVWx8+JeN55g22ZSWJ/w+/ZicVtpST+jlJ5+n7A== X-Google-Smtp-Source: AGHT+IG4s4lub18hvTZR/olJPPXDFj8juc8FEBCk/fAf+7cS+u0/H1jTsmuRIZ9Oaffrh/aARjLBVg== X-Received: by 2002:a05:6a00:a06:b0:742:a77b:8bc with SMTP id d2e1a72fcca58-745fdf7710fmr12201521b3a.2.1748251780015; Mon, 26 May 2025 02:29:40 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:39 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:28 +0800 Subject: [PATCH v10 10/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-10-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=9227; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=8Zl+NL5K7TzgNNpnjlyYIeVHBwJv8LNZuXY9qIqoXIE=; b=0mSRYSr5/nfePeIctQXE6jTeN466JhLIgO+KateeoR4MysagnPYjMbXVml4StbD0MB3UogY4Z Vgp4iSC44R6BICd+fwNXaQUBS1cvLKKtrCoB6butHWWvQz6Cp86aPH5 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_crtc.c | 11 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 126 ++++++++++++++++++--------= ---- 3 files changed, 88 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 85f585206218f4578e18b00452762dbada060e9c..47ab43dfec76acc058fb275d192= 8603e8e8e7fc6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -1562,6 +1562,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 0bb153a71353ca9eaca138ebbee4cd699414771d..f721dc504bbbe3a49986239adee= 113bfb6790f70 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -961,6 +961,33 @@ 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_check_single_pipe(struct dpu_plane_state *pstate, + struct dpu_sw_pipe **single_pipe, + struct dpu_sw_pipe_cfg **single_pipe_cfg, + bool config_pipe) +{ + int i, valid_pipe =3D 0; + struct dpu_sw_pipe *pipe; + + for (i =3D 0; i < PIPES_PER_PLANE; i++) { + if (drm_rect_width(&pstate->pipe_cfg[i].src_rect) !=3D 0) { + valid_pipe++; + if (valid_pipe > 1) + return false; + *single_pipe =3D &pstate->pipe[i]; + *single_pipe_cfg =3D &pstate->pipe_cfg[i]; + } else { + if (!config_pipe) + continue; + pipe =3D &pstate->pipe[i]; + pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + pipe->sspp =3D NULL; + } + } + + return true; +} =20 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, struct drm_atomic_state *state, @@ -1028,15 +1055,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[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_check_single_pipe(pstate, &pipe, &pipe_cfg, true)) + return false; + + if (!dpu_plane_check_single_pipe(prev_adjacent_pstate, &prev_pipe, &prev_= pipe_cfg, false) || prev_pipe->multirect_mode !=3D DPU_SSPP_MULTIRECT_NONE) return false; =20 @@ -1050,11 +1077,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 || @@ -1194,12 +1216,11 @@ static int dpu_plane_virtual_assign_resources(struc= t drm_crtc *crtc, 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_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, *r_pipe; + struct dpu_sw_pipe_cfg *pipe_cfg, *r_pipe_cfg; + struct dpu_plane *pdpu =3D to_dpu_plane(plane); const struct msm_format *fmt; - int i; + int i, num_lm, stage_id, num_stages; =20 if (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, @@ -1209,11 +1230,6 @@ static int dpu_plane_virtual_assign_resources(struct= drm_crtc *crtc, prev_adjacent_pstate =3D prev_adjacent_plane_state ? to_dpu_plane_state(prev_adjacent_plane_state) : NULL; =20 - 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_PLANE; i++) pstate->pipe[i].sspp =3D NULL; =20 @@ -1227,44 +1243,52 @@ 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; + if (prev_adjacent_pstate && + dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate, fmt, + dpu_kms->catalog->caps->max_linewidth)) { + goto assigned; + } =20 - r_pipe->sspp =3D NULL; + num_lm =3D dpu_crtc_get_num_lm(crtc_state); + num_stages =3D (num_lm + 1) / 2; + for (stage_id =3D 0; stage_id < num_stages; stage_id++) { + for (i =3D stage_id * PIPES_PER_STAGE; i < (stage_id + 1) * PIPES_PER_ST= AGE; i++) { + pipe =3D &pstate->pipe[i]; + pipe_cfg =3D &pstate->pipe_cfg[i]; =20 - pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + if (drm_rect_width(&pipe_cfg->src_rect) =3D=3D 0) + break; =20 - 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) + pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &r= eqs); + if (!pipe->sspp) return -ENODEV; =20 - 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; + r_pipe =3D &pstate->pipe[i + 1]; + r_pipe_cfg =3D &pstate->pipe_cfg[i + 1]; + + /* + * If current pipe is the first pipe in pipe pair, check + * multi-rect opportunity for the 2nd pipe in the pair. + * SSPP multi-rect mode cross mixer pairs is not supported. + */ + if ((i % PIPES_PER_STAGE =3D=3D 0) && + 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)) { + i++; + } else { + /* multirect is not possible, use two SSPP blocks */ + pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + DPU_DEBUG_PLANE(pdpu, "allocating sspp_%d for pipe %d.\n", + pipe->sspp->idx - SSPP_NONE, i); + } } } =20 +assigned: return dpu_plane_atomic_check_sspp(plane, state, crtc_state); } =20 --=20 2.34.1 From nobody Fri Dec 19 17:51:35 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 35BD71F873B for ; Mon, 26 May 2025 09:29:46 +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=1748251788; cv=none; b=C1L35lSVVKVoZV4auT4ZZHiGXfPJLO5bHzD139JaHD7GabDzrprFqmZbsRWcV50yZRvNct9zuZRHHr5b7HuYnZJ24xOJmrLKUovIB3s/Flo6krHkYZtpt0Bme2WLCcBLrTQESvCZ4x0IbgMSn+nXQJXjuErZD5NToYJnYCHcEbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251788; c=relaxed/simple; bh=heInugFwRtw6CaXJKnON/115qamun6IvoaQJCL8BoFA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B3E6ZZWdV/fScCZTkADbmBvvaEH7OSpKSW/iyIEAbtCUWHilqnPznlQdzw67Zg8wCDbBrPxACPpwpsepGd2A74/flhp87t0pSkOescLJQzRRpEn2lMv1HmipqqHsmVbSikmyVcx22lKKEfqlGhuRh1xe2blN8i7AkcmGDLnYn/w= 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=pbhQ5SJ8; 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="pbhQ5SJ8" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-74068f95d9fso1409073b3a.0 for ; Mon, 26 May 2025 02:29:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251786; x=1748856586; 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=/f+SqVbymiUqr7EX/dLyPAYSH86sXDRxzwvGUhAyTxY=; b=pbhQ5SJ8P8Sad6+R1iTW3ZqtBGexq1/NqIFnvkPLGgkZIPGIBo7B6VnNxBc1/hHVes 90ZHVNGmp1CQ7ZAHHxSZI3xXW8L9PLq6m0D4xunY0zMB1/drs9QLJRyjVzmUZD+uLTta gK7wWCte3HXUqyMJVbzp3JaIppV3KIjWCOU++sBKVuE9nhGpWlVURLr2jSna0RHptAgF kMxSABSjQJDH9yD+ANpjHQ8hFbnUDW1Exs9sMpmOlD+uChcQUQAUIwkH0Vq2FH8DyeVy 8G5L3gCbWvkyBvri3drpE5dmUx3y8GbGuABtJXIBsSvJNEYaEVUnsnHd+H5TQpCZaFnk QOWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251786; x=1748856586; 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=/f+SqVbymiUqr7EX/dLyPAYSH86sXDRxzwvGUhAyTxY=; b=V68f1ynPdpHv+Fv2gwBHUV9cKZ+naUVlGePUgVSwzUb+QgXJxMtwksqNEJIRZq+p1x vp3WgsOHRGZINTFAFeGhbq8GdXD1ak/CAxggk5J2BJ/d12DvBdx+VO6KvVFo7rx/7r8F JU3M+IwkTCInPuA0lMct6OWlqhSlzPzzqQhh2a5xDHxNrKtF64RdPa17JFAAN2C3QuXp 32VX7VM3Z27oL3a7R3VLIAVBsFdiAo8dd20Lq4ytrP24geLisd5nLnqT3ZSR89VCaPyJ nIpBDh3kn8jKhWjOwOqX09evIJiZTbNTHGArHqF5FO6Vd4Yn+6M8O5DyYEKkxAcUKtb4 phVA== X-Forwarded-Encrypted: i=1; AJvYcCXkUhOH46lfC+c9ASty1tvW8MgIG6zeUeNZnkcgWwekfi0bf1cXf8arzc7IkWR1EKDdsuaOy0MDL4SLNR8=@vger.kernel.org X-Gm-Message-State: AOJu0YxDKFAQUKDWVIdkNGdDjoXM11caxpqns8YdAPy/4TZSrhg2oUld Z0bok55tNIwce6kjFz/UjiaOOTdgO2axPBbz7lnTyNwWyk5fJ1Oy8gfYBDOaUdOIzEk= X-Gm-Gg: ASbGnctPrdxQY7Zuv5sBM0M89+NBm23SMYuuzeW+svZYhTc2L4TjHkInrZPdUJpVawM STHtWpQKlAehbXwAysIOEIeJVIZfFAyHfXw9NtY6XmwN8dmvG9dvdL+SZoqQajPwd6tu2SkXbUC XozUeENgGxabCOiE/+6XvaEnujtTtq1RCNVuZvJmHMt00wScqdFaArNk9VaEe4nAr58HVveUc80 DxIcoqsh60f6GnpTbqgQWrNQv/gkNf+rcdf9yKKF1x0ShCUaVCdy6vTQtsDQXFGx+5chKZOTxD5 32BmgvC5UGjM+I+gpjYfYHBaec99WydoFs2hm0BXnKrC5fzoiA== X-Google-Smtp-Source: AGHT+IErEthueKynXHq5buzTz4skCgU6TqPNCN50PH5smfMk9zPZkeiz4eh88Jy7GKty6c+mDgetMA== X-Received: by 2002:aa7:888c:0:b0:742:a111:ee6f with SMTP id d2e1a72fcca58-745fde9ca31mr11609053b3a.10.1748251786351; Mon, 26 May 2025 02:29:46 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:45 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:29 +0800 Subject: [PATCH v10 11/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-11-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=8154; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=heInugFwRtw6CaXJKnON/115qamun6IvoaQJCL8BoFA=; b=+7Soq0oCoUFJHIeU6jRV99sLbPq1YmfWMAOyxF0nl3BvChnYDo29N4nBujK2cytLKnQtdBIww 86EMuW7RMy/BRUgyKcPRtD3ZJmMOrpw6T4WKfw9thtVb+OonEKJz7WR 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_plane.c | 137 +++++++++++++++++++++-----= ---- 1 file changed, 97 insertions(+), 40 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 f721dc504bbbe3a49986239adee113bfb6790f70..5349b99ebe0174a9ccae9a9c37c= 6d224768f6da7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -831,8 +831,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; @@ -855,13 +859,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; @@ -886,35 +887,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; + } =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, + 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)); + } + + 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; @@ -997,20 +1057,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 Fri Dec 19 17:51:35 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.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 326F61F873B for ; Mon, 26 May 2025 09:29:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251795; cv=none; b=e4ElSLMedCvv/Jdnyxzz/r3WRDzakLuwc3+0X5TesFgMrCwmfyXx6vG5yjORTRKCcx+2TQQpWPXGYY0o43SyS4jP1vdexOXSREslHr8FicT4oiTuwa41lzAcpIwJHLkhLN9452kzm4cAyssnEZBDIiatWd39gVaj59Jw9i3Pi38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748251795; c=relaxed/simple; bh=kcUU9krrxz4wWXbCSdYpKCBaoyDMroYVrjFc9QNVoz4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=juKfDBHBIInBauzqJAarvTRIDkjrnxI/1rCYu9UclWHNgCKwJSRjJVOeHc5EY+6Wvr0iHcX990xV6mnMXsK7rETa9E4X6AcwIR950iZur6hyvXJXbgI3qc8zYcdq49fD47IHiirDAxrl/oULo8AYfy9dge8S3oMZQJZd80PlzW4= 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=RDNPPFWN; arc=none smtp.client-ip=209.85.210.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="RDNPPFWN" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-742c27df0daso1354129b3a.1 for ; Mon, 26 May 2025 02:29:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748251793; x=1748856593; 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=OhII2By9W5/ZH38QC2aGImrbUspJ4sEI9fSz/8giFeU=; b=RDNPPFWN31Rv8HAqVTJi6j8+7KJ3ZOTVzaKNDDn9cZx7C1ZoT6lb+nOwCX1CRMYfw5 d2ETptP0NaPMxsMdovOZzWwT7K9NMYvi1uDBssNLZL1TMDb8yEmIarBtRNqykR/WCLad /7Y50RzrZRKpAQSvh5H5UxAfcVVaFnD2n4hNi9pXhgQjg6fViZMBhO+JwuCIoUMr7u53 XNrTXcmi+NHTdzn9LcshXFWjmVidP2oFL0BoWzOa6CWJUjuaLKSDWKo4GyozC2oBO6S2 YkHWJlMqD0nAmzTN3sFEa9ErVgt4n0vNPhfJnCXJQPm0PZ8ybaXxRAodejONt4GuENCc jEBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748251793; x=1748856593; 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=OhII2By9W5/ZH38QC2aGImrbUspJ4sEI9fSz/8giFeU=; b=Q5GA4D8+1Mq3UiScP+ZLFbEDvmTDKfjQeGBdcYAJKY0FT523WMxcXvPGr6jb/lGTD+ 8gELEMhuHc8jz5rXINt/R0jvczh3XtdysZ857rrzf7006003bdk2snKSEF4pDYkxNd9c ETa0AzN4YkaIViWbQoLKLF+a29KU3xiW9KvYTA7yqfz57hulGbOHOlbiz0Rkjuh99ga6 nc+KCsTbuLtyO8npi+dXyZVTBERDCIvpQOrRjUETxAOWO4RAOtjshqNnsViLOk/vyMgX ATmO5W5WZOAmiFhoN0hNY6yPuk5RJ9JYquASV/9ym0BiQzHDcGj5sK6QA7B40km1hQ9l 3Lzg== X-Forwarded-Encrypted: i=1; AJvYcCUdvDO2MoqI0BT4Dh6C+QKI8d3SmDnCfRBAwGuXLNVB/h+R11HsdQPRpNEK54OIhZFkoyk8EwlpSyfqg8w=@vger.kernel.org X-Gm-Message-State: AOJu0YydjU7wFeWCp4XLrB1mGezOm5unvVsR9x/9X+8ailTr70CCw2kZ z615LP0x6mZMzmqbC2E/Iwpzgekzjo51O1G5pUiTl9LCnIDY7lAVyNL/ZZKnVIvVA4o= X-Gm-Gg: ASbGnctbBLE2I0+GO/V0nZ0iuBCfIr2vI8n5vvD8MagC2uEJKWu34kVUYTAof5vx+bV Hqx2eiKxSNFmizpaS2bDuymbRzDGKAhMHK5kF8dd54uupsNh6UEJY3nmjIGZleRRxwBcKrBt8K4 iPVo6e4fXkZGRUMywjol8B7qE9nFrrbn9/ktB1jO73F2DSmytwb9GfBvVGWIWz6l11+1ZiSWVsv +fQ09si6hRecG/p2ZbSOAs5NMS0FTnIO/PBxg7EU4Doc+ACcRnB/6sAntgqsCdQ3E8HHily9N9S p+Hid1n2RoAeyT65riWbe6FSL8r5c/JTtnCJC4V3rsi+GZHJ/g== X-Google-Smtp-Source: AGHT+IG55AR/uE4eHY6Xk+Rm8Z5PklwBjam4j1tPPRyG9RAe4OgSbIbahN8FCWGm2HVg66P47jtsDw== X-Received: by 2002:a05:6a20:cf8c:b0:1f5:7b6f:f8e8 with SMTP id adf61e73a8af0-2188c1939c2mr15221738637.6.1748251793393; Mon, 26 May 2025 02:29:53 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9876e62sm17162393b3a.147.2025.05.26.02.29.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 May 2025 02:29:52 -0700 (PDT) From: Jun Nie Date: Mon, 26 May 2025 17:28:30 +0800 Subject: [PATCH v10 12/12] 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: <20250526-v6-15-quad-pipe-upstream-v10-12-5fed4f8897c4@linaro.org> References: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> In-Reply-To: <20250526-v6-15-quad-pipe-upstream-v10-0-5fed4f8897c4@linaro.org> To: Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Dmitry Baryshkov 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=1748251705; l=8147; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=kcUU9krrxz4wWXbCSdYpKCBaoyDMroYVrjFc9QNVoz4=; b=LU3cjez648NHHXeU75oAvVJsXxHa464qmMXaHe94CWaGJboA2VcVF6jcAbGBdvEcUeE1vhWLl MaltpZJmECdA5mU+FqEL2+Y8NiC50MZCgMttiJrHANLUC+MguwdGXBF 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 47ab43dfec76acc058fb275d1928603e8e8e7fc6..67534cec9bf48f2fa368553be6b= 3a0bbc307e861 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; @@ -1298,6 +1298,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, @@ -1311,11 +1312,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 * @@ -1327,14 +1331,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 8b6fa7ef78e2c0fb38daef9090dbf747c7ba111d..456e62ebc795b6c50c96d1ffcea= 2be566fb8d51c 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) @@ -2178,8 +2168,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 01dd6e65f777f3b92f41e2ccb08f279650d50425..1348f70183602e2ced7bc065863= 6759413af8d13 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