From patchwork Tue Jun 3 07:10:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894289 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 DED49267F79 for ; Tue, 3 Jun 2025 07:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934635; cv=none; b=g32qp/A7gVGVkIrNrJ+xwvszkhIJnmN/EUC29c0ROPZ+z0JBtqX2FkTIARgQdXLSeNOYkXrnWeKbqwDZTH1ILwrsFE/uqujfl918fmg4XBWBWMivyIOxNxa5TU9Kr04T4JqOTCgSfpKcBMDe5Jw0LTI77TrtTntch1vYSj98jaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934635; c=relaxed/simple; bh=2tgdYLNBOLqvrFN89J2Z5WKCnyYFo8/7L7F+T0zCRyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AAOyiFuvFUN26MH5ynG0MziTBwi8e+XIH+F35oMpVcQHOhsCwtGWaT6WHY1nFhAAZEJ1ULOm0u+7EGkEtA0qa/v7p8IpC7uZVcovhUpHBKBv/VDK+DysDJMoxeeWuSQWRSmSFxYDoRa6cp18Z3aGIaACZEDDwEODOnEUP7iR6zg= 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=ABimAatr; arc=none smtp.client-ip=209.85.210.170 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="ABimAatr" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-742c9907967so5312602b3a.1 for ; Tue, 03 Jun 2025 00:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934633; x=1749539433; 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=ABimAatrE0Nn6hDeUZLoDtTzIDheO4U3gFZ6GAvoeaMvUe9VV9SPMJKSuXuaDFoFZA 4VrPhgGpH4p36XNDqEkuFCNfQpuonWDTxgMP7g/eMb6YNlIB26NO0LqJZGn6xFEubV2/ FHrn0oFFw3ssRt4H/bKIBRWI4Fcc+MJpDS2Mf3rwiIC19kn8Xfc74CoQdgb5fHXZXJ4b IyZCTiGd4Q7NTiQtwQUdZAL4+ANGHiw1bl+kMyoCelwYRJ7Y2BBydv9wDobuXFCIoReE 91hsqwY1sigVdHk5TMfPpcb0LRIHokqv04tlOc8nmv/Col/SXUdrLIzcWRrdVZNNZXqG osnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934633; x=1749539433; 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=CDppV6H+lEV6r6w+aTZFhSf5bghabzefRliTwzuBRTxw+gSlHrL9E5iPdsCIxtGIYJ xZfYeWrj9SIbspwEns+Rz1TXAchqFMBCAcbyM8ynMRpJWapRwjqBsJKdKXLO3nVllSHd B6UU5TTH4MlYXyiUK5TIKg2eDYgNMPTizQvh4gMHMy8nYxghMD9+IvHYRz8sbwY4fW+J KE8lk++0hVk39U/Tf7Oc5TMFQxDtoPP7HsToYKjhXxJyJAtWUDGJxQjwxxB6/Atg+rMz 2P5pS1zD6YcEOGKtao/9bdwPXDVD3oegShJHyL5irBInuBPDmA5eKegceyWMXwrASXl3 93bQ== X-Gm-Message-State: AOJu0YwWp3tncT5aB4HCz1VD6O8e99wPiSDAYEtPvaLD7zf8exT/OA4w 3+Wf4eVJpaypynsPf10DyUxHFJPASvO1RIUEiVUzieusrAh9KKeuaU74whpoK+FMX7s= X-Gm-Gg: ASbGncukuwqsH/IK0msczsKg/jrZwpRPrPL0DNgK0Y752tMSRi9uRb+AuzLtkXhHCGZ IO+LdNqq7QmDMi6geJ8b+/isEHWVihWEpKQ/lIq2Z4eWD6NWgBTM8wHddtmXdpHfT06CrF+3QA1 uaG5nosXeZvJgbvyVyi56iWFdMXwZrZBYzXRfWPIhhDUIs2WkeNKpgYwQhxSzGbpvqM+0bPEreB p1gb4kUoYHn284l7gG8uG08ci9z5/mVjM83n4V5Qu0J5qa2T+ElWfiRgaehYhuzu7Xwr1YVyWrV 1nuQa+kGm8D6I1bzz1EY3qnb1cDu9AB7Zg3sUcb5xkbdmpKJQg== X-Google-Smtp-Source: AGHT+IGhn186Cm+vnsoRHYjc9kosc4UetejN+c6qUOaBl7dOWEiJ887EOTjGiRAG+l5vo7CHPAcTlw== X-Received: by 2002:a05:6a00:cd1:b0:740:6fa3:e429 with SMTP id d2e1a72fcca58-747d18b7edbmr14666552b3a.11.1748934633144; Tue, 03 Jun 2025 00:10:33 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:10:32 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:00 +0800 Subject: [PATCH v11 01/12] drm/msm/dpu: polish log for resource allocation Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-1-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=2319; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=2tgdYLNBOLqvrFN89J2Z5WKCnyYFo8/7L7F+T0zCRyk=; b=au9Cd5Hg3dt74qPm3iY/6P6rtbXTzZrVAS6Bm9TdMAbVIWHpvB/yR93ZFE46uoxfineTAi2CN tm/s4x2z6UZDsE/ka42UYtvzrR7t7epECJHkjsZGaDX/ZIZfNiGtmjn 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/disp/dpu1/dpu_rm.c index 2e296f79cba1437470eeb30900a650f6f4e334b6..2d8ff4b524715c658188fe56bc337e3ffa831c0a 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); } +static char *dpu_hw_blk_type_name[] = { + [DPU_HW_BLK_TOP] = "TOP", + [DPU_HW_BLK_SSPP] = "SSPP", + [DPU_HW_BLK_LM] = "LM", + [DPU_HW_BLK_CTL] = "CTL", + [DPU_HW_BLK_PINGPONG] = "pingpong", + [DPU_HW_BLK_INTF] = "INTF", + [DPU_HW_BLK_WB] = "WB", + [DPU_HW_BLK_DSPP] = "DSPP", + [DPU_HW_BLK_MERGE_3D] = "merge_3d", + [DPU_HW_BLK_DSC] = "DSC", + [DPU_HW_BLK_CDM] = "CDM", + [DPU_HW_BLK_MAX] = "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, } if (num_blks == 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++] = hw_blks[i]; From patchwork Tue Jun 3 07:10:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894288 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.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 787302686A0 for ; Tue, 3 Jun 2025 07:10:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934648; cv=none; b=XIqXOLmp+idjkuo4FSB3m0k2i+tWYtV/dJ+l7M4H2NJOtTAbPvpuy0GnI7xU+esvWIY7cT0P7+FUWkJFiWg9RqRpaOuJPsYhP7tQwmNRE3pzYfKnOhgoPv6JpeoZxE1qXArWjLQy3fiRUujB/Zi2ieMeGTw0pjTXAqdq5br2Md4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934648; c=relaxed/simple; bh=2zVon4JQp3GbP7LIHy+YThFAabtOIovGb5UEovt+mkU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rmw27csAN06ac8It9zpZKHS0AW2XcAtt0mNt6Oy0udKdDKdhQWOYDoYcf01wQI73COprYw0OmLX8nrlkFuuszyVNiJfaLXvjNiFREJJtVtfeZqm80psL6STFMcguGEakwC1NeZJtonLKd/jAy7dLTU1CPJv8OIkZyRS43ubcrE4= 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=lbl2n2EI; arc=none smtp.client-ip=209.85.210.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="lbl2n2EI" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-742c035f2afso3416767b3a.2 for ; Tue, 03 Jun 2025 00:10:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934647; x=1749539447; 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=lbl2n2EIgNLgfUsZjKSukhP5IgdcG+rpdfJ1BGFVYFCX1dn5Rjl9zUJRJJcD8umaVa 4+bT3uCTVCNOrad45NO/c0PzHXNLQeCwGqHP5DeJNCcqJn58aMqqoHPc93ihiHoFr4YI SKpXJBcUrZSd/bfYkwLm+gDPs7wnPFz7nd7/2+GV5OIzrSg2WfCekoorylUvMooJ82YE PDpzlI1A2EHjljHZGioFjabNWgPk/UZuppp6RfoY1J3xUlzuKYFQC9+Vg60B8LWINGV/ kwbckIrOLk7mjikgiIQQNgqyfUdNBrPt7YEpEoYwGPOWjLq2CQ8WRsKFp8o+vUScbK14 BY0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934647; x=1749539447; 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=FzfGFEhFt2WPMxHw/Bz/VmcwHh/uAAyo3mYBY3lllczb42vWnG+pccc6PBxCI6P1k9 sHcE47PTuVqHxeDRE2mX2GoJoTwoSB/23HWU9iC7yK0xjCY39P8IynZadEXCG23CPyg0 MaKIowXgjO+Qv1ZlTLqfVhhChhz81Jx8W2EGSFdcZ5j33w1VDNRL3DIuAV/6hr7Ba4L7 aLdHNkmVbLc/UEksp98/zxVEVTExOjSDENKEGmIDrNPFP6Gvt2aIJVC7xufC8rgg2RqV ddAbxJaYnRZ3NuMRHCvJoEYkaMeZRb/srePuQub5JcKGk+2sXTx73sRU3qy+rJb27rdq 4YgQ== X-Gm-Message-State: AOJu0YzMAKuw0lHQxu5wMrKHZLKmNaAvQFlSRWAa21bqhQWggLG/3jP+ FKXQO3j7pv3NlIw0JAOqlmGLAExxqPG4NDCLh6uRFDX7SrVsPt2ppOUAINz1uFuEVco= X-Gm-Gg: ASbGncsd8XJhCOQTW3+XfeO3a764ilUfgcq1ge4H4PdNEjJg4v4NLKnI5vtVERDuZSX Bshd423Ni4tLQRE5pFFx/Wo9DDaDEeffd1aXpN6TUc914lC6tHzRp3aCOC9u2hGBfm3NNGNaBsy EfWa3cKvbNBpDO2wSiATnhIVPfYojorCDQOTMptR9GqjteJumLpV5gFERYNURihtQ1/WLz0Eh0I ZiTShu7yVhJ4DRgJIFrThMLlFO1486rwtAAYvnkTmDHpkaPSEIIhsC6hkpz8BBWHDskuZyoNDk3 lDAvRuEx5G85MJUFcuuj7se7ePN1CBZDhJk8aGkgFcGFwaipaJ0SICjS5r7o X-Google-Smtp-Source: AGHT+IECU07ZJTnHbY+6PX1HVqrdVBJvjDjVo6qU85+DIIL39w20q2KY+lm0QftMCabBa3zRnow5tg== X-Received: by 2002:a05:6a00:4b04:b0:746:cc71:cc0d with SMTP id d2e1a72fcca58-747bd9873e8mr22641065b3a.12.1748934646820; Tue, 03 Jun 2025 00:10:46 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:10:46 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:02 +0800 Subject: [PATCH v11 03/12] drm/msm/dpu: fix mixer number counter on allocation Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-3-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=1366; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=2zVon4JQp3GbP7LIHy+YThFAabtOIovGb5UEovt+mkU=; b=M6kGX+zoyyifKCoa3Ihq4iUR6UyyVoU6M2k4GhholpJmyeFukaEvdo5CO2SVv0U+uk2QpqrGK /5yKxv751IWBn5orwmm1L8XYtOVu7zCAqFdb9V8AdseZitDIGHNmAYw 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/disp/dpu1/dpu_rm.c index 2d8ff4b524715c658188fe56bc337e3ffa831c0a..bc7639a46386c6b9457edf3afdf6f747a632651f 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; - lm_count = 0; + /* + * Reset lm_count to an even index. This will drop the previous + * primary mixer if failed to find its peer. + */ + lm_count &= ~1; lm_idx[lm_count] = i; if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, From patchwork Tue Jun 3 07:10:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894287 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 0CB7F268C76 for ; Tue, 3 Jun 2025 07:11:01 +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=1748934663; cv=none; b=d9OU72Ms8XNqIInqELqxroqQFIKhnVupo384OatNlzJEDPNgdyqK5xpupsgsANjdPORDV9vSPgp6HBRLoCSi41tyZJ1rTMU+MTOP/8WXWSImqadmQA4+XPBHUmAVCjg0IC7bt70kXBKqRAG0fVj+ANLHUKGxuV8zu4N6pU9DA8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934663; 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=nVyL8LcI6SuCWGzSLjHTttZ43XzZRDG0G+TodaboEuXi3XvEf+GrXp9zWfkdaR2MPq30xi0RwMPoVSqa0pjtyO7B26At82aaGBj1+ItWJY42lp27KkH18KApFgkL5lQ2ZIjFRhNfP8rbCZ8Szp122vxZ6Fp7Xb+7hJioy98xFgo= 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=cs/IBO+R; 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="cs/IBO+R" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-742caef5896so4330092b3a.3 for ; Tue, 03 Jun 2025 00:11:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934661; x=1749539461; 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=cs/IBO+RX39svLZRUr+fAh0lyGvWvMYPUP6dQa077YjxCWwEh6bKDuP7mm2l+UCxVX FoOmv5krcSBh6AJPyVq2VXFJHL5Bug3o8A23d7ofTN3A50YQIYkeVlq1cDtlfrdC0B/6 8lFuJFF/QuMnAir4TD4WDoWumi5YEYjIMXfCenUEng+dXMirNRsEdRJssTpsQY9sx58w hLQ6g0d8U0Y1MljM8/yx1pz+6q+AnGejEMyeNiC6j3GlJQtiPmXGgfiqdUqPzg+MPwVN MPeHWrmZaeD7kQ8KtUharX7ZxRBMNjwJz/KiapciUfi8ws617XwhwdSbDw3LokpQzV7c XfEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934661; x=1749539461; 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=nOy9B0c2e7QqLciLsW9rETg3Gp9EzGGr68vegF9S8cPy6df5wMb/Uje2ml+XZv1Ccc wPrUiUPwrwDNMVG6zdgfLIgs7/lHMaHHsH7BVymGvJ58zMdGxC+dysSvbxKC83iqEFcy lti6Yy+5siOwGciMTclWsFktVH0UFqHoije9yBhwf19rO81kcCtGbwWh/vbrfTf4GzWb t5DLO86u5MG3RslGgV0EcOzuCQdZf02c6qBlfnHONTrF5+N3YYsosZAuJIP9xr0bMvxP bckkH3bsCWuCh3lbfB1RrfJ2m8eQPQj339yS+poqtZBC68i4MZo1CNtZF4NGN3J9I6jr MVQA== X-Gm-Message-State: AOJu0YyIxPcf6FiW08w36+PMRrM3T/aPHQVKAPLH6B67XRUmmE+6UzWC 2KYvMhG9JMD+k9LWnE85ofdq9aNFw43C8K7EQIadTQBi+POzLEw8ubCgKqiyUzytTaE= X-Gm-Gg: ASbGncurpduU4IhInrr+KYMX9edA5xC3zEeRzTeTpv3wZX9Aktkxq+9EPLt9pdQs7+C 5dFR6zQyXwwclGjj2VZI7mg18k2jQ/yKj9WXK9vq6CEaQBpQTED4YDVvwzHsJcrhdBJWtNHT6BW ln12ZXsJvYid7eh8UhG+94p6LCYpcPhxdT6TOAgA3N5VOa/CDmmBJCTRvwJh+kOspcKMFqDAEn3 RuqtN0nhMCOP2LQcupi/qGbV/cuouMO1F7zJkZ+u9T+tkRQdsTONFoPD/+DCsLmJ2hFhwh4JiX/ zqOsj8c0P05bAqaws8MijOkiMsx1SuEmCR44VytGo9yjc6xHHQ== X-Google-Smtp-Source: AGHT+IFjWCARHruptuJVLmM8AfVvbtePqSODkl82sJOlhsf4UkzXWJqbDaCd4kbMemrBH6D23IqzDg== X-Received: by 2002:a05:6a00:2e12:b0:742:aecc:c47c with SMTP id d2e1a72fcca58-747bd970f56mr20943760b3a.7.1748934661240; Tue, 03 Jun 2025 00:11:01 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.10.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:11:00 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:04 +0800 Subject: [PATCH v11 05/12] drm/msm/dpu: Add pipe as trace argument Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-5-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=2487; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=AzK35uakUtRc9B2/mkaI31Hgz37sujAtB+6mV9+2mao=; b=lCfGlNgdftpf9pXQpFuf+RZ4PCJy6x3Jo848+yn3e5YXK0pb/mRGUH2c14Z4J9uMc0sEVgDlH WCpCkjTvOWYBUB9AiL/tTqrn88WQn0PQQixCWWYArolB+ivrgzrD8yV 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..3a7e030e1241a5115460a1e9d552341f8dff7d85 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, 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); 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/msm/disp/dpu1/dpu_trace.h index 5307cbc2007c5044c5b897c53b44a8e356f1ad0f..cb24ad2a6d8d386bbc97b173854c410220725a0d 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 = drm_plane_state_dest(state); __entry->stage_idx = stage_idx; __entry->stage = pstate->stage; - __entry->sspp = pstate->pipe.sspp->idx; - __entry->multirect_idx = pstate->pipe.multirect_index; - __entry->multirect_mode = pstate->pipe.multirect_mode; + __entry->sspp = pipe->sspp->idx; + __entry->multirect_idx = pipe->multirect_index; + __entry->multirect_mode = pipe->multirect_mode; __entry->pixel_format = pixel_format; __entry->modifier = modifier; ), From patchwork Tue Jun 3 07:10:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894286 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 1D7CD26988E for ; Tue, 3 Jun 2025 07:11:14 +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=1748934676; cv=none; b=hVILYhE/m+UrDFMj/rsy5a7QCV6Mhq/jXSkBR/TMSMS2QjF344K+IsomLo5ZQSePxUUQD7Bol0h/WIeL/4mCKKQsOsGiL7FiTugbTZq4YYq9AqIh3bCCd/ihhK5lkZRmmZF0rHcHfabKT/DNSSgRt2YnPFIqb5Tn2SUKrSW/zn0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934676; c=relaxed/simple; bh=i9jqTYWgdUcfVxledyCdB1fwWCOzjmcgPZJqlQ4gFuE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gQhAv1ST6FuBSuv72MswvHlbqot0KvBZ2cuQ0bj0Y2BXa83FV3d9eh917nDmM3m8niUB66P5eXnGzvXDRjmq8fGGmmMSSF2dVgawSB86k0hz5axWfnlDielBx0cZOzbzw+4U6wUKGnuKz8CJeYtKcpSv8A9rwQvxuSmgVkb28Ak= 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=mTs8XGiS; 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="mTs8XGiS" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-742c5eb7d1cso5726598b3a.3 for ; Tue, 03 Jun 2025 00:11:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934674; x=1749539474; 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=mTs8XGiSo+ZuHwzpik3n9ePnWBW7CQ5Ks6gSTTh5dQvEjzZmyliKIbUFYraefGHKau ReIsawibWR5kZhiqWa/ubpzgs4dOxvxuHZzTREWSovgR/SXy+nE7abwF7p3i4HIZ6QKw eEBGGaLG2SB7SZeqN2OcsUEHN960F9rv7oFMbhXip9qOfAvp1AgcCpRe4JNhocmloqXz fABrs9e8X6FTCzdb0CqImnKtlfl4HGCfuhV4epm5yVOZK2ktrlqCwnNjS/xb1SvcCIDZ XFuIHHzQ5EDuiX9nC7TbfM3YufH4yS0YuD4AFCWPdUV6ZIyZZzbhV80RwDnbFRybNmMW hJ+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934674; x=1749539474; 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=BvIyyQ+JuQgwUCfNB/ahpO9E4h+zXK3xal2Vm+niAgaLodbaDscQ/dkunYXxuQ9jwQ Dr1TGYWw7QF7fV2/gVVJUEybu7ix3rR/BDXAZ2ChWuxARO1nyIg9t54NZHQ3K1sucVLs o7ZA45ZliwUWwNOVXqgUuF5q/dgm7iH9RKXEp9mVNOeorytK3xNQFWxhtTb/qRcx81ev 6eTynwgIeYxy0VT88s+KvJAqI9AzCekiLJqemMbKjq3a4X0nmNaMFLeBrVhar2bUziS2 SzaAnITIORcIj655T93hO8pVuBg8B6buU4liL4GMqqShibouDqJ9V70FVJSNxupfIqeH TiTQ== X-Gm-Message-State: AOJu0YzMvcPMJpvJxdVAbsASXfb68RoC9WCJ4XD7zRb5dIduflJKS4SL rus3x9DMCZrd8HOh1lXRmWKOQc3oGQ+ajl52BPsHtUFTKT40E6saiA0fSc2fxLi8OcM= X-Gm-Gg: ASbGncsGVfjbXnj79rUI8ScqZDKLV4fG7WsxYdUq8K/ufcjbIhDmF1wC87tWyQRKUil aO2yqVI+wmKh37A8MEvhrypL4ecv8R4ZTZmeMQZSbUce7MOfqii5STCp721y5rieSxbTD2kVl3p xrn2Ukkp/AvZgvKphpcjgYqKmCGzhH9VMXX5DfXrHcNKAd9ynLfXD4HxSGRouuKz+fFvo9nVrMM riLMdSJ6kcNPiXdqVZJPQKEPNM8/YoOUz80A+hm0NpHhrfNVJzbL14L/1IGsnrU2gY8nT6zzkeS eViSKqBE2mmrA1KEofeWDKxOtR+MzlsBPPUEiKzw1Df0z4RW4Q== X-Google-Smtp-Source: AGHT+IHNRp/pxqAr97mhS3hLnDjt40W4ov2FMH5GWFdVtHIsSWjMSoo10xFdHk7uT4lIY9bzg5DJkA== X-Received: by 2002:a05:6a00:3cc5:b0:740:595a:f9bf with SMTP id d2e1a72fcca58-747bd9510fbmr24262396b3a.3.1748934674417; Tue, 03 Jun 2025 00:11:14 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.11.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:11:13 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:06 +0800 Subject: [PATCH v11 07/12] drm/msm/dpu: split PIPES_PER_STAGE definition per plane and mixer Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-7-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=6424; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=i9jqTYWgdUcfVxledyCdB1fwWCOzjmcgPZJqlQ4gFuE=; b=RZmrXQjZu1p8w0/VpHCjl6zc1qTfrh/T9x69at8mXb0isNMzDekUhD09lzLE04EX/LtJW03Yu WRo0jBpH1WzDYeiS6817rQlQsvX9A2t4xB96GK1da+Z8E7TShXuXfAq 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..e7f1b5816511b33b106f292541f8f5c966c87118 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 == DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable = true; - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 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; } -#define MAX_CHANNELS_PER_CRTC 2 +#define MAX_CHANNELS_PER_CRTC PIPES_PER_PLANE #define MAX_HDISPLAY_SPLIT 1080 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); - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 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..9f75b497aa0c939296207d58dde32028d0a76a6d 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 +#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/msm/disp/dpu1/dpu_plane.c index 7efee42943866e4999b0ca04ecdc67380a1b1d08..0bb153a71353ca9eaca138ebbee4cd699414771d 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 *pdpu, return; /* update sspp */ - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 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 = 0; i < PIPES_PER_STAGE; i++) + for (i = 0; i < PIPES_PER_PLANE; i++) pstate->pipe[i].sspp = NULL; return 0; @@ -1214,7 +1214,7 @@ static int dpu_plane_virtual_assign_resources(struct drm_crtc *crtc, pipe_cfg = &pstate->pipe_cfg[0]; r_pipe_cfg = &pstate->pipe_cfg[1]; - for (i = 0; i < PIPES_PER_STAGE; i++) + for (i = 0; i < PIPES_PER_PLANE; i++) pstate->pipe[i].sspp = NULL; 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 = 0; i < PIPES_PER_STAGE; i++) + for (i = 0; i < PIPES_PER_PLANE; i++) dpu_plane_flush_csc(pdpu, &pstate->pipe[i]); } @@ -1470,7 +1470,7 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane, &fmt->pixel_format, MSM_FORMAT_IS_UBWC(fmt)); /* move the assignment here, to ease handling to another pairs later */ - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 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_plane *plane, pstate->plane_fetch_bw = 0; pstate->plane_clk = 0; - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; pstate->plane_fetch_bw += _dpu_plane_calc_bw(pdpu->catalog, fmt, @@ -1503,7 +1503,7 @@ static void _dpu_plane_atomic_disable(struct drm_plane *plane) struct dpu_sw_pipe *pipe; int i; - for (i = 0; i < PIPES_PER_STAGE; i += 1) { + for (i = 0; i < PIPES_PER_PLANE; i += 1) { pipe = &pstate->pipe[i]; if (!pipe->sspp) continue; @@ -1625,7 +1625,7 @@ static void dpu_plane_atomic_print_state(struct drm_printer *p, drm_printf(p, "\tstage=%d\n", pstate->stage); - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 0; i < PIPES_PER_PLANE; i++) { pipe = &pstate->pipe[i]; if (!pipe->sspp) continue; @@ -1682,7 +1682,7 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable) return; pm_runtime_get_sync(&dpu_kms->pdev->dev); - for (i = 0; i < PIPES_PER_STAGE; i++) { + for (i = 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/msm/disp/dpu1/dpu_plane.h index 052fd046e8463855b16b30389c2efc67c0c15281..18ff5ec2603ed63ce45f530ced3407d3b70c737b 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; From patchwork Tue Jun 3 07:10:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894285 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 333862690D1 for ; Tue, 3 Jun 2025 07:11:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934690; cv=none; b=a8Ey3j8XTc7Nq0LxJqDJrNrkt528WeZjemn0mjpygoHIiQU6TX28yP/YKcHGo8W1IwSYsjW/wmW5d05OuBUekchNGnDrdtw6sXS3F+F6qYiOq8b4sDzUw+B+2zT1mZDEHxmTMPZ3BuzFBGRiZ9C2h1SIQLBixKpVmaWl4VYuzNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934690; 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=KndWOhsweO8eNKtw5emQknkm25/q3GsHnJecpE33cqrdknFqC2S6V51ZftbyUPxEoxigbSSh0XjewQeGRJhpDuPDvoBIdhTeoZREb++wVc4dwHSkF0qj5vqLVf2ysJmjllwGjzNOfuwOhkMOxuQ/UL+xcMCLGWxYzSoLDT4hm2A= 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=x3QkGjC7; arc=none smtp.client-ip=209.85.210.170 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="x3QkGjC7" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-73bf5aa95e7so4136506b3a.1 for ; Tue, 03 Jun 2025 00:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934688; x=1749539488; 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=x3QkGjC721q5pKUw0NQzMYaX+CoDRfMPkCaqVKAp1+WYWmWdwh7a77czLCxKJh6LrZ Jl7xLScsvNKYuBu5+fgsvJqD+HV59cXT0/Ln3PXDB8ezllwDlecgmrICHy7x5nWWdhjT 1my5CdKp8ucoIWOtokaRQA6YhgW9HZHEJcvHsgti45bETJ+nm6XdkedKwaDzr6QfCkGs ATOq3eNeXzLaFfiB4cixYsVqDgC5ymWMUPZR8T9nk3ub3ZPAZVhBOWEL7kvPVN2DvPPV wxdAeM6fN40TCoWEGCWQrcDE7LuBvhab3URpNfhNu8NSFxiGpsbY1bkGx6YsuCFYBpJt BiOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934688; x=1749539488; 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=PPUszrCoSLCZzyHsct/INY8kJ9W0/o3RRujJTZAtkwfjkL+j/cmjolssAW/drRybaJ ojLk7Dhsl2g+L0KkMtH48h2JdMiXbqMXqMgyb/IR6O+Rp21x2oHCznsWBBw4CJCvie7J zjA9uWJ78miM3yN6aKmQTxkH4TMxM63shMk1R24PS2Uljdy0oII3BwoBtYsWdK+PNswl 9PWMFuWQY5U6/Vd8jXF79ZsfPq8NdtjLL4fsa6417rZg34HXYUU2JpiDfmWSxgA9qGAI gpbcy33uReBpMMV/+FQKgRSKA6ATlhImqt45zPmGaTBJnkg1urgQJScVtY+k3lgBzIZO QoFA== X-Gm-Message-State: AOJu0YzfP1M1mR8DuU7GsCdOKh/pWQVb0ifNP9hpSqasBG6TnJnRYDNu iHfaTufZUpjysaI+jPGPTi4OtXeBKzp+Ou1VCbZKBAmr8XowguFNAI8zGDcvI6qbX/g= X-Gm-Gg: ASbGnctr289BE7NVgcnQgSgSn34s9ZSEgq0uYzDjo1MN+QRdLCd4gvRnXd5tZ7pZp+D qbqErBpCwk/v2MNvcqu1YvCUJBrM7sNN4dimBj5RDfGTgQVgL7pumtHBg6zFKgUsA2bezc37Qbr 1Xs0uTn5ztQ2qa7upnvV2sOhV8Tw37qLUGXRHPBVILLjbVRTDDZJsLTG40qFERXyTBJc4K6SCgQ 9rQGRioQE4yOleXb5Y7eJYEodmvvAs539+p5B65VS2dmVbV8YhRwdtcaYnbaahwjA3STXRlIf07 lE6/+AIXh6gxoiYyxcqnh5UA/XAMHsxnzHL92NopSIiBuomYF7/zTEoVL3SH X-Google-Smtp-Source: AGHT+IETictwGYbPTBkViIRb2uOOYYiWbO6IF3qPE8DiFwJnQM6QC65E4tTAZVhZghEeY6er7aHyIg== X-Received: by 2002:a05:6a00:981:b0:740:b372:be5 with SMTP id d2e1a72fcca58-747d1831c2bmr15667861b3a.9.1748934688467; Tue, 03 Jun 2025 00:11:28 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.11.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:11:27 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:08 +0800 Subject: [PATCH v11 09/12] drm/msm/dpu: blend pipes per mixer pairs config Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-9-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=5256; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=Z+hYtg2N54oWb31O//Qk5cgPs6uNy0350+rWTK60htc=; b=MOwmJhxS/+i5G5jsyH7FPRBMJfPi6QCikDSu2CmGxCvFPp3dlpCoOcvb07Z5FufJT5KYpYwOk sU4TJj24CVpA4yik6bnactGaXFsBv4Mj/n8ynegaorMctZIvYinflgV 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..85f585206218f4578e18b00452762dbada060e9c 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] = pipe->multirect_index; /* blend config update */ - for (lm_idx = 0; lm_idx < num_mixers; lm_idx++) + for (lm_idx = 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); } @@ -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 = mixer->lm_ctl; - uint32_t lm_idx, i; + uint32_t lm_idx, stage, i, pipe_idx, head_pipe_in_stage, lms_in_pair; bool bg_alpha_enable = false; DECLARE_BITMAP(active_fetch, SSPP_MAX); @@ -463,15 +463,24 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, if (pstate->stage == DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable = true; - for (i = 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 = 0; stage < STAGES_PER_PLANE; stage++) { + head_pipe_in_stage = stage * PIPES_PER_STAGE; + for (i = 0; i < PIPES_PER_STAGE; i++) { + pipe_idx = i + head_pipe_in_stage; + if (!pstate->pipe[pipe_idx].sspp) + continue; + lms_in_pair = 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]); + } } /* blend config update */ @@ -503,7 +512,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) struct dpu_crtc_mixer *mixer = 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; DRM_DEBUG_ATOMIC("%s\n", dpu_crtc->name); @@ -518,9 +527,9 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) } /* initialize stage cfg */ - memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg)); + memset(&stage_cfg, 0, sizeof(stage_cfg)); - _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg); + _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, stage_cfg); for (i = 0; i < cstate->num_mixers; i++) { ctl = mixer[i].lm_ctl; @@ -537,8 +546,12 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) mixer[i].mixer_op_mode, ctl->idx - CTL_0); + /* + * 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]); } } 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..e4875a1f638db6f1983d9c51cb399319d27675e9 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 -#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 From patchwork Tue Jun 3 07:10:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 894284 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4053626B2BE for ; Tue, 3 Jun 2025 07:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934704; cv=none; b=m65Q/LnMJsZxw8BwH/wWhy48Y3d85hYTY+1yT4WAA025FH9Hhh8i2m7uM7M00+XIqqrwVpFhbO5hFK4UVGyYhORcDG1IvEufXjk73ymsq6HUPNHDv+NZmfjEGvlso57KeKLATsTvkgbH+nfK2GaSuoV00THfGD2p8kCgZEA+GUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748934704; c=relaxed/simple; bh=nqb3UGzKGM908NES2GpN7Bv0WqD39RrAbW+EVaLrLwU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BkaaxPMH2ZIruCgUBKSZlzfsddZZ7E9wi9nUvmVe4OBPOj9TnoyKc9WrKobtofHhBMu55xj1pidc7AKUFX0rJc5laezemP8ZUl19708+IIEweY6ZkglZx6ZXDwSrY7XbtaBYwNmf2hBn2cgY4MzgNnPH3CN0vByY2av+bB7WeV0= 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=PRr2frBp; arc=none smtp.client-ip=209.85.210.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="PRr2frBp" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-74267c68c11so4048824b3a.0 for ; Tue, 03 Jun 2025 00:11:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1748934701; x=1749539501; 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=P19HUUVRs3YZabLF5ALe1GWB4XPqwbR9bR9J03FQpJs=; b=PRr2frBpPjY2Xta9U0qvaJmCg23L21+9jktB3wX6+xCOKwMpENFT074jS9n8dONLd4 A/WXxPa3JCDNS+Wpoy0JligyfNzlybpG5EZgwS73kSnujgnuX2kAsbnFVuRKh2bAxB9+ tmZ89eaGAKurzjl3pO+WPG2ELTm0rGjZwMHsJU1wkE3rbzbcoJWBnyAdDJ7vIox/lIty rADPXv71vXozGCR4chY67DRT08aCJHYj2i2UQxGI8cbxAkfeEo98jCpd2Nr8xrkiSrKb vYIHYSLzePZICqHDDPR0LYZYn5TPBbYIJ6Lp2RGMN03Ujd7uQzGxMEwniyLa2eRg5Mbk ODTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748934701; x=1749539501; 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=P19HUUVRs3YZabLF5ALe1GWB4XPqwbR9bR9J03FQpJs=; b=tc07ddu2cYoUgMf5JwouWPUy00dgz1WrJCEQku+7lOBBo/F9MODkJrPumRTjqI8jcT XoGWp3UseKe6qwc7M9YA6cf3Mdo4m0msxzFvywIP4RiE631jF/ESH6KkjpdErgW0cd+o 89udE+f5TC/3ykEeLlSFid5o/fd3QDzwFs8fFJXCI969mldowVePcrYBjcrKaSz1vL5m WRfDUzsDW9LWzLpOqDh5euqbh3msU8sKk6BA+X7UK8B2B4zjTk2oyNU6p3QJf+9HU/fA cxQFZPdAjsIU2BOkXKV18KP0E1h0IL41XXgEiv8BQU5IYMJOb9oRC7phitxOUXxTPlbO p56A== X-Gm-Message-State: AOJu0Yy9Q3jr06KqF/LmAzjCvHjsKizJz6BlRN1XP57neeZRO/BCEdur du3QYCC0JpxqsZpGwU3uTFv8n78Qotw0QVy3WISdTTrmLHYxR2XsOi7sKY5cIOzw1o0= X-Gm-Gg: ASbGnctqOsv2dP0wa0II7+FB2TBaFfyW+kfuVnL0czu+WFw9N2ZPwZt5JPew6ZaF39U QDuxMr7+I7+ffCN1dTUHFsIEqEweitXfyamFkNrY6t9FGsSGiFtnRm+l1X6tHllRexSPiuumGZK yA23lAt4j3nvs7HV5OljPnbDPCSDjtlDfZX8V8UGHZNFQKsiSLambGMexgD7bFRRh5XGIAJgEAp /R3mWxCiNaZC2/Rx3DSNxRXlb7Z31Wy0sZSNeXpsx3yC9S9LbzJrmuibXL7jTGlc9yErKakZHKX 7IH3ehnhb2wQWhn09EqQTRWaElx5sWoUWjHETHaJyqDjI75pMmY+70vCRnmT X-Google-Smtp-Source: AGHT+IGe3lF/hwyj8ZmPgSJ+0VOm9RvpWXZKdN+MWN3fgGTVQ2EWKes9L4cQEGKfo/HVcroIr0pWKQ== X-Received: by 2002:a05:6a00:14c8:b0:736:9f20:a175 with SMTP id d2e1a72fcca58-747c1a1f412mr20015930b3a.2.1748934701473; Tue, 03 Jun 2025 00:11:41 -0700 (PDT) Received: from [127.0.1.1] ([104.234.225.11]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-747afed360fsm8746481b3a.81.2025.06.03.00.11.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Jun 2025 00:11:40 -0700 (PDT) From: Jun Nie Date: Tue, 03 Jun 2025 15:10:10 +0800 Subject: [PATCH v11 11/12] drm/msm/dpu: support plane splitting in quad-pipe case Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250603-v6-15-quad-pipe-upstream-v11-11-c3af7190613d@linaro.org> References: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@linaro.org> In-Reply-To: <20250603-v6-15-quad-pipe-upstream-v11-0-c3af7190613d@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=1748934620; l=9601; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=nqb3UGzKGM908NES2GpN7Bv0WqD39RrAbW+EVaLrLwU=; b=4MSICdDVQVu9U9YMB+0w5ZJ51Dg7wLA3EgA1/9eT/kBKBN+KTt9NgEBU+m45RiEFNMiacJwmE VEwRMbTE8aIA3M0kdD9+DKkBQhF7N+LHzUaodXkjrnItIb1QsTfLKR1 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The content of every half of screen is sent out via one interface in dual-DSI case. The content for every interface is blended by a LM pair in quad-pipe case, thus a LM pair should not blend any content that cross the half of screen in this case. Clip plane into pipes per left and right half screen ROI if topology is quad pipe case. The clipped rectangle on every half of screen is futher handled by two pipes if its width exceeds a limit for a single pipe. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 11 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 137 +++++++++++++++++++++--------- 3 files changed, 110 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index 85f585206218f4578e18b00452762dbada060e9c..47ab43dfec76acc058fb275d1928603e8e8e7fc6 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; } +/** + * 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 = 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..6eaba5696e8e6bd1246a9895c4c8714ca6589b10 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_client_type( void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event); +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/msm/disp/dpu1/dpu_plane.c index 501b6a1bad4a1fee832f15efa7caec136a669da5..609de39aafd7fbbce5515c17f5bc005abc031a1f 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_plane *plane, struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state); struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; + struct dpu_sw_pipe_cfg init_pipe_cfg; struct drm_rect fb_rect = { 0 }; + const struct drm_display_mode *mode = &crtc_state->adjusted_mode; uint32_t max_linewidth; + u32 num_lm; + int stage_id, num_stages; min_scale = FRAC_16_16(1, MAX_UPSCALE_RATIO); max_scale = MAX_DOWNSCALE_RATIO << 16; @@ -855,13 +859,10 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, return -EINVAL; } - /* move the assignment here, to ease handling to another pairs later */ - pipe_cfg = &pstate->pipe_cfg[0]; - r_pipe_cfg = &pstate->pipe_cfg[1]; - /* state->src is 16.16, src_rect is not */ - drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + num_lm = dpu_crtc_get_num_lm(crtc_state); - pipe_cfg->dst_rect = 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); fb_rect.x2 = new_plane_state->fb->width; fb_rect.y2 = new_plane_state->fb->height; @@ -886,35 +887,94 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane, max_linewidth = pdpu->catalog->caps->max_linewidth; - 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); - 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 = (num_lm + 1) / 2; + /* iterate mixer configs for this plane, to separate left/right with the id */ + for (stage_id = 0; stage_id < num_stages; stage_id++) { + struct drm_rect mixer_rect = { + .x1 = stage_id * mode->hdisplay / num_stages, + .y1 = 0, + .x2 = (stage_id + 1) * mode->hdisplay / num_stages, + .y2 = mode->vdisplay + }; + int cfg_idx = stage_id * PIPES_PER_STAGE; + + pipe_cfg = &pstate->pipe_cfg[cfg_idx]; + r_pipe_cfg = &pstate->pipe_cfg[cfg_idx + 1]; + + drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + pipe_cfg->dst_rect = 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; } - *r_pipe_cfg = *pipe_cfg; - pipe_cfg->src_rect.x2 = (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2) >> 1; - pipe_cfg->dst_rect.x2 = (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2) >> 1; - r_pipe_cfg->src_rect.x1 = pipe_cfg->src_rect.x2; - r_pipe_cfg->dst_rect.x1 = pipe_cfg->dst_rect.x2; - } else { - memset(r_pipe_cfg, 0, sizeof(*r_pipe_cfg)); - } + pipe_cfg->dst_rect.x1 -= mixer_rect.x1; + pipe_cfg->dst_rect.x2 -= mixer_rect.x1; + + DPU_DEBUG_PLANE(pdpu, "Got clip src:" DRM_RECT_FMT " dst: " DRM_RECT_FMT "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), DRM_RECT_ARG(&pipe_cfg->dst_rect)); + + /* Split wide rect into 2 rect */ + if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) || + _dpu_plane_calc_clk(mode, pipe_cfg) > max_mdp_clk_rate) { + + if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) { + DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth); + return -E2BIG; + } + + memcpy(r_pipe_cfg, pipe_cfg, sizeof(struct dpu_sw_pipe_cfg)); + pipe_cfg->src_rect.x2 = (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2) >> 1; + pipe_cfg->dst_rect.x2 = (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2) >> 1; + r_pipe_cfg->src_rect.x1 = pipe_cfg->src_rect.x2; + r_pipe_cfg->dst_rect.x1 = 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); - if (drm_rect_width(&r_pipe_cfg->src_rect) != 0) - drm_rect_rotate_inv(&r_pipe_cfg->src_rect, - new_plane_state->fb->width, new_plane_state->fb->height, + drm_rect_rotate_inv(&pipe_cfg->src_rect, + new_plane_state->fb->width, + new_plane_state->fb->height, new_plane_state->rotation); + if (drm_rect_width(&r_pipe_cfg->src_rect) != 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 = drm_atomic_crtc_needs_modeset(crtc_state); return 0; @@ -997,20 +1057,17 @@ static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, drm_atomic_get_new_plane_state(state, plane); struct dpu_plane *pdpu = to_dpu_plane(plane); struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe *pipe = &pstate->pipe[0]; - struct dpu_sw_pipe *r_pipe = &pstate->pipe[1]; - struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg[0]; - struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->pipe_cfg[1]; - int ret = 0; - - ret = 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 = 0, i; - if (drm_rect_width(&r_pipe_cfg->src_rect) != 0) { - ret = dpu_plane_atomic_check_pipe(pdpu, r_pipe, r_pipe_cfg, + for (i = 0; i < PIPES_PER_PLANE; i++) { + pipe = &pstate->pipe[i]; + pipe_cfg = &pstate->pipe_cfg[i]; + if (!pipe->sspp) + continue; + DPU_DEBUG_PLANE(pdpu, "pipe %d is in use, validate it\n", i); + ret = dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, &crtc_state->adjusted_mode, new_plane_state); if (ret)