From nobody Fri Dec 19 14:11:21 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 F3D5221D584 for ; Mon, 17 Feb 2025 14:16:43 +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=1739801805; cv=none; b=BMs1pTAfKE4YVol7CZpf6rCPmKy7jlCdV5OSeJR4aP3zOuO+72eyuY3WDHXVG1lIO9RNvZKFVeOsKr352+P6C2W4cWk/fzJocjg1sUleIDudRi7lHaquVm6AZJRdqwLD/CfCN3adswRLYUQAN8BodOvVbBWhHDVwBLAXlMX8JOY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801805; c=relaxed/simple; bh=KapOubmHrnJ45Q6eHl5TCN92cp2NDgoLCMZwQ/tSSxY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vg2Kty2jSfzebCAbeKHhN2P130UpHnw9H4Hh/T9HTN2Tcf9RSCYIj8T/BJ+2CxA4RQz9K9g9mcnTcEg/rD06NF3LYstRu6zT/FsrkY/bZxxZ/zdXMP0dSzRiSyZ4VsiodmjnvG/LpMgE6h3Fmo1yupPJHv0D33s7OZOeQ99aIsI= 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=wCMMf9Pl; 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="wCMMf9Pl" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-221050f3f00so35592385ad.2 for ; Mon, 17 Feb 2025 06:16:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801803; x=1740406603; 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=69vNi3OZA4rlkkM15gA1GocQBCacDIa/QmSzA91F8v0=; b=wCMMf9Pl6zlf50j0BFovfleOdqOcq44WtNLSZ5J++A8uUbvBQGkdK4dcZibbGR8mKy mWzdnjA+konSLP9x3jgEJZAYUt2gsdDt26gL1PVlHoMryOp0YZnGD/E3LA0oXCCEDp80 SnORJ10B6QF8wrRXCgmKVIM4lG1F+47B2oWrih4ILQEwwubmWmlsmr2IH5pHxv5Thw0I umGW7gguD7zfQc+G6gzAUu/JX4klkFGM+be59dF3fNwBW2JCpKUkdnvmh4+0AcQXKAGO jnLE2ecXecxALsHRg2dxmMU3ywNuy18/3xevxBCm13d2kQ9Rrqy2h2A4OsgkxAFTJuTV V81A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801803; x=1740406603; 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=69vNi3OZA4rlkkM15gA1GocQBCacDIa/QmSzA91F8v0=; b=gmYEG8CVT8/+WPgWoK3VfimJCIRQnB1Mqpoe48H18efHeitO341iKUO/sLQBEaQSMw ibEK23i9Xs9YRHH6YE5eVjd+ngyCeRSKrAOGGO8Jixj3mOtVo0OjKAOkENkohgYzHLy8 BR4eUp40KUBZZhXqApMwomLsknUfhM1sdgXP98rPuYhybtkEwvl8JCDdjw6JOvqgu18b hSjVt8qCsBk72L4PbGM3oLlZP3u27NaboV2KAxCJ0vXPzf9swtFH3a2CNJU+OhRXp1X4 SBs33RIsH5rGoqKSCSbcTzyp+k3zZnr1VwLfjCbW/+kvFiCFRE+bB76HAZO26PKQvGJD XCUQ== X-Forwarded-Encrypted: i=1; AJvYcCUMgvTX0P026gAZ7RIZkABxESQYEZxeK9BJXUJF3LKhausS5pBlZV5KYxmBihM4XCaCgEcgVtq4Y3luuR0=@vger.kernel.org X-Gm-Message-State: AOJu0YyODsqEi7LJNmhVUuff2bhSQf9SBQFTznezUI2tQCrlL1H314mu DE+wVdStQjaJb93MhGnuh4F4N/W9+Cy0GASWZvdNjwgrhB9dTxnxPwof+3OqtC7y7lp6oIKUKhW iXzwAaA== X-Gm-Gg: ASbGnctmoypLrT9F6EhxpvQzV5JE29x6w6Zm3O6ST5VVUU7sXyKE4vgiDE7v3Cf4H3m E4ZQtoJcx/PgdIoldSaUaOK0QgUbG8O3lKR54DQYLf4dChEj9V5hHCbpucUWWR/A0w2RnlaiRjA tcICykZM2C5aWtxSEJhEqMBsApK9GtlWK7jFsCkXJcBMAwuvrTi5wfKSwBM1pet0GP8jgvRGZSt lX0irvApizEKDCOQCNOM67NOnyPFH/l+8eY6wplYko8fQzS54pCmKPj7Vrzd/Gie7BMrwzypfvl Gc3vW1IqqPnl X-Google-Smtp-Source: AGHT+IHW+t1AByBvZfuKljqfaxNCxT/6ZGDzP+lPvsrisD+l8/bqLv/XLHwaFORKcAyayNhHDuPrZQ== X-Received: by 2002:a17:903:2f8f:b0:21f:515:d61 with SMTP id d9443c01a7336-22104028a15mr167933135ad.21.1739801803051; Mon, 17 Feb 2025 06:16:43 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:16:42 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:50 +0800 Subject: [PATCH v6 01/15] drm/msm/dpu: check every pipe per capability 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-1-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=4383; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=KapOubmHrnJ45Q6eHl5TCN92cp2NDgoLCMZwQ/tSSxY=; b=Z/jcy7aDeNebmhku/f2ueRJ6iMchZ5gXAUP/St9wMgr5Bfi/LjEPAq4gVpOJ09R2eCum4Fz66 5IzsXBs82M7BJfAIYuUURWURLp8NAMzGrIfczPMt2dTa5lfaWqY/Iwm X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= The capability stored in sblk and pipe_hw_caps is checked only for SSPP of the first pipe in the pair with current implementation. That of the 2nd pipe, r_pipe, is not checked and may violate hardware capability. Move requirement check to dpu_plane_atomic_check_pipe() for the check of every pipe. Fixes: ("dbbf57dfd04e6 drm/msm/dpu: split dpu_plane_atomic_check()") Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 71 ++++++++++++++++-----------= ---- 1 file changed, 36 insertions(+), 35 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 098abc2c0003cde90ce6219c97ee18fa055a92a5..feb90c42fef58f3385625f6d816= 5bfcdabf46d2d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -729,12 +729,40 @@ static int dpu_plane_check_inline_rotation(struct dpu= _plane *pdpu, static int dpu_plane_atomic_check_pipe(struct dpu_plane *pdpu, struct dpu_sw_pipe *pipe, struct dpu_sw_pipe_cfg *pipe_cfg, - const struct msm_format *fmt, - const struct drm_display_mode *mode) + const struct drm_display_mode *mode, + struct drm_plane_state *new_plane_state) { uint32_t min_src_size; struct dpu_kms *kms =3D _dpu_plane_get_kms(&pdpu->base); int ret; + const struct msm_format *fmt; + uint32_t supported_rotations; + const struct dpu_sspp_cfg *pipe_hw_caps; + const struct dpu_sspp_sub_blks *sblk; + + pipe_hw_caps =3D pipe->sspp->cap; + sblk =3D pipe->sspp->cap->sblk; + + /* + * We already have verified scaling against platform limitations. + * Now check if the SSPP supports scaling at all. + */ + if (!sblk->scaler_blk.len && + ((drm_rect_width(&new_plane_state->src) >> 16 !=3D + drm_rect_width(&new_plane_state->dst)) || + (drm_rect_height(&new_plane_state->src) >> 16 !=3D + drm_rect_height(&new_plane_state->dst)))) + return -ERANGE; + + fmt =3D msm_framebuffer_format(new_plane_state->fb); + + supported_rotations =3D DRM_MODE_REFLECT_MASK | DRM_MODE_ROTATE_0; + + if (pipe_hw_caps->features & BIT(DPU_SSPP_INLINE_ROTATION)) + supported_rotations |=3D DRM_MODE_ROTATE_90; + + pipe_cfg->rotation =3D drm_rotation_simplify(new_plane_state->rotation, + supported_rotations); =20 min_src_size =3D MSM_FORMAT_IS_YUV(fmt) ? 2 : 1; =20 @@ -923,47 +951,20 @@ static int dpu_plane_atomic_check_sspp(struct drm_pla= ne *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; - const struct msm_format *fmt; struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; - uint32_t supported_rotations; - const struct dpu_sspp_cfg *pipe_hw_caps; - const struct dpu_sspp_sub_blks *sblk; int ret =3D 0; =20 - pipe_hw_caps =3D pipe->sspp->cap; - sblk =3D pipe->sspp->cap->sblk; - - /* - * We already have verified scaling against platform limitations. - * Now check if the SSPP supports scaling at all. - */ - if (!sblk->scaler_blk.len && - ((drm_rect_width(&new_plane_state->src) >> 16 !=3D - drm_rect_width(&new_plane_state->dst)) || - (drm_rect_height(&new_plane_state->src) >> 16 !=3D - drm_rect_height(&new_plane_state->dst)))) - return -ERANGE; - - fmt =3D msm_framebuffer_format(new_plane_state->fb); - - supported_rotations =3D DRM_MODE_REFLECT_MASK | DRM_MODE_ROTATE_0; - - if (pipe_hw_caps->features & BIT(DPU_SSPP_INLINE_ROTATION)) - supported_rotations |=3D DRM_MODE_ROTATE_90; - - pipe_cfg->rotation =3D drm_rotation_simplify(new_plane_state->rotation, - supported_rotations); - r_pipe_cfg->rotation =3D pipe_cfg->rotation; - - ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, fmt, - &crtc_state->adjusted_mode); + ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, + &crtc_state->adjusted_mode, + new_plane_state); if (ret) return ret; =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, fmt, - &crtc_state->adjusted_mode); + ret =3D dpu_plane_atomic_check_pipe(pdpu, r_pipe, r_pipe_cfg, + &crtc_state->adjusted_mode, + new_plane_state); if (ret) return ret; } --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 4221121D58D for ; Mon, 17 Feb 2025 14:16:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801812; cv=none; b=MBgQ2lbC768KTbdGYLX2dav+XCvOAdqElSLmCAfUliOu77UWjhS8Hj0O3iFZdxA+eZ3E5S+bkmnzntT9l1oAiX6L3uecQg9RukD3ui6Vmwj6+irYjlxR1Ixb+fYSf+f6bWchL+GxhpIu6ZnZSzOTNuG0Awx+sIZkBjkOfS32MBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801812; c=relaxed/simple; bh=WBM/p7IonF+GUTkphvNqY034IFJPvXxbXKnpEjol144=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f4emlts3BxzV0CufwoMSMXXdh+4rDnMCj9QvZR9ICQk18f9OU68Ag19+gxfIn/+fTTkNTC0fB1KQPt4vfGcIi/ncwmfJBf3xcxEY3BegqmqR+TRATTAfzokbqHNIkjZgXnqHoSkW9nrzjZfTzUSIE6lWQdDfZMo3yGu23/FTm6Q= 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=Onux4puq; arc=none smtp.client-ip=209.85.216.45 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="Onux4puq" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-2fbfe16cc39so8262967a91.3 for ; Mon, 17 Feb 2025 06:16:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801810; x=1740406610; 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=rajdpuATf4cHrwTeJ8T+ZsyTPgo2DiGPUjAIn6iu1Wg=; b=Onux4puqw8f/4y3SkXQXq2EFJKWEKQRhEqXAJdrd6xiawgoMZqqVkv7cLqXskup/JF U/tqgVTMWaWtFHDQ5WJ/+RllT7D6FKlNiXyeWsIbLsRk+RgoKRg+vneOzwOe9zLK2Uog /egq5iAW5qYr5svaixPGpvzZniBS6/MTKqeWTZgB75rdQEXW+HdgGvQTZEegUXAIMHxi bfjgRGxpvrWm1v6V7G52eJoEv4W0t24FDq6V35TXVvptYXqnZTmfBJC1F6FicL1nHFqH RfanSmeaairDPlkcC8VlcocY2I8v+teJb7uTm5paGa1lO4Fa+GICbjYf7FL4bIvXiJOy Ri7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801810; x=1740406610; 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=rajdpuATf4cHrwTeJ8T+ZsyTPgo2DiGPUjAIn6iu1Wg=; b=KkgFdUnlXuI9iCCEKxB6jfPR0JGpv5m68Z7ZCRxYfN0tqDSSj2sIm8E8aI/wN/q84J XivAcPBd0/feVKFGyynCuh8aeiF6pzTS/OY1JkyEEWAVbs/tFxR98zltfOGL7729U4cY 5SVaPhyn1JmfOc3fElkaF+hABm0dFlr7GYbg03s6IghN+XwCW5EqYGS7aYZL3pIslks5 lqYzjWnk2UQ16K27uwJu/VibEkybvjx1tbtb2A1kOByvjRyGOgeetG8xF8LxSdCwkaT8 q7bnOeSqkViT6ygR9wA/bQJKUScJS/saqFmPjX5coExMuVK+XUeUOLcMYp/6YcdkH9pe ZweA== X-Forwarded-Encrypted: i=1; AJvYcCVE14/laOar68KqcqYcQYuUmIqWqI0p6z7d0cOpzhOHoOlB3gygQwefC5XntZVQho220AAx8fzjfObWpPc=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3aK/AAV/TrUOuVP1puMonlYsnhGBPYYmYGohP5WBERlmYhm+l NGlP75j9KO8//2Q3CUR9IGcE3GjjT6CCMcysrQAA++K6JbObS+drC56F3EKmUkt5ThBqdRnhj3y YGjueSQ== X-Gm-Gg: ASbGncsfVf/UPHzJ198YOqimgCVdNqzQsLGkDrOtso76+obG0Wbz+3HbihKD3EMbFhT W/tjWmuxoRgePUK+A1dcdfDSgrtbklL7dRKEebnXzYZ+ZQgXtyufHA6ufAjZ20r6xFpfTXStW4e acKRmH3L3ejxDeKjNBvRTULp/gD8PpA5mE/FWJCgzgXoC3SM8ZdKTYeMbAzH/zBBPKHhyNbnQNc FgKrqFzeZYrU5M/anHkVh0FvHUEuvFEwBiTiA73iWYVvdepyTy/LrXObjjjGmXyh0s5l6pYzmNn 3JJ2Cbh8ycUi X-Google-Smtp-Source: AGHT+IGU0FyPjwmxRoPaGDsf+N+koULFGoADf0/rSjEWbWDRJqGiRCi3XPxpi3patdoZmzDMZvgdqw== X-Received: by 2002:a17:90b:380f:b0:2fa:ba3:5451 with SMTP id 98e67ed59e1d1-2fc4115089fmr14918129a91.35.1739801810264; Mon, 17 Feb 2025 06:16:50 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.16.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:16:49 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:51 +0800 Subject: [PATCH v6 02/15] drm/msm/dpu: Do not fix number of DSC 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-2-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=1985; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=WBM/p7IonF+GUTkphvNqY034IFJPvXxbXKnpEjol144=; b=mcXuCakUN4KMWaFmxuYcUpbFO6rXbt/WIvqiY/25a8klCfKl7bIvE0DvHvDTCKwU+id3pVIq6 kD9VT2lfBCkDMeibmtyY2fQ1YAGkFlOEZhqnwXA6HzuKx21ogcHiIyF X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently, if DSC is enabled, only 2 DSC engines are supported so far. More usage cases will be added, such as 4 DSC in 4:4:2 topology. So get the real number of DSCs to decide whether DSC merging is needed. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 6 ++++-- 1 file changed, 4 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 eaac172141ede7bb4002ce1d0268b2f436fffc6c..c734d2c5790d2a8f5f20c4b5aa1= e316062d9b34d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -164,6 +164,7 @@ enum dpu_enc_rc_states { * clks and resources after IDLE_TIMEOUT time. * @topology: topology of the display * @idle_timeout: idle timeout duration in milliseconds + * @num_dscs: Number of DSCs in use * @wide_bus_en: wide bus is enabled on this interface * @dsc: drm_dsc_config pointer, for DSC-enabled encoders */ @@ -204,6 +205,7 @@ struct dpu_encoder_virt { struct msm_display_topology topology; =20 u32 idle_timeout; + u32 num_dscs; =20 bool wide_bus_en; =20 @@ -622,9 +624,8 @@ bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_= enc) if (dpu_enc->phys_encs[i]) intf_count++; =20 - /* See dpu_encoder_get_topology, we only support 2:2:1 topology */ if (dpu_enc->dsc) - num_dsc =3D 2; + num_dsc =3D dpu_enc->num_dscs; =20 return (num_dsc > 0) && (num_dsc > intf_count); } @@ -1261,6 +1262,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct d= rm_encoder *drm_enc, dsc_mask |=3D BIT(dpu_enc->hw_dsc[i]->idx - DSC_0); } =20 + dpu_enc->num_dscs =3D num_dsc; dpu_enc->dsc_mask =3D dsc_mask; =20 if ((dpu_enc->disp_info.intf_type =3D=3D INTF_WB && conn_state->writeback= _job) || --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75E6221D587 for ; Mon, 17 Feb 2025 14:16:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801819; cv=none; b=ZNjlxigNNg7a9EiTsnRaTVANaln26PNoEOy5xSxX7/nachqTyoNh7NYEEyQ1cyfxolKQJ8n+BaAKJmZbzBHKjHVK6aH5Mes94W2fgi10WRu9hIj0T/WAGW7uqi97PRDr0ZdpzwMx20QAtV3f7a4M2nrj2bDBCV+ptPrI4QIIeTw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801819; c=relaxed/simple; bh=OxydkO597ugBLy/eoQLhIhZIi3C8VBz20HvkW34FMds=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PLuPWDGbTwvqv81201mGL5+Bwq3YsszHpP21XMA9KuTrCVHM3prVF3ZOhK2aPCl+hDMoniPKy2P18aD4vRIrNpfhSZ6oKUm4qmHPmSoiNdbktcO2Gw+Wb1l6KXibO6bNUMyyQPZ7BTkCoF+hB78fz/v577wQzdutUErFuC29WaM= 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=FW1G4Z7k; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="FW1G4Z7k" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-221057b6ac4so30363845ad.2 for ; Mon, 17 Feb 2025 06:16:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801816; x=1740406616; 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=ieoJPWE+tVOeqiIoh5GOinrnACdNHE09O5GdzPDKAj8=; b=FW1G4Z7kk6FQsr89Sxj0uA03GaSfETFRdMUtDLGXH2UMyY1vPVS+iJaGK0kRdbNPJ7 qxxtAZ8z7yXv2vNfrH2Ia1TmspFJK3rEcPY0MuRvO5ukXP/GDLw0+vHHVnxaIiHB+seh ImrHA/N1ybX8tHpYjNyIfkf3TKeLI3ZrD1q10ZCWIgsS5yNdZ3znbqtkTSfFTKeXLv6U A4JSVqTyK7G5pl8obMw3YhYKCY8cYYOm8GYs7RNl03rQfSszmhsrNwPy9Fna//LWUFUF KI9a0FHH73zg76iCg8qqW9/M5BXNeTTppcAFz/8wBEV+24kBfUzjXkLDFn4MUfxTqa73 07Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801816; x=1740406616; 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=ieoJPWE+tVOeqiIoh5GOinrnACdNHE09O5GdzPDKAj8=; b=qDldWm5Xk2y8d+N4NsOGnT5W8fBFL73lB9lYQLTy+Pzoe+gRubVPOQl/aii2figF0k hcbzK9HUqrbqhnied8ybkuQhZ1EoaFpwLRpB+wqPniCocVXwv15Kma98NUIw/5od0SRT rHdFBdjHyZgMWsQxWZFwO1GBgLAuaGuqjouP0TctnvjUHIpDJ9qWBxH8qN3Fe4oMNdUh aDWenLgXSVEaR0l3B+hQGfCXPqHCfdjE3oo5zQRCi6vmPTCjPzKcARuQhR4FZx/OP0ZQ Ddps2BMdaY+D9HALmaHhwQ0XYmlTKlXppH8LGA9XMLlSoCi0N09rV1SGZTtH4QZmkT8V 0WCQ== X-Forwarded-Encrypted: i=1; AJvYcCX3Y3mpqpdiaweZORpfP+xQMAKe5QKJJ9xvabQ5DOcCkI58zG2wX/6aQyYzE5RPjYZ4Bs4I9vWZP2J4aVg=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0GlT9GDBlsvWxa0tlw1xGLdLBIMN5vaXOZqad8myHDjso6lm6 D7UML9vKmQZ9zTditnJB4eYa1CbrASzwjBfScn0OP1wF2WwsVohzalITYK3WfwalLVHFLc3jbT4 Bfd+nzg== X-Gm-Gg: ASbGncto346BSOEKi71ET0xcCKFZT1pqe/IIuhpqTLMlaX2YSRdsKeJJGXpi8SQ14G0 QI/xhJuoGqvteN9NjpEIotk0jXaujb3SoNe1QWA8W7wZlxUzFOtq/MqNohbcyLKc2CphZn3AzM+ A3WQF2+g05MTOZcBXaL+XjKCmnm8bjxwqKXHk6rU7j2EuOXMWYBtrr75WEo+Yax2DS4CapuVU8c +k6zsLHg9Cd79nYmbptmPnkbnYnm755W8+fD+FyPOJMhhh47rsqMrIRZGLHyowAPdpndp/amCVz MzhNwwZ9edLc X-Google-Smtp-Source: AGHT+IEzS4KfqXP8Xt5GHMhRafBYz+RgwbGhXZbMd3m4c1JZ4WuTSy64hH8ktZu0531hH/zPEWjhCA== X-Received: by 2002:a17:902:f802:b0:221:1c2:2012 with SMTP id d9443c01a7336-221040d8543mr122081405ad.49.1739801816584; Mon, 17 Feb 2025 06:16:56 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.16.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:16:56 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:52 +0800 Subject: [PATCH v6 03/15] drm/msm/dpu: configure DSC per number in use 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-3-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=2046; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=OxydkO597ugBLy/eoQLhIhZIi3C8VBz20HvkW34FMds=; b=lhqZ5hF5B/LxqlpWvqkkYt16wWBab7XyL2JKhANDd8P3fXIeDeCBYNDuOWhE5D35Gixz8qzDh NTv0ao21qDWBwzxlK6RGvis1Oqq9uwC7CB3quezik71QV5Xd72QHSdn X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Currently if DSC support is requested, the driver only supports using 2 DSC blocks. We need 4 DSC in quad-pipe topology in future. So Only configure DSC engines in use, instead of the maximum number of DSC engines. Signed-off-by: Jun Nie Reviewed-by: Dmitry Baryshkov Reviewed-by: Jessica Zhang --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index c734d2c5790d2a8f5f20c4b5aa1e316062d9b34d..5b98ae96bf5d46872a7af801d41= 57820d72af01f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -2027,11 +2027,11 @@ static void dpu_encoder_dsc_pipe_cfg(struct dpu_hw_= ctl *ctl, static void dpu_encoder_prep_dsc(struct dpu_encoder_virt *dpu_enc, struct drm_dsc_config *dsc) { - /* coding only for 2LM, 2enc, 1 dsc config */ struct dpu_encoder_phys *enc_master =3D dpu_enc->cur_master; struct dpu_hw_ctl *ctl =3D enc_master->hw_ctl; struct dpu_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC]; struct dpu_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC]; + int num_dsc =3D dpu_enc->num_dscs; int this_frame_slices; int intf_ip_w, enc_ip_w; int dsc_common_mode; @@ -2039,7 +2039,7 @@ static void dpu_encoder_prep_dsc(struct dpu_encoder_v= irt *dpu_enc, u32 initial_lines; int i; =20 - for (i =3D 0; i < MAX_CHANNELS_PER_ENC; i++) { + for (i =3D 0; i < num_dsc; i++) { hw_pp[i] =3D dpu_enc->hw_pp[i]; hw_dsc[i] =3D dpu_enc->hw_dsc[i]; =20 @@ -2068,7 +2068,7 @@ static void dpu_encoder_prep_dsc(struct dpu_encoder_v= irt *dpu_enc, enc_ip_w =3D intf_ip_w / 2; initial_lines =3D dpu_encoder_dsc_initial_line_calc(dsc, enc_ip_w); =20 - for (i =3D 0; i < MAX_CHANNELS_PER_ENC; i++) + for (i =3D 0; i < num_dsc; i++) dpu_encoder_dsc_pipe_cfg(ctl, hw_dsc[i], hw_pp[i], dsc, dsc_common_mode, initial_lines); } --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 32C0221E082 for ; Mon, 17 Feb 2025 14:17:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801825; cv=none; b=eNMC9awSGlmfT9xl2dn9QsxHtWATKQrk/xQYEg1BxltYtVGHKkocmOcp/KGRs7hf1e3u6GqdTOQRbRUK555H65ATc3qPuYvCC13c1nikj9cChPa57u7yAMmy4+DmKF/iOc6um19uoqkX5zWFy+fdShSGdVakzY/zUmjGVYLFkNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801825; c=relaxed/simple; bh=aJOtxV7p2hzo+78dTS+V6QD+6d00i3eKRY4QZgmhCkQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nG7JD1tvzjz2rt+xhPmlwYoFBbIm4L5roh9p8lRx/opXMh16m06M9XtM4C9F0aK1NUNgwj+9VhuHgfN+bmALAbiWmTh/0hGBcXJakAYimJbGJ9R6kHY0BdAM7xB8c7ldUWt8NTbt8iTyopaLNC0jUAatTpEiz2VkSrsxsJv8JuM= 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=aPEtYzP5; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="aPEtYzP5" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-220d28c215eso61695605ad.1 for ; Mon, 17 Feb 2025 06:17:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801823; x=1740406623; 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=AgZb9vFHqGbbrUhX0AClGPorEmPUShOdtzPqIURbFyI=; b=aPEtYzP5wfgvBIn6dTCKQmjiQjnnoyiU7idL7MZ4ch+0g4xp0cjxMivRwjtHSeO7Lj rNU6eqKRxTBC9jIDk2H1ysJr6+oYToy1+ZqrRnrtlivqOBCUlkqg5b1Dbc3woDs9Wucr wynhO9HZTPmfj4wfJSg9VqePbU58w94WqzRGKr5Yixs84bMad5YJe9ESHdfCOYfY/kK/ sKPdl7gOWadJHWQSuVRqEhrM3DwMF4mPo9qUpg2KhfqQHQnb/L5T9qHo60swJ4iWyrej BVL6rrngDc6Yt2TfXvg93eXF5GwZ3tysTB7RL37F4jzVjgwgKtLwNqo0II5SguXAHmIG P/WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801823; x=1740406623; 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=AgZb9vFHqGbbrUhX0AClGPorEmPUShOdtzPqIURbFyI=; b=sfY64xmvJJrK5UoKGnyMv59b4+6XOV+x+Ga5MWdzPBRrWbnHLzjHBsSieo1hZLenK/ 24g2QgWX0vkeyrc25OCuDcXU/qLooYUmw6ZpkHEDhzpQqg0fnXIeWa1kfvbX2LNobBIL OtVq5cXwu0icv4etsrt+tSBRL8Q6HSus6mINqOdJRsJYpFT8hxYMe/E0bvBeUzQhSfpE 8W24zfw7A2N0PERNsCEsBpdRU4XTGmsswD0C48jPZbA8LR9/6eRtB+/E1cyIy64wTSmA +iK+vebBvVqQAO5VQD+C/GBHowKhQbDZ12ogYTBPwDLrj644dQ7vC45IUnYG6eyfn7xI JMLw== X-Forwarded-Encrypted: i=1; AJvYcCUQ6BmVNC3Y3BNcrCIBSJvqknvsRoMnY3kzx57vORWdKVUT4+kBkSzkPKZiwbwChSeK8k+0lr+jfdWgRis=@vger.kernel.org X-Gm-Message-State: AOJu0YwNFs1MLvugmGXD9rzDujIfUtpt7rf2tFIzmolSmvdkLiSyqieF Bp0YZtFXwcqEwaiqXI1Q3QZHH3JS5uO7OCbue9YoQsJhFKtZzC6Gwt7WnkBfOjltQko3O0DLm43 gYkBwxg== X-Gm-Gg: ASbGncu75yIGws9MLokNUm6egEzvO2n89vBm2KW0E2u+dmuxd1rJWIcj6pMYOgIbMR7 7xYNdJjd3x9+OYVHZYBjxhmwAcnA+oikIV2ExMH7K/GDH9sw/gmHsGJNzW7HCjjoTFOhNf8+9wq AvenAJkjX+7QQpGGP+1rzfT95o6BFW4R6STELy+knKIXVroZb05iyiBXrMbHpBcJyj6t0VWevv5 zBghn0e5jEFbXIXjWeoxAB4aqdt2ef/YQwi0yxBdj3tIhfgBJKp+Z3+7xQCnB9CWUffasvjlRb/ c9hZXYX1NJPD X-Google-Smtp-Source: AGHT+IFeltiqYZ01XeVBukpD9aotaPbVJK+H+9lmaQXByPgl7WgVurkIerWDOUdc5+qfs9Bzr9iwVw== X-Received: by 2002:a17:902:d502:b0:21f:3e2d:7d42 with SMTP id d9443c01a7336-221040620a5mr151503565ad.23.1739801823386; Mon, 17 Feb 2025 06:17:03 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.16.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:03 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:53 +0800 Subject: [PATCH v6 04/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-4-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=2259; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=aJOtxV7p2hzo+78dTS+V6QD+6d00i3eKRY4QZgmhCkQ=; b=IDE1Zdpu5jFx+kMQo1OdjkeN0YD3cohBgglvXImn3/+XiN2uPyTRmcdz8y2Y28SIQ/cyuUHqr 5tEYBuNeq+BDREy7yr5nkqDHi2QzYdzRe5eXBuxeMWhgOeSeLWJndDW 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 a67ad58acd99f5c14b9ec34806b83c7a58b71e16..24e085437039e677e0fb4bbd755= a8cb3852300a4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -802,6 +802,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 @@ -862,13 +877,13 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, continue; =20 if (num_blks =3D=3D blks_size) { - DPU_ERROR("More than %d resources assigned to enc %d\n", - blks_size, enc_id); + DPU_ERROR("More than %d %s assigned to enc %d\n", + blks_size, dpu_hw_blk_type_name[type], enc_id); break; } if (!hw_blks[i]) { - DPU_ERROR("Allocated resource %d unavailable to assign to enc %d\n", - type, enc_id); + DPU_ERROR("%s unavailable to assign to enc %d\n", + dpu_hw_blk_type_name[type], enc_id); break; } blks[num_blks++] =3D hw_blks[i]; --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EEE3322259D for ; Mon, 17 Feb 2025 14:17:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801832; cv=none; b=gchB0PThYot7+XsZvZDXA1OfG3gvbGjvUnw/8AzFS205QCj+f0obLmcr4c89oheOKLuFWGyFyS+SmEtiizTmoGchR0BCR4p9lSLbXTUV8utJrhYlxVGtHgo1Cfy0XzDGR/yNKYCBS8w0R/g0LwPrSF0KOVcF70nMJKT7FY/13Uc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801832; c=relaxed/simple; bh=BbqtIHW7JPzSyRGmtZOcXUwUkV9c75Bm5PqICVDkcB0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LFryd0qnoHNroDNFlp3ws+wGDdJmawcuvqE5RS+Fiu75NQ5xw3WbH/Url9mrqOxdIRTHlaWIFenxuTOB94iqucrjf+QFYy3Qv4aVXV5YXCdih1ZVhQSah3rEywXNji6so+Phe4lj4+guAQOP2K/XEZjkAxbAA7fP+uqwzOk7gXU= 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=VcZFJksI; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="VcZFJksI" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-220c8eb195aso91173845ad.0 for ; Mon, 17 Feb 2025 06:17:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801830; x=1740406630; 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=Qq+zAHNdvdZOSJ//3Q5rS+vuxV2fvoAwakzSqW6Ri/w=; b=VcZFJksIRg0Oj6nsQTPFHCvx6M5wYuXpaIOBNHqNMirihpgkXxkcRw0T25ksClGws9 EgDNTag4j83ZPmA0xYSJcpj/bhD5fjNuWOnPq8RgzeZEQgKjax37lGMN6d1VJbsDh/aU vkVQWVkqSd9pybnDR0q96kdGXI96TKfHx5uwZVvRFdYiH677tPP6o5I17YOzLqLw+wge EIxPMSf4pKfQqcP5sFwXqUVfqNSzm5TJ4qgCmk71I6urA6anpTEFVALPNRZ5l9cEeBL9 c8ZbQYRf6wy8fFLlOISLEpcksZI+31ztmHyaCRkAyGXIqO9WnCVVQVNckaLnefM+xnmF fa9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801830; x=1740406630; 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=Qq+zAHNdvdZOSJ//3Q5rS+vuxV2fvoAwakzSqW6Ri/w=; b=wQwahAMK66ZGrLAyas5q2RKBYIzDBLE7FWZOY6zlIY8EApA1505ywCPotoKxGJzd7T ruZuVNz/3uudJyw2cYWoiuGCTJUd0SCp1PKQXSdaoSFR9DyJbg0wVpSwi+2cnK5TRE+U M5ZW9LdkD3S0EfQvTHc/p3KSMdM28HHPpki0Z1X6dJC1zJGcjALsLWOhBO6izk7JVvyB bLAAjWhSVDQw/S1ChJOmVvvntMv3RMuTb1ENmJy1hZtZknJvv2MdC0NVsfmqGhoFqYtd gpJz+q/CBFIV8/zJHet3D9Ilamyur0/v/QH4ZjZWXWrBmF1i8aLOAnFbDOxjmX35AIdH WUSw== X-Forwarded-Encrypted: i=1; AJvYcCUbZT7QHRJbgAS3Soswq+c34kjvyC0ivEWf1/IKh1mbj2M/hIyk/Dp2XskpgXgUh4CqEjzpISoxHX8KtdM=@vger.kernel.org X-Gm-Message-State: AOJu0YxyIs5DE564c+PjY/lQjWf+IbonunS6RssBc47sa9m5aS7Gptmc BSIzJJTD/ShcUW9xlnJbNXlZEUBpI7aDB5Wt0AjP3QxqhKqGB0dcAHdl1y9kGHDkl4QJZjeL49K qFatUeQ== X-Gm-Gg: ASbGncvQ9BiNMDI7nc+c0NHM85i5gp730iDVOXrQ+rf5AevzOoEpdWGmvH6EsAWcXtk D0Zj0yIu11/E+64JaUW/558HB6zgAPk2uV1vtzTgn2Wd4BsyBhR4cnppjD/a8bFaEWeESVNQdGi wwqSArwZlZR97oRyB+Zoa9yQCtigAuP5m8k55W6eM4lIg4Hf8q0ignI2Ii1mdwT8Zu3RkMK0G9X vELRvy1SMkL1UdrhF/LqvDBH2FDOZWG5tJBFgu0pJGE+8Qao/SdXUOaBZ7Dr4ibzaHba/yjvkGu dn9dZfAKvCfv X-Google-Smtp-Source: AGHT+IE9VGK9EgU1CxOnB42kWoFCngkyiKxATWGlwXIJ1zEtEGlL0r8wzHMxqCOdBQTbkw6fFe4mgA== X-Received: by 2002:a17:903:28c:b0:220:f030:376b with SMTP id d9443c01a7336-22104057e3amr166616685ad.21.1739801830048; Mon, 17 Feb 2025 06:17:10 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:09 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:54 +0800 Subject: [PATCH v6 05/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-5-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=1985; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=BbqtIHW7JPzSyRGmtZOcXUwUkV9c75Bm5PqICVDkcB0=; b=ndip+BiznQsCLk3gFRiHk2aOU+/6Y0wWrn1S88SeHOm2qcGPMaxjsFB0wWvmm9AhF3VwCkouo jobG/vDz4dhD4siduIn5Zlp9SCqd/s42zjGoVLwDm7AnDuDb+ikuCak 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 7191b1a6d41b3a96f956d199398f12b2923e8c82..41c9d3e3e3c7c0c74ac9007a1ea= 6dcdde0b05f97 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -369,11 +369,10 @@ static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc= _mixer *mixer, static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc) { struct dpu_crtc_state *crtc_state; - int lm_idx, lm_horiz_position; + int lm_idx; =20 crtc_state =3D to_dpu_crtc_state(crtc->state); =20 - lm_horiz_position =3D 0; for (lm_idx =3D 0; lm_idx < crtc_state->num_mixers; lm_idx++) { const struct drm_rect *lm_roi =3D &crtc_state->lm_bounds[lm_idx]; struct dpu_hw_mixer *hw_lm =3D crtc_state->mixers[lm_idx].hw_lm; @@ -384,7 +383,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_= crtc *crtc) =20 cfg.out_width =3D drm_rect_width(lm_roi); cfg.out_height =3D drm_rect_height(lm_roi); - cfg.right_mixer =3D lm_horiz_position++; + cfg.right_mixer =3D lm_idx & 0x1; cfg.flags =3D 0; hw_lm->ops.setup_mixer_out(hw_lm, &cfg); } --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D91121D5BC for ; Mon, 17 Feb 2025 14:17:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801838; cv=none; b=bBvUG6QJiqrWu2rPS5Kn/8qMIQ+j7Q9vKuh5N+AR4+RufPcQE9lgUKDtr8St+MqT85TbVLntRHC19NYkyg926a8dHAAsd6wc1S+fgxENQMjl64PMkhJCZ1uzxI20LXoWWCUwYu1s9KBIoDAORvZgtR+M/QVJeRC6lqONvJkqEi4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801838; c=relaxed/simple; bh=94sGM0uG9AA2R84ut2aXyN09vsNy3Mf9Tf086GLox/k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SnEg8JLH9QN7X7FdL9qoxb9j+CHGRK3nvi8jgXTRYDFNb306sSIS/uScLOaPEyqcVKaZ3ZF2N1Qi09QXXpqpvUxk6cI633EylBkka0QRgp0Rwor3SKo9sIlNXA59qFyf68GSTxDtoHIu4dWzjW830b+63X+j2s7TE6oAhzVb7wk= 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=VGL4KcQP; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="VGL4KcQP" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-220bff984a0so77671375ad.3 for ; Mon, 17 Feb 2025 06:17:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801836; x=1740406636; 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=IpxTAQa8072dELfu5kZ4WUb4EfPVG9CirHn3aioqsaY=; b=VGL4KcQPs4oZTZFyWu+DZFgbcjC0PYlfGONo5IOsV5p2KSJqORoKlo/fF2t2uZ2SVc 5BIJAbvjCQkytl1/+tJSdnEB+mayekf8cylRujxKret47HpHIrPejBipxDObNbgpScFo uZHiM7RRvmsFN78CpAp8neoQXtOrdz9qrX+StAzJraS6pAOx1GidKJ21wDtyM2/gaSnX U22BbA2CojNZrr6tN6D4xq/wxXhIZZb1w61jAktzQYGXYCWQBP1s48gtXMapkvPv2D4R 4CzO8Mcn/HY6Vup0H9/lUVeuvu1izXkBtRW9NWbSwgZ0/mLNKZgERJvT4GOWoMBOMyEK +9Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801836; x=1740406636; 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=IpxTAQa8072dELfu5kZ4WUb4EfPVG9CirHn3aioqsaY=; b=TaU/cCbYQ9uvs9hCeA6VqxXtC3ISUxc3k7ml548CKfr6WbpJ4+G7UJ6VkwAzmNlSKM nfr42zHaSnhGLLG8xJeeN+zfRxSyHn44hLHSz88r3q0k51/3lf0N1ZAfCaMiHLAUJO6Q z+71ZGoDxXgeT/RqQcBZkx/Q0EM68nwe3c0NBlknuWioxg5Sl/AHvj593X+WN7UIfJAo 1IOZU3t8VdDznILOYWnrz9fwbGqZU1TyfFvYMkDi9ieav9v/Xhsvdbi9YOrG0o6dzCZs t9tx6w3ewfKacJwzJf88FfEYcp034oUUucZSEKtE9eNKUmnr94yahYwAgjRgniH3RASw 2bmA== X-Forwarded-Encrypted: i=1; AJvYcCVRqVrh5BWAMwgBsvrqVWBBDMt9Szr7igRQ23vx56bF8N1Hz6ONsqXcSBvUGX9ZPJ40STi3wBpKW7Tz6jA=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7m8xlgjGdzSzGYHL/aVQ8JhE3FfTXNp7ghv0TtH2xHVHp25b0 SUjp5AX7ZBLc9dYwKnJ1AjYqQGTnUk1tSW1dmWlWeQSFfkmad813ZQH/SKt6PM237Ild+UVLKuy 6rnN1Gw== X-Gm-Gg: ASbGncvjRY0AH4NMH7Kz2Et+XMn/MbxceQihnet/S3/z8zxC4TzxSRr/FShP/F9cLol awyx3/UOcN4Gt6VZiEYMC6FStd43cSu1F8iwCIEHWZso36YVTbuvKfAaniP0ywSzhSPm6NBXhwf 8Ewr3aXT9fcwdOJBDHFmr3naYTyFvwnt8njZh5rqtxJGsSW22hyHCmkp+z54UBo75ogumS9olMf +8aw8dbFDoSmHSDQP2VGi84axwV4OiSnjud20kqBxv5+3GI4dCXYUIcs/LETMFwpzhNwhagEOcc miWh98uznkJZ X-Google-Smtp-Source: AGHT+IFZHeIA0CD4UYx9Z3ngew6444gPSr2M1ZAt7fuz/lLqxs6zXEfEO8224qriYfC42F0X0mlf2A== X-Received: by 2002:a17:903:41c8:b0:220:c86d:d7eb with SMTP id d9443c01a7336-221040a9a24mr171158235ad.36.1739801836664; Mon, 17 Feb 2025 06:17:16 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:16 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:55 +0800 Subject: [PATCH v6 06/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-6-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=1305; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=94sGM0uG9AA2R84ut2aXyN09vsNy3Mf9Tf086GLox/k=; b=sBcqZRv0ogKjajSPG9ugvgn2jWTjkmdxAHujjheTZRukMN9BXeN5vr1uB92ILnxrl+DGsaYQe zZd+h+j/wt+B5YZPhX5R72j8qaa2kWdGJpXRN6qzh7cAXO+14YMKzTs 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 24e085437039e677e0fb4bbd755a8cb3852300a4..3b3660d0b166d9b0e947b2c918e= 37adaae8b76d2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -321,7 +321,11 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, if (!rm->mixer_blks[i]) continue; =20 - lm_count =3D 0; + /* + * Reset lm_count to an even index. This will drop the previous + * primary mixer if failed to find its peer. + */ + lm_count &=3D ~1; lm_idx[lm_count] =3D i; =20 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 E9E5921D58D for ; Mon, 17 Feb 2025 14:17:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801847; cv=none; b=Mb7TleQ15NnZuQcYAETXT3rU4ITGfXKYuFrIAuz1phNOgTfPgrD+k9dXkYNbnhb9xwx3nqX0tEFz7/Eh+mefcY4tWI1uSXBJpBw9qYLSEP/rUy/hYJfEyRZkYwcezmOTdc+mnolPnk6YcIy7/Iy+Q+PSCRcLfOeh1+Kpbako3i4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801847; c=relaxed/simple; bh=VqS8eUuu91P4iupZy0sfbmK7Pg3Jqo72UO1uLeMcZNE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LMsIP2sp3Pb9PxPLIdZSVaz1PNdGfFekBqlN62hpkiS9KXajFfnBPrkClwoOlF2wuvsu5M7MRFbLOMgmDLkldnD3HdKs7oCY6XR8WMNBJ2XRF0Qs682Yhw3Es6oMtrSiODYFT+uLD9y5Qdj2woO6nZluQMPe65qs74EM3gxQBjA= 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=JkwZqsTq; arc=none smtp.client-ip=209.85.216.49 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="JkwZqsTq" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2f83a8afcbbso6746912a91.1 for ; Mon, 17 Feb 2025 06:17:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801844; x=1740406644; 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=kURTqmnQcofX8d9pdmWXn2U45aLWVtrK9Ensdy9nX2Y=; b=JkwZqsTqfJVbWGbP8YGHYB+rSxE9jrwfcdlmn50ozuBgmx0GS5XsZBoRbXex15Cnux twUs/Yt0qRWA8fO2sSODt9+PyRepFQ7oJ9ORhPk8rlToAl02M72KApZZnSrCwfTBeM+N PRw6k9xt0tpVFKVyfaydsWvw6rEWvjmfTEud2IFXdh+5g20FYUxfefiY3XiXwptmZDkC 4yv8i712DASmXfVH1NrcPFKC4NXtXPteLod3mgjuk6nwAvoCZwnaYCYAnYBfCwNAtZPS KbLmOUWAUIGgYK15B01cq1KoEklAwE9QxqN/pnucpBv7DlOIGs9dFmrkYnlIeTDoXYUj 2C4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801844; x=1740406644; 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=kURTqmnQcofX8d9pdmWXn2U45aLWVtrK9Ensdy9nX2Y=; b=CGOIjho5k9YMBLs+ktP7Uons14qGDFR2OzRNTRQHiXFSRq0cAiWz7mFSZkF0FHnO/Q tpwaCoEQmUsrp/CKGiqptnqsYXO2QgB/XSYy9j9jVXQES4pDJyl3BmT7qbWuysRVe/nk RxFjuCNb7IcXydomWV8ilZLx7PoNv69lztgEGgv9p1HSVQJrul/6xypqyv0SPtyLvu16 oFAp2PkO+qnsLoyn8UZOpvSJdqKEVGrGkZux9mhTGRffmItxYHKAAscZvvpdSz/C6QAM h1GU5nC3HAAIaYNykC8N98GbsZZ1oh/Q2gDIECDfUWRRzSFqQ2y78yo6+4UakZgKCrGQ RgQw== X-Forwarded-Encrypted: i=1; AJvYcCXgNgISBny/xIiR1jTLotf98iN2jlzzLbVRVuokPpo+oM3e//D52ZuJu0kc6DYtP7OV/MMShP+CARMi/ZI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/chTrPTSHlt0ccIwxgfurOXntS3x9E74U5OYwFw2fnWJ1pmVg XS7REdEgBM+k5hYqJlVX7kH2wHbpDr5SDkWUo6oX2+oIWj7OvKN/DFMWqwZ2XiFko8rO8dneqjr WICF1sg== X-Gm-Gg: ASbGncsAlDplc3xsQq5enGz3R2PqRFod++uu1K/I7GfjJoWWAFyAKRcsN3B1UcS5E9B e0GT3oLixLpPaL0d/jJR9mTJXvUYPoimEzZMAvYxftdFnoniO2EYhREu87cx9kTX+nuMkQTkui5 SCMiSdP0UifH/AoAjY8psZTAua957nHSdnNB0v06vh3Twpvw8ikTS/HvR2jF/EMpMFSr5OI+cQ3 j21OH0T4gPSY/GOoVNjqOdtzIe/zet9UGtTSEx5e/HThDHMpk0ClEQ2Ana6Qh4vJyjJgdlwtufm VA0jftRinj0P X-Google-Smtp-Source: AGHT+IF8NLNtWT6hUuJy/OvdrS9YbxjPXY6kFNIuxKzIPH0FYYBUfVdWWrcKVd7n3vSqsTPXtjkptA== X-Received: by 2002:a17:90b:3904:b0:2fa:30e9:2051 with SMTP id 98e67ed59e1d1-2fc0f9555c0mr27346899a91.5.1739801843842; Mon, 17 Feb 2025 06:17:23 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:23 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:56 +0800 Subject: [PATCH v6 07/15] drm/msm/dpu: switch RM to use crtc_id rather than enc_id for 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-7-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=27411; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=VqS8eUuu91P4iupZy0sfbmK7Pg3Jqo72UO1uLeMcZNE=; b=Ebo4yAGPvGGE1+Mnz1ZNJlinMkRx05xjWkQIGXlkP+npmTUt+O4G0wnaxoqlSswP9rdxrshud LG2uvWhk2z1CBL0YpH2Rx7dBbvdRK2bQqKpLbMyhYDaZlKcLlVnvTbL X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= Up to now the driver has been using encoder to allocate hardware resources. Switch it to use CRTC id so that mixer number can be known in dpu_plane_virtual_assign_resources() via CRTC id for sspp alloation. Because the mixer allocation is done in drm_atomic_helper_check_modeset() as part of CRTC operation. While the sspp assignment is in drm_atomic_helper_check_planes() call tree. So CRTC is more central than encoder. Siwtching the id achieves above goal. Co-developed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 20 +-- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 12 +- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 194 ++++++++++++++----------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 32 ++++- 4 files changed, 137 insertions(+), 121 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 5b98ae96bf5d46872a7af801d4157820d72af01f..018a1a49ca7d152fddcce7ffa1a= 0a5d54eb615af 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -716,11 +716,11 @@ static void dpu_encoder_assign_crtc_resources(struct = dpu_kms *dpu_kms, memset(cstate->mixers, 0, sizeof(cstate->mixers)); =20 num_ctl =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_CTL, hw_ctl, ARRAY_SIZE(hw_ctl)); + crtc_state->crtc, DPU_HW_BLK_CTL, hw_ctl, ARRAY_SIZE(hw_ctl)); num_lm =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_LM, hw_lm, ARRAY_SIZE(hw_lm)); + crtc_state->crtc, DPU_HW_BLK_LM, hw_lm, ARRAY_SIZE(hw_lm)); num_dspp =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_DSPP, hw_dspp, + crtc_state->crtc, DPU_HW_BLK_DSPP, hw_dspp, ARRAY_SIZE(hw_dspp)); =20 for (i =3D 0; i < num_lm; i++) { @@ -797,11 +797,11 @@ static int dpu_encoder_virt_atomic_check( * Dont allocate when active is false. */ if (drm_atomic_crtc_needs_modeset(crtc_state)) { - dpu_rm_release(global_state, drm_enc); + dpu_rm_release(global_state, crtc_state->crtc); =20 if (!crtc_state->active_changed || crtc_state->enable) ret =3D dpu_rm_reserve(&dpu_kms->rm, global_state, - drm_enc, crtc_state, &topology); + crtc_state->crtc, &topology); if (!ret) dpu_encoder_assign_crtc_resources(dpu_kms, drm_enc, global_state, crtc_state); @@ -1245,17 +1245,17 @@ static void dpu_encoder_virt_atomic_mode_set(struct= drm_encoder *drm_enc, =20 /* Query resource that have been reserved in atomic check step. */ num_pp =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_PINGPONG, hw_pp, + drm_enc->crtc, DPU_HW_BLK_PINGPONG, hw_pp, ARRAY_SIZE(hw_pp)); num_ctl =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_CTL, hw_ctl, ARRAY_SIZE(hw_ctl)); + drm_enc->crtc, DPU_HW_BLK_CTL, hw_ctl, ARRAY_SIZE(hw_ctl)); =20 for (i =3D 0; i < MAX_CHANNELS_PER_ENC; i++) dpu_enc->hw_pp[i] =3D i < num_pp ? to_dpu_hw_pingpong(hw_pp[i]) : NULL; =20 num_dsc =3D dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_DSC, + drm_enc->crtc, DPU_HW_BLK_DSC, hw_dsc, ARRAY_SIZE(hw_dsc)); for (i =3D 0; i < num_dsc; i++) { dpu_enc->hw_dsc[i] =3D to_dpu_hw_dsc(hw_dsc[i]); @@ -1270,7 +1270,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct d= rm_encoder *drm_enc, struct dpu_hw_blk *hw_cdm =3D NULL; =20 dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state, - drm_enc->base.id, DPU_HW_BLK_CDM, + drm_enc->crtc, DPU_HW_BLK_CDM, &hw_cdm, 1); dpu_enc->cur_master->hw_cdm =3D hw_cdm ? to_dpu_hw_cdm(hw_cdm) : NULL; } @@ -2196,7 +2196,7 @@ static void dpu_encoder_helper_reset_mixers(struct dp= u_encoder_phys *phys_enc) global_state =3D dpu_kms_get_existing_global_state(phys_enc->dpu_kms); =20 num_lm =3D dpu_rm_get_assigned_resources(&phys_enc->dpu_kms->rm, global_s= tate, - phys_enc->parent->base.id, DPU_HW_BLK_LM, hw_lm, ARRAY_SIZE(hw_lm)); + phys_enc->parent->crtc, DPU_HW_BLK_LM, hw_lm, ARRAY_SIZE(hw_lm)); =20 for (i =3D 0; i < num_lm; i++) { hw_mixer[i] =3D to_dpu_hw_mixer(hw_lm[i]); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.h index 547cdb2c0c788a031685e397e2c8ef73ca6290d7..54ef6cfa2485a8a3886bd26b7ec= 3692d037dc35e 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h @@ -124,12 +124,12 @@ struct dpu_global_state { =20 struct dpu_rm *rm; =20 - uint32_t pingpong_to_enc_id[PINGPONG_MAX - PINGPONG_0]; - uint32_t mixer_to_enc_id[LM_MAX - LM_0]; - uint32_t ctl_to_enc_id[CTL_MAX - CTL_0]; - uint32_t dspp_to_enc_id[DSPP_MAX - DSPP_0]; - uint32_t dsc_to_enc_id[DSC_MAX - DSC_0]; - uint32_t cdm_to_enc_id; + uint32_t pingpong_to_crtc_id[PINGPONG_MAX - PINGPONG_0]; + uint32_t mixer_to_crtc_id[LM_MAX - LM_0]; + uint32_t ctl_to_crtc_id[CTL_MAX - CTL_0]; + uint32_t dspp_to_crtc_id[DSPP_MAX - DSPP_0]; + uint32_t dsc_to_crtc_id[DSC_MAX - DSC_0]; + uint32_t cdm_to_crtc_id; =20 uint32_t sspp_to_crtc_id[SSPP_MAX - SSPP_NONE]; }; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index 3b3660d0b166d9b0e947b2c918e37adaae8b76d2..7e137ace5b8a6041486307ff94d= c8ed6d17dafd9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -22,9 +22,9 @@ =20 =20 static inline bool reserved_by_other(uint32_t *res_map, int idx, - uint32_t enc_id) + uint32_t crtc_id) { - return res_map[idx] && res_map[idx] !=3D enc_id; + return res_map[idx] && res_map[idx] !=3D crtc_id; } =20 /** @@ -241,7 +241,7 @@ static int _dpu_rm_get_lm_peer(struct dpu_rm *rm, int p= rimary_idx) * pingpong * @rm: dpu resource manager handle * @global_state: resources shared across multiple kms objects - * @enc_id: encoder id requesting for allocation + * @crtc_id: crtc id requesting for allocation * @lm_idx: index of proposed layer mixer in rm->mixer_blks[], function ch= ecks * if lm, and all other hardwired blocks connected to the lm (pp) is * available and appropriate @@ -254,14 +254,14 @@ static int _dpu_rm_get_lm_peer(struct dpu_rm *rm, int= primary_idx) */ static bool _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm, struct dpu_global_state *global_state, - uint32_t enc_id, int lm_idx, int *pp_idx, int *dspp_idx, + uint32_t crtc_id, int lm_idx, int *pp_idx, int *dspp_idx, struct msm_display_topology *topology) { const struct dpu_lm_cfg *lm_cfg; int idx; =20 /* Already reserved? */ - if (reserved_by_other(global_state->mixer_to_enc_id, lm_idx, enc_id)) { + if (reserved_by_other(global_state->mixer_to_crtc_id, lm_idx, crtc_id)) { DPU_DEBUG("lm %d already reserved\n", lm_idx + LM_0); return false; } @@ -273,7 +273,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks(str= uct dpu_rm *rm, return false; } =20 - if (reserved_by_other(global_state->pingpong_to_enc_id, idx, enc_id)) { + if (reserved_by_other(global_state->pingpong_to_crtc_id, idx, crtc_id)) { DPU_DEBUG("lm %d pp %d already reserved\n", lm_cfg->id, lm_cfg->pingpong); return false; @@ -289,7 +289,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks(str= uct dpu_rm *rm, return false; } =20 - if (reserved_by_other(global_state->dspp_to_enc_id, idx, enc_id)) { + if (reserved_by_other(global_state->dspp_to_crtc_id, idx, crtc_id)) { DPU_DEBUG("lm %d dspp %d already reserved\n", lm_cfg->id, lm_cfg->dspp); return false; @@ -301,7 +301,7 @@ static bool _dpu_rm_check_lm_and_get_connected_blks(str= uct dpu_rm *rm, =20 static int _dpu_rm_reserve_lms(struct dpu_rm *rm, struct dpu_global_state *global_state, - uint32_t enc_id, + uint32_t crtc_id, struct msm_display_topology *topology) =20 { @@ -329,7 +329,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, lm_idx[lm_count] =3D i; =20 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, - enc_id, i, &pp_idx[lm_count], + crtc_id, i, &pp_idx[lm_count], &dspp_idx[lm_count], topology)) { continue; } @@ -348,7 +348,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, continue; =20 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, - global_state, enc_id, j, + global_state, crtc_id, j, &pp_idx[lm_count], &dspp_idx[lm_count], topology)) { continue; @@ -365,13 +365,16 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, } =20 for (i =3D 0; i < lm_count; i++) { - global_state->mixer_to_enc_id[lm_idx[i]] =3D enc_id; - global_state->pingpong_to_enc_id[pp_idx[i]] =3D enc_id; - global_state->dspp_to_enc_id[dspp_idx[i]] =3D - topology->num_dspp ? enc_id : 0; + global_state->mixer_to_crtc_id[lm_idx[i]] =3D crtc_id; + global_state->pingpong_to_crtc_id[pp_idx[i]] =3D crtc_id; + global_state->dspp_to_crtc_id[dspp_idx[i]] =3D + topology->num_dspp ? crtc_id : 0; =20 - trace_dpu_rm_reserve_lms(lm_idx[i] + LM_0, enc_id, + trace_dpu_rm_reserve_lms(lm_idx[i] + LM_0, crtc_id, pp_idx[i] + PINGPONG_0); + + DPU_DEBUG("reserve lm[%d]:%d, pp_idx[%d]:%d, dspp[%d]:%d for crtc_id %d\= n", + i, lm_idx[i], i, pp_idx[i], i, dspp_idx[i], crtc_id); } =20 return 0; @@ -380,7 +383,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm, static int _dpu_rm_reserve_ctls( struct dpu_rm *rm, struct dpu_global_state *global_state, - uint32_t enc_id, + uint32_t crtc_id, const struct msm_display_topology *top) { int ctl_idx[MAX_BLOCKS]; @@ -404,7 +407,7 @@ static int _dpu_rm_reserve_ctls( =20 if (!rm->ctl_blks[j]) continue; - if (reserved_by_other(global_state->ctl_to_enc_id, j, enc_id)) + if (reserved_by_other(global_state->ctl_to_crtc_id, j, crtc_id)) continue; =20 ctl =3D to_dpu_hw_ctl(rm->ctl_blks[j]); @@ -428,8 +431,8 @@ static int _dpu_rm_reserve_ctls( return -ENAVAIL; =20 for (i =3D 0; i < ARRAY_SIZE(ctl_idx) && i < num_ctls; i++) { - global_state->ctl_to_enc_id[ctl_idx[i]] =3D enc_id; - trace_dpu_rm_reserve_ctls(i + CTL_0, enc_id); + global_state->ctl_to_crtc_id[ctl_idx[i]] =3D crtc_id; + trace_dpu_rm_reserve_ctls(i + CTL_0, crtc_id); } =20 return 0; @@ -437,12 +440,12 @@ static int _dpu_rm_reserve_ctls( =20 static int _dpu_rm_pingpong_next_index(struct dpu_global_state *global_sta= te, int start, - uint32_t enc_id) + uint32_t crtc_id) { int i; =20 for (i =3D start; i < (PINGPONG_MAX - PINGPONG_0); i++) { - if (global_state->pingpong_to_enc_id[i] =3D=3D enc_id) + if (global_state->pingpong_to_crtc_id[i] =3D=3D crtc_id) return i; } =20 @@ -463,7 +466,7 @@ static int _dpu_rm_pingpong_dsc_check(int dsc_idx, int = pp_idx) =20 static int _dpu_rm_dsc_alloc(struct dpu_rm *rm, struct dpu_global_state *global_state, - uint32_t enc_id, + uint32_t crtc_id, const struct msm_display_topology *top) { int num_dsc =3D 0; @@ -476,10 +479,10 @@ static int _dpu_rm_dsc_alloc(struct dpu_rm *rm, if (!rm->dsc_blks[dsc_idx]) continue; =20 - if (reserved_by_other(global_state->dsc_to_enc_id, dsc_idx, enc_id)) + if (reserved_by_other(global_state->dsc_to_crtc_id, dsc_idx, crtc_id)) continue; =20 - pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx, enc_id); + pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx, crtc_id); if (pp_idx < 0) return -ENAVAIL; =20 @@ -487,7 +490,7 @@ static int _dpu_rm_dsc_alloc(struct dpu_rm *rm, if (ret) return -ENAVAIL; =20 - global_state->dsc_to_enc_id[dsc_idx] =3D enc_id; + global_state->dsc_to_crtc_id[dsc_idx] =3D crtc_id; num_dsc++; pp_idx++; } @@ -503,7 +506,7 @@ static int _dpu_rm_dsc_alloc(struct dpu_rm *rm, =20 static int _dpu_rm_dsc_alloc_pair(struct dpu_rm *rm, struct dpu_global_state *global_state, - uint32_t enc_id, + uint32_t crtc_id, const struct msm_display_topology *top) { int num_dsc =3D 0; @@ -518,11 +521,11 @@ static int _dpu_rm_dsc_alloc_pair(struct dpu_rm *rm, continue; =20 /* consective dsc index to be paired */ - if (reserved_by_other(global_state->dsc_to_enc_id, dsc_idx, enc_id) || - reserved_by_other(global_state->dsc_to_enc_id, dsc_idx + 1, enc_id)) + if (reserved_by_other(global_state->dsc_to_crtc_id, dsc_idx, crtc_id) || + reserved_by_other(global_state->dsc_to_crtc_id, dsc_idx + 1, crtc_id= )) continue; =20 - pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx, enc_id); + pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx, crtc_id); if (pp_idx < 0) return -ENAVAIL; =20 @@ -532,7 +535,7 @@ static int _dpu_rm_dsc_alloc_pair(struct dpu_rm *rm, continue; } =20 - pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx + 1, enc_id); + pp_idx =3D _dpu_rm_pingpong_next_index(global_state, pp_idx + 1, crtc_id= ); if (pp_idx < 0) return -ENAVAIL; =20 @@ -542,8 +545,8 @@ static int _dpu_rm_dsc_alloc_pair(struct dpu_rm *rm, continue; } =20 - global_state->dsc_to_enc_id[dsc_idx] =3D enc_id; - global_state->dsc_to_enc_id[dsc_idx + 1] =3D enc_id; + global_state->dsc_to_crtc_id[dsc_idx] =3D crtc_id; + global_state->dsc_to_crtc_id[dsc_idx + 1] =3D crtc_id; num_dsc +=3D 2; pp_idx++; /* start for next pair */ } @@ -559,11 +562,9 @@ static int _dpu_rm_dsc_alloc_pair(struct dpu_rm *rm, =20 static int _dpu_rm_reserve_dsc(struct dpu_rm *rm, struct dpu_global_state *global_state, - struct drm_encoder *enc, + uint32_t crtc_id, const struct msm_display_topology *top) { - uint32_t enc_id =3D enc->base.id; - if (!top->num_dsc || !top->num_intf) return 0; =20 @@ -573,22 +574,22 @@ static int _dpu_rm_reserve_dsc(struct dpu_rm *rm, * 2) DSC pair starts from even index, such as index(0,1), (2,3), etc * 3) even PINGPONG connects to even DSC * 4) odd PINGPONG connects to odd DSC - * 5) pair: encoder +--> pp_idx_0 --> dsc_idx_0 + * 5) pair: crtc +--> pp_idx_0 --> dsc_idx_0 * +--> pp_idx_1 --> dsc_idx_1 */ =20 /* num_dsc should be either 1, 2 or 4 */ if (top->num_dsc > top->num_intf) /* merge mode */ - return _dpu_rm_dsc_alloc_pair(rm, global_state, enc_id, top); + return _dpu_rm_dsc_alloc_pair(rm, global_state, crtc_id, top); else - return _dpu_rm_dsc_alloc(rm, global_state, enc_id, top); + return _dpu_rm_dsc_alloc(rm, global_state, crtc_id, top); =20 return 0; } =20 static int _dpu_rm_reserve_cdm(struct dpu_rm *rm, struct dpu_global_state *global_state, - struct drm_encoder *enc) + uint32_t crtc_id) { /* try allocating only one CDM block */ if (!rm->cdm_blk) { @@ -596,12 +597,12 @@ static int _dpu_rm_reserve_cdm(struct dpu_rm *rm, return -EIO; } =20 - if (global_state->cdm_to_enc_id) { + if (global_state->cdm_to_crtc_id) { DPU_ERROR("CDM_0 is already allocated\n"); return -EIO; } =20 - global_state->cdm_to_enc_id =3D enc->base.id; + global_state->cdm_to_crtc_id =3D crtc_id; =20 return 0; } @@ -609,30 +610,30 @@ static int _dpu_rm_reserve_cdm(struct dpu_rm *rm, static int _dpu_rm_make_reservation( struct dpu_rm *rm, struct dpu_global_state *global_state, - struct drm_encoder *enc, + uint32_t crtc_id, struct msm_display_topology *topology) { int ret; =20 - ret =3D _dpu_rm_reserve_lms(rm, global_state, enc->base.id, topology); + ret =3D _dpu_rm_reserve_lms(rm, global_state, crtc_id, topology); if (ret) { DPU_ERROR("unable to find appropriate mixers\n"); return ret; } =20 - ret =3D _dpu_rm_reserve_ctls(rm, global_state, enc->base.id, + ret =3D _dpu_rm_reserve_ctls(rm, global_state, crtc_id, topology); if (ret) { DPU_ERROR("unable to find appropriate CTL\n"); return ret; } =20 - ret =3D _dpu_rm_reserve_dsc(rm, global_state, enc, topology); + ret =3D _dpu_rm_reserve_dsc(rm, global_state, crtc_id, topology); if (ret) return ret; =20 if (topology->needs_cdm) { - ret =3D _dpu_rm_reserve_cdm(rm, global_state, enc); + ret =3D _dpu_rm_reserve_cdm(rm, global_state, crtc_id); if (ret) { DPU_ERROR("unable to find CDM blk\n"); return ret; @@ -643,12 +644,12 @@ static int _dpu_rm_make_reservation( } =20 static void _dpu_rm_clear_mapping(uint32_t *res_mapping, int cnt, - uint32_t enc_id) + uint32_t crtc_id) { int i; =20 for (i =3D 0; i < cnt; i++) { - if (res_mapping[i] =3D=3D enc_id) + if (res_mapping[i] =3D=3D crtc_id) res_mapping[i] =3D 0; } } @@ -657,23 +658,25 @@ static void _dpu_rm_clear_mapping(uint32_t *res_mappi= ng, int cnt, * dpu_rm_release - Given the encoder for the display chain, release any * HW blocks previously reserved for that use case. * @global_state: resources shared across multiple kms objects - * @enc: DRM Encoder handle + * @crtc: DRM CRTC handle * @return: 0 on Success otherwise -ERROR */ void dpu_rm_release(struct dpu_global_state *global_state, - struct drm_encoder *enc) + struct drm_crtc *crtc) { - _dpu_rm_clear_mapping(global_state->pingpong_to_enc_id, - ARRAY_SIZE(global_state->pingpong_to_enc_id), enc->base.id); - _dpu_rm_clear_mapping(global_state->mixer_to_enc_id, - ARRAY_SIZE(global_state->mixer_to_enc_id), enc->base.id); - _dpu_rm_clear_mapping(global_state->ctl_to_enc_id, - ARRAY_SIZE(global_state->ctl_to_enc_id), enc->base.id); - _dpu_rm_clear_mapping(global_state->dsc_to_enc_id, - ARRAY_SIZE(global_state->dsc_to_enc_id), enc->base.id); - _dpu_rm_clear_mapping(global_state->dspp_to_enc_id, - ARRAY_SIZE(global_state->dspp_to_enc_id), enc->base.id); - _dpu_rm_clear_mapping(&global_state->cdm_to_enc_id, 1, enc->base.id); + uint32_t crtc_id =3D crtc->base.id; + + _dpu_rm_clear_mapping(global_state->pingpong_to_crtc_id, + ARRAY_SIZE(global_state->pingpong_to_crtc_id), crtc_id); + _dpu_rm_clear_mapping(global_state->mixer_to_crtc_id, + ARRAY_SIZE(global_state->mixer_to_crtc_id), crtc_id); + _dpu_rm_clear_mapping(global_state->ctl_to_crtc_id, + ARRAY_SIZE(global_state->ctl_to_crtc_id), crtc_id); + _dpu_rm_clear_mapping(global_state->dsc_to_crtc_id, + ARRAY_SIZE(global_state->dsc_to_crtc_id), crtc_id); + _dpu_rm_clear_mapping(global_state->dspp_to_crtc_id, + ARRAY_SIZE(global_state->dspp_to_crtc_id), crtc_id); + _dpu_rm_clear_mapping(&global_state->cdm_to_crtc_id, 1, crtc_id); } =20 /** @@ -685,42 +688,32 @@ void dpu_rm_release(struct dpu_global_state *global_s= tate, * HW Reservations should be released via dpu_rm_release_hw. * @rm: DPU Resource Manager handle * @global_state: resources shared across multiple kms objects - * @enc: DRM Encoder handle - * @crtc_state: Proposed Atomic DRM CRTC State handle + * @crtc: DRM CRTC handle * @topology: Pointer to topology info for the display * @return: 0 on Success otherwise -ERROR */ int dpu_rm_reserve( struct dpu_rm *rm, struct dpu_global_state *global_state, - struct drm_encoder *enc, - struct drm_crtc_state *crtc_state, + struct drm_crtc *crtc, struct msm_display_topology *topology) { int ret; =20 - /* Check if this is just a page-flip */ - if (!drm_atomic_crtc_needs_modeset(crtc_state)) - return 0; - if (IS_ERR(global_state)) { DPU_ERROR("failed to global state\n"); return PTR_ERR(global_state); } =20 - DRM_DEBUG_KMS("reserving hw for enc %d crtc %d\n", - enc->base.id, crtc_state->crtc->base.id); - + DRM_DEBUG_KMS("reserving hw for crtc %d\n", crtc->base.id); DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n", topology->num_lm, topology->num_dsc, topology->num_intf); =20 - ret =3D _dpu_rm_make_reservation(rm, global_state, enc, topology); + ret =3D _dpu_rm_make_reservation(rm, global_state, crtc->base.id, topolog= y); if (ret) DPU_ERROR("failed to reserve hw resources: %d\n", ret); =20 - - return ret; } =20 @@ -826,48 +819,49 @@ static char *dpu_hw_blk_type_name[] =3D { * assigned to this encoder * @rm: DPU Resource Manager handle * @global_state: resources shared across multiple kms objects - * @enc_id: encoder id requesting for allocation + * @crtc: DRM CRTC handle * @type: resource type to return data for * @blks: pointer to the array to be filled by HW resources * @blks_size: size of the @blks array */ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, - struct dpu_global_state *global_state, uint32_t enc_id, + struct dpu_global_state *global_state, struct drm_crtc *crtc, enum dpu_hw_blk_type type, struct dpu_hw_blk **blks, int blks_size) { + uint32_t crtc_id =3D crtc->base.id; struct dpu_hw_blk **hw_blks; - uint32_t *hw_to_enc_id; + uint32_t *hw_to_crtc_id; int i, num_blks, max_blks; =20 switch (type) { case DPU_HW_BLK_PINGPONG: hw_blks =3D rm->pingpong_blks; - hw_to_enc_id =3D global_state->pingpong_to_enc_id; + hw_to_crtc_id =3D global_state->pingpong_to_crtc_id; max_blks =3D ARRAY_SIZE(rm->pingpong_blks); break; case DPU_HW_BLK_LM: hw_blks =3D rm->mixer_blks; - hw_to_enc_id =3D global_state->mixer_to_enc_id; + hw_to_crtc_id =3D global_state->mixer_to_crtc_id; max_blks =3D ARRAY_SIZE(rm->mixer_blks); break; case DPU_HW_BLK_CTL: hw_blks =3D rm->ctl_blks; - hw_to_enc_id =3D global_state->ctl_to_enc_id; + hw_to_crtc_id =3D global_state->ctl_to_crtc_id; max_blks =3D ARRAY_SIZE(rm->ctl_blks); break; case DPU_HW_BLK_DSPP: hw_blks =3D rm->dspp_blks; - hw_to_enc_id =3D global_state->dspp_to_enc_id; + hw_to_crtc_id =3D global_state->dspp_to_crtc_id; max_blks =3D ARRAY_SIZE(rm->dspp_blks); break; case DPU_HW_BLK_DSC: hw_blks =3D rm->dsc_blks; - hw_to_enc_id =3D global_state->dsc_to_enc_id; + hw_to_crtc_id =3D global_state->dsc_to_crtc_id; max_blks =3D ARRAY_SIZE(rm->dsc_blks); break; case DPU_HW_BLK_CDM: hw_blks =3D &rm->cdm_blk; - hw_to_enc_id =3D &global_state->cdm_to_enc_id; + hw_to_crtc_id =3D &global_state->cdm_to_crtc_id; max_blks =3D 1; break; default: @@ -877,17 +871,17 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, =20 num_blks =3D 0; for (i =3D 0; i < max_blks; i++) { - if (hw_to_enc_id[i] !=3D enc_id) + if (hw_to_crtc_id[i] !=3D crtc_id) continue; =20 if (num_blks =3D=3D blks_size) { - DPU_ERROR("More than %d %s assigned to enc %d\n", - blks_size, dpu_hw_blk_type_name[type], enc_id); + DPU_ERROR("More than %d resources assigned to crtc %d\n", + blks_size, crtc_id); break; } if (!hw_blks[i]) { - DPU_ERROR("%s unavailable to assign to enc %d\n", - dpu_hw_blk_type_name[type], enc_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]; @@ -922,38 +916,38 @@ void dpu_rm_print_state(struct drm_printer *p, =20 drm_puts(p, "resource mapping:\n"); drm_puts(p, "\tpingpong=3D"); - for (i =3D 0; i < ARRAY_SIZE(global_state->pingpong_to_enc_id); i++) + for (i =3D 0; i < ARRAY_SIZE(global_state->pingpong_to_crtc_id); i++) dpu_rm_print_state_helper(p, rm->pingpong_blks[i], - global_state->pingpong_to_enc_id[i]); + global_state->pingpong_to_crtc_id[i]); drm_puts(p, "\n"); =20 drm_puts(p, "\tmixer=3D"); - for (i =3D 0; i < ARRAY_SIZE(global_state->mixer_to_enc_id); i++) + for (i =3D 0; i < ARRAY_SIZE(global_state->mixer_to_crtc_id); i++) dpu_rm_print_state_helper(p, rm->mixer_blks[i], - global_state->mixer_to_enc_id[i]); + global_state->mixer_to_crtc_id[i]); drm_puts(p, "\n"); =20 drm_puts(p, "\tctl=3D"); - for (i =3D 0; i < ARRAY_SIZE(global_state->ctl_to_enc_id); i++) + for (i =3D 0; i < ARRAY_SIZE(global_state->ctl_to_crtc_id); i++) dpu_rm_print_state_helper(p, rm->ctl_blks[i], - global_state->ctl_to_enc_id[i]); + global_state->ctl_to_crtc_id[i]); drm_puts(p, "\n"); =20 drm_puts(p, "\tdspp=3D"); - for (i =3D 0; i < ARRAY_SIZE(global_state->dspp_to_enc_id); i++) + for (i =3D 0; i < ARRAY_SIZE(global_state->dspp_to_crtc_id); i++) dpu_rm_print_state_helper(p, rm->dspp_blks[i], - global_state->dspp_to_enc_id[i]); + global_state->dspp_to_crtc_id[i]); drm_puts(p, "\n"); =20 drm_puts(p, "\tdsc=3D"); - for (i =3D 0; i < ARRAY_SIZE(global_state->dsc_to_enc_id); i++) + for (i =3D 0; i < ARRAY_SIZE(global_state->dsc_to_crtc_id); i++) dpu_rm_print_state_helper(p, rm->dsc_blks[i], - global_state->dsc_to_enc_id[i]); + global_state->dsc_to_crtc_id[i]); drm_puts(p, "\n"); =20 drm_puts(p, "\tcdm=3D"); dpu_rm_print_state_helper(p, rm->cdm_blk, - global_state->cdm_to_enc_id); + global_state->cdm_to_crtc_id); drm_puts(p, "\n"); =20 drm_puts(p, "\tsspp=3D"); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.h index 5e7c4f756c6a1d3ab356a90fe7cc341de7d2b3ca..9bd81efa47b6a60cd3fcf8f0294= d1e051f53a226 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h @@ -68,14 +68,33 @@ int dpu_rm_init(struct drm_device *dev, const struct msm_mdss_data *mdss_data, void __iomem *mmio); =20 -int dpu_rm_reserve(struct dpu_rm *rm, +/** + * dpu_rm_reserve - Given a CRTC->Encoder->Connector display chain, analyze + * the use connections and user requirements, specified through related + * topology control properties, and reserve hardware blocks to that + * display chain. + * HW blocks can then be accessed through dpu_rm_get_* functions. + * HW Reservations should be released via dpu_rm_release_hw. + * @rm: DPU Resource Manager handle + * @crtc: DRM CRTC handle + * @topology: Pointer to topology info for the display + * @Return: 0 on Success otherwise -ERROR + */ +int dpu_rm_reserve( + struct dpu_rm *rm, struct dpu_global_state *global_state, - struct drm_encoder *drm_enc, - struct drm_crtc_state *crtc_state, + struct drm_crtc *crtc, struct msm_display_topology *topology); =20 +/** + * dpu_rm_release - Given the crtc for the display chain, release any + * HW blocks previously reserved for that use case. + * @rm: DPU Resource Manager handle + * @crtc: DRM CRTC handle + * @Return: 0 on Success otherwise -ERROR + */ void dpu_rm_release(struct dpu_global_state *global_state, - struct drm_encoder *enc); + struct drm_crtc *crtc); =20 struct dpu_hw_sspp *dpu_rm_reserve_sspp(struct dpu_rm *rm, struct dpu_global_state *global_state, @@ -85,8 +104,11 @@ struct dpu_hw_sspp *dpu_rm_reserve_sspp(struct dpu_rm *= rm, void dpu_rm_release_all_sspp(struct dpu_global_state *global_state, struct drm_crtc *crtc); =20 +/** + * Get hw resources of the given type that are assigned to this crtc. + */ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, - struct dpu_global_state *global_state, uint32_t enc_id, + struct dpu_global_state *global_state, struct drm_crtc *crtc, enum dpu_hw_blk_type type, struct dpu_hw_blk **blks, int blks_size); =20 void dpu_rm_print_state(struct drm_printer *p, --=20 2.34.1 From nobody Fri Dec 19 14:11:21 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 7A4272222A9 for ; Mon, 17 Feb 2025 14:17:32 +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=1739801853; cv=none; b=q5CKoO0EIxH13JgfN/5lXpLJDI41kA85QCIgIOQJ2Zy9OApEmwJlSl8tkHoxqrSoK5xrFsyf5O3cxrOdnLhykjsyuuc3WdPetBGSHNW25cdMye+eBT/Y98y3QzaerRoxo8KWDQ3tQAH2w1G2tekHQC7pu/PgCjNFobZxH3gataA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801853; c=relaxed/simple; bh=abNbpRlXHuZ7m2O+VGB/4vwIlVmkocNUGdti7LPWNjc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r8KpclgIU679eDHi3ID0n+uQl4meNGoGyss47gaPPMeSWy87LYerXqF5WDp7AQxU5C1okK8OhBtcTa1bgWorqgipHD/ibDXT9vGuxMLBS9hRmN7X89zydPDevm57oeTAO5WylQ0xXX6YW3RP7nIb2Rb7LEBfdfm3oQrlBu617Hg= 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=Ntz4JyjR; 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="Ntz4JyjR" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-220c2a87378so60488335ad.1 for ; Mon, 17 Feb 2025 06:17:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801852; x=1740406652; 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=6CnxZo728cU6Bds36JLYqHT6x28HxQHbVwrzkHphwtQ=; b=Ntz4JyjRlONBaWPRwD0gJszQA5Bh0Feh0D/pmO3ylvaGuGxxfvkrSvDkqdEvdw3PdS aq54vuGQGsIifj74qDGRvY9NBXP7AuXPnejzlk7nPkx6EbNwu5/WVD1T+v/KShWsocxs 6A0GTkZ6tQieonJUoWRMMmGGv4YaquIEhQLTDSI27b4h+03IyeisBVeHsR2hVP8DDhoF wKIo4vh9xqTT9OSAAhxImymC+d3r40/7JPwxHDsmU2Ta8mlbrHd8ej6iLg9ldUl40uQZ LMBynxakszSR7rLgwMOsjiBvTr2+aWEXjbj/HVd1J5O0OeuAmnGFHQW5Y6oWvuTih/DN J2TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801852; x=1740406652; 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=6CnxZo728cU6Bds36JLYqHT6x28HxQHbVwrzkHphwtQ=; b=kcI9BFa0RTkQ0IvQY+offoMoHUHcJXtGvNGtsdH9Rzdcas3nJwviJRVXUFArEDr1Qx FoULQg6gheqSS4yhkPnp8yjazH2LnUT7qAyT07mhfualP3Sfz8cG4hwAHoGORQWp9gH4 B7cC/Vb9w7414Ey+pVxNsyvvlNd8LqnDXr98Wy4s+o5Vj2SS97mka1r/V6YfDKMNcCly WP/4lwbuQoPN1LN5no97cbN9KoS3VDF2xlJfei/fkTqv0wVnnHJjg7NXvCY2tDzY+Pqs fGBV0CwmcCAd5SkTm02qYTLxFN+mZJo3m3400VnmPlSzFnKmOg0Kxz36T9Iy0Hfp+WQu bl0A== X-Forwarded-Encrypted: i=1; AJvYcCXeJEu819jfo8CjoFQaY7hU1Mdh1+UwEfAeXe1GbrkYHjUV/WeP3QC7QPDezJk2dkY3PU95BVxZ3ajd0Ss=@vger.kernel.org X-Gm-Message-State: AOJu0YwlV7SxQgDhO3REbF1ng0NMfY6sH8n7XHhp6WXp5LHGa0bY4IP5 Zc1uQo4bJY5nmjsNXqX9ZOEO51qstgwATOVZQ0ljITAV/QCaX19OBv6X4s+XnWlBHbq0H1fUaGf FyWJpEQ== X-Gm-Gg: ASbGncvrSWkfFmp4xyDjfVznsbXx4NeExPMioMrLme+lKMH9fUfQ2zp+0MyHV7UPHVh mI3RIcfQB9p7vSLElWgvyKSbcDUmM9xM+jxHNXGKhPz58DsIGj8dEdin+kmG5yxtZ7j44k/b75f CrySLTtZTfwE65GyvYBJSbylOaAclYXv97FA0UpTpcptKlL/GXCagHE1URZgIVxU6Lm9mc3lbod +Ewbs0CYa6ALoBsr+0NMItu5sJiEWXIa0PY0I6Me5xj84UgAilNydAnjY+Tn07uuCCE5utekyKB v0m/Fip0zg0o X-Google-Smtp-Source: AGHT+IHaD53v+SPng3uYJPEofw88FIK9ZP+O2KcaexT7MncLnnkv/HcyrqrLBH/PoDwf8Tt8V7NBOA== X-Received: by 2002:a17:902:f70e:b0:21f:3e2d:7d35 with SMTP id d9443c01a7336-22104025607mr142318155ad.15.1739801851724; Mon, 17 Feb 2025 06:17:31 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:31 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:57 +0800 Subject: [PATCH v6 08/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-8-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=1833; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=abNbpRlXHuZ7m2O+VGB/4vwIlVmkocNUGdti7LPWNjc=; b=eYSXAYvCkNz10FE2WbTG+bkySWvWHXeMrax77LxLcyhYt4QdlkAkkV+zY0DtldOxE3t6lxx8g 9W8sUUL6/LUA+NmwVpaRy4xAkGnH9ITtveh8Gvpsxv3/SQaRfGy4BkD 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 018a1a49ca7d152fddcce7ffa1a0a5d54eb615af..c89a5da0fa8321e9082d5aee304= fa16402bb4ad9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -1220,7 +1220,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct d= rm_encoder *drm_enc, struct dpu_hw_blk *hw_pp[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_ctl[MAX_CHANNELS_PER_ENC]; struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC]; - int num_ctl, num_pp, num_dsc; + int num_ctl, num_pp, num_dsc, num_pp_per_intf; unsigned int dsc_mask =3D 0; int i; =20 @@ -1275,11 +1275,17 @@ 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]; struct dpu_hw_ctl *ctl0 =3D to_dpu_hw_ctl(hw_ctl[0]); =20 - phys->hw_pp =3D dpu_enc->hw_pp[i]; + phys->hw_pp =3D dpu_enc->hw_pp[num_pp_per_intf * i]; if (!phys->hw_pp) { DPU_ERROR_ENC(dpu_enc, "no pp block assigned at idx: %d\n", i); --=20 2.34.1 From nobody Fri Dec 19 14:11:21 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 8F14A2248B6 for ; Mon, 17 Feb 2025 14:17:39 +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=1739801861; cv=none; b=tvzXNwK7lCzwSdmGct/nX7vBNf9xu5cApUZZ/kQZOClPEDFb8Qvx14BCzViZp51a/JeZR2sbBsvWghJhPK8pc+t7S4Ag9E0pHnzdS/6iXnUlbolMGSrMRhFWvRiyXMrmv+jC40ZbHk1qSaVd64QqASkA9Od3mWsw/cumPbpTv8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801861; c=relaxed/simple; bh=CYxXjoGPBo4uvT8jsEkwbX8WYPTbGIdNFxJtu3SWxQs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hebfKp9jJg1KH4jnT4ej2N/aOXuDDK+LuAaQsE0if53amYkPmB22Cnij0Wu/Py5UN7TyMEi2MbngMOm8oBV1Cxtx2svA5qLEQGjxti1avAfjF0ASDIOzCeemHEQTsJMPl3MGqWl0NTEOKvdroBno1zMHIsUyxvplxJ8Zq+eeIgU= 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=aZpO8Pfd; 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="aZpO8Pfd" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-220c8f38febso79148015ad.2 for ; Mon, 17 Feb 2025 06:17:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801858; x=1740406658; 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=qYqL5aquEf9QP1MU+9dPpzn37KZ182hWurvxtiyryKc=; b=aZpO8PfdHWfAIpTDMz7pSPW45NbknS/sp02Id+rEJVr42jeDJlBuc3vCOCekm9Kf2F 58OoxZX94Y92XRKTD87C6EYm7U4VgK75D59o4LZSnJWeJMakjzc1FpeV2W5tuAlvSPeI 9E6gQCZ6Et+YUA0p5Qt51puwOjVYgrG8GKNmAr9CDTpB/Vsj/MEttL4jqFvLjv3t94E8 XQWTm6QIRFtyzySMO4If6poc2URtzeKDZ1CaFlsu2zO2aa8j/pwdKUz13TSBy4ypYTms /74Kv2atG/GlV9gcfbdGOc1xyK21hOe6yHEbYdLr2CLqzClZ8FkYlerT0GJRptp4acw9 L9vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801858; x=1740406658; 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=qYqL5aquEf9QP1MU+9dPpzn37KZ182hWurvxtiyryKc=; b=TqZ5e/BkljZDgomXNRbC5UQNSudhwC6b3yhgsS0aRy4b3cf4HAxYWHl0BDd22mv24L EeOfiC0L9m0F6wYRD+CQBUFbr57fxjQzNzwzkurcqTp0xyfTWLqsaKWcdppTveJbUcvB WSQRIKjilH7vOef7CLXbdQwyrOnLQtTIkpbBf5fBRSqJjj4xrzkOUHWCB2i3DJBq7uDi 8R6RRLYBk8QnKnXA3n/OfSzF/kiQxy87QOGT3+yxtGIodXsSwTNBoJj0Kzi0K4w7RHef wk4PwCQvhstSTYOkA5LD4KaiMkOJ0wbWxFeZnEIYPs8/B3RZFHhGBUOOJf6R9GabxY+f 1ZVQ== X-Forwarded-Encrypted: i=1; AJvYcCWBgpzj53TuZYmh8RCMUciy1niSnu4pUfhKNsAQUYGhIyF7RcJji17TJxwHSTBP6TpGdzZd6TDL//K8jfs=@vger.kernel.org X-Gm-Message-State: AOJu0YwKuJarShDrPZKASRhsV3Q9JX54VthbfFE7yseygMJiQsDLyyzu 8mMI1LOUciUV4Rc1AV3juHFcm+aNSZstmgaX7rIV4KtCUXYvdbEslMiSvojSI2aWY7lPHxyydy4 VhNJE6Q== X-Gm-Gg: ASbGncuOYuc7pQeRSdLNg8wl9zAh/G+wQyPaslQq3g4PsAEReN3G4V01QnxfTkfh0Me GyCCUPaqMG/xk0SBw5PPTtKTbuW/JgpPD+Ep632MpKl5dvsWFzsMWJEX0RMn0jSWYEjvISbs2Kv RkzDdhMP3JOnr5HMK7AcnIbEcrMRvCgiB8MLM3D5YnR0CKuw2WyvUtY1cNfB+vOSSpDrS80Ce9v /Kqx9ezw6B7u+N8G5kxGbbStYADklsx2LvPBb0kDTVmUYzC0bphtZfJPrY0M6l7oOcqiRfV4xTZ R3W+4xaCBtge X-Google-Smtp-Source: AGHT+IFS0jCADQX2AcgQY79NodGJN5uJRBAzhISMBvHFJ/ExxIfY5jpXxhVRd14EYRwV6Ijl2nRmvA== X-Received: by 2002:a17:902:e88a:b0:220:cd13:d0ec with SMTP id d9443c01a7336-221040cf8admr179662625ad.48.1739801858618; Mon, 17 Feb 2025 06:17:38 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:38 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:58 +0800 Subject: [PATCH v6 09/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-9-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=2487; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=CYxXjoGPBo4uvT8jsEkwbX8WYPTbGIdNFxJtu3SWxQs=; b=B2USM0nmUXZxmqrKZovzuB8XerL0erfBe62Y10I49/1MRvp8nQlfAn9jo+PNTNYpWx/cQbM9w MOQC7Hp3220AdrYMGUqOjjWj8+fDjbOvDxW51kieS9V1hjiBg5SSetp 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 41c9d3e3e3c7c0c74ac9007a1ea6dcdde0b05f97..05abe2d05d8d81fbaac58cf0b29= 8abb8d2164735 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -411,7 +411,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, =20 trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane), state, to_dpu_plane_state(state), stage_idx, - format->pixel_format, + format->pixel_format, pipe, modifier); =20 DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx= %d\n", diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_trace.h index 5307cbc2007c5044c5b897c53b44a8e356f1ad0f..cb24ad2a6d8d386bbc97b173854= c410220725a0d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_trace.h @@ -651,9 +651,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, TP_PROTO(uint32_t crtc_id, uint32_t plane_id, struct drm_plane_state *state, struct dpu_plane_state *pstate, uint32_t stage_idx, uint32_t pixel_format, - uint64_t modifier), + struct dpu_sw_pipe *pipe, uint64_t modifier), TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx, - pixel_format, modifier), + pixel_format, pipe, modifier), TP_STRUCT__entry( __field( uint32_t, crtc_id ) __field( uint32_t, plane_id ) @@ -676,9 +676,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, __entry->dst_rect =3D drm_plane_state_dest(state); __entry->stage_idx =3D stage_idx; __entry->stage =3D pstate->stage; - __entry->sspp =3D pstate->pipe.sspp->idx; - __entry->multirect_idx =3D pstate->pipe.multirect_index; - __entry->multirect_mode =3D pstate->pipe.multirect_mode; + __entry->sspp =3D pipe->sspp->idx; + __entry->multirect_idx =3D pipe->multirect_index; + __entry->multirect_mode =3D pipe->multirect_mode; __entry->pixel_format =3D pixel_format; __entry->modifier =3D modifier; ), --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6AE9E2248B8 for ; Mon, 17 Feb 2025 14:17:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801868; cv=none; b=h29Ke0/DSGqx7YFiUT7v1yrL9eDo+OsUKkmLA0ib8aood+EkR2kv+EAjl1lklr7oWrpaj5ixippA1wYsz9Hq9vVEWtDhNttM70t1xyfn2Zd2qrgLpVkPQ5e3B9vcczbUkGN8PoM2/jWlv92/PDdECeqNcvSfm+31jg52dCM3swg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801868; c=relaxed/simple; bh=CMwjep3Ttk+3IAwsKedb6tkEBDGheQNAuAjS+mRm7GE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KA4Uz0mqENB8S6gJTBoWwqgV4vjlN1wQ4SaeL8pdkXT7pSFZYmVLXVeHllRuyKLp2MVCyIWl8IkDMKN/+oIUlAmZk1q8gujX6wg3D861SPmPCSa31/RW+kIAVn/7iiI0Kirq0z35wtDEBwncYiJwHS0XmVfuxvnl9ikOC8562uE= 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=yf8AV0OM; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="yf8AV0OM" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-220bfdfb3f4so90441355ad.2 for ; Mon, 17 Feb 2025 06:17:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801865; x=1740406665; 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=Yl2Cy/3TkgHsjjs7WL8YSNhGNRkIYKIY+ZYHhQBu3kk=; b=yf8AV0OMPT0PuZ70zOQ1TPsNOrIu9N8F67AbAgLZ/PP7YhfcIeMHhGYM3XvshM6ujF CqmXQJR/+PZTjJO/yduia0gn8/YtTQr0uZRUCpFQU0Sq1mQMTK/Q2m7x8/Qx5ejUvdbC xoGfkm0DNnnszn1z7URIKdQ6Bu7/lh3gVYQ5NuJJpM3hAkO4H3RqQk1iPKJQZrzCVHUb tLu6TVAu1XzzZXCNj2wNAwPXCxwNXq2EFXpr3UpYqpdMsgb3QAX/qsbY8FAFnoCcEux0 rkFwhroBJ0o8r8c8YV5Vm0J8qx8B6sS9Iiczk8BsU7lyD0STxiWAucBcIfF85fI5jDSJ x8ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801865; x=1740406665; 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=Yl2Cy/3TkgHsjjs7WL8YSNhGNRkIYKIY+ZYHhQBu3kk=; b=xDz3jYnpG64/Mw5TgwW6o9TVQZ9IPrTMUBhAm9Y3mp/S+qSwKYUTHx4XV7wD/hTmkp SggXnMWLUBUYNH5WSf/Tt7BegE4+w6/Us2AtNhXDaMrC6etoJ7wP3o3w31b8Hz8GvSFR 70GUm8Wjxw7sqkd5A1Q78jSOltiQp5IITaa7HlZu2vr1cRK1/e/Do25q8unfTV3CMQ6F v+dcBUHjbnP4lZSmvX/FcDKCXTMGSvCGjLSYnfjaAMAm0DYiFRlH3CFKQpAnOzJ7zyNP p+N4ZIuB1K0MJjMAXj3Rj7OqHXysyakveGEEayqCmNZYSMTmCDnVeWkBP8D83t5Ceuo3 9MZg== X-Forwarded-Encrypted: i=1; AJvYcCX74SbP5c6B8MApMRMEiFAacADoD97CU5U8zJKQxUAWOiRJ40vh536oIrK4W0vUjvXd2mYErbuZY9UVFbo=@vger.kernel.org X-Gm-Message-State: AOJu0YzVT9pWoJBHLTNGcMxOlIuKdScWod6NPyqQU6OAcveh/KI7LxQD b4cEN5CmKcUQCezm6Ljy4WItVuxPEgLVTAt58+bcNRlninkmRHo3y+wALhMlTZf0LHEzevFQ67G bUSAncQ== X-Gm-Gg: ASbGncv1jgln5lI7Lts83Cz/izX1YIzqgQllW/xdfmCzEgOGt1XSUIt6kdwZMe0nJpB /b5gPMKBD7f1h6kvYZRic5UJBxO0zudIE86ccjyXKymFaFor4spOqCmkW6FIbHqtMuAEIGMQPpM hu8aFWNOYXbHtxIIEDUUHejzcndOvVsomCnsL1KUcV2pOoe2yDDt6WC6IZeT2mlsTVbmrXm65d4 7ATaBLzJnwm0md7SHAPLhWcJ9JNAgYWoDHR0gqF6J3rc4x8fcyOl4E6DpPVQO/K+j6HZce7ty39 bEXLOMQgbzXe X-Google-Smtp-Source: AGHT+IHvImrP1ufK5qK/GFymm5+h9exelf7tqGGe8S68IeCggnkCx8RtxUdqRRnREn7dxYQvMhOeqw== X-Received: by 2002:a17:903:2b07:b0:220:e792:8456 with SMTP id d9443c01a7336-22103efec11mr162049065ad.11.1739801865433; Mon, 17 Feb 2025 06:17:45 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:45 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:15:59 +0800 Subject: [PATCH v6 10/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-10-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=16749; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=CMwjep3Ttk+3IAwsKedb6tkEBDGheQNAuAjS+mRm7GE=; b=NDq4HS0Ybm7C5hJeU8Co9jMZQ7OSs1Ahyt35ZhsaxA3FXp8RtRom8ehylzwFc7M6EdBurJs0j KnPWldgY2dqBIM2+cdrQOcYLTisaYbbX5qAtSGNhHPgdDA+1mx3eV1J 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 --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 35 +++---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 169 +++++++++++++++++---------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 12 +-- 3 files changed, 113 insertions(+), 103 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 05abe2d05d8d81fbaac58cf0b298abb8d2164735..193818b02197d0737c86de7765d= 98732fa914e8e 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -442,7 +442,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; =20 - uint32_t lm_idx; + uint32_t lm_idx, i; bool bg_alpha_enable =3D false; DECLARE_BITMAP(fetch_active, SSPP_MAX); =20 @@ -463,20 +463,15 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_cr= tc *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - set_bit(pstate->pipe.sspp->idx, fetch_active); - _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, fetch_active); + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + set_bit(pstate->pipe[i].sspp->idx, fetch_active); _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 */ @@ -1440,15 +1435,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 feb90c42fef58f3385625f6d8165bfcdabf46d2d..ef44af5ab681c8f526333fa9253= 1a2225983aa09 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -619,6 +619,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdp= u, struct msm_drm_private *priv =3D plane->dev->dev_private; struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); u32 fill_color =3D (color & 0xFFFFFF) | ((alpha & 0xFF) << 24); + int i; =20 DPU_DEBUG_PLANE(pdpu, "\n"); =20 @@ -632,12 +633,13 @@ static void _dpu_plane_color_fill(struct dpu_plane *p= dpu, return; =20 /* update sspp */ - _dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_r= ect, - fill_color, fmt); - - if (pstate->r_pipe.sspp) - _dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.= dst_rect, + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i], + &pstate->pipe_cfg[i].dst_rect, fill_color, fmt); + } } =20 static int dpu_plane_prepare_fb(struct drm_plane *plane, @@ -827,8 +829,8 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, struct dpu_kms *kms =3D _dpu_plane_get_kms(&pdpu->base); u64 max_mdp_clk_rate =3D kms->perf.max_core_clk_rate; struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->r_pipe_cfg; + struct dpu_sw_pipe_cfg *pipe_cfg; + struct dpu_sw_pipe_cfg *r_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; uint32_t max_linewidth; =20 @@ -853,6 +855,9 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pla= ne *plane, return -EINVAL; } =20 + /* move the assignment here, to ease handling to another pairs later */ + pipe_cfg =3D &pstate->pipe_cfg[0]; + r_pipe_cfg =3D &pstate->pipe_cfg[1]; /* state->src is 16.16, src_rect is not */ drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); =20 @@ -949,10 +954,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, @@ -1011,10 +1016,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 @@ -1058,7 +1063,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 (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, @@ -1073,8 +1078,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; } @@ -1111,19 +1116,21 @@ static int dpu_plane_virtual_assign_resources(struc= t 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, plane_state->crtc); =20 pstate =3D to_dpu_plane_state(plane_state); - 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; @@ -1213,6 +1220,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"); @@ -1233,8 +1241,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 */ @@ -1335,15 +1343,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 @@ -1358,12 +1363,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); } @@ -1371,15 +1376,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 @@ -1387,17 +1394,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); + + if (!pipe->sspp) + continue; =20 - if (r_pipe->sspp->ops.setup_multirect) - r_pipe->sspp->ops.setup_multirect(r_pipe); + 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; @@ -1492,31 +1513,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 @@ -1554,14 +1570,17 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane = *plane, bool enable) struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(plane->state); struct dpu_kms *dpu_kms =3D _dpu_plane_get_kms(plane); + int i; =20 if (!pdpu->is_rt_pipe) return; =20 pm_runtime_get_sync(&dpu_kms->pdev->dev); - _dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable); - if (pstate->r_pipe.sspp) - _dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable); + for (i =3D 0; i < PIPES_PER_STAGE; i++) { + if (!pstate->pipe[i].sspp) + continue; + _dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable); + } pm_runtime_put_sync(&dpu_kms->pdev->dev); } #endif diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index acd5725175cdde4fcf7a9f71bb446251c5a14d22..052fd046e8463855b16b30389c2= efc67c0c15281 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -18,10 +18,8 @@ * struct dpu_plane_state: Define dpu extension of drm plane state object * @base: base drm plane state object * @aspace: pointer to address space for input/output buffers - * @pipe: software pipe description - * @r_pipe: software pipe description of the second pipe - * @pipe_cfg: software pipe configuration - * @r_pipe_cfg: software pipe configuration for the second pipe + * @pipe: software pipe description array + * @pipe_cfg: software pipe configuration array * @stage: assigned by crtc blender * @needs_qos_remap: qos remap settings need to be updated * @multirect_index: index of the rectangle of SSPP @@ -35,10 +33,8 @@ struct dpu_plane_state { struct drm_plane_state base; struct msm_gem_address_space *aspace; - struct dpu_sw_pipe pipe; - struct dpu_sw_pipe r_pipe; - struct dpu_sw_pipe_cfg pipe_cfg; - struct dpu_sw_pipe_cfg r_pipe_cfg; + struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 7161C223328 for ; Mon, 17 Feb 2025 14:17:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801877; cv=none; b=c4OOpyyrrBLanufnT94xF14fJPdW2AmphQ5SY2xeG+CgdETzStLottSwYQUPPVxclq07aT/WM5EOGIeKPWJFGugSZ7Fw93BMXn/dFzphu0RFPhPGnu1w84Ah5O2FXjKHDokrlGPZgCdC+LPjXW4mxm+4n8BKBnvwVEyhogHE1uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801877; c=relaxed/simple; bh=kXnt8vjlhZJf0cBxy7dPZ9teD4pxdE5E8edh78McPmA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=meIJYX9Wqujmq8lWobtQ5ilxn+6VaNuDF/l5gSFm7SR/GC3NAFKeJDCy4bT2C+MNCIJ1rLpF+Vq0ams3eG4NDaFceT9Vj8VHI+Tgr9ppGtvXWOceG+qgBAllQEwzZEbEK5ZDXvDVH8N3szsFgpRPI5747YtYg6zBpBRSBGztaMY= 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=PIS9VkwY; arc=none smtp.client-ip=209.85.216.54 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="PIS9VkwY" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2fc4418c0e1so2594192a91.1 for ; Mon, 17 Feb 2025 06:17:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801875; x=1740406675; 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=17xwTof96P1WeJRZDnaNGAPL65jkXDHzo93BzhWGU/w=; b=PIS9VkwYnha9L/PbjXYFIBvpQspYW7cp1zDOgz9h4vbPU6oHZku8sE8jEFrlEZ7kcN IZ2w/ThvDifBpQCoyqb3O7eoBLeYbvizdYgB9HrjqPJ2us/Jq5kwxMLYN5ogkuTEdcL4 9ZEyYictN3DQkz4Cio5XFySmJq4RoztGlMqpCJAmei0ni0BzDpxPA+Dr06xKNpS8DI2w BbMQeV7CzMv2XH7FqNkSg8R/UJmMTwdpaT5wgPSnYM9qmyksJbnMrEhl/TLVerqAXkmv 2hx64tA2CJgQzZ8lZbBXY3PblWf03ANYh5ct9Bb3455F2x+MfzuQtW+wGs2Qp7QifMjp JnDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801875; x=1740406675; 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=17xwTof96P1WeJRZDnaNGAPL65jkXDHzo93BzhWGU/w=; b=Nn0LyxcZlaOv0DyFrGNjhNmzNeqiPcanGQZUYaOOZLknFfIaFKLe7QIyGZXSfgQ3B2 sXLO1CwmL0oBgJXMDO8n6vf69INnP5tMuPNnl6FAqIULis6YnaEAbN5piy1f7DuqplNz bTQG+Ij1WhDTXX9SJIgXQ0Q/IlHTj0hlXOCIHaLsvRzxNL2Rq8tlk5om/6kB1JTjSJ+o btMg80GGlel/0Z6NsB1GRl1XW7+C5q7q9idEUh+be3s37JEcW2UL/wEoyPlLxqG12d6X qSModoICZEUOAj59Hc+WNN1op+xKk+qMYjyNt+qIuyONcWD1/EEBZsLFpEDhEdwYEJZ4 3MjA== X-Forwarded-Encrypted: i=1; AJvYcCWd9y5X0Cemj1wsmi65atrjjPw5JuBI3s6M0V7+EzZO/GEUnJGvAYzrXwZsaJHYjLxDXdfDTne8qv3JcAU=@vger.kernel.org X-Gm-Message-State: AOJu0YzcsF4XzB1a8Ihbasi+0nP0NSKjUUMinrXWIkyJ/tzDuQT/KucK xf+B0X0P1cXZqydGL0juqprysCD0CAlK5ziHYk0nVDtyqGn/e1FMQStfXGFIrS58BPrxv9yI7E/ x3uJTNw== X-Gm-Gg: ASbGncvW2s0Z4oNdjLJgpl9nk3qFiG+mrN7EVkQ5BgZgu40wlqSjcnpqdenj0MSWz5m EeTc8HRaMjIFE08MUdPbt+GGABoMmrL+BLpw0btAsCzvEzVaauUgoNn9uq/CmNDh1/Ns0Qxdpz/ C+mxS2hhY1U7vsxANkQF0kguNIHekE5vfBqoWTF1BfdN/A6ilvjRvJpu3wGPtOSnThXiDXf69Mw 5+RGgH574y/t/32wnn+x3MiIr+P57CXvtg/MUMTkOlFDTaMXDjRyMWU60frLf2AKMd8POnHWJcS hjhiwztb/MTt X-Google-Smtp-Source: AGHT+IEOglgFQdwEzqJu0j6vzqPrWQpA1Rv1b6MLfNgp1HxIbPtNbvk1zzZbKbDMxDw3sPQl8uJ3aQ== X-Received: by 2002:a17:90b:33d2:b0:2fa:3b6b:3370 with SMTP id 98e67ed59e1d1-2fc0fa67323mr28176314a91.16.1739801874684; Mon, 17 Feb 2025 06:17:54 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:17:54 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:16:00 +0800 Subject: [PATCH v6 11/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-11-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=5119; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=kXnt8vjlhZJf0cBxy7dPZ9teD4pxdE5E8edh78McPmA=; b=7lROwJxUvGXLmgdTkBQXKTPkWeEJOP0YGX4u1+9yEBFcHRn/ToR34B7wTglXOmAn4UDHZc/Nb ztLvpT8P1aAAqVGQ/J/DMWS+FykETP3P15NusF/e1SgPRCIN+Xwqsxo 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 | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 1 + drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 14 +++++++------- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 193818b02197d0737c86de7765d98732fa914e8e..81474823e6799132db71c971204= 6d359e3535d90 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -463,7 +463,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, if (pstate->stage =3D=3D DPU_STAGE_BASE && format->alpha_enable) bg_alpha_enable =3D true; =20 - for (i =3D 0; i < PIPES_PER_STAGE; i++) { + for (i =3D 0; i < PIPES_PER_PLANE; i++) { if (!pstate->pipe[i].sspp) continue; set_bit(pstate->pipe[i].sspp->idx, fetch_active); 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 ba7bb05efe9b8cac01a908e53121117e130f91ec..5f010d36672cc6440c69779908b= 315aab285eaf0 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 ef44af5ab681c8f526333fa92531a2225983aa09..d67f2ad20b4754ca4bcb759a65a= 39628b7236b0f 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -1078,7 +1078,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; @@ -1129,7 +1129,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) @@ -1241,7 +1241,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 @@ -1364,7 +1364,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], @@ -1378,7 +1378,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, @@ -1397,7 +1397,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; @@ -1519,7 +1519,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; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.h index 052fd046e8463855b16b30389c2efc67c0c15281..18ff5ec2603ed63ce45f530ced3= 407d3b70c737b 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h @@ -33,8 +33,8 @@ struct dpu_plane_state { struct drm_plane_state base; struct msm_gem_address_space *aspace; - struct dpu_sw_pipe pipe[PIPES_PER_STAGE]; - struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_STAGE]; + struct dpu_sw_pipe pipe[PIPES_PER_PLANE]; + struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_PLANE]; enum dpu_stage stage; bool needs_qos_remap; bool pending; --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (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 C55A021D58E for ; Mon, 17 Feb 2025 14:18:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801885; cv=none; b=tanJ7flixN3kGfajW5IB3WCyOmpj8TZ2MR+BRfzImML3EkxlK0TrFvHK8iZ7WBLU5uVndx+Z458kJ6MB8dbX3nmqdO8HxJkr5tdhX93eUqgD7vEHW/hhJVsLVGVnFpHkr4qN+KMd0QG4alhih1+cxn6kGsPR7E3OuDxZJh4XyBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801885; c=relaxed/simple; bh=za/TOFi8Ltkq/gvZgJJVaOFS39iYDTLgxFY68FFY8wE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ScIubwHm7/38dbNs3iwusuwEjELFV55UFh3LC6wG+Z6mcq6+fGbS82FweFX8/vKbhmgAa6KETiExUASEbDf+U+Q6/Eo8fXQiL0gStrMq0EW3AxMnenwV+ypVza5KtOFETMovnqehLjtFDPDfCAFouHPtBngnkPKn6T8Eu8gqYdo= 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=Tj8TLfXB; arc=none smtp.client-ip=209.85.216.41 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="Tj8TLfXB" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-2fc1c80cdc8so5906259a91.2 for ; Mon, 17 Feb 2025 06:18:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801883; x=1740406683; 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=9bsnor74CQhC3dm1vS3cAkcfQD0HtQ2hwGtKG/dYKq8=; b=Tj8TLfXBQ8ar3GWosl95KHeX+To7VYj9ugwAk1/AYko3A5n1azsI640FNXyz0tLUDg 2HRqLdWt87HSjegG5eOm6zMFemu757RXXIbxSmQcLEj+53q1mT4V/sZnLAV+ObLiI5+S 0/oWCWwlR3FxbhTzSLoR2HYkqM8bKECpkpD72PVkDMHnlvelzk5thmBYjPysATVx9If0 HWissOHLjEwl7rmMnL/zdO3I14i6nw4RiStex6xpsStkOPMYneyf9xTJ2jjYNCIy5iPt mOL92atrY/7+NMXVrdiaAOo67jYtDAn7H0S1nLBmDYD1fNRPryuI7Lm67DTsPVJOgxP+ BzhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801883; x=1740406683; 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=9bsnor74CQhC3dm1vS3cAkcfQD0HtQ2hwGtKG/dYKq8=; b=F8oPOlZpaX6AqW1bsNAJIXdqoTHKNQQ1yv0w7wHMMe7bJjr19jWg/E1RnsBXo51H9p ECiJLda8JeNj1vSgFD5BWFSgmo39urDC5057EJVZNsV5cjaWACmJWlbKcr66eEZpvnhB /W2FpfiwhbgAO953FgtHCr78sDDu67m7OJ0kEaVSl/Yfvt1fGFLbSf8bYx3Yi5GPJe7k XHaV8hyAR8odBFVvjRNZuv2wQDnvJJZv5wcNTRZKChrDeepZwrS/EVaKCXZ0Ok3rHvup lrdjdR6oQ2y4FG5Ec8fLYutjPO3iGfULn1rpaKo9IdqRUrhEVNWsH6MzAps1Q815KcXm /7VA== X-Forwarded-Encrypted: i=1; AJvYcCVVaJY8ORt9dO+txPl4RYPgLGIlAnQBX4rfvKio3O258SEqAgeZdn5R2BbW1hELHO06jMio/lOkc4LPtrk=@vger.kernel.org X-Gm-Message-State: AOJu0Yyn9KpNDFWtnW7266kW1q1qSsk2m+B0ycA6IQ5QhctuXlOeNKPq J01zQPXS0kqSaXsz0A6hH+ibEuzt/BmmM27h8dJR0iP+HpSdtP0h9gz+Db8Q5qXGlfS6lOAOVtV GvDdnbw== X-Gm-Gg: ASbGnctFGyPFghX+VBWql3mlz+52RGDx97eBU7cCjPHC/Cbn21fdc9WzNj89ww1c5xH 6IhSf0xOCK8RP+pnDPypXxBQVKeH3kNjJ0XOv3hZkTL6p///dybxbFwlH0DHhgz2dU99wHPXepN tmygBl3aInxmYYczHwHDkbglTAa/ASu4S+k0DFpqXG0nJPOpXZ4x1y0t4XE45fL/VyF/6Shg/dh 7BOPs581f8Gp/F3q09HAmoQ18K6gNni4L3SaPEXdRQKMe2bhEJWF1K5rZ5AxTlx/UPSLK1WRZhW 4RyHIGfUs6lX X-Google-Smtp-Source: AGHT+IFJ/9Ln4TwrSqudr9CAmOr3hLNQnzqL5uAlkzh70visApKWFl7N8wdmJkJczYPFDyU6ThqvZw== X-Received: by 2002:a17:90b:2d8d:b0:2ee:cded:9ac7 with SMTP id 98e67ed59e1d1-2fc40f23484mr15503162a91.20.1739801882505; Mon, 17 Feb 2025 06:18:02 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:18:02 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:16:01 +0800 Subject: [PATCH v6 12/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-12-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=4912; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=za/TOFi8Ltkq/gvZgJJVaOFS39iYDTLgxFY68FFY8wE=; b=C7E1sah3ieMMpeE1ANh60+/IurCFbYXHxwXfnJio68TiqyBOEpkITeLJFFx3ibfd5qr2sGquR UPyVMlAY0NOAoNWEAg9Ts/VZNhW0IImF1gtu5l8rZnjKy6zclvOlabG 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 --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 45 +++++++++++++++++++------= ---- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 1 + 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 81474823e6799132db71c9712046d359e3535d90..50acaf25a3ffcc94354faaa816f= e74566784844c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -401,7 +401,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc = *crtc, struct dpu_hw_stage_cfg *stage_cfg ) { - uint32_t lm_idx; + uint32_t lm_idx, lm_in_pair; enum dpu_sspp sspp_idx; struct drm_plane_state *state; =20 @@ -426,7 +426,8 @@ 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++) + lm_in_pair =3D num_mixers > 1 ? 2 : 1; + for (lm_idx =3D 0; lm_idx < lm_in_pair; lm_idx++) mixer[lm_idx].lm_ctl->ops.update_pending_flush_sspp(mixer[lm_idx].lm_ctl= , sspp_idx); } =20 @@ -442,7 +443,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc= *crtc, const struct msm_format *format; struct dpu_hw_ctl *ctl =3D mixer->lm_ctl; =20 - uint32_t lm_idx, i; + uint32_t lm_idx, stage, i, pipe_idx, head_pipe_in_stage; bool bg_alpha_enable =3D false; DECLARE_BITMAP(fetch_active, SSPP_MAX); =20 @@ -463,15 +464,22 @@ 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, fetch_active); - _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; + set_bit(pstate->pipe[pipe_idx].sspp->idx, fetch_active); + _dpu_crtc_blend_setup_pipe(crtc, plane, + &mixer[head_pipe_in_stage], + cstate->num_mixers - (stage * PIPES_PER_STAGE), + pstate->stage, + format, fb ? fb->modifier : 0, + &pstate->pipe[pipe_idx], i, + &stage_cfg[stage]); + } } =20 /* blend config update */ @@ -503,7 +511,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) struct dpu_crtc_mixer *mixer =3D cstate->mixers; struct dpu_hw_ctl *ctl; struct dpu_hw_mixer *lm; - struct dpu_hw_stage_cfg stage_cfg; + struct dpu_hw_stage_cfg stage_cfg[STAGES_PER_PLANE]; int i; =20 DRM_DEBUG_ATOMIC("%s\n", dpu_crtc->name); @@ -516,9 +524,9 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc) } =20 /* initialize stage cfg */ - memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg)); + memset(&stage_cfg, 0, sizeof(stage_cfg)); =20 - _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg); + _dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, stage_cfg); =20 for (i =3D 0; i < cstate->num_mixers; i++) { ctl =3D mixer[i].lm_ctl; @@ -535,8 +543,13 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crt= c) mixer[i].mixer_op_mode, ctl->idx - CTL_0); =20 + /* + * call dpu_hw_ctl_setup_blendstage() to blend layers per stage cfg. + * There are 4 mixers at most. The first 2 are for the left half, and + * the later 2 are for the right half. + */ ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx, - &stage_cfg); + &stage_cfg[i / PIPES_PER_STAGE]); } } =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_mdss.h index 5f010d36672cc6440c69779908b315aab285eaf0..64e220987be5682f26d02074505= c5474a547a814 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 STAGES_PER_PLANE 2 #define PIPES_PER_PLANE 2 #define PIPES_PER_STAGE 2 #ifndef DPU_MAX_DE_CURVES --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.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 A574321D58F for ; Mon, 17 Feb 2025 14:18:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801893; cv=none; b=bxtsZSdh9G84cyuls4QY8K+XiPc0+HmlDI5MOljeYnmmuwq+P8M6Pr5acLtJ/6NPqw5+DRtExkDzZNUqqIeGKIULqcGxz1bujrdOLQ41DQAlaA2S9SykB6VFNBjHE7MBVmh3dqs3woaCysJ526KbQl0bpuxu1GXo3G/fTVgGt98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801893; c=relaxed/simple; bh=7p8Cf2cc/bnE8b/fucvAxqQfmQCibLQPXtQ8uTs5zao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EpHFjnv8zAUwqpIMubglsDQKM2/kUmNjDqJpVwVgCuCyYAkivOS8G7JU8ONLSUNPamDjDa4uOLvhbhEoRlYX6ikI2lRcXNtIaK1rO8kRrfgqhZD5eqihHQkFJs2nvlssW/y8vX8Q+nBC59IsWVOZHbTSli4NDPfSRCx4e6Yh5Hc= 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=SG6JHlUM; arc=none smtp.client-ip=209.85.214.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="SG6JHlUM" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-221206dbd7eso20969795ad.2 for ; Mon, 17 Feb 2025 06:18:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801891; x=1740406691; 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=+84HgPlIvBKwxhkb6I9ELvGb7NzlKgnjKlOyPCjS9Kk=; b=SG6JHlUM+aJSY9ve2qu1PuK/wUQnlnFz4wkiJP/u+Ler7PskxWCK5lDpxShWmj7GhQ rr6rlVBg74CTdk3FTeCL2OuARQhBeHzsJ7HCxTNEo2Du5MBVBlBE2tESG2uU/ozBdSPh l6+NNcTsmI/wA9D8OUOFn/nfLlobh1ciDCNCylHdk8Vsmymw3Wz3PO7/crpHRwx6a2EA W7E7WuTRyqHujX7DIygHUz+Pk3rUWlOPIXRHOnkxtYAYGpEhEJsxbOmvalIBZCXLRxzS PG9lyymfamzxbkMzWYwj8rmj13NAQPsA8T857dme1roQ8nA2w4jnCyIPnwRsWmFWPt5D T9tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801891; x=1740406691; 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=+84HgPlIvBKwxhkb6I9ELvGb7NzlKgnjKlOyPCjS9Kk=; b=hUjbLtKbKP1l/tQSRPadtvfZtAHaVq1EHsvOd0u4GCOSNsggbYRoECPVeDWf7O7O+k oLpV5OAs8oIERsB7uZaChk6JBMF1csBfhsq/iXkxHkBSte8Y5lHMFvP0SfFsOTMZ3Goj tSzzVnGbsy3flZptDhI6JBH2A1a7ECGGRV52HWfl6CuQtgWefMppXy4qSJfE4HluSYls jbBlghFxdFwabhImlobpmgVmvRUeaTz/ba28PVmqZZkZbJ4b43Ab9tbGulrbU7O5jcmH T6s45uo5/rZKAerMHciCXLw2Rro0CVEuUP1L1U1SoicA0XqJXNro4bcjwJSKr04a034O ksVA== X-Forwarded-Encrypted: i=1; AJvYcCXhhzzribPCQATfuZfsN5mE75z0tUJcR7aRIdQjFQg7hkuDedQTJXGzYGSh6xNI2m+PpkWbLhl3HDKP0fY=@vger.kernel.org X-Gm-Message-State: AOJu0YxEQzGGAQQbBsHuLXtbBls0Jn5YQsBoTDnNHyHGKxuv9n4CUKHi +BWnGabiYCxcakx0xjDbOaZOAygimJjSrAMtp55oSsVTYyL7Dw5h/x2p0JqtWYD5L04vwT2wEZP 7EIjXHw== X-Gm-Gg: ASbGncsr+HRBu3qFQWxzBop0znEOSBxJAOOr9zd/79jPuzMateDH7X9WQyF2dEL+rT/ 2MxXCLNaHgtjyLxJpvHY94POD3I4B3mixWIq3Q/zq7FtzGW4aif+xIzLwDs+hKSluqF8nBwtasI gzcdzSE/kTuS1UnLtfzHS3+kkQS48QAxHAvghkhy5nqNSiut+kCQIqRKUw2SvPwkfpqVTPZ4aIZ IIMewil1OK9yoI5b1MKKxqbwrQSqf9jHX42jTNfHjwBxHJk7MWdGny5Z8Goy5uG2+Va0oFHDKkE 12q0mjCjalUw X-Google-Smtp-Source: AGHT+IFXNtZ+5TJKSeoeqvx2/Zk1qMDod+K/e9CgiVIH+8Qg/bBnmV4JIgwavR0yVflf7Ko4ZwZPaA== X-Received: by 2002:a17:902:f547:b0:21f:53ce:b2e2 with SMTP id d9443c01a7336-2210409af9fmr134156335ad.45.1739801890768; Mon, 17 Feb 2025 06:18:10 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.18.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:18:10 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:16:02 +0800 Subject: [PATCH v6 13/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-13-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=4059; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=7p8Cf2cc/bnE8b/fucvAxqQfmQCibLQPXtQ8uTs5zao=; b=gfPi485oSXgo49FYw33li21uSnP9+HXe8ePAytCi/gAzb22q722yTuHv6ToMd//mLSrcS+Lyl Al8Rn5R+5uNCWF1U7Y/oDbn9bGmG4jYjFeQbUvvLcynFv//T46ltJ+e 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 Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 63 +++++++++++++++++++--------= ---- 1 file changed, 39 insertions(+), 24 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 d67f2ad20b4754ca4bcb759a65a39628b7236b0f..b87da2bd20861370e7b3b1fa60a= 689a145c2fab7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -1115,8 +1115,9 @@ static int dpu_plane_virtual_assign_resources(struct = drm_crtc *crtc, struct dpu_sw_pipe *r_pipe; struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; + struct dpu_plane *pdpu =3D to_dpu_plane(plane); const struct msm_format *fmt; - int i; + int i, num_lm, stage_id, num_stages; =20 if (plane_state->crtc) crtc_state =3D drm_atomic_get_new_crtc_state(state, @@ -1124,11 +1125,6 @@ static int dpu_plane_virtual_assign_resources(struct= drm_crtc *crtc, =20 pstate =3D to_dpu_plane_state(plane_state); =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 @@ -1142,24 +1138,43 @@ 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 - pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &req= s); - 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; - - r_pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; - r_pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + num_lm =3D dpu_crtc_get_num_lm(crtc_state); + num_stages =3D (num_lm + 1) / 2; + for (stage_id =3D 0; stage_id < num_stages; stage_id++) { + for (i =3D stage_id * PIPES_PER_STAGE; i < (stage_id + 1) * PIPES_PER_ST= AGE; i++) { + pipe =3D &pstate->pipe[i]; + pipe_cfg =3D &pstate->pipe_cfg[i]; + + if (drm_rect_width(&pipe_cfg->src_rect) =3D=3D 0) + break; + + pipe->sspp =3D dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &r= eqs); + if (!pipe->sspp) + return -ENODEV; + + r_pipe =3D &pstate->pipe[i + 1]; + r_pipe_cfg =3D &pstate->pipe_cfg[i + 1]; + + /* + * If current pipe is the first pipe in pipe pair, check + * multi-rect opportunity for the 2nd pipe in the pair. + * SSPP multi-rect mode cross mixer pairs is not supported. + */ + if ((i % PIPES_PER_STAGE =3D=3D 0) && + drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0 && + dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg, + pipe->sspp, + msm_framebuffer_format(plane_state->fb), + dpu_kms->catalog->caps->max_linewidth)) { + i++; + } else { + /* multirect is not possible, use two SSPP blocks */ + pipe->multirect_index =3D DPU_SSPP_RECT_SOLO; + pipe->multirect_mode =3D DPU_SSPP_MULTIRECT_NONE; + DPU_DEBUG_PLANE(pdpu, "allocating sspp_%d for pipe %d.\n", + pipe->sspp->idx - SSPP_NONE, i); + } + } } =20 return dpu_plane_atomic_check_sspp(plane, state, crtc_state); --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.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 20BFA225406 for ; Mon, 17 Feb 2025 14:18:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801903; cv=none; b=sg5tzr+KaE/a2WVcUxmiC6uGlJ0hg2CEggpqi6QVQsI32pBNzQD4JlMlMJw05Ai1vpZYzRTnobmszOe1+YqKvY20rO2maTFqKCrW9WIH1vse9i6cRvqTYTLZ/xz/WYvGiHZgYdAF4ChougUj/vZ6VahYyUwiEWiBZ+K0eFEhKtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801903; c=relaxed/simple; bh=KCxHPSrq+0wZsSrJjnPZ9OEDEC8A7tuq2rtnWGAQTg0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B1KrTcFAVUWGw67TB2R+42KzgpZhhMX4hAQA3AbKh/Jb+57FwNtyP7VzqGb5RmmlXjIU2gcq6q5YkIw2A0ctY084AUTitA8irvO53P/WOKef4jVYijpvq5CsVhXz0OZBkVvhnRVW6ua7vIzHxh9eyDrYKJW4g9U1k8n/47/3sGc= 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=lmNkU3+P; arc=none smtp.client-ip=209.85.214.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="lmNkU3+P" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-220f4dd756eso50462455ad.3 for ; Mon, 17 Feb 2025 06:18:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801899; x=1740406699; 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=Tx6GkoUIFUyuUtNb8RLWVuurpj5FdZ6/dmO+pJenrKM=; b=lmNkU3+PQlQJ1VDkXoNd6M/UimZfQwiADB7OTWJUSPOSjz6h/o3qn6Gm43Xa+sSPGT XiRapnJNYa3/gqC3SHyeKoAmn8ogLGfiWlofwrtAUksS46GsgCLX07h1Ssplj1LlMSHz 2BXx1tFqJSVWCppJbilSFBSHxz7RXZQrECtsJT0AAWJ2EQYcsqe+/h4lMivpeqtzeZf3 SVTYFHkVC1V3BCkvQ6FsKBqMSTZX6kApDC/eYOnq+jzcWFIOAie4vzO+DzGIaNwmmPu/ EKs2gwj8hq7J3uDQg38Vrw+DSbCRW66c7fkSG9kQm+rgdg1Cale2KL+7qYDHoKIWiLlO /nWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801899; x=1740406699; 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=Tx6GkoUIFUyuUtNb8RLWVuurpj5FdZ6/dmO+pJenrKM=; b=u9Y9y4t2vmHle2XekvgqTMeZSbtm+5pt+gI/Frvn/0AM8h3gR6w9TMbOtYF3O2moaB FqphUVZSpxbtgetNlrn1BDzSZUyqP+6KRGGnmqlYeX2jng6olp5dVCre3bQT/9hTFj7e L4sbCYBkJH51eOqhGvfU6u4hOyvFsbUtmIL+ybt9zWgICzPVg1wrAmwjtBf0RKYflo0w FX8e04DI/1xZ4eboRnDTvZEWWicXlkGa+9Lrf9IPPFe8XH8c0+eTLaZbMbme/Uj3ZDgF +BjhvF4Q6WhTYcL7o1K4V1cST0PMUyovi4ku/CaKw6Dt5Gr5rUaNzMS+7ShwAOgOom20 1pLw== X-Forwarded-Encrypted: i=1; AJvYcCXQLDsEoe/6a4RIU5GpQ3wtsX+o3NUIQsLX/uy7GWoyJWTKmtj6EnEGB9IJrKE7YC13mw8E7FbnGjzTpF8=@vger.kernel.org X-Gm-Message-State: AOJu0YwEEfgWMmZJsonYLGfP8n5knXbEGyvXGRcyO36l8vEFqdXXPfVa wcTy67gKNmyiY3wK2qzwBKkI489qScUxV4d9dvmtQ1YHMMXPL7t16K25QbwI7G+zsSVnySRP9k9 ZHQPThg== X-Gm-Gg: ASbGnctDT/4cPiCVLv9e7qC45XF0lkgoRZrcldXFrU2uKo9D4Eg0VMacZjBP+56QMT2 Mi8TD8exEa35Qvhll+NUmocdWEak9k7PA5pvcM/UhA7A2LmlowcDv61vATS3FVVHErmfj1iRSYy seFzeUy+0NkfoYzeufdSOgyDAKey2G9C/PuOkiIIpHhVhR85gzlZ3QWMbgpmtWqS+GuiR8EVArv jScrjfx0PtIBinKhvogSdSt+bV5QFH1KRL/4kEWAgelVVsGnIpsu85ks1U7yPrAL0Y0SzisyHqi dNmUhLIifLMH X-Google-Smtp-Source: AGHT+IE/qvCwgaFOQFmjqsTB7+FRF0KmycMJ4EIsWisNbN+EGXcaa/79l70KQ27RjIZIw+iVI8GNpA== X-Received: by 2002:a17:902:ce82:b0:220:e1e6:4457 with SMTP id d9443c01a7336-22104043055mr135578055ad.26.1739801899059; Mon, 17 Feb 2025 06:18:19 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.18.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:18:18 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:16:03 +0800 Subject: [PATCH v6 14/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-14-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=9503; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=KCxHPSrq+0wZsSrJjnPZ9OEDEC8A7tuq2rtnWGAQTg0=; b=SBj1OBYzoS68UHhjatnJwlxOpQxaUwd58sm6MPzB+/Fshxfv2j2YqbLXbNyZZxhHkBZDE+iim CI8d9tu8n7EAHWT/W95lz4OAqJsVT2kAIcRtAnEFKW9Kv+lvERBB0al 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 | 134 +++++++++++++++++++++-----= ---- 3 files changed, 107 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 50acaf25a3ffcc94354faaa816fe74566784844c..852c2ea632f1bb52b3d83ccd45c= 8afd2e5f8e988 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c @@ -1366,6 +1366,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 0b148f3ce0d7af80ec4ffcd31d8632a5815b16f1..b14bab2754635953da402d09e11= a43b9b4cf4153 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h @@ -264,4 +264,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 b87da2bd20861370e7b3b1fa60a689a145c2fab7..4d22c9029b8c4af0c7da86af20b= d34c3b5d63e11 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -831,8 +831,12 @@ static int dpu_plane_atomic_check_nosspp(struct drm_pl= ane *plane, struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); struct dpu_sw_pipe_cfg *pipe_cfg; struct dpu_sw_pipe_cfg *r_pipe_cfg; + struct dpu_sw_pipe_cfg init_pipe_cfg; struct drm_rect fb_rect =3D { 0 }; + const struct drm_display_mode *mode =3D &crtc_state->adjusted_mode; uint32_t max_linewidth; + u32 num_lm; + int stage_id, num_stages; =20 min_scale =3D FRAC_16_16(1, MAX_UPSCALE_RATIO); max_scale =3D MAX_DOWNSCALE_RATIO << 16; @@ -855,13 +859,10 @@ static int dpu_plane_atomic_check_nosspp(struct drm_p= lane *plane, return -EINVAL; } =20 - /* move the assignment here, to ease handling to another pairs later */ - pipe_cfg =3D &pstate->pipe_cfg[0]; - r_pipe_cfg =3D &pstate->pipe_cfg[1]; - /* state->src is 16.16, src_rect is not */ - drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src); + num_lm =3D dpu_crtc_get_num_lm(crtc_state); =20 - pipe_cfg->dst_rect =3D new_plane_state->dst; + /* state->src is 16.16, src_rect is not */ + drm_rect_fp_to_int(&init_pipe_cfg.src_rect, &new_plane_state->src); =20 fb_rect.x2 =3D new_plane_state->fb->width; fb_rect.y2 =3D new_plane_state->fb->height; @@ -886,35 +887,91 @@ 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 {stage_id * mode->hdisplay / num_stages, = 0, + (stage_id + 1) * mode->hdisplay / num_stages, + 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; @@ -954,20 +1011,17 @@ static int dpu_plane_atomic_check_sspp(struct drm_pl= ane *plane, drm_atomic_get_new_plane_state(state, plane); struct dpu_plane *pdpu =3D to_dpu_plane(plane); struct dpu_plane_state *pstate =3D to_dpu_plane_state(new_plane_state); - struct dpu_sw_pipe *pipe =3D &pstate->pipe[0]; - struct dpu_sw_pipe *r_pipe =3D &pstate->pipe[1]; - struct dpu_sw_pipe_cfg *pipe_cfg =3D &pstate->pipe_cfg[0]; - struct dpu_sw_pipe_cfg *r_pipe_cfg =3D &pstate->pipe_cfg[1]; - int ret =3D 0; - - ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, - &crtc_state->adjusted_mode, - new_plane_state); - if (ret) - return ret; + struct dpu_sw_pipe *pipe; + struct dpu_sw_pipe_cfg *pipe_cfg; + int ret =3D 0, i; =20 - if (drm_rect_width(&r_pipe_cfg->src_rect) !=3D 0) { - ret =3D dpu_plane_atomic_check_pipe(pdpu, r_pipe, r_pipe_cfg, + for (i =3D 0; i < PIPES_PER_PLANE; i++) { + pipe =3D &pstate->pipe[i]; + pipe_cfg =3D &pstate->pipe_cfg[i]; + if (!pipe->sspp) + continue; + DPU_DEBUG_PLANE(pdpu, "pipe %d is in use, validate it\n", i); + ret =3D dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg, &crtc_state->adjusted_mode, new_plane_state); if (ret) --=20 2.34.1 From nobody Fri Dec 19 14:11:21 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.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 01FF822578D for ; Mon, 17 Feb 2025 14:18:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801908; cv=none; b=fW8s1F8nNpRSy6IoT6/UZPBOO8vALgIaI/nE4YYn1JQQtMZgbAccQ6XE+ACo4MiKQVW3uoOpDddVeBI883ElBfoDO+tS/4Hg8HJtUFGQZ7quRRSf1+sq5qEizguno2u2y9Iqyo/NiZn0d7hvttI/jG6Ex+lnxZfImbkyK4XRy8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739801908; c=relaxed/simple; bh=veu7hLXT3SD4D0Kyuw+V0KvUpZ/gY1t/JfEoWat6gtQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HHWNCfy0hdePd6W9EyoflMCLJsZBY5aTYCrCYC1f1gaIQQsqUbENIpkjA0ScUn8/dCzUM42ug8tjsfi9x6eeS10vtur/DElgVCMNVDbXfKSe/yfH5XCoZl0HImtRW2rR0T8v3bzuwBBI0pZLofyf1F+B8vNHBxoAiAAHvVbeP7M= 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=JFLP5q2u; arc=none smtp.client-ip=209.85.214.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="JFLP5q2u" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-21f2339dcfdso66145065ad.1 for ; Mon, 17 Feb 2025 06:18:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739801906; x=1740406706; 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=cXLhjKi+Nzo0OfIZF64sRgLJpm5FXfzGgMsXpBNxX8k=; b=JFLP5q2u2QRxT/PZJ+aHpsdM2vBkDi0/p6rR+P2WDlQ3Zrjnbyr0o0i9sWyCQfYFDT nQcx/zjrWq+s7VURPcIeikLA22gARKSjf6axT7yiVu3d34/Hs2jDUhHd1GjNmgKoft90 OUg7j90JZO292UKGKh/sVRKsrHGYoCeWC36yJw9hOGMnjFySzmCN1VztketYx0JFwWem eAGMOqA56X1J4FoeQdRbl13dcjn1ttj0+Hv3iysL12OlWkyYS9ahdN3e1HjQxbgZJHHm yLaOSwWuG/izheALwYpD28dGSl3E9Q3XyaWjzjS8LOoDx2W0wxMhtAM1j51y06Ll9HpW 5Rjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739801906; x=1740406706; 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=cXLhjKi+Nzo0OfIZF64sRgLJpm5FXfzGgMsXpBNxX8k=; b=DEd8+yqbz6zlzD7A+aDxtOVM5w+or6BXY/IKRciSyVhvxuzuy5vfQWI/xRD49+ntRY dVCuX5CO4rYk/qseG/m25wtX7nAs13iRCgacq+hdbhVvOLWRmcMaJeLPpQ44UqG2hdlV kQhklLyw79QY5hHkV56fXWhiISIb9aiuggvchVkhKUfPbXjX30up0UMA8PZfI5R5ytga mPI5Ki3rtM0EotMEzCsDUWGWSEI9I7LkjuA6H3/iu6Gvu7Clgisre7hyWCvcRLG376w5 5aWzVCyrwg3dDg3SPQpjVMu6ufKvOwLLm7WlsdDQMpdXjDgfUfQxmNbJlC4olHRPbXgC cLIw== X-Forwarded-Encrypted: i=1; AJvYcCU4yp092Xi+oeEvE0QJXPEcJ9V7JgoOOFY2iDZ/2uejs6ErtbBVa8tNf0zOEAsvQo/nutEShwjTRws4FLQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwM1qLF3p6AzHofXpD5bRAmyZNm+kFUxeXeLE5Fy3DFUyr3R1IR Y8QSG5GutLQt/dsYp6jm1q9SaB5rzPcFlyXUpURN2PyH5S3uAhhXnGgZ0wjBEEaVv/vOEnl3nL2 eAeFuWA== X-Gm-Gg: ASbGncthM2MzIku5wdyLJMt1/8L6mbR7OEvCzKIhfsUoGcIdsfsxnrskfbhmYDAx5EE iv4LI94btrOrRK5zgrehCRW0/pkdAA9C6jQfJXD7i0sVNtZ/11UkYtt44O3oyiZrmT6m0SmS2Y5 V+8eIxPIw3kBgAGWB4sHgi4LQb11pmWuanAtW45G0++rdaLoDIrRkd9/6rJPB6KLKB8kiRbds2O NaD4a9UyGMVVkTQBZxrujVG3GkCsQET+j4vy3UBu2JYFtdwK6rcXV7YTw8RYULvaPnBPssl2QFU JF9QSZQqb2hU X-Google-Smtp-Source: AGHT+IGdb+TI0TyztzjV+M3t6by7GQP11sx53miPRwsVTLVzqy3N7a8SwYhWpx2NGAdC5Z8hX3yH6A== X-Received: by 2002:a17:902:ce06:b0:21f:40de:ae4e with SMTP id d9443c01a7336-2210458f528mr169643645ad.9.1739801906191; Mon, 17 Feb 2025 06:18:26 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5366984sm71900845ad.60.2025.02.17.06.18.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 06:18:25 -0800 (PST) From: Jun Nie Date: Mon, 17 Feb 2025 22:16:04 +0800 Subject: [PATCH v6 15/15] 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: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-15-c11402574367@linaro.org> References: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@linaro.org> In-Reply-To: <20250217-sm8650-v6-14-hmd-deckard-mdss-quad-upstream-oldbootwrapper-36-prep-v6-0-c11402574367@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=1739801787; l=6380; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=veu7hLXT3SD4D0Kyuw+V0KvUpZ/gY1t/JfEoWat6gtQ=; b=d9M3KDoVU/iLbzEyL4YjLQ9mmF90OA6iC48MVzT+JQBCbawsPxmju9bSUFWMFYIeFV7lsWF2W 9YlTcakHl8pAwncAsLQLkRkwRpgQeZDONcnMJMusmu3sZ2L7xguUOzE 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 --- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- 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, 28 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.c index 852c2ea632f1bb52b3d83ccd45c8afd2e5f8e988..6b306755fceb3973d2063b79836= 22543b71a723c 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; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm= /disp/dpu1/dpu_crtc.h index b14bab2754635953da402d09e11a43b9b4cf4153..38820d05edb8b3003971dc6dc67= 5ba8ede847be8 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 c89a5da0fa8321e9082d5aee304fa16402bb4ad9..d4719b45f4cdd5d1f0bd585283c= 0c16f1df2f1f2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -54,7 +54,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 =20 #define IDLE_SHORT_TIMEOUT 1 =20 @@ -664,9 +664,13 @@ static struct msm_display_topology dpu_encoder_get_top= ology( =20 /* Datapath topology selection * - * Dual display + * Dual display without DSC * 2 LM, 2 INTF ( Split display using 2 interfaces) * + * Dual display with DSC + * 2 LM, 2 INTF ( Split display using 2 interfaces) + * 4 LM, 2 INTF ( Split display using 2 interfaces) + * * Single display * 1 LM, 1 INTF * 2 LM, 1 INTF (stream merge to support high resolution interfaces) @@ -691,10 +695,20 @@ static struct msm_display_topology dpu_encoder_get_to= pology( * 2 DSC encoders, 2 layer mixers and 1 interface * this is power optimal and can drive up to (including) 4k * screens + * But for dual display case, we prefer 4 layer mixers. Because + * the resolution is always high in the case and 4 DSCs are more + * power optimal. */ - topology.num_dsc =3D 2; - topology.num_lm =3D 2; - topology.num_intf =3D 1; + + if (intf_count =3D=3D 2 && dpu_kms->catalog->dsc_count >=3D 4) { + topology.num_dsc =3D 4; + topology.num_lm =3D 4; + topology.num_intf =3D 2; + } else { + topology.num_dsc =3D 2; + topology.num_lm =3D 2; + topology.num_intf =3D 1; + } } =20 return topology; @@ -2189,8 +2203,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 63f09857025c2004dcb56bd33e9c51f8e0f80e48..a9e122243dce9006aaa582a1537= 980c86b6203a4 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 4cea19e1a20380c56ae014f2d33a6884a72e0ca0..77a7a5375d545483edb316e8428= df12212191362 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 64e220987be5682f26d02074505c5474a547a814..804858e69e7da1c8c67c725aa46= 2c1a558d1b402 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h @@ -35,8 +35,8 @@ #endif =20 #define STAGES_PER_PLANE 2 -#define PIPES_PER_PLANE 2 #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