From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.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 D21F52798EA for ; Mon, 7 Jul 2025 06:18:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869097; cv=none; b=hszrRRBRwa+SaU02pOr+VaPTLdNspMKFm2MPRsHtmsho3FTEliMfx5PpGT03XaXE5ansPCVwTY/EPOxgeIjOyF3Uny2MsRcOgqpgHHv9HvjnaRYQysNXAtCY+UiYlZiUevNqHc0mZdh80/dEdTT1W1uizDVwJVRrdN6kSnlR2Hk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869097; c=relaxed/simple; bh=xSbmnUPPIXthlmIB0KVW45Mr6GQu0WXNqCZGA6y0yZ0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lxytUyrOqyoiIOvE55YJpBSRsBl2rID6vv0H54rsbv+HZjgRU47707OskWeW5cXSA5Gp2rdFYR1GqI+DrxgiS1EGDGed89P2NHsKulLDuDMlLGTH8x0bQliOuAO0Sp291sY7ev54ThY3GCuii0k0How58mew4TKcm6D6QpNGFCY= 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=r1k+B2R4; arc=none smtp.client-ip=209.85.215.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="r1k+B2R4" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-b34a78bb6e7so1846460a12.3 for ; Sun, 06 Jul 2025 23:18:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869095; x=1752473895; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=M7fMxwobhtU9Fs42SW34CXR4Ei37EeIi3/yq4e+ZyyI=; b=r1k+B2R4/sjBF+IWJ6NnY5FKNvr686WRa/WGaV/MlnBWW68Am3YTpxWbS5J1+28fPd A74RXwatGAJMkeRu4u9e39oCotmJliyN0lIoOHCLfmCci65UTLKbwZX0AOtQDWfqRfJF xwmzgl/MEip6FLmWtG5LmuJJ/kGQGGFnIyRRPsF+jrHSlrax4ft9xN/t/RX4AQEQzCqi ZdZsn+oJ3prem0+DTMrkQsz+cgShPbRBTrDHguIlFapk+wEa/8p0CBSoZ8kvrDyOlAOL HObxxcxC+NIy6kzfLxOW56K5gCKL0lfXXL1XhBnV/8sRo85yOW+LbBzy5hfhWcjWwCIW rrTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869095; x=1752473895; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M7fMxwobhtU9Fs42SW34CXR4Ei37EeIi3/yq4e+ZyyI=; b=Y7K9jzF7605TKk3BKVq0Rj4wpw2hmSYiX9GpI8YvYINB5Mb5Hbo8Yife8SwVhtAoJY gUEmmlvikdqQ2jeYkTDkqGGrwucKa9oFw85fO88XDLh7taeo482+jaHJ+QYTPbmM3xKb Amf8QGz3+Y1gjJC0M6ohfF9B3DDCAKWk/WAGO1WY++1WbzFHBQfedEg0jxMkKYlKrspV Ybx2OD6OrU4rb55+rrmw7VWo9WaA0szbF3hejPM19KXRbJEpYpuzrabD5uqtUFIqAtq+ r3YTwy5XLsawIpj228yRULzUULquZZY6q469JjoqRogRF28pw4RMk3jsBaXBtBawYJ9H Qgsw== X-Forwarded-Encrypted: i=1; AJvYcCWULWNxGyovKHW6iCY91SHznqdLQsCRwdEnoWEpTLumWl1ZkM46XaMLav6na66uaMjhShpccvwP1ZmVC6o=@vger.kernel.org X-Gm-Message-State: AOJu0YyMCFHzOfMbRu+i1bzJkj0ygXhNVReF0j9HIO8z2K3LEJ/Poe8Z qEQhtQPUCRK/BAlndoFnnev46ZbnS7d0OG/w3wBHJvJdUCvtuu35vppp+TKu5KiZ6QM= X-Gm-Gg: ASbGnctL6zTh53aIPtnIafCX7mw6nXEXSByeMNECGf33ALLRLjUap1ROHi7riD6ec8o ydpzjoXVCx6GcYUI4DGfoNr8ozXJ4Bi7hWolF2c/lwOsQJc2inlqQKeoNo8ScB5oEmD9IfnEQKW I6FPI2VOFYmeij5nZkd13KYJ3mU+MpohQSvfGgNVoabjm3vRf7LUv6ESGvPP2BHoDoM6GCvBKia t2wYd01lsxYy43p0ZnqIZs7vF78c6j+QqtmLDExmuMq35S3OCpZmtc/OIJZjtU6QIdsPF7Iq3ha zegb4zcOCyq9odJnIMPlZQm0mx9xeVdragbue2LZMjCzO2xd5gnt6LhDn8g= X-Google-Smtp-Source: AGHT+IGlrhk9fPjEdOM1WLAnuyBtakJRbk69O5GldcFs1bDWoB3+lapHMv4SrrPDfzhU9/69EC3zWQ== X-Received: by 2002:a05:6a20:6a0e:b0:21a:bfb6:1c74 with SMTP id adf61e73a8af0-225b9b7a787mr21297712637.34.1751869095124; Sun, 06 Jul 2025 23:18:15 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:14 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:17:56 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-1-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=2319; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=xSbmnUPPIXthlmIB0KVW45Mr6GQu0WXNqCZGA6y0yZ0=; b=5cz8/WtA4/jf2GK9NtibfYXdUpTtxBzCsxYxrYNwcSmqiOcZMWA9BuwuaemTojkEvgev9IPh5 BBn+/NHCX2QC4+i7SQWW9oaMKioD254NH2W2pyVo/puVHtNGz324ncE X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= It is more likely that resource allocation may fail in complex usage case, such as quad-pipe case, than existing usage cases. A resource type ID is printed on failure in the current implementation, but the raw ID number is not explicit enough to help easily understand which resource caused the failure, so add a table to match the type ID to an human readable resource name and use it in the error print. Signed-off-by: Jun Nie Reviewed-by: Jessica Zhang Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index 25382120cb1a4f2b68b0c6573371f75fb8d489ea..2c77c74fac0fda649da8ce19b7b= 3c6cb32b9535c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -865,6 +865,21 @@ void dpu_rm_release_all_sspp(struct dpu_global_state *= global_state, ARRAY_SIZE(global_state->sspp_to_crtc_id), crtc_id); } =20 +static char *dpu_hw_blk_type_name[] =3D { + [DPU_HW_BLK_TOP] =3D "TOP", + [DPU_HW_BLK_SSPP] =3D "SSPP", + [DPU_HW_BLK_LM] =3D "LM", + [DPU_HW_BLK_CTL] =3D "CTL", + [DPU_HW_BLK_PINGPONG] =3D "pingpong", + [DPU_HW_BLK_INTF] =3D "INTF", + [DPU_HW_BLK_WB] =3D "WB", + [DPU_HW_BLK_DSPP] =3D "DSPP", + [DPU_HW_BLK_MERGE_3D] =3D "merge_3d", + [DPU_HW_BLK_DSC] =3D "DSC", + [DPU_HW_BLK_CDM] =3D "CDM", + [DPU_HW_BLK_MAX] =3D "unknown", +}; + /** * dpu_rm_get_assigned_resources - Get hw resources of the given type that= are * assigned to this encoder @@ -946,13 +961,13 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, } =20 if (num_blks =3D=3D blks_size) { - DPU_ERROR("More than %d resources assigned to crtc %d\n", - blks_size, crtc_id); + DPU_ERROR("More than %d %s assigned to crtc %d\n", + blks_size, dpu_hw_blk_type_name[type], crtc_id); break; } if (!hw_blks[i]) { - DPU_ERROR("Allocated resource %d unavailable to assign to crtc %d\n", - type, crtc_id); + DPU_ERROR("%s unavailable to assign to crtc %d\n", + dpu_hw_blk_type_name[type], crtc_id); break; } blks[num_blks++] =3D hw_blks[i]; --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22275264A74 for ; Mon, 7 Jul 2025 06:18:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869102; cv=none; b=JrE4cqv3eu6nRHJgZ52exyag/9kPLoYpTQa2Z1dKp8HzR3WoDCTSuECw/7rk3dwQzFiGsl66/l0/0Oxm5UY08D7GUC46+gkad3PL/CuZZWg7IF7aAKwU9nV8sHNmbIpuZn7tdfwg07LY27g5LrYLHIWARpBzgAUHMQJSFBUYKvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869102; c=relaxed/simple; bh=KP97mkf4mFx6Hynpv+UvTtqAjJLhCHcsa39rmhW+j40=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B0pN3sSdj2jtJ+BxEGDFt2WF7ECBwprrEfFTXbwhEr6mWG5aitY1d4tKP1k0xXLT7L65D0+1J4td9mympn8sWWvxIDk2FGGMZciw6FLxD+jG/weE34z50vgnjMHdoycCxuZNAreX/jbtbjWJIQf+oCgw93/EvNbB+oivG6i9azY= 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=mrG5Mf3K; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="mrG5Mf3K" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-235ef62066eso43094615ad.3 for ; Sun, 06 Jul 2025 23:18:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869100; x=1752473900; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rf99YwbE+zk9ZgJ2ORD0W2vahwafwsW/a1Bh6B8t8K0=; b=mrG5Mf3KCIQzoVniYBT5i3G6HVAhsi+aQMlfmm/CLS+h3YieBAAOlu8mgYJNuCQmL4 jQowc8V/aDasgxjUJrMfZ7bWFw3Hulmjq9jgnUFLPzCOIv2QmFeMrZk6VYamesr4bPBa FV3vsWdB0KsBEf0FyWoKAbbQgrM/6LkOkS2LfIm646FUWRILiWdNnc01FTjYNPj90ad5 TDbtyqMSlfy3erqjXWy2NaPQsu9YTa8TG3MZi0RlK8hkmBMWfttVky3TZW2Rb1E3S2Sx riO+74a7gIQwrOup93d9q6/6Yxkb0izgwIeIeaGnwOnoEp3UaMNw8LS9V5cOoOMBKce9 mYyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869100; x=1752473900; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rf99YwbE+zk9ZgJ2ORD0W2vahwafwsW/a1Bh6B8t8K0=; b=ArOfYruhPAZttB1y5j0k1/5l8tQ9n/VnXXNuSUehse9n8Zjmxbs6Ap4T8NFAkotl4i H5uxVIb48xuC/lGvG8ioaYC5dECEWDLljzBpsPcxX4DV5Jsj8O4/0dsAM4M8yenvy8Z+ jWur5hochRAWXuXowlkVKzX4Y8cB6kKgh5G9DaykV1dG6uWHoG0aKunB13W1QNRHAaTr 4Z7OgoMT37PYNwBXgaEefh9oIfNt13TBa8DuNiJ7bwLCIXEEb+LcWpeUyqekqXinEYtI 8iY94OdSubKMAp4W5O7mtn5aEacLoNCG0G/T/VMf/REx+RZCOUEEGD2LivYdBU+JtJ3a x8cA== X-Forwarded-Encrypted: i=1; AJvYcCWOrnTUsggYXvsUzYPLqK5wcvI1Fs4LShfv7SuTeG7l7l1abLT0UtYWGqIXJ/Gu9BPKOhejuJhwPTDz2Rc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxr9TdkuStTNVQn4srmTblmXFygssxOHO/u/O97Et5jwzqQqhqj pd0MLcg2p2TEMU1vNjkt+4fDfqIAbTY+lJsi1abLqOZBh2KcVQhw1Wf+sMoH8qwXOvY= X-Gm-Gg: ASbGncviL+mRvm/sAvG+UQfJ3SWJuCYHKepeOYslOsW7O/FNNCqOERdj0n098gx37w1 3Tc7gs6aSXA2Dg4otWWlZYr90uVLsYg8szdOrSUbwsqYuB9XobY3JlcTZVMzpJSfvIx7e3S/Lkk 283pjKC5Q6dTLXyo/E+C1xVVYvvR77uOBq8fGWKzYUGbeWBhW8gWP03FJEUNyc7EpUu/F3UCAVU pof81mmPWwkzBvwTEs+8DEx0al2pvq2QOfpdyXsVEA6jXXE4NgUDfwmW8vYKy+i4qffZtBQzhYW Tz2ruX77iSIdA85IxdsG4FNOzZZnfvGY7X7Qa0VbNdpdZL4GKXyJhs/2RxE= X-Google-Smtp-Source: AGHT+IHRRa1nd8EABRQU5wK9XzCGFikI9OJL8kdQbUK0WUMo87bOtO4uywAsrOfWnCd+HRjG6iJPtg== X-Received: by 2002:a17:903:2304:b0:220:c164:6ee1 with SMTP id d9443c01a7336-23c90fc7b7bmr105932755ad.32.1751869100387; Sun, 06 Jul 2025 23:18:20 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:20 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:17:57 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-2-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=1985; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=KP97mkf4mFx6Hynpv+UvTtqAjJLhCHcsa39rmhW+j40=; b=eVMLeIUgZqZLeZ6Ci2g5Ka64hLAyQjdFTZDLaC2dgeCYsGmozTC1kJqA/rBQTjoMdzD4RZrJq kdEp3oVl/uwAcz9bq09dQ8GU8HHKb8bWx8e6T5k+KSEV+cn4RO3kXWT X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, only one pair of mixers is supported, so a non-zero counter value is sufficient to identify the correct mixer within that pair. However, future implementations may involve multiple mixer pairs. With the current implementation, all mixers within the second pair would be incorrectly selected as right mixer. To correctly select the mixer within a pair, test the least significant bit of the counter. If the least significant bit is not set, select the mixer as left one; otherwise, select the mixer as right one for all pairs. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index d4b545448d74657aafc96e9042c7756654b4f0e7..9a40492e5aa961f7180ba4ac6c8= 6e06fcccef8c2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -377,11 +377,10 @@ static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc= _mixer *mixer, static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc) { struct dpu_crtc_state *crtc_state; - int lm_idx, lm_horiz_position; + int lm_idx; =20 crtc_state =3D to_dpu_crtc_state(crtc->state); =20 - lm_horiz_position =3D 0; for (lm_idx =3D 0; lm_idx < crtc_state->num_mixers; lm_idx++) { const struct drm_rect *lm_roi =3D &crtc_state->lm_bounds[lm_idx]; struct dpu_hw_mixer *hw_lm =3D crtc_state->mixers[lm_idx].hw_lm; @@ -392,7 +391,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_= crtc *crtc) =20 cfg.out_width =3D drm_rect_width(lm_roi); cfg.out_height =3D drm_rect_height(lm_roi); - cfg.right_mixer =3D lm_horiz_position++; + cfg.right_mixer =3D lm_idx & 0x1; cfg.flags =3D 0; hw_lm->ops.setup_mixer_out(hw_lm, &cfg); } --=20 2.34.1 From nobody Tue Oct 7 20:06:07 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 90D9F27A12C for ; Mon, 7 Jul 2025 06:18:27 +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=1751869109; cv=none; b=vFxlK5PARkoHRbbRONYi6PMvs+tkQ3dtLzLM78IT/s8Ppt4FesHRxI+6hBKrQ25iJdOIi0gfgUVjw21a7znIO3a3QyDRaPa8bvBEne1g7BE0+FcRvCcVpJT+KbQznRTJ0/S8sybRjThAzUoMi4k1QjtdANQEkWPMAR+3StH3io0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869109; c=relaxed/simple; bh=OO2Z7mIWJju/0AAWi0QFQrEeFkD+xuMhO5TmIsG9bFo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f/rI72UbAb19GiCFf1i0jAa9yrzN0/VBo7lllGO3aLn+hCy5aogrVmCSnOJ8bbXkz7EB7voUdjbyTRZsCPJTi2R0cro87jcYor/QmD2FZS8vC0n+/ltw+Ut6EVZesC95OvHE5eoj5Yro+9iFSjTauC3HDiZiR4xWOjjUQ9brt9k= 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=Ux+i3rMh; 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="Ux+i3rMh" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-73c17c770a7so3409383b3a.2 for ; Sun, 06 Jul 2025 23:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869106; x=1752473906; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XDSLLULuQro4tZ+C6kFbdQGbu24iHgqnLikNbErS/QE=; b=Ux+i3rMhjthLuR9oC86YzGcBsOtyV/uIoMhQLW6A0Yg8Vsa+6R8HN54kTeqiOerjEp v2UIw4JwSseStOY/l3cyf16IRszKM7v4hNi8u7A92keHNoraBWvyJckrBPeDuf7AO75L bnA+OgNfq4ZojhKASgh5qJaZNEUqfbc0w78p8cDqPyAeo6arAPSDEkuGovB0GF+X1Bfo 3vCGgZENVtTMxnaMYHE7Av+XB91LzLRZd3QCyB9/pUWgQl05iC7gJh7L5eZL9nnB5vSH rO3zKrR4RLOUADq80/HzUMm3rj6eElmUvuCvxTt1h9uqTB1HS+lS/QSbl4Al4NvWiNMG K/eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869106; x=1752473906; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XDSLLULuQro4tZ+C6kFbdQGbu24iHgqnLikNbErS/QE=; b=vbN5sKUAICAkOMa8zW+Kd4ynNwXUkkoFyDvBnVIC6wRHLA1jrTOmQA2U3QzQYQOKgX 13IkKJe7Lla7gRssncbR4Di422Tpf3f9J73yLlnqhPungD1Ca3Mx4zlpW2MzAqpMvDvH AY0Gq7QROg9s6/KiQD91J+PxtENLo0uwCc9Jdzoy57sakzIKiDvuwcHF7KoK8QUlJAUj 5KoLw3IPm2l2Zn6Gz+sQStYG6sofrgEkf4xzkAwqdSn/JXF0J6SyGA3IvrqxwE+jhSIi J8A5sud8ZkSt1IXv4I/BS+plbVolmDCKj7A25Rt1PTD/xasD9T/vOQFzafgeP9BdQpf4 4N8Q== X-Forwarded-Encrypted: i=1; AJvYcCVqkdraI06ZvhZM7TEowrWbUutKOjLPID2XuOKBVzPUw1WSRWgz6s9bcFoPa62NkwwmWN6Mz29TbiCzzd4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5XRZ46HHDsFm4MZv92D3b814eSzNm+tiQ9oVKrFoLxyaWDbKM g2cqflZMVYhUtAqFoVT+MDeg1Ol1pOcwSKwV1oJ+LkKwEOB9vdOpFHzb5EufrVGHW8I= X-Gm-Gg: ASbGnctHqP2JNFtmBJKDhKa/T+CdyPDHWE1S1Wtmvvz59iYaICXvLn0FmUSArIMR3rN 9chFbSlEX/0xtmt/ul/TxkOvXc99eq60wPc6o1w+7+CssaB5/2iDK9+4VTwXM4MCvFj4BiQOj5P +OnNceuTPK2sidUJ8rHDW3k5TSjCMoNKIvz+6fJQs+4/uFeV7j+9g7z5mru4AWWc/LNi9eFFzFz DtqQquDH9vFG4irtNcOCZKweqUCPE40IsCejBDvHNMy5GUqFlkCagg/xQqMpmRt8dIJtQcfkvq2 f5cDCesug7wWf4Y5QKXYwiQPlwLHj3UO3/z66riZvYavkYWM+ZsH2+RE7Us= X-Google-Smtp-Source: AGHT+IEmnc9Nl7lcGHKBCmQmCi/m7XOmXpKt5Cnl8qyjZqXrrplvrrS72dHqfjoA89VugwwUs5rqDw== X-Received: by 2002:a05:6a20:3ca6:b0:225:c286:5907 with SMTP id adf61e73a8af0-2260a0a362bmr17640836637.3.1751869106645; Sun, 06 Jul 2025 23:18:26 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:26 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:17:58 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-3-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=1366; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=OO2Z7mIWJju/0AAWi0QFQrEeFkD+xuMhO5TmIsG9bFo=; b=HIyipBAXPGv4iNFX/AHEf7r3WMbFa9ZI0N5soHzc2+H6HD25aR3ZFY5RtKQV9yhsI3bp4xQZp NKWA9XKuuigCEPtJpJX+IkEjE/6yf+9/eIdQRwzGkisQtZC9ZCsrtJ7 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Current code only supports usage cases with one pair of mixers at most. To support quad-pipe usage case, two pairs of mixers need to be reserved. The lm_count for all pairs is cleared if a peer allocation fails in current implementation. Reset the current lm_count to an even number instead of completely clearing it. This prevents all pairs from being cleared in cases where multiple LM pairs are needed. Signed-off-by: Jun Nie Reviewed-by: Jessica Zhang Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index 2c77c74fac0fda649da8ce19b7b3c6cb32b9535c..3f344322b7f214d0050986e675b= 32522f8eb0ba7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -374,7 +374,11 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, if (!rm->mixer_blks[i]) continue; =20 - lm_count =3D 0; + /* + * Reset lm_count to an even index. This will drop the previous + * primary mixer if failed to find its peer. + */ + lm_count &=3D ~1; lm_idx[lm_count] =3D i; =20 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 C8E002586EA for ; Mon, 7 Jul 2025 06:18:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869116; cv=none; b=PthGzXLZXN/mtIMbXyiIkfY9I8tA/XtBDl5OkmOy3eV58VWnMPN5FV7HwY/ou+MVxysTLhQ0jsr36jKWDaEL4jejRONsDmQXZX/bRiEXS10PCd94zbIoXnqbNtkrWTeSo/2rpFJoHN11L1/PFzLs66YXcBNsgs2VemmQmqCsP8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869116; c=relaxed/simple; bh=flbnou7XSx1ETCmAxdlZnvB3+bqdNxru9LUU48yIE7A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DCdgbqoQQIap4hRvBE021vOsGhU1IZ5bshZW2B1P58CvtcrdwA25+kYN3UW78oaCuIlnZ+3iuVO4MbbuiivXTvDgtjlpirZQBTtAsgbukKTq8pP6pyqVDQUY5T8dDUsKaQQoIdMkfcjBA9J5sbCWIjyNniOPXbagPDVdAVBbk1s= 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=A+3LvjYp; arc=none smtp.client-ip=209.85.215.181 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="A+3LvjYp" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-b321bd36a41so2214496a12.2 for ; Sun, 06 Jul 2025 23:18:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869114; x=1752473914; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gZKppSrZ04BhPYsPEMDVl7eb2YZ+sFy//28ARL2GCmc=; b=A+3LvjYpn0ZeHEsrliihf6vnYWXd7bBuqa8HG0BTpVBsKbn4QMOPaoXkf5nddNxRSu Oxl6DkmCEvkS9PnHNgAVM1kKNZoreoeyUT2YutiHpcXG3CFeRQVAR0OB4JVwWoBL6yYq EOwGUVoG9t10o52DEWlxonu7nmku2pULl6UBLUpag/mP6ZEynOQWtvGndhckC+9cJEu6 Vp7Znnivt9P9i0uaIFAYV2me32CANffEeekDZF3dEGl6+taByidH3iKFbsQgOZi/z3GN xVsNbtsITuay7FuRf9p1zUQw5ufW1LBrywHnr6R6jtnWYbY9B9cIOvUR+nmH9FO6oJ1l arwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869114; x=1752473914; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gZKppSrZ04BhPYsPEMDVl7eb2YZ+sFy//28ARL2GCmc=; b=Jg1NxwtfopJRWxKQOuyNY+a1yOkunCt7ckhP2RaW0lSrHYZSmEEtrizGuwiyfyweDf 2HSrZwvwFS5bJPR+YqKJgsrWEKdWW8mV6Uksq1Dxba5mPueS2V6LkPLfIpDgFP1N4KHs trBT/kv0erTAeOOLGyb22kbncrSOnA+rcy2rjp5aQ48U6hZZEuIFmXjSMid6MeHxtVuK ++12zY/lXvjrLTZJLBOIWdRoc53hxvUe9CKfm+CVz7Kc8A2UA8uCBy/JXAcVxdxnokZE NejGRQkl7DWZf5qFlvARLm5EKJ5eG8Fm6gzPLoFRQ+prlEiYYTNOOPiuInEXNvbev3z1 ExKw== X-Forwarded-Encrypted: i=1; AJvYcCVgwSUoBJSoZtwDI0qcoqFSz+PouP6lxVqkRUmuZR1TBrJKNiZtKkqpvhRdRpsOiOMKY88DavQYFXd/33c=@vger.kernel.org X-Gm-Message-State: AOJu0YzZoBu2aTextsf5MYRcpnm1xFBDBx2sNcsoL31NkbZ+/OATDaJl ZmumDtyeAKODqtV/mBbsqaPE39XQRxmHGSNtLbnbiuRtawIWPVQEwvRnuHDa7xxUkkY= X-Gm-Gg: ASbGnctSAXaArb7YcwfgVBkQef6gnbhWxa2r8OMetoAF7AgWA8cfhTXrbczgTvZWoWS 2EbN+F0v5tGsDln6AuWK/7sDVCq1sHVzG/ezjmHOhUWCQg8myFZZWnH17HdKJFEojxdCSEqQQHI zO3i0E8tAwFFRdMxIvqeOJVL8IHCW7sJtkthCKQmBKx4mXhCynLudFHgKSWEH7tTgThO29/YUjm Kn05HtChjipJ+11wB2O8r5+MbXPb2SxbWJcYergUXvPvKMSH8mF+7xMqRVyL6yffFwjkwzYpZdH rhOVRcK/6QIMgswL0r2St+YAxSYV3ueg5U9k3ohrBayRtq4egaVPr1/bW5o= X-Google-Smtp-Source: AGHT+IEhrv3fmXBC2zf/SakWM0z47cC7OpSvTf+Ugbc9/YCKMZxghEVPFjk+9Rao57znNMbR7C25Og== X-Received: by 2002:a05:6300:2414:b0:220:82c7:309c with SMTP id adf61e73a8af0-22608fb3070mr13270461637.7.1751869114109; Sun, 06 Jul 2025 23:18:34 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:33 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:17:59 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-4-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=1809; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=flbnou7XSx1ETCmAxdlZnvB3+bqdNxru9LUU48yIE7A=; b=8J0scBIavzi43Hc18EtLQ0upqpSsevKQ8nja/mECnzE4bufiDHQr1EC6aLVX4rEF26cw5m/f9 1POTKLa7ev5BqipWab+rOy402M4esn20vuhkdBAEbl/rKZAxXTIcGSH X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= There are 2 interfaces and 4 pingpong in quad pipe. Map the 2nd interface to 3rd PP instead of the 2nd PP. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index b476d3c97ac9b6b4c5ca2963aa4a5805d57c8d7e..2d88d9129ec787df6dac70e6f44= 88ab77c6aeeed 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1158,7 +1158,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct d= rm_encoder *drm_enc, struct dpu_hw_blk *hw_ctl[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_cwb[MAX_CHANNELS_PER_ENC]; - int num_ctl, num_pp, num_dsc; + int num_ctl, num_pp, num_dsc, num_pp_per_intf; int num_cwb =3D 0; bool is_cwb_encoder; unsigned int dsc_mask =3D 0; @@ -1237,10 +1237,16 @@ static void dpu_encoder_virt_atomic_mode_set(struct= drm_encoder *drm_enc, dpu_enc->cur_master->hw_cdm =3D hw_cdm ? to_dpu_hw_cdm(hw_cdm) : NULL; } =20 + /* + * There may be 4 PP and 2 INTF for quad pipe case, so INTF is not + * mapped to PP 1:1. Let's calculate the stride with pipe/INTF + */ + num_pp_per_intf =3D num_pp / dpu_enc->num_phys_encs; + for (i =3D 0; i < dpu_enc->num_phys_encs; i++) { struct dpu_encoder_phys *phys =3D dpu_enc->phys_encs[i]; =20 - phys->hw_pp =3D dpu_enc->hw_pp[i]; + phys->hw_pp =3D dpu_enc->hw_pp[num_pp_per_intf * i]; if (!phys->hw_pp) { DPU_ERROR_ENC(dpu_enc, "no pp block assigned at idx: %d\n", i); --=20 2.34.1 From nobody Tue Oct 7 20:06:07 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 1E4D9279783 for ; Mon, 7 Jul 2025 06:18:39 +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=1751869121; cv=none; b=rfmtz30cfgiwgNu1kfceSFQHXdXSQk9eM8opv0krERfCRyYeq3xxR/oql3ueIlTlCRW29vizkytIvxa8NyG0Myj/UJi7M1Jr13FdiE7yVPG91I/F7giLSydYUzj0WUcFqgW5WcXqsABF8b3tzrWbVBCkHG2F8/8H3okj5E0vKVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869121; c=relaxed/simple; bh=3U0bowJZD1UHEussz5PlKOBS3bAoQPdxBHy2P4TuJ5A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JLjIwRBl/XOiUTwL6xJsXm60wspUWixNGnukxL4rfyjQ+Hg9ZitrV55e9dTtGMN+WVXGHrqcaGhkqwItvK+gWnrFKYGMTTvsxpgMn8rnNjeAaaUSdBVKyWwKiTOHV7P2oGNk3qOCVZSjDmilpzNUemdV+V7Rj8AuqDl4Q3H1Q9k= 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=CvvV/zIU; 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="CvvV/zIU" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-7481600130eso3742671b3a.3 for ; Sun, 06 Jul 2025 23:18:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869119; x=1752473919; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IKfocSyum6c+ZXGva6cBv+Qtfqbf1qkUCIjZpV0tOYg=; b=CvvV/zIUoUV9nZKRguCiqLCyuF70zXxEvx99cDOW59nxA0+0cVcb5VDrkRp8AA6nFn l+KxhZ+Dqw1xsLNbRTGljpXQTmGdqz5wHofjeKTDTgi3uaRDp0UmK2xL7/gPFu57oozf at9I8JKQdKeavNvzP9KWE8gRlwnDZjUqFjd/oLsZQzgecscJKefrOwYz1rnmbcG5kWy4 JIt8bf19f36mQx7qrHIL0cjQlFYPU1LboZK5RQG5LaADcU01SVm42EM7CsqzO1vFzIp/ wmuO5lXk3NO7dmniz9Fj2c/Hz75mLpm0Hizc//iCHL7mSrE6bBBf29rtCXAEC/zZDMHA VARg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869119; x=1752473919; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IKfocSyum6c+ZXGva6cBv+Qtfqbf1qkUCIjZpV0tOYg=; b=WVx8OG6ijWykdnLd9WE/kM/mBJbTP9lL+nnTgE+u1ex2xxAgara576Uv41K3njoRFA ldT+L8cw8KkO3GUqVBpi6pKukuir7/rn6ANsJFhdm6SvY1CjtNHKsgXvklF5D7jJLox7 tnN0HDii5pQ9gRATzU8mKvHezNsPPXCZps0DzowQtBA/KidJ6CzNbeI30NJh6YGUc+KP EyfJXjjoiokmm1uriljlqivggjFG/YlGyMi5RFUq5z1GrbvINkJkkowIgg35WOrucTxB SZ/rYgtdlOmBVaiAjfAK1wsskrxuiBCJaFWP8jzVOhNyJjZvDJ2I/hV/KcQlKFb4hDGM qptw== X-Forwarded-Encrypted: i=1; AJvYcCUyMoXqmwwA1o5n5SAWJxIQGfD/Eq1AnzuNH7fgTpL+TRoFw3quLKDe6Y0LO6ubD6aNUszOS7zX8DEvE0s=@vger.kernel.org X-Gm-Message-State: AOJu0YyJuW7byun1km8+UuYR8oI4k/8OnICDu69c4mpR0a81STCez3cs SS63RkoYB3Z5o0/XRDH18tohbFdSrnEwpC8nWGBSoKGBT5axwDVqGWda6J0bmmx9Usc= X-Gm-Gg: ASbGnctTwINRQFcgGWJ4KSCVIxcHo9pXhZNIdCdoAyTt/8UYci1v/hMRp1j5TCAz7FO ShQF0kDOb6de1nTq2yFG9jsf4/sloHtmIpuFWZkbSBOwXDeP7+/Wv7rBBALI3XpjTB8Qh3fiYd3 YkGeRAw4aknLQwHKRgEpj1120ymHEfzoUmLHVzWoLT581l0ZEVF2/wusABeIgTwTrg5580HdmuZ A+1iFodL7mz1i5OI8CqnLIhdtGw5xve0h8Tn10aRXHUHpoHTM6EmASCcJGroXbHm7lTw5tg/sqc WdxB6SFeOYWSCfhgxfQiONUqQaLC3qXC5jV/ktJKGM4NYLEdMdd0y7Nh05Q= X-Google-Smtp-Source: AGHT+IHpu+7N095Dkvfv/xXCbcaHF/m5rGZUrD4vjHs5Fv7m1f25d05bGH5t9VgB3jR6lHG9xDeaXQ== X-Received: by 2002:a05:6a21:339b:b0:215:cf53:c35 with SMTP id adf61e73a8af0-225ba537030mr18417131637.31.1751869119377; Sun, 06 Jul 2025 23:18:39 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:39 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:00 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-5-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=2487; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=3U0bowJZD1UHEussz5PlKOBS3bAoQPdxBHy2P4TuJ5A=; b=ZP/NQiBXA71l6lBIz06Tal8NsSeCQ9sxKtlwYnwimsk+bkLSNgzf6+x324sO23baWtdXeQVH3 a5uYD4cLF8LAbzVyjHaQqjivAn3k4gAxzESl5hHfuqkzoUfhg5MWUMI X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Add pipe as trace argument in trace_dpu_crtc_setup_mixer() to ease converting pipe into pipe array later. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 9a40492e5aa961f7180ba4ac6c86e06fcccef8c2..cd0ec3edfe2fa8132e114bc1544= c389141d1c1ec 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -419,7 +419,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, =20 trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane), state, to_dpu_plane_state(state), stage_idx, - format->pixel_format, + format->pixel_format, pipe, modifier); =20 DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx= %d\n", diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_trace.h index 5307cbc2007c5044c5b897c53b44a8e356f1ad0f..cb24ad2a6d8d386bbc97b173854= c410220725a0d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h @@ -651,9 +651,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, TP_PROTO(uint32_t crtc_id, uint32_t plane_id, struct drm_plane_state *state, struct dpu_plane_state *pstate, uint32_t stage_idx, uint32_t pixel_format, - uint64_t modifier), + struct dpu_sw_pipe *pipe, uint64_t modifier), TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx, - pixel_format, modifier), + pixel_format, pipe, modifier), TP_STRUCT__entry( __field( uint32_t, crtc_id ) __field( uint32_t, plane_id ) @@ -676,9 +676,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, __entry->dst_rect =3D drm_plane_state_dest(state); __entry->stage_idx =3D stage_idx; __entry->stage =3D pstate->stage; - __entry->sspp =3D pstate->pipe.sspp->idx; - __entry->multirect_idx =3D pstate->pipe.multirect_index; - __entry->multirect_mode =3D pstate->pipe.multirect_mode; + __entry->sspp =3D pipe->sspp->idx; + __entry->multirect_idx =3D pipe->multirect_index; + __entry->multirect_mode =3D pipe->multirect_mode; __entry->pixel_format =3D pixel_format; __entry->modifier =3D modifier; ), --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 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 6B7D62798E3 for ; Mon, 7 Jul 2025 06:18:47 +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=1751869129; cv=none; b=Q+xcBW4VZmGFgl8OC2wuMqWAbxhlgMo1FUt58L5HBNaDIiw5bhR8ZQSUQ0/muIrg3lfYbA/IUXuAOU0q6vrcmXNc6uOPQOCjJMkVEW0uhDUTD7Eja0THlC2d6jp++3sdT0DP/3bsLHUWxTS6mLRxgyEUOT7+yB8rJA0gpii0SOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869129; c=relaxed/simple; bh=62ZTReWl6OjScp6LnOzsAv+T3uHAVV5/XzEC+wHKmS4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ECOcDoSJdIZL50fjbyVfQwYpxWSIt1E8u3TkF2vsovFjSfRsX36rlrBBDg0LuR5u5A7zadUp2uYu279kTW0hnIBX+WlyUg0eBtV4C04ErWQ82VJHWHPpY/yGfM/yugaAvhCHOlRynyH7THwh65Iuk+Exm72cwVUrNCO80N6W3oU= 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=zGx6HzKC; 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="zGx6HzKC" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-7494999de5cso1575280b3a.3 for ; Sun, 06 Jul 2025 23:18:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869127; x=1752473927; 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=uVzSDkejmNCMt9uxf52gBe1nAejDHptLtY79UxbACuo=; b=zGx6HzKCki210zvRFXBJ9fEld8ipGbWSD9V1I7j+FuQN9MH5zoSOcSN5rTo+ZYVh7m D1UbXZj7kkPPNLgS9lcupsxDC9NSxjrMEKLNIpjxrnK1wNqpGRheUzdsYqubxqL5Goqs JXF6l5LAlyGHIpmTdDasO6YGi5Z87MiRNd9gHj5RopQIC2X2tanFU53q5RLfNgH42M1Z hbGZK9CVT70wNeLY4ooxNp/6dPVs302UrfeXkgc6u6Gf3haEKbXrTWdKuztL3BOvEBk5 nQwv6jMrjZOYYK3a1b3yxPYW81+6mgfDKPbTzJvyPMnaBhodje+kxTd5iGDBqpNf55ms 08lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869127; x=1752473927; 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=uVzSDkejmNCMt9uxf52gBe1nAejDHptLtY79UxbACuo=; b=iDrlFPryRw3cp8XyEgxn1Ci+qFVO/zX1ijbo8TSPv7VrDYeOzwApyi2EOslhgK2DJj rdyLaC3ZvHQlRciXnS+61N1HyeZBvg88m7BXcCye4lmpyeDVkMUpL0P0X+XMCh0IHHg0 Jo76+x9peRIjostWX04lyf3hFASTPFomBG+fgKJDGbXkg/krFN1y15x5nqLHXZqr1DP9 kTGE5qs+PwafsrAChjrOUCeNsAR+059JkDFADwCajaDAFSKjJxoUvXdUH53w22UbEpk9 7yY0a0wduXksyHtXLkEbefqqLkU0dl+meB3gZI+k+Jn7RVkXI0RZ1En1UyJtOBB9uapH 6UpA== X-Forwarded-Encrypted: i=1; AJvYcCWi5oSJyx9C1IBvtGkRZGPnHmaPSspyi1zEpT8hT+IeZZtYp0YEXjpi4QUx5+K1Ej70oPyuYm0TH3M3oTY=@vger.kernel.org X-Gm-Message-State: AOJu0YxRzVc32CYoCRhbe2vvo4t1jU77XXqOmVMU+RAZoq7o/FmpL77u RHxu7WqwH81JVS0KRTibgKGAvB57pkWorphkz4xS2xfN7aBFkCVRGxQyIeCP1xY0bmI= X-Gm-Gg: ASbGncvctAvC1PnmuzfO841HZqNgXYm5a1BgbRLsY9jAlu/KGlvvYvQPkwi6QGTmYMd auuhXB4lbyF5kKi2xjMAC16bzQ0jUfN0bnsBsePSE9veFsqM+BpfezA6G4ExFvH9Evb2voQca3Q gj2B1sZA7C2AkJdOG/aO1k3L08O2l/bT91aHiVUdDIaxPTUUPJS38ViNtwX7Zx9YnGIBrz4WzRC 3GimFhSBzb/AHlslE1rOhYo8F71Y4xKB2ztfCWkJI/aKRYDPRQoaSd9l+xg9OmxA9/WqbzR2kA2 U7h5Us+ifbtwpuTsHc1EWwReFvoWhAb9rb6foBiIHz+7QolP0TLAOExLyZE= X-Google-Smtp-Source: AGHT+IGzqPXpZJXAcvMLx/LftEWjyJz7Ld737/vkTct82R96OQw0jXA+eQD2NuVkKdjjAgaWipesHQ== X-Received: by 2002:a05:6a21:6d98:b0:220:3252:bb7b with SMTP id adf61e73a8af0-22720fc508bmr11668955637.31.1751869126612; Sun, 06 Jul 2025 23:18:46 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:46 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:01 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-6-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=18175; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=62ZTReWl6OjScp6LnOzsAv+T3uHAVV5/XzEC+wHKmS4=; b=0qb8upRwKzcryiHjsrb037mrX1JllITNcRNH7S/AhsjB4FXOA4UJlCH+KrIBRC/7wSxuk/RNZ IpDKK9HKfhxAp6tV9pFDS/3ZiQ6dZXk49hMfyE5rJ3leL0E7XFklui9 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= There are 2 pipes in a drm plane at most currently, while 4 pipes are required for quad-pipe case. Generalize the handling to pipe pair and ease handling to another pipe pair later. Store pipes in array with removing dedicated r_pipe. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 39 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 181 +++++++++++++++++---------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 12 +- 3 files changed, 121 insertions(+), 111 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index cd0ec3edfe2fa8132e114bc1544c389141d1c1ec..121bd0d304b308bcd7226784eda= 14d7c7f5a46f4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -449,7 +449,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, struct dpu_plane_state *pstate =3D NULL; const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; - u32 lm_idx; + u32 lm_idx, i; bool bg_alpha_enable =3D false; DECLARE_BITMAP(active_fetch, SSPP_MAX); DECLARE_BITMAP(active_pipes, SSPP_MAX); @@ -472,22 +472,17 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_cr= tc *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - set_bit(pstate->pipe.sspp->idx, active_fetch); - set_bit(pstate->pipe.sspp->idx, active_pipes); - _dpu_crtc_blend_setup_pipe(crtc, plane, - mixer, cstate->num_mixers, - pstate->stage, - format, fb ? fb->modifier : 0, - &pstate->pipe, 0, stage_cfg); - - if (pstate->r_pipe.sspp) { - set_bit(pstate->r_pipe.sspp->idx, active_fetch); - set_bit(pstate->r_pipe.sspp->idx, active_pipes); + + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + set_bit(pstate->pipe[i].sspp->idx, active_fetch); + set_bit(pstate->pipe[i].sspp->idx, active_pipes); _dpu_crtc_blend_setup_pipe(crtc, plane, mixer, cstate->num_mixers, pstate->stage, format, fb ? fb->modifier : 0, - &pstate->r_pipe, 1, stage_cfg); + &pstate->pipe[i], i, stage_cfg); } =20 /* blend config update */ @@ -1667,15 +1662,15 @@ static int _dpu_debugfs_status_show(struct seq_file= *s, void *data) seq_printf(s, "\tdst x:%4d dst_y:%4d dst_w:%4d dst_h:%4d\n", state->crtc_x, state->crtc_y, state->crtc_w, state->crtc_h); - seq_printf(s, "\tsspp[0]:%s\n", - pstate->pipe.sspp->cap->name); - seq_printf(s, "\tmultirect[0]: mode: %d index: %d\n", - pstate->pipe.multirect_mode, pstate->pipe.multirect_index); - if (pstate->r_pipe.sspp) { - seq_printf(s, "\tsspp[1]:%s\n", - pstate->r_pipe.sspp->cap->name); - seq_printf(s, "\tmultirect[1]: mode: %d index: %d\n", - pstate->r_pipe.multirect_mode, pstate->r_pipe.multirect_index); + + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + seq_printf(s, "\tsspp[%d]:%s\n", + i, pstate->pipe[i].sspp->cap->name); + seq_printf(s, "\tmultirect[%d]: mode: %d index: %d\n", + i, pstate->pipe[i].multirect_mode, + pstate->pipe[i].multirect_index); } =20 seq_puts(s, "\n"); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 01171c535a27c8983aab6450d6f7a4316ae9c4ee..6263d74e5cfa7acd5b4e2156b73= b6fa26f5ddd77 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -620,6 +620,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdp= u, struct msm_drm_private *priv =3D plane->dev->dev_private; struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); u32 fill_color =3D (color & 0xFFFFFF) | ((alpha & 0xFF) << 24); + int i; =20 DPU_DEBUG_PLANE(pdpu, "\n"); =20 @@ -633,12 +634,13 @@ static void _dpu_plane_color_fill(struct dpu_plane *p= dpu, return; =20 /* update sspp */ - _dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_r= ect, - fill_color, fmt); - - if (pstate->r_pipe.sspp) - _dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.= dst_rect, + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i], + &pstate->pipe_cfg[i].dst_rect, fill_color, fmt); + } } =20 static int dpu_plane_prepare_fb(struct drm_plane *plane, @@ -820,8 +822,8 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, struct dpu_kms *kms =3D _dpu_plane_get_kms(&pdpu->base); u64 max_mdp_clk_rate =3D kms->perf.max_core_clk_rate; struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + struct dpu_sw_pipe_cfg *pipe_cfg; + struct dpu_sw_pipe_cfg *r_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; uint32_t max_linewidth; =20 @@ -846,6 +848,9 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, return -EINVAL; } =20 + /* move the assignment here, to ease handling to another pairs later */ + pipe_cfg =3D &pstate->pipe_cfg[0]; + r_pipe_cfg =3D &pstate->pipe_cfg[1]; /* state->src is 16.16, src_rect is not */ drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); =20 @@ -958,10 +963,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, @@ -1016,15 +1021,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 @@ -1083,10 +1088,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 @@ -1130,7 +1135,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); @@ -1148,8 +1153,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; } @@ -1187,6 +1192,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, @@ -1195,13 +1201,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; @@ -1312,6 +1319,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"); @@ -1332,8 +1340,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 */ @@ -1434,15 +1442,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 @@ -1457,12 +1462,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); } @@ -1470,15 +1475,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 @@ -1486,17 +1493,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; @@ -1591,31 +1612,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 @@ -1653,14 +1669,17 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane = *plane, bool enable) struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); + int i; =20 if (!pdpu->is_rt_pipe) return; =20 pm_runtime_get_sync(&dpu_kms->pdev->dev); - _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); - if (pstate->r_pipe.sspp) - _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable); + } pm_runtime_put_sync(&dpu_kms->pdev->dev); } #endif diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index a3a6e9028333052cbaa92830c68e2315c664c239..007f044499b99ac9c2e4b58e98e= 6add013a986de 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -17,10 +17,8 @@ /** * struct dpu_plane_state: Define dpu extension of drm plane state object * @base: base drm plane state object - * @pipe: software pipe description - * @r_pipe: software pipe description of the second pipe - * @pipe_cfg: software pipe configuration - * @r_pipe_cfg: software pipe configuration for the second pipe + * @pipe: software pipe description array + * @pipe_cfg: software pipe configuration array * @stage: assigned by crtc blender * @needs_qos_remap: qos remap settings need to be updated * @multirect_index: index of the rectangle of SSPP @@ -33,10 +31,8 @@ */ struct dpu_plane_state { struct drm_plane_state base; - struct dpu_sw_pipe pipe; - struct dpu_sw_pipe r_pipe; - struct dpu_sw_pipe_cfg pipe_cfg; - struct dpu_sw_pipe_cfg r_pipe_cfg; + struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.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 E1B8728642D for ; Mon, 7 Jul 2025 06:18:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869136; cv=none; b=D/2vbBrvW+RxwDyfCHU8+Xy3cpLpDAGbl4mk+uWIh3o9Q7b6jiT3IYP6SaeUjovIQEvuEGJJ12/YFUO0rbiv3/onYQOpovVMIJCEHND0Jbfe7KcrLYPKAUpDG4NP4DxiO/2vXCc9rf/sRwatPoUsKyTdEQo74WiYuWL9ggIDNag= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869136; c=relaxed/simple; bh=w6OvEIF3tSd/dBIIL4Coh3mB83jJ5FGZMgy+w60QLRM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hblW2TkuU7I9E/16VglbNCH3QJvRHUXGefyRakDyfSFTRaGeeF7MYB83BuyG+hc9WMWJwfZqC84Ml7G/CZgjbqmu75akoLZBnQV/9oM0L+PfGgp0DN+QXwmdekmAweS5Nj7vrxa3uURc7KeBz8JHgXWiy8H6o+AkO6vA1irmxrI= 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=Bsk8A1/9; arc=none smtp.client-ip=209.85.215.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="Bsk8A1/9" Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-b34a78bb6e7so1846849a12.3 for ; Sun, 06 Jul 2025 23:18:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869134; x=1752473934; 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=N8kgit1BpE3d05xGdiuLr97hSDDiFgnmQxTTWKgwMvI=; b=Bsk8A1/9Gum0hv8Zy/cdEt70X/qh8h8Y0WD+ChxLpz53aVEloxyEiC7JqUcHGsaY1Q zQQ5jmP805J41kZQASudCToMyCkSydbNcsSA0qeYTL45ANvDCdkvTcSyvJlWPZWP2RQt jaL5qSBlTYHQM1z70PpYwfDck7DWsPZZQh/e2W/4w5Pr0Rpp8hoeNIbSoS36zSARyYzV mcEHDPzP/BbP+ST9QisXwm0mwL+pSg+7xSBlHXrXy+ifaCGvXcdDU6n/o7mhsfv23bBT 2HVzNucDyI11+X2Gq0YhMy94cFRQ1qjM3YMIowlW4fH3rGTSXXtbhcYAZlGHGsMpeCtb MWlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869134; x=1752473934; 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=N8kgit1BpE3d05xGdiuLr97hSDDiFgnmQxTTWKgwMvI=; b=tA3em0fuhD6UyG+PEpIkETNE0tRqOayl9OARPLgkXGXhkiSZv+H6HpSjJEeUkM22xz P+4jsq9DyYdwY0kimDqWyTsaN51Oj1j5hWpAsZ+zGAEasT4hNv/aZg/GdF/fUMeHe79w Xa8jqDu4K5APnUvtlu5eEobGCAhVpTbYQy5DJqc9OL2hvlw0ycUjx3BmrnPxoWxnh7JP mrzP3SwLhvR8BQWRCWwMqu8S/fFd+Qud/r+cZ4gjpMbK9e+40wr9KMvpXJMUeJDeYaG7 fszPPbfwiFshXPhuoDgwvRBejHGLy+nIqsDkjQ3OiU1huHAjz6cbYCie1dy/SrSRHYEj WwFA== X-Forwarded-Encrypted: i=1; AJvYcCVMDFvbuQr0tuNvdnWdDiR7yVv3BGyDsmTX/Sq/jVIS8bucwRpo/6Pyve4y9w1uOcXgXgtUaQrH4Kr51iM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywd9YvKIBgzzWObNSs3eALy7naJCt7WpmI+TwB+WxrF5Yor+3sB jxSsQZUAK8iz7pXPfTEaOezxWmE7D41kLKw78kuAnmir4FAG7FSxfC35AmlbpP/vjrE= X-Gm-Gg: ASbGncv8fZYWzZj6L82w4LRdJ1HqHbv18hllb+xJYZT8ZvyAmtCZl+I5jgI6jV+Xx6x ZXjhA0wJ5iF311blbl/Sow3ZrzmNcBabwKuzTmTdOPOCBE9OhelBErv/FU+vI/STG6Bk55tBxWI OFKxqzbpq2IhklrDc5/3k2qUQ+5OdVu9F0GQZyVn1ovvJ58MOPiH/hmfCtqrYQoaBfzRZnQ1/yk 7jp6Kmn7lv39QDQjuSAxSOBoqkdsTEZE30YguEj+4Quy0W9loI6vr807UtYDzrqZef7fcLVVR1I 7Q8trjpFtImsat8364Hnm4jAbw882b4L0bjHXwr7Dy3ZAAcPfQ6OB4DjX1s= X-Google-Smtp-Source: AGHT+IGpQFGQTZ1sKiIn84Jo7HPHJex3oh+gpvZPOS+zdC7io1z+I327IdcvwKZG5ah8a76qX+0NzQ== X-Received: by 2002:a05:6a20:7291:b0:1f5:6c7b:8920 with SMTP id adf61e73a8af0-225b754f67dmr16619222637.9.1751869134234; Sun, 06 Jul 2025 23:18:54 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:53 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:02 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-7-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=6393; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=w6OvEIF3tSd/dBIIL4Coh3mB83jJ5FGZMgy+w60QLRM=; b=hcsJ+07a+QZqprMCWmQZ7kTOYhpuGJAul7bL8pPtmT7l+lsoHYFDyz9CelOrgwUJazstwouzJ 9eaH43jnM/7BgaESrTVGS8WbqytgGsM+U1rOOC3BawpI87nS2QhsUM4 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The stage contains configuration for a mixer pair. Currently the plane supports just one stage and 2 pipes. Quad-pipe support will require handling 2 stages and 4 pipes at the same time. In preparation for that add a separate define, PIPES_PER_PLANE, to denote number of pipes that can be used by the plane. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 7 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 1 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 18 +++++++++--------- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 121bd0d304b308bcd7226784eda14d7c7f5a46f4..30fbd7565b82c6b6b13dc3ec0f4= c91328a8e94c9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -472,8 +472,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; set_bit(pstate->pipe[i].sspp->idx, active_fetch); @@ -1305,7 +1304,7 @@ static int dpu_crtc_reassign_planes(struct drm_crtc *= crtc, struct drm_crtc_state return ret; } =20 -#define MAX_CHANNELS_PER_CRTC 2 +#define MAX_CHANNELS_PER_CRTC PIPES_PER_PLANE #define MAX_HDISPLAY_SPLIT 1080 =20 static struct msm_display_topology dpu_crtc_get_topology( @@ -1663,7 +1662,7 @@ static int _dpu_debugfs_status_show(struct seq_file *= s, void *data) state->crtc_x, state->crtc_y, state->crtc_w, state->crtc_h); =20 - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; seq_printf(s, "\tsspp[%d]:%s\n", diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index 175639c8bfbb9bbd02ed35f1780bcbd869f08c36..9f75b497aa0c939296207d58dde= 32028d0a76a6d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,6 +34,7 @@ #define DPU_MAX_PLANES 4 #endif =20 +#define PIPES_PER_PLANE 2 #define PIPES_PER_STAGE 2 #ifndef DPU_MAX_DE_CURVES #define DPU_MAX_DE_CURVES 3 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 6263d74e5cfa7acd5b4e2156b73b6fa26f5ddd77..149e7066480b07f9f6d422748d8= 9ffd6f9416f33 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -634,7 +634,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdp= u, return; =20 /* update sspp */ - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; _dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i], @@ -1153,7 +1153,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; @@ -1207,7 +1207,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) @@ -1340,7 +1340,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 @@ -1463,7 +1463,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], @@ -1477,7 +1477,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, @@ -1496,7 +1496,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; @@ -1618,7 +1618,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; @@ -1675,7 +1675,7 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane *p= lane, bool enable) return; =20 pm_runtime_get_sync(&dpu_kms->pdev->dev); - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; _dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index 007f044499b99ac9c2e4b58e98e6add013a986de..1ef5a041b8acae270826f20ea95= 53cbfa35a9f82 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -31,8 +31,8 @@ */ struct dpu_plane_state { struct drm_plane_state base; - struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; - struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; + struct dpu_sw_pipe pipe[PIPES_PER_PLANE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_PLANE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FD8527AC3A for ; Mon, 7 Jul 2025 06:18:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869141; cv=none; b=Ix80ZCuXRTVnmQvZd/5XGT3go6uaUdEhWTunY8Cda+/Qumw0I20qrka6cXbaCzj+iDnQU06LSgRmWQDHGbOyvu5Levzr+dO3URrkg8UZ7d6cnCUVHnpDQAfI+9fBjx/6ve13YydBuXZ2hhHFkboVtEKNZq4FsscRWY0upGDrvD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869141; c=relaxed/simple; bh=EMexKmSgbyJrNm4fgVgmbAaex5tIopqSAoqfoqK2ahU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vATw33+7Tw/KMT/Wp0lr196rgv5RQN3ygWroHwVufsCTZKH5XoXL7m/qT2gZwZODZTb6En5rLkuKES668EweNg8lsUvhZ5b9iTLUYvYN/y44hVlyVFg0desEFNFPwUyubNUeQv7+JrO63M6JVSV/ux1jZiDm5plubU5rzEWfXtQ= 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=hXEuPcLu; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="hXEuPcLu" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-7490cb9a892so1539850b3a.0 for ; Sun, 06 Jul 2025 23:18:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869139; x=1752473939; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ILXciEgW0I//qoLe7GzIdmNaMHGieJ0bsFVXKGQw/3Y=; b=hXEuPcLu2HBrfOWluoM5OeLAsX8UX++mAEOv3izWEEFwWJg6KzNrIIWK9zyk316UUZ /cxxh7u/Lb21mnFoOomgxN1I1Shlue0Z5x9tS0atNK1XA2d/wbGkCp7ALc4fjwTvkMec KOo1z8CNG2PNwVyiXVOyzbPq7PxUSvKwP5RzG63gT+mPXlLNqa/z3kjwn73+gC9BPMKt 3F1spUEfoxbY2Sk3dax0vt22DG9CbTQELZc44NNuTvfWrUl7sKAVz2lLUCTPjVecKNr9 ZNSasrn6W/wjEYxoCa8VrwkRm9eSWtf4HZcLq9CjUbuGDiPPfPohzc9kH90MCMvhvCqu mL9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869139; x=1752473939; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ILXciEgW0I//qoLe7GzIdmNaMHGieJ0bsFVXKGQw/3Y=; b=nGfeyU/GRa6NmyEhUEgQEheUNSPJvTC5vOHmiIKr5aDVqCojGv/h86uzVCQO7GNstT Dxd3On4viYtzGK5elWk3i0oyPXmL6G+Zjn9ZL9SIP7e+yY18BbLb+AWOcG+jeldzYzT/ oMBNbqPEZhZsmK4C1bUVzNgX+/hmPgVAoLhHR+YQ/nS1eC9fUSwVxnQXHJsdFdkBevHG Ix67vvkSuWI8i3zaNIl4mMcIBUjrrzQptGANzAcS8NkojGad3aTNIVh6M2R6LW1bWGW6 gCZhDB3GKrvys6h3u9NHXq5jDq2dm4jyVN9/QtwbqfSzOXQZkg72bF/bCKoy8884zuDM VZ3Q== X-Forwarded-Encrypted: i=1; AJvYcCVWZqubI6zOVlw3WQzXMMNxNOH8TDF/whF41CtExB/JyH9yPeq4jTQsNIJkihdCa8Ne1e68pbNBcIzMXQI=@vger.kernel.org X-Gm-Message-State: AOJu0Yyi1VNRik3a/nW+ALa9WZEaXheupLlDrGpY61ZIgjWe/LtXXzTf +/yp0YPxeUXSn7cAMxEXd5qwpoRdLh7YwNmeFGgsf6j1rpMh+w88juch+4BQAAbArdo= X-Gm-Gg: ASbGncsIP9kC88TsRm51uIn2+GIS5K3UkjZG/EujBBPte0axj1R2WUO5v0wKbEcXKlT ULInmgH6YdI5b8WX3Q0YKgyDcdm3eFUcgUt/6JW6OtCGLPsQ3WHalb6iW4oJXrOyT4QxcveiTu5 sR3nef6GZY7dDxc8zYhxMQHi5yLtWCx+Je4+31d7ejgYmZcLFuUoEsaFx803b2lyWDEaZDylC66 z30HtslzslgP03klF4kjdrBnuFUz9fqQdvk14RTQdYm1FM1JvTA4w+D1O9/DNRqU+SvTd3NZIBg jqU1LlhrH0IqL9jvoF8nUQJ72x8vPIK6GvoC1Awyik2ZM5X7gF1U/6FGLww= X-Google-Smtp-Source: AGHT+IGHeMWJ3CU7o8u2I3jtTuKviAnMMK1jk68uIZizqYV/+1lVKm5gab4fF2qM/al4kHop9FptTg== X-Received: by 2002:a05:6a20:7f99:b0:220:7b2e:5b3f with SMTP id adf61e73a8af0-227213b0f9dmr11250088637.19.1751869139526; Sun, 06 Jul 2025 23:18:59 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:18:59 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:03 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-8-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=1716; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=EMexKmSgbyJrNm4fgVgmbAaex5tIopqSAoqfoqK2ahU=; b=nFHB3VxCXhLEoI/KGV5opIO0xVlYrUN+hcLsZnNkOIelu+Vnn0r3HYqoOcRs+4m8mQ7Gt9lwE BgWUi8fort7AuSXXlYlKt/MQ7A0V0fejxbdR5aBcTw5rYTUIzzX9JJY X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently MAX_CHANNELS_PER_ENC is defined as 2, because 2 channels are supported at most in one encoder. The case of 4 channels per encoder is to be added. To avoid breaking current WB usage case, use dedicated WB definition before 4 WB usage case is supported in future. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 2d88d9129ec787df6dac70e6f4488ab77c6aeeed..4616b360812491afbe63f8ffd4a= 57bc9604382e7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -56,6 +56,7 @@ (MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES) =20 #define MAX_CHANNELS_PER_ENC 2 +#define MAX_CWB_PER_ENC 2 =20 #define IDLE_SHORT_TIMEOUT 1 =20 @@ -182,7 +183,7 @@ struct dpu_encoder_virt { struct dpu_encoder_phys *cur_master; struct dpu_encoder_phys *cur_slave; struct dpu_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC]; - struct dpu_hw_cwb *hw_cwb[MAX_CHANNELS_PER_ENC]; + struct dpu_hw_cwb *hw_cwb[MAX_CWB_PER_ENC]; struct dpu_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC]; =20 unsigned int dsc_mask; @@ -2387,7 +2388,7 @@ void dpu_encoder_helper_phys_setup_cwb(struct dpu_enc= oder_phys *phys_enc, */ cwb_cfg.input =3D INPUT_MODE_LM_OUT; =20 - for (int i =3D 0; i < MAX_CHANNELS_PER_ENC; i++) { + for (int i =3D 0; i < MAX_CWB_PER_ENC; i++) { hw_cwb =3D dpu_enc->hw_cwb[i]; if (!hw_cwb) continue; --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82EF027BF7D for ; Mon, 7 Jul 2025 06:19:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869149; cv=none; b=LSiC/6ivobO1UGGz0tgPdeSF3VFYIr/wepdWWkfz4jRc8QUURSQEP1RYszuLQjzEJ9rQdKs3y+kt/VlL/HvnvX6MzlSamFF4b4AAUvlBfWiCOhbJ5LGzNZFkSgrZ2pQhIASRQfqbDe/bYJ5gq1s7zmFbeLPFW4qKe6EZgzTIY6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869149; c=relaxed/simple; bh=CF4TPmOyKCuR1vONvBUPDXaEUNdePxwbzP99ZGSmrmQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NtyPZqRA8bBwEcVnWCfx2UpAIeGHgNIxkmRnNc4Ia3mUu+/vBlmRXmutfN36p4UeF5TyUHM5Ny/kdj+tWYgYLXfsQB33vkMk/kRW3w8WTUQV2eG3Sc6/8PtJxZ5UA14c8PIMk+q2zeG6PBknhpETAzLiCIob8a4tSEvHeH7PFJU= 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=vqVBOkrn; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="vqVBOkrn" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2366e5e4dbaso27585225ad.1 for ; Sun, 06 Jul 2025 23:19:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869147; x=1752473947; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4X9gMtrXb7FnTuL7OxdpBsAZ9YfPLCWw/9fwnW/EYKc=; b=vqVBOkrnyBm4PwifM8TAU882wWU5YxdhcVOdYqq9uoYDf6n6pbkz2mNhU6C3pcYTl5 ehS8K2zDEK0HIElGx4oX3KihtiZUnmjo7hhUWGTQ7CVcUq0DXtnjM7PhGgxA6rjoNgbo uvZ79VAUMA2yN7SBelCinifUcE7WcVMDrGNkOVTKPguDxEqd8Dx74xlhVzQ2xhw1714R /xnG3XK5fYnkMv2vSK26PnRbMlTgQKXOkkPXT5Dju1cAtazGhSEHUefkS0v+LPjaUmwx 3ea9x7EfCZsO8LnfUOVK/jPFgJ+IbfnpCUNhCw4DtOQdKSVrFsnxyGaP93yjKslggChp 6d3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869147; x=1752473947; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4X9gMtrXb7FnTuL7OxdpBsAZ9YfPLCWw/9fwnW/EYKc=; b=I2PfVAF/t9Q3uIOp8J8t6ivhqKKDLadpyoznRunei511hV/8C9biwSoYJrkA49wHww R/MV/H+33rIZs7mAf4i2WUlwTM7/sojuRiduNUXBJdJN2l+bhiiul1SGhsnqNk0r15V6 3wQshCe+F4y63qzDGh5ek4S1QTdlgu+ZlEpwcS5QIpYgXuPN3uPOFHBzk5fomjTtvocN F5oaeHKXwg/3FrkV/hiC2/y1BTTk30wBcPAa7pkSFXt5pAe/aufBOXvPvpkVIBGm2e/s zxF9wSMm81yeta8z3ReCT3dX0kK/nSXZbuLnfzD++ANvYKCC8314+ZbkqL3gpJ/GOl0M flJg== X-Forwarded-Encrypted: i=1; AJvYcCW8riW1iWn/RljurTVtG8UZYI0YquKUm+3fooIQ8OaF0S7galuvJdSZQigKel3V1r9cTN2y9UDeXVjyx5Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9ESbX9S9w5GVzDokaFjvisntmR/kTATOdPZ3rPh6oY2o1NCnH s5tNVihXG1cdMMxBv4XPUU4lNvP2BCjU3Ar7/8QHK1CQBHOLXx1ATs9lAM5sooBsL50= X-Gm-Gg: ASbGncv2l1DVvNHIGQ1VBM/LvutsPeHD5OtDw4sYo+0H6llJgQqzQmOoTKopv6lEtPn aTi/0t8pD7Dnz6UvQmZVa0XV1lU6czGU1J29r+ybyXbXyxG4oPexTrXziNqjks/GoPtUn0HxQlv eI7PZk7F8wDd4zjim+NVl1If3ILyU8cxKzRkPi8+AaDAmoWHkx7aAt7cuUWwKlbLxJULjyOtunS sR1RFzl/DC9eD4YOhhC3aHybQHmlBn9LrZ9iYBgD4lWCBIUKC7Rn1pIYJ/iwUPddnMmsp5o/XWN 8shZpbJlydW2425Vniv8U7tHvdLOv1X7rBb29XuQyQxVEcLrTzYtG5ryzRc= X-Google-Smtp-Source: AGHT+IF0KghELWti7eAnoagzbwdIIn1DE9MqdtlCtyl50iG7cdctR6/FfVoLGdbm0IZghmiYQnDCAg== X-Received: by 2002:a17:903:22d0:b0:234:1e11:95a3 with SMTP id d9443c01a7336-23c84b6842dmr178708885ad.13.1751869146841; Sun, 06 Jul 2025 23:19:06 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.18.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:19:06 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:04 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-9-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=5682; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=CF4TPmOyKCuR1vONvBUPDXaEUNdePxwbzP99ZGSmrmQ=; b=N4ahDdpG2ihiFC1g+IKZNN5WQUerHf+f6XqTqdOsvy94vavAWPgeRXS8L1jrF5o0rg6EeeSan gXQgp+zKLSlCQFG09tmb44YXBmCyycrVryBt1pFe7MSLQA9I+1ODnIk X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, only 2 pipes are used at most for a plane. A stage structure describes the configuration for a mixer pair. So only one stage is needed for current usage cases. The quad-pipe case will be added in future and 2 stages are used in the case. So extend the stage to an array with array size STAGES_PER_PLANE and blend pipes per mixer pair with configuration in the stage structure. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 49 ++++++++++++++++++-------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 3 +- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 30fbd7565b82c6b6b13dc3ec0f4c91328a8e94c9..c7dc5b47ae18ebd78de30d2a060= 5caa7dd547850 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -400,7 +400,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_= crtc *crtc) static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc, struct drm_plane *plane, struct dpu_crtc_mixer *mixer, - u32 num_mixers, + u32 lms_in_pair, enum dpu_stage stage, const struct msm_format *format, uint64_t modifier, @@ -434,7 +434,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, stage_cfg->multirect_index[stage][stage_idx] =3D pipe->multirect_index; =20 /* blend config update */ - for (lm_idx =3D 0; lm_idx < num_mixers; lm_idx++) + for (lm_idx =3D 0; lm_idx < lms_in_pair; lm_idx++) mixer[lm_idx].lm_ctl->ops.update_pending_flush_sspp(mixer[lm_idx].lm_ctl= , sspp_idx); } =20 @@ -449,7 +449,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, struct dpu_plane_state *pstate =3D NULL; const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; - u32 lm_idx, i; + u32 lm_idx, stage, i, pipe_idx, head_pipe_in_stage, lms_in_pair; bool bg_alpha_enable =3D false; DECLARE_BITMAP(active_fetch, SSPP_MAX); DECLARE_BITMAP(active_pipes, SSPP_MAX); @@ -472,16 +472,25 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_cr= tc *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - for (i =3D 0; i < PIPES_PER_PLANE; i++) { - if (!pstate->pipe[i].sspp) - continue; - set_bit(pstate->pipe[i].sspp->idx, active_fetch); - set_bit(pstate->pipe[i].sspp->idx, active_pipes); - _dpu_crtc_blend_setup_pipe(crtc, plane, - mixer, cstate->num_mixers, - pstate->stage, - format, fb ? fb->modifier : 0, - &pstate->pipe[i], i, stage_cfg); + /* loop pipe per mixer pair with config in stage structure */ + for (stage =3D 0; stage < STAGES_PER_PLANE; stage++) { + head_pipe_in_stage =3D stage * PIPES_PER_STAGE; + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + pipe_idx =3D i + head_pipe_in_stage; + if (!pstate->pipe[pipe_idx].sspp) + continue; + lms_in_pair =3D min(cstate->num_mixers - (stage * PIPES_PER_STAGE), + PIPES_PER_STAGE); + set_bit(pstate->pipe[pipe_idx].sspp->idx, active_fetch); + set_bit(pstate->pipe[pipe_idx].sspp->idx, active_pipes); + _dpu_crtc_blend_setup_pipe(crtc, plane, + &mixer[head_pipe_in_stage], + lms_in_pair, + pstate->stage, + format, fb ? fb->modifier : 0, + &pstate->pipe[pipe_idx], i, + &stage_cfg[stage]); + } } =20 /* blend config update */ @@ -517,7 +526,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) struct dpu_crtc_mixer *mixer =3D cstate->mixers; struct dpu_hw_ctl *ctl; struct dpu_hw_mixer *lm; - struct dpu_hw_stage_cfg stage_cfg; + struct dpu_hw_stage_cfg stage_cfg[STAGES_PER_PLANE]; DECLARE_BITMAP(active_lms, LM_MAX); int i; =20 @@ -538,10 +547,10 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *cr= tc) } =20 /* initialize stage cfg */ - memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg)); + memset(&stage_cfg, 0, sizeof(stage_cfg)); memset(active_lms, 0, sizeof(active_lms)); =20 - _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg); + _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, stage_cfg); =20 for (i =3D 0; i < cstate->num_mixers; i++) { ctl =3D mixer[i].lm_ctl; @@ -562,13 +571,17 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *cr= tc) mixer[i].mixer_op_mode, ctl->idx - CTL_0); =20 + /* + * call dpu_hw_ctl_setup_blendstage() to blend layers per stage cfg. + * stage data is shared between PIPES_PER_STAGE pipes. + */ if (ctl->ops.setup_blendstage) ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx, - &stage_cfg); + &stage_cfg[i / PIPES_PER_STAGE]); =20 if (lm->ops.setup_blendstage) lm->ops.setup_blendstage(lm, mixer[i].hw_lm->idx, - &stage_cfg); + &stage_cfg[i / PIPES_PER_STAGE]); } } =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index 9f75b497aa0c939296207d58dde32028d0a76a6d..e4875a1f638db6f1983d9c51cb3= 99319d27675e9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,8 +34,9 @@ #define DPU_MAX_PLANES 4 #endif =20 -#define PIPES_PER_PLANE 2 +#define STAGES_PER_PLANE 1 #define PIPES_PER_STAGE 2 +#define PIPES_PER_PLANE (PIPES_PER_STAGE * STAGES_PER_PLANE) #ifndef DPU_MAX_DE_CURVES #define DPU_MAX_DE_CURVES 3 #endif --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 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 DB63227A11E for ; Mon, 7 Jul 2025 06:19:13 +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=1751869157; cv=none; b=k3czc1mx2WmtvK3Kf8P4Zqo8iHhvFY8d0+7ahuQ91pZHWdThWOR3tbOrK6vzG1901qvlwk2hb7JG0W1WOEW4AxmdUIrdJlL2LD+/MY71l8g9MG/zYpouvzPsvNvMhqVBzwuv25Zt8+1kGwvbQ0JzzOEnOgvPetr9l8u7qeemB4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869157; c=relaxed/simple; bh=ap+2nA3vCpiUHkKg9Lzcj2185wHlDPqznO6jDAEkMDg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jh/t4cFN1DRIiaiuPlS1Pj+2Je170V0GS6/6+hZmfMxmPJe3J0zhJ+KVdhwLuEpBochLaktjqcP+yyp2+W966nnoW08dwqNYOuaUyPFIM7j2zZeBN0Anl60r0Ukh/+nnDEiDUa7W6FCOiQ0kXThb9wW8GEDnzC+gPAqMzqmEyyo= 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=VThpdO7s; 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="VThpdO7s" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-739b3fe7ce8so2318338b3a.0 for ; Sun, 06 Jul 2025 23:19:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869153; x=1752473953; 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=SLYcyDGUwVs1TCnZ4fAtjKxYxhC0Keb+hEw8chsCJnQ=; b=VThpdO7sKJJvekMbDph1irOKKvlP7tFczWjF3PcKWEUAYlHtTkPVCMg1D6HkQGfIFw OAm/8Ng+WvQAAFhee9prGnBYABYLMMpdX90Qt/9YDI+uSaPPHxmz4aRlx2Gj1Ic3g+DG wwI33e6DlEXvj2hEF5OZGBjiuPa2TE5/p9F5CR0Mo6B+fyTiPjuOE01GbonlApvahvM8 hsRI/dwDX32k7MO79ShTryCog1Fgrj0npd4jGTlIfBWeOQ9nyqqGcf3DQUeCV7m4HBS4 lbFtgKUHSw40nzGIbCeam+blsAv5JCWpfP9ptUuLYLkJ89F8xhG3d1xpu9UvnMVBpfYw w5bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869153; x=1752473953; 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=SLYcyDGUwVs1TCnZ4fAtjKxYxhC0Keb+hEw8chsCJnQ=; b=t/tSBB3ng5RT9GGTu+F0aAAbOC+olqXEB1YRVseWqqPydOl7XiE/AJ0aIwVOTJjODK u/zOV+xZADIssu9Fl0CrEJELYwIAgLRMSPg1JrWFPpIJ5X8TacPBbb8sInqS+MmVhp5S QmF6G7BlcL/bqSbHYvToyPZ455BrlT0QBZ5TthwyZ4swfj9j4oz+ICuZhALBfEKY8aMx 0TP33Wtmhmvn9DG4aze5OIhkrs3eBb0KPLZ7UWuCdsZELS0qv0HD1TFnH0TJpFmt3vM6 AGMtGUbdY/nMQwC+YUnJnOVkoz9ZYRRP5ikYAKxSLJo8tYqCRRbNx30gIbR0GcZ6e0XA 6HOQ== X-Forwarded-Encrypted: i=1; AJvYcCVTkR3wo/l4SOPZzCYyHttlO4uEmh0+8HaFNytcXyx5a3PecYiD668Wp0r3fw3NFJjNZUQQ1rvRfCoZaWM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywb18CODrjCyqXVGbhapmFFnfuCUGCXVYbHN02O7vHsihzMD33x O5CfXFOWOOIvlqGeL1caf+gfZVZUIgNSauHeO3h6onvj0QI1K/b4v+ipG5nv55k5Xkk= X-Gm-Gg: ASbGncuWNFSrFcerFZisz1+mQEa9B1VoQhs72Lf8YerXVOlk8RkQBxx/ge4LZ14q19j tKu7SZfoReD7G3vpJNJJ3U+hulua+E0mPJQLTYFU+070bdtNkIeJElsLWL4UbilImV/ZMo4+uQo Q6GakI+I4ZDT3L4LKjQ1e36dKNJLBk3QR2dB7d2zVU0KSU+lH7+Gcg5cfwUKd+onPLsIXlYfCqV 94Nid+8W51ahNFiN8RbuIyInYCStYEKlGVcWu5fHdJ7GWw+5Fr4AzDsjsmPPK/+D4eAQzuLWBIM jNqIoehF/PNxO3yJMm43A4KjCh/BJnG7EsVmdEXU3ARPh97nsQaKpkM2XWDfdw5OoltR9g== X-Google-Smtp-Source: AGHT+IFtcelwxhw3FHDRK7684pBDurkGqoprst0CYk6b0hnfJQOsi3R8cWrDWZPkY1XoZJAYaEnyfw== X-Received: by 2002:a05:6a20:a113:b0:220:967d:c822 with SMTP id adf61e73a8af0-2271eccd34amr12034381637.3.1751869153219; Sun, 06 Jul 2025 23:19:13 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.19.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:19:12 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:05 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-10-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=8448; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=ap+2nA3vCpiUHkKg9Lzcj2185wHlDPqznO6jDAEkMDg=; b=WdjAtTQ/uEqcUgnvz4I9409D0A7XE7RG/DditYh1d3IOwvSIkG95L/eVetDcAR+JQKJXuYmPc 7ftE8nLspCUA/w0l5/ZyutRuvx/QN7jdcRHqA3YXiMRzcKfFMhwZfQ8 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, SSPPs are assigned to a maximum of two pipes. However, quad-pipe usage scenarios require four pipes and involve configuring two stages. In quad-pipe case, the first two pipes share a set of mixer configurations and enable multi-rect mode when certain conditions are met. The same applies to the subsequent two pipes. Assign SSPPs to the pipes in each stage using a unified method and to loop the stages accordingly. Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 143 +++++++++++++++++++-------= ---- 1 file changed, 89 insertions(+), 54 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 149e7066480b07f9f6d422748d89ffd6f9416f33..ecfebf7a2406d65930075cc2a4b= 8a8a7d40b3d3c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -954,6 +954,30 @@ static int dpu_plane_is_multirect_parallel_capable(str= uct dpu_hw_sspp *sspp, dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth); } =20 +static bool dpu_plane_get_single_pipe(struct dpu_plane_state *pstate, + struct dpu_sw_pipe **single_pipe, + struct dpu_sw_pipe_cfg **single_pipe_cfg, + int *stage_index) +{ + int stage_idx, pipe_idx, i, valid_pipe =3D 0; + + for (stage_idx =3D 0; stage_idx < STAGES_PER_PLANE; stage_idx++) { + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + pipe_idx =3D stage_idx * PIPES_PER_STAGE + i; + if (drm_rect_width(&pstate->pipe_cfg[pipe_idx].src_rect) !=3D 0) { + valid_pipe++; + if (valid_pipe > 1) + return false; + + *single_pipe =3D &pstate->pipe[pipe_idx]; + *single_pipe_cfg =3D &pstate->pipe_cfg[pipe_idx]; + *stage_index =3D stage_idx; + } + } + } + + return valid_pipe =3D=3D 1; +} =20 static int dpu_plane_atomic_check_sspp(struct drm_plane *plane, struct drm_atomic_state *state, @@ -1021,18 +1045,23 @@ 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); + int stage_index, prev_stage_index; u16 max_tile_height =3D 1; =20 - if (prev_adjacent_pstate->pipe[1].sspp !=3D NULL || + if (!dpu_plane_get_single_pipe(pstate, &pipe, &pipe_cfg, &stage_index)) + return false; + + if (!dpu_plane_get_single_pipe(prev_adjacent_pstate, &prev_pipe, + &prev_pipe_cfg, &prev_stage_index) || prev_pipe->multirect_mode !=3D DPU_SSPP_MULTIRECT_NONE) return false; =20 + if (stage_index !=3D prev_stage_index) + return false; + if (!dpu_plane_is_multirect_capable(pipe->sspp, pipe_cfg, fmt) || !dpu_plane_is_multirect_capable(prev_pipe->sspp, prev_pipe_cfg, prev_= fmt)) return false; @@ -1043,11 +1072,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 || @@ -1176,6 +1200,44 @@ static int dpu_plane_virtual_atomic_check(struct drm= _plane *plane, return 0; } =20 +static int dpu_plane_assign_resource_in_stage(struct dpu_sw_pipe *pipe, + struct dpu_sw_pipe_cfg *pipe_cfg, + struct drm_plane_state *plane_state, + struct dpu_global_state *global_state, + struct drm_crtc *crtc, + struct dpu_rm_sspp_requirements *reqs) +{ + struct drm_plane *plane =3D plane_state->plane; + struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); + struct dpu_sw_pipe *r_pipe =3D pipe + 1; + struct dpu_sw_pipe_cfg *r_pipe_cfg =3D pipe_cfg + 1; + + if (drm_rect_width(&pipe_cfg->src_rect) !=3D 0) { + pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, req= s); + if (!pipe->sspp) + return -ENODEV; + } + + if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0 && + dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, + pipe->sspp, + msm_framebuffer_format(plane_state->fb), + dpu_kms->catalog->caps->max_linewidth)) { + goto stage_assinged; + } + + if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) { + r_pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, r= eqs); + if (!r_pipe->sspp) + return -ENODEV; + r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + } + +stage_assinged: + return 0; +} + static int dpu_plane_virtual_assign_resources(struct drm_crtc *crtc, struct dpu_global_state *global_state, struct drm_atomic_state *state, @@ -1188,11 +1250,9 @@ static int dpu_plane_virtual_assign_resources(struct= drm_crtc *crtc, 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; const struct msm_format *fmt; - int i; + int i, stage_id, ret; =20 if (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, @@ -1202,11 +1262,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 @@ -1220,44 +1275,24 @@ static int dpu_plane_virtual_assign_resources(struc= t drm_crtc *crtc, =20 reqs.rot90 =3D drm_rotation_90_or_270(plane_state->rotation); =20 - if (drm_rect_width(&r_pipe_cfg->src_rect) =3D=3D 0) { - if (!prev_adjacent_pstate || - !dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate, fmt, - dpu_kms->catalog->caps->max_linewidth)) { - pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &r= eqs); - if (!pipe->sspp) - return -ENODEV; - - r_pipe->sspp =3D NULL; - - pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - } - } else { - pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &re= qs); - if (!pipe->sspp) - return -ENODEV; - - if (!dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, - pipe->sspp, - msm_framebuffer_format(plane_state->fb), - dpu_kms->catalog->caps->max_linewidth)) { - /* multirect is not possible, use two SSPP blocks */ - r_pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, = &reqs); - if (!r_pipe->sspp) - return -ENODEV; - - pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + 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->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; - } + for (stage_id =3D 0; stage_id < STAGES_PER_PLANE; stage_id++) { + pipe =3D &pstate->pipe[stage_id * PIPES_PER_STAGE]; + pipe_cfg =3D &pstate->pipe_cfg[stage_id * PIPES_PER_STAGE]; + ret =3D dpu_plane_assign_resource_in_stage(pipe, pipe_cfg, + plane_state, + global_state, + crtc, &reqs); + if (ret) + return ret; } =20 +assigned: return dpu_plane_atomic_check_sspp(plane, state, crtc_state); } =20 --=20 2.34.1 From nobody Tue Oct 7 20:06:07 2025 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 3C91D28724C for ; Mon, 7 Jul 2025 06:19:19 +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=1751869162; cv=none; b=YfqDMAsFHsFDOhZWv2WqsVR1YSK0tCmFfan35bCoiD+LdGo+AJs5rCPoQvVEx+YOftHl2IvOK66TxvyN03RKkIz9Dx4/8Hs//h4cGlzXCOwBM0O26F9rW4zbsmWaeh3FMZSSrpflJjNGkcvYiw7t3dvU4D+McJMNBjzELT44BKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869162; c=relaxed/simple; bh=2dCjuvfeyc/waghScTEC7byQ0ODRpJEFLav9GFXW3Vk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u13T6eUDUjfJazrhihhRFc87QkQWQY0K8lo9FjvQ2yWUh7pFALkbk4xAOkuKOZ4mq3OvMXXvZAqCREEyLebIOv6ECBt3tgURU7nmpG4kOrPUinMk6KSdn0u8Qusfvv3/J0ovUWQ0wtMHEYvcb4IpRX+BcuzUxiTa+vlFVcecUN0= 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=fy2rzCCu; 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="fy2rzCCu" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-747c2cc3419so2166095b3a.2 for ; Sun, 06 Jul 2025 23:19:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869159; x=1752473959; 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=GVDq7gBx78YvouZmuziumoCqXccsbRt1gNqWiDEUR/Q=; b=fy2rzCCue9a9EiyYY/bbKMMzTIevXzVKh/B7jXDjMNHzs1J4IzkSOTTQHl1pyVG+GG TiXPFOfgHc/1ckXfx9rGJoismgkh4MY3eXcW3hObJuG5nkjKEzdiA5P6co3cC3QVOous 4qBSHjX5UpkuJbgszJg4OxP6M4zlV7MYSPEwr926faxmqXXHCeBTXHe80nHf5HY/45Q0 9bqihFBQpK47/ESFtw9Cyxt0CwJ1Gt37Tm7Yv304hg3oCi7bZtMLfB0cT9XdpadtUeCF P0Kzpi6+sM8eemMI+XMD5JDp4FtI3iihAvwAnqk1NDBEqq1ZGpZuxKC0n+NtiK5Fj9GO uYGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869159; x=1752473959; 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=GVDq7gBx78YvouZmuziumoCqXccsbRt1gNqWiDEUR/Q=; b=TI2Re6L9WFp+tHuxRJqMfI/m6vdSlA2oQetghc12J0LdpjRSy2K8+mXu7ekIr9CwoR fMLoGgnAM4xRnXh5EDYh64TagX3uJ5dm1cnbBfSP8rJx0VFwXZwQZkBYN8ZJnlHLrXUJ Bwlh9M8mQz9xa0XuUfP9PNP05HLpOnCqu9VjhNeD76zKXhEA4B8DUWPCJGKYQ6p1JzLv jZRxFmR6QnjasmNctejJu3/VzAbmCxEOr9Uid5OXICDxidqjattqU1ixMYw/BUdFshNT qehob/b95iVdU4FPWbTYOaV4+8lxWuYOVUe+MKfSX/RoyWHNRn9TLi+idnRimNFECFHk ppgg== X-Forwarded-Encrypted: i=1; AJvYcCUTRARCKekD8bwoQK9jS0fUpRIvR5drG12HmMuroVkMed/jo2EzArTnYB3WYmiWm/yF403np7taZVqCH6o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx851lZpWk14qRmZQOX6kF+XpwPopCQ+31SmRkTjo3VSw77mG4v esroIf5/pWdYPt+icFyNlwL+pCCkuoY0rtUj8b75HmzCXO2mhzLk2B3sMW2+P8yYuQM= X-Gm-Gg: ASbGncuSRIwI3yde8W/mdKGcDSNvi11U03qv7UHniq5m8LyaD4twJ6VTwf+QjlGrEKn BL0g8vWn2oHhWcW8bpozhHhExOXM2z42FZeZGlD7f79SqR6nI3Z/97Fu2LaUxQcD9nYy0dnXEvJ 3uKvWX2MakHNkcfGFPfyEX6MPgu7Di6rdbBCHDYn+CVWPdtDNjCSG85vNC+xn+/vbJhepdroy1k FQ7tET0ElySRvXECk/E3MAGfit+0bLJF6CChtYTp9VSz+tYKNE5L2qgC9rHnuO82O7AENdDWWde zuE5jxO0uFsCeMO3ct7730L5E1hgJ2ffgYF1hKMvvjR4mx8GdIRa1CAtNiiNYHek3Apo5Q== X-Google-Smtp-Source: AGHT+IFgOQoWkFqpTTMOkkCFU97g7XFvXeenC3qqfO2TIv99v9oBCvYHbNfkZygBpmpK//lI+PQ2Rw== X-Received: by 2002:a05:6a20:3948:b0:21a:e091:ac25 with SMTP id adf61e73a8af0-2271f2cb042mr11811905637.6.1751869159358; Sun, 06 Jul 2025 23:19:19 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.19.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:19:19 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:06 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-11-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=9601; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=2dCjuvfeyc/waghScTEC7byQ0ODRpJEFLav9GFXW3Vk=; b=VSSvEPwpYM2g9KxI+f0P6dj9TdxYsgMSSFkAIVwf+Lyn0Pf0SIZgww/C/RCB2bTwJzBrw6gNs 7zczxUzinIQCAeDYwoUfvu8TaIftdz6CJEY6JGDZYWpeaNsStzddahc X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The content of every half of screen is sent out via one interface in dual-DSI case. The content for every interface is blended by a LM pair in quad-pipe case, thus a LM pair should not blend any content that cross the half of screen in this case. Clip plane into pipes per left and right half screen ROI if topology is quad pipe case. The clipped rectangle on every half of screen is futher handled by two pipes if its width exceeds a limit for a single pipe. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 11 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 137 +++++++++++++++++++++-----= ---- 3 files changed, 110 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index c7dc5b47ae18ebd78de30d2a0605caa7dd547850..1c7a5e545745320018c3e9a2d16= 3cbfd3dceaf7b 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -1592,6 +1592,17 @@ int dpu_crtc_vblank(struct drm_crtc *crtc, bool en) return 0; } =20 +/** + * dpu_crtc_get_num_lm - Get mixer number in this CRTC pipeline + * @state: Pointer to drm crtc state object + */ +unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state) +{ + struct dpu_crtc_state *cstate =3D to_dpu_crtc_state(state); + + return cstate->num_mixers; +} + #ifdef CONFIG_DEBUG_FS static int _dpu_debugfs_status_show(struct seq_file *s, void *data) { diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.h index 94392b9b924546f96e738ae20920cf9afd568e6b..6eaba5696e8e6bd1246a9895c4c= 8714ca6589b10 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -267,4 +267,6 @@ static inline enum dpu_crtc_client_type dpu_crtc_get_cl= ient_type( =20 void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event); =20 +unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state); + #endif /* _DPU_CRTC_H_ */ diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index ecfebf7a2406d65930075cc2a4b8a8a7d40b3d3c..866e2dfcc8dfd1e9f1c5433fd73= 8eedde7539418 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -824,8 +824,12 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pl= ane *plane, struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; + struct dpu_sw_pipe_cfg init_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; + const struct drm_display_mode *mode =3D &crtc_state->adjusted_mode; uint32_t max_linewidth; + u32 num_lm; + int stage_id, num_stages; =20 min_scale =3D FRAC_16_16(1, MAX_UPSCALE_RATIO); max_scale =3D MAX_DOWNSCALE_RATIO << 16; @@ -848,13 +852,10 @@ static int dpu_plane_atomic_check_nosspp(struct drm_p= lane *plane, return -EINVAL; } =20 - /* move the assignment here, to ease handling to another pairs later */ - pipe_cfg =3D &pstate->pipe_cfg[0]; - r_pipe_cfg =3D &pstate->pipe_cfg[1]; - /* state->src is 16.16, src_rect is not */ - drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + num_lm =3D dpu_crtc_get_num_lm(crtc_state); =20 - pipe_cfg->dst_rect =3D new_plane_state->dst; + /* state->src is 16.16, src_rect is not */ + drm_rect_fp_to_int(&init_pipe_cfg.src_rect, &new_plane_state->src); =20 fb_rect.x2 =3D new_plane_state->fb->width; fb_rect.y2 =3D new_plane_state->fb->height; @@ -879,35 +880,94 @@ static int dpu_plane_atomic_check_nosspp(struct drm_p= lane *plane, =20 max_linewidth =3D pdpu->catalog->caps->max_linewidth; =20 - drm_rect_rotate(&pipe_cfg->src_rect, + drm_rect_rotate(&init_pipe_cfg.src_rect, new_plane_state->fb->width, new_plane_state->fb->height, new_plane_state->rotation); =20 - if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) || - _dpu_plane_calc_clk(&crtc_state->adjusted_mode, pipe_cfg) > max_mdp_= clk_rate) { - if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) { - DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n", - DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth); - return -E2BIG; + /* + * We have 1 mixer pair cfg for 1:1:1 and 2:2:1 topology, 2 mixer pair + * configs for left and right half screen in case of 4:4:2 topology. + * But we may have 2 rect to split wide plane that exceeds limit with 1 + * config for 2:2:1. So need to handle both wide plane splitting, and + * two halves of screen splitting for quad-pipe case. Check dest + * rectangle left/right clipping first, then check wide rectangle + * splitting in every half next. + */ + num_stages =3D (num_lm + 1) / 2; + /* iterate mixer configs for this plane, to separate left/right with the = id */ + for (stage_id =3D 0; stage_id < num_stages; stage_id++) { + struct drm_rect mixer_rect =3D { + .x1 =3D stage_id * mode->hdisplay / num_stages, + .y1 =3D 0, + .x2 =3D (stage_id + 1) * mode->hdisplay / num_stages, + .y2 =3D mode->vdisplay + }; + int cfg_idx =3D stage_id * PIPES_PER_STAGE; + + pipe_cfg =3D &pstate->pipe_cfg[cfg_idx]; + r_pipe_cfg =3D &pstate->pipe_cfg[cfg_idx + 1]; + + drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + pipe_cfg->dst_rect =3D new_plane_state->dst; + + DPU_DEBUG_PLANE(pdpu, "checking src " DRM_RECT_FMT + " vs clip window " DRM_RECT_FMT "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), + DRM_RECT_ARG(&mixer_rect)); + + /* + * If this plane does not fall into mixer rect, check next + * mixer rect. + */ + if (!drm_rect_clip_scaled(&pipe_cfg->src_rect, + &pipe_cfg->dst_rect, + &mixer_rect)) { + memset(pipe_cfg, 0, 2 * sizeof(struct dpu_sw_pipe_cfg)); + + continue; } =20 - *r_pipe_cfg =3D *pipe_cfg; - pipe_cfg->src_rect.x2 =3D (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2= ) >> 1; - pipe_cfg->dst_rect.x2 =3D (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2= ) >> 1; - r_pipe_cfg->src_rect.x1 =3D pipe_cfg->src_rect.x2; - r_pipe_cfg->dst_rect.x1 =3D pipe_cfg->dst_rect.x2; - } else { - memset(r_pipe_cfg, 0, sizeof(*r_pipe_cfg)); - } + pipe_cfg->dst_rect.x1 -=3D mixer_rect.x1; + pipe_cfg->dst_rect.x2 -=3D mixer_rect.x1; + + DPU_DEBUG_PLANE(pdpu, "Got clip src:" DRM_RECT_FMT " dst: " DRM_RECT_FMT= "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), DRM_RECT_ARG(&pipe_cfg->dst_rect)); =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, + /* Split wide rect into 2 rect */ + if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) || + _dpu_plane_calc_clk(mode, pipe_cfg) > max_mdp_clk_rate) { + + if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) { + DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth); + return -E2BIG; + } + + memcpy(r_pipe_cfg, pipe_cfg, sizeof(struct dpu_sw_pipe_cfg)); + pipe_cfg->src_rect.x2 =3D (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x= 2) >> 1; + pipe_cfg->dst_rect.x2 =3D (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x= 2) >> 1; + r_pipe_cfg->src_rect.x1 =3D pipe_cfg->src_rect.x2; + r_pipe_cfg->dst_rect.x1 =3D pipe_cfg->dst_rect.x2; + DPU_DEBUG_PLANE(pdpu, "Split wide plane into:" + DRM_RECT_FMT " and " DRM_RECT_FMT "\n", + DRM_RECT_ARG(&pipe_cfg->src_rect), + DRM_RECT_ARG(&r_pipe_cfg->src_rect)); + } else { + memset(r_pipe_cfg, 0, sizeof(struct dpu_sw_pipe_cfg)); + } + + 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; @@ -987,20 +1047,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 Tue Oct 7 20:06:07 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 4E32C27F4F5 for ; Mon, 7 Jul 2025 06:19:26 +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=1751869168; cv=none; b=isDUEAJvV4off4mZKykCBLA5lepIYLC6x2+lUZ1RxDff1RwHZeXe2dl9hJonGZ7nymDjQpQ/3SYydfCQzr7BUKp2NdSpHj8B3O88tTU1i+5TmjMFXd85jIQtK2tiFBrgYxF0RfS3sLTuDdqsHSfnmu/2oNONFl/ePLQJQOHOH+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751869168; c=relaxed/simple; bh=L0RJjmTLlYkHLbKt8l66Y1ANmmW3YDpsTiGU9UI7WH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZsCV+NGiAHNQaw5Y6CnvzfenMPlQevLf8+jPDNJr/ELfqshKYqcH6WEMC7Qo19Ov74pu6PMjwb2pKWZ4uhLoSXr611IsVtLlWRYQyFsm+HcQhiQBzeBtfb4PKO7hmfcqL7CLqA3/Rd/fcW5K5wHQdqN1OdTGv6qj9S1ZsEPUVXU= 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=xOGZsyX/; 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="xOGZsyX/" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-74b52bf417cso1675404b3a.0 for ; Sun, 06 Jul 2025 23:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751869165; x=1752473965; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qMyTzj0YkyEhVsWHYdHluPcgaxyf2WjhZvLWIgnb3dk=; b=xOGZsyX/ducggBaogV+PbPa6yKF50D1UnDl8I47nt3LY0MINIfyaFwG3bQB9OTYApy zhvZfA5pLPQ5bI0n27tkjTm/EcgSascDBzWIvI3e7X+BdR+tS/JizQc7W1YfMRnt2bW/ ugT+gTpDB2TMyg/rqwGHRiUOSeVaQGDF13+S0IbNIr7LJQRiEWZRITpktIpXGiRPaG15 fp+tAuLSZ2Z49jUbKjYQEoT6rJnEKYt5/LJPmyDfrQYxLeauE0TOtEcg6ei+zuHUhUcw UoA8L8S72CejAhY9T88q6K1vRc8CaooxEkJ4YYIHu6a2t351GDBUgJ5QSq+LCeB2j1Bt ILog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751869165; x=1752473965; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qMyTzj0YkyEhVsWHYdHluPcgaxyf2WjhZvLWIgnb3dk=; b=Yn5jpMr0MjPdEMEQhgZ46xbzX5RV0Dsqc+8VVsqFS+WP8m5WReKCeiqyT7tWcTc84w QYHfrCI7vYEP05MKRPNV2crv6t5YrXjhbZh+vUK08UkW6Nca38xp7FFZJ86VeQTZdBdv LfRgJrudSrBG5KpMpm10mBn5jvmgTQfD7v0s1pEAIGfX+Oi9tjLBBdL2+IRAaYhxoqpP N/SjQDLHXKvS5piOfVLyYHro4G1cf+5eiEoNki6bn2Hs+c/IIG7/5uG+kni8q6h1/Wsb W24r8OI7stP+ge6Y3HAnMTWN7ecomxapG/LT4GQwnHW6xao6foieB/lw1JBYLaORckBS 9AWA== X-Forwarded-Encrypted: i=1; AJvYcCUnbNCsYSl79m7O4kKIgMNDPR63etknfH1LK7/gyUVHcjfmBqIo89wbcDcDNzPAmHMjqHcZqOzUgFvl9ok=@vger.kernel.org X-Gm-Message-State: AOJu0YwxzO17rLyOXX3KPoH/ScSJ0FK+atilG0NSZEV0bLwLCmmp7b97 5UTogqw0dogfzt9aYoM1C2iraCGpDj9Rnd4DxwcoJubZ2GRim9NaWt3KgFnEYPhkdVE= X-Gm-Gg: ASbGncv/xEB89ycLMM/u13nzjURsHO/+cN8bu7V5nIqTZ0xBIw+KvNkVkXEI+Ncvh+/ lBDU9urp/9rhD0AZZgkOKiohk9rooWSO+GGDx2FrjcYei/ExNYycvCpAzLWN3YUAQr/eBuoRs9j EwgWepXsqV94JsYSqFFJOOCINGeZdBDnz2Moayup6AYiUhL4THPmbFRjRI/J7q+q5/1lhEI2fw4 BeCCdl7aJJaT09eCSBk9GfFGhxp87hTHdm8ULG7g4rKuxt/M0mqYDKJk0WsosyB3xqm/AjcPROz VyfnXoBakHjBkS5fgIibViAH6d895lyziZwbWHUUk//S0tljQApg70gdJTk= X-Google-Smtp-Source: AGHT+IEU12CaXxRFm+sHW41+n2+mseLBZwKCCLTcs1c/9DFVXDPTSMwU6toKiR7kSiB7FPV5y993ww== X-Received: by 2002:a05:6a20:158a:b0:21f:a883:d1dd with SMTP id adf61e73a8af0-225b7c28afamr18891176637.14.1751869165502; Sun, 06 Jul 2025 23:19:25 -0700 (PDT) Received: from [127.0.1.1] ([103.163.156.9]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b38ee450ccbsm8037327a12.3.2025.07.06.23.19.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Jul 2025 23:19:24 -0700 (PDT) From: Jun Nie Date: Mon, 07 Jul 2025 14:18:07 +0800 Subject: [PATCH v12 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: <20250707-v6-16-rc2-quad-pipe-upstream-v12-12-67e3721e7d83@linaro.org> References: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> In-Reply-To: <20250707-v6-16-rc2-quad-pipe-upstream-v12-0-67e3721e7d83@linaro.org> To: Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jun Nie , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751869084; l=8147; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=L0RJjmTLlYkHLbKt8l66Y1ANmmW3YDpsTiGU9UI7WH8=; b=4G4XLLDvYSxavjmhXhXI6JvaYsyJkCW8y61FOU7WvLpblEPUuJjZ4upWl0ANtM+iL2D+pvWWk HDjrebhNaRRBKuIxR20QVG2Xav7C2YuK8L0R7QmTrTPpUKV0AnhQVNe X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= To support high-resolution cases that exceed the width limitation of a pair of SSPPs, or scenarios that surpass the maximum MDP clock rate, additional pipes are necessary to enable parallel data processing within the SSPP width constraints and MDP clock rate. Request 4 mixers and 4 DSCs for high-resolution cases where both DSC and dual interfaces are enabled. More use cases can be incorporated later if quad-pipe capabilities are required. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 27 +++++++++++++++++---= --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 6 ++--- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 28 ++++++++------------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 2 +- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 1c7a5e545745320018c3e9a2d163cbfd3dceaf7b..2625ad777e477d2d5a6a746989b= b9e10493e19ad 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -200,7 +200,7 @@ static int dpu_crtc_get_lm_crc(struct drm_crtc *crtc, struct dpu_crtc_state *crtc_state) { struct dpu_crtc_mixer *m; - u32 crcs[CRTC_DUAL_MIXERS]; + u32 crcs[CRTC_QUAD_MIXERS]; =20 int rc =3D 0; int i; @@ -1328,6 +1328,7 @@ static struct msm_display_topology dpu_crtc_get_topol= ogy( struct drm_display_mode *mode =3D &crtc_state->adjusted_mode; struct msm_display_topology topology =3D {0}; struct drm_encoder *drm_enc; + u32 num_rt_intf; =20 drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc_state->encoder_mask) dpu_encoder_update_topology(drm_enc, &topology, crtc_state->state, @@ -1341,11 +1342,14 @@ static struct msm_display_topology dpu_crtc_get_top= ology( * Dual display * 2 LM, 2 INTF ( Split display using 2 interfaces) * + * If DSC is enabled, try to use 4:4:2 topology if there is enough + * resource. Otherwise, use 2:2:2 topology. + * * Single display * 1 LM, 1 INTF * 2 LM, 1 INTF (stream merge to support high resolution interfaces) * - * If DSC is enabled, use 2 LMs for 2:2:1 topology + * If DSC is enabled, use 2:2:1 topology * * Add dspps to the reservation requirements if ctm is requested * @@ -1357,14 +1361,23 @@ static struct msm_display_topology dpu_crtc_get_top= ology( * (mode->hdisplay > MAX_HDISPLAY_SPLIT) check. */ =20 - if (topology.num_intf =3D=3D 2 && !topology.cwb_enabled) - topology.num_lm =3D 2; - else if (topology.num_dsc =3D=3D 2) + num_rt_intf =3D topology.num_intf; + if (topology.cwb_enabled) + num_rt_intf--; + + if (topology.num_dsc) { + if (dpu_kms->catalog->dsc_count >=3D num_rt_intf * 2) + topology.num_dsc =3D num_rt_intf * 2; + else + topology.num_dsc =3D num_rt_intf; + topology.num_lm =3D topology.num_dsc; + } else if (num_rt_intf =3D=3D 2) { topology.num_lm =3D 2; - else if (dpu_kms->catalog->caps->has_3d_merge) + } else if (dpu_kms->catalog->caps->has_3d_merge) { topology.num_lm =3D (mode->hdisplay > MAX_HDISPLAY_SPLIT) ? 2 : 1; - else + } else { topology.num_lm =3D 1; + } =20 if (crtc_state->ctm) topology.num_dspp =3D topology.num_lm; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.h index 6eaba5696e8e6bd1246a9895c4c8714ca6589b10..455073c7025b0bcb970d8817f19= 7d9bcacc6dca5 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -210,7 +210,7 @@ struct dpu_crtc_state { =20 bool bw_control; bool bw_split_vote; - struct drm_rect lm_bounds[CRTC_DUAL_MIXERS]; + struct drm_rect lm_bounds[CRTC_QUAD_MIXERS]; =20 uint64_t input_fence_timeout_ns; =20 @@ -218,10 +218,10 @@ struct dpu_crtc_state { =20 /* HW Resources reserved for the crtc */ u32 num_mixers; - struct dpu_crtc_mixer mixers[CRTC_DUAL_MIXERS]; + struct dpu_crtc_mixer mixers[CRTC_QUAD_MIXERS]; =20 u32 num_ctls; - struct dpu_hw_ctl *hw_ctls[CRTC_DUAL_MIXERS]; + struct dpu_hw_ctl *hw_ctls[CRTC_QUAD_MIXERS]; =20 enum dpu_crtc_crc_source crc_source; int crc_frame_skip_count; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 4616b360812491afbe63f8ffd4a57bc9604382e7..d13eeb3a707e186faec67ec02a6= 34c14414d9048 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -55,7 +55,7 @@ #define MAX_PHYS_ENCODERS_PER_VIRTUAL \ (MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES) =20 -#define MAX_CHANNELS_PER_ENC 2 +#define MAX_CHANNELS_PER_ENC 4 #define MAX_CWB_PER_ENC 2 =20 #define IDLE_SHORT_TIMEOUT 1 @@ -675,22 +675,12 @@ void dpu_encoder_update_topology(struct drm_encoder *= drm_enc, =20 dsc =3D dpu_encoder_get_dsc_config(drm_enc); =20 - /* We only support 2 DSC mode (with 2 LM and 1 INTF) */ - if (dsc) { - /* - * Use 2 DSC encoders, 2 layer mixers and 1 or 2 interfaces - * when Display Stream Compression (DSC) is enabled, - * and when enough DSC blocks are available. - * This is power-optimal and can drive up to (including) 4k - * screens. - */ - WARN(topology->num_intf > 2, - "DSC topology cannot support more than 2 interfaces\n"); - if (topology->num_intf >=3D 2 || dpu_kms->catalog->dsc_count >=3D 2) - topology->num_dsc =3D 2; - else - topology->num_dsc =3D 1; - } + /* + * Set DSC number as 1 to mark the enabled status, will be adjusted + * in dpu_crtc_get_topology() + */ + if (dsc) + topology->num_dsc =3D 1; =20 connector =3D drm_atomic_get_new_connector_for_encoder(state, drm_enc); if (!connector) @@ -2179,8 +2169,8 @@ static void dpu_encoder_helper_reset_mixers(struct dp= u_encoder_phys *phys_enc) struct dpu_hw_mixer_cfg mixer; int i, num_lm; struct dpu_global_state *global_state; - struct dpu_hw_blk *hw_lm[2]; - struct dpu_hw_mixer *hw_mixer[2]; + struct dpu_hw_blk *hw_lm[MAX_CHANNELS_PER_ENC]; + struct dpu_hw_mixer *hw_mixer[MAX_CHANNELS_PER_ENC]; struct dpu_hw_ctl *ctl =3D phys_enc->hw_ctl; =20 memset(&mixer, 0, sizeof(mixer)); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h b/drivers/gpu= /drm/msm/disp/dpu1/dpu_encoder_phys.h index 61b22d9494546885db609efa156222792af73d2a..09395d7910ac87c035b65cf4763= 50bf6c9619612 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h @@ -302,7 +302,7 @@ static inline enum dpu_3d_blend_mode dpu_encoder_helper= _get_3d_blend_mode( =20 /* Use merge_3d unless DSC MERGE topology is used */ if (phys_enc->split_role =3D=3D ENC_ROLE_SOLO && - dpu_cstate->num_mixers =3D=3D CRTC_DUAL_MIXERS && + (dpu_cstate->num_mixers !=3D 1) && !dpu_encoder_use_dsc_merge(phys_enc->parent)) return BLEND_3D_H_ROW_INT; =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/d= rm/msm/disp/dpu1/dpu_hw_catalog.h index a78bb2c334e30bc86554bde45355808b790c6235..ce0265c13e050fbd48ac5c3202e= 8fa23edd1220d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h @@ -24,7 +24,7 @@ #define DPU_MAX_IMG_WIDTH 0x3fff #define DPU_MAX_IMG_HEIGHT 0x3fff =20 -#define CRTC_DUAL_MIXERS 2 +#define CRTC_QUAD_MIXERS 4 =20 #define MAX_XIN_COUNT 16 =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index e4875a1f638db6f1983d9c51cb399319d27675e9..5cedcda285273a46cd6e11da63c= de92cab94b9f4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -34,7 +34,7 @@ #define DPU_MAX_PLANES 4 #endif =20 -#define STAGES_PER_PLANE 1 +#define STAGES_PER_PLANE 2 #define PIPES_PER_STAGE 2 #define PIPES_PER_PLANE (PIPES_PER_STAGE * STAGES_PER_PLANE) #ifndef DPU_MAX_DE_CURVES --=20 2.34.1