From nobody Thu Apr 9 16:33:20 2026 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE42B36CDF8 for ; Fri, 6 Mar 2026 16:33:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772814804; cv=none; b=Zx73DJI8H+C/OtnCVn1UKHowslgBRTX/14SE/sdt+3i6Ag5uHd0zHuAK1VqN8MDMzksb2J8mi6dMWcldrFpkpdiN+gYzABsnK0iQSmdNpQw06FjnSXB25bx8FjNP7PJS6B281+WeN0wKkcmbc8ruTO0NlWl36vU96sdY7XwpkKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772814804; c=relaxed/simple; bh=t1t4YoDlUzSJoUjo8KmiYuwsghR6uCHf26BrU8o4d9E=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=bYeH9h8+ldDpL8ebG9rEKS63AIokTBc6J5Bn9cItnlamAxj7yzxUnN4StKuCMPJWK7tf6cPAHlIs69MOsesiSH+1WxOaGN1M1nKtEA3CKj3xNfWXXl5WjOi2ZgTDpMT0rCPHAgl2X8DN6WTit9JoViqWuq+lgYXdLYPx1EzlJkU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jZMlZTBr; arc=none smtp.client-ip=209.85.210.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jZMlZTBr" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-8296dabef74so3404419b3a.1 for ; Fri, 06 Mar 2026 08:33:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772814803; x=1773419603; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=fniX8oUV8n9EE4oHisFRFMjU1mIvUBscUL0mED7CFfk=; b=jZMlZTBrJjifjPoCwLqEgbU9eIGNSrAlkHu3PB+9+4XkB3qQQAnuY0CX3onzORv3EV 7mDybG1r6xq7PDONBCvLYtuKr090F3P8+07vHv5p290TQtJ5h3yWSRqkVe5Eg1JFo0/C OAHTyMVUyjhiv5ZhQKmAc073hYFR1QIQZo9E2jrTYCSBw5K/wKeS6vcEZ9LtYOSnL6M0 pj9njcoowtPL28GUYBI7le7sJgFFEfEnPTY1tHmq7yn9GwKP6R/xMDi8BYNidrIjHxMC B91GQIQrYf/biXQUZ262j84TCfTdKreg03LvdgOhXLwR5FYolilzdaivgxzlSZDucB8V lRjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772814803; x=1773419603; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fniX8oUV8n9EE4oHisFRFMjU1mIvUBscUL0mED7CFfk=; b=LxIzZCby4WW3zAZvcSe6v24KNq+jB5VXKU8jorxmVwxXfzX2W9yj4HZ9t+2gShNekl Bx/pJlkfVmTfajF9z3T/ukuD/weBT/yPKed56WICQiIqPUL+gSCUlInSya3cbJ5eKdlw 3bbxq5uki+mUutxRezVv61IaAYj0Q7PeeynPDpk5rdXjlT0tVTy2U1r93MHwgxQYGpbD m/njs1HC7Zb3SAnqx6oMOEv4VkY5w5ccV9eOgAL5gQd3E8dw9RFvmqg5HMqIejpNBsKv 3ZOUf1tFaSQ8WfG3tFLieXUvsz+Sus2VQjDGm2Gh42bxNgbjxpFuu/mZmjty6T7dTE/a 24+Q== X-Forwarded-Encrypted: i=1; AJvYcCXvQmHIhJqHiruHip6/vvOOAE58Wj+mz1eA/iMF+P67L8PkqUZUAJVFtf29JUrQjCgd3a+/ghML2NqDkiE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5tqE4C2pnQQL7QJb14ciyhwL75hWKjeRt6fUAm6EM9fjYiNPv g3aOTdll0KC+hoj2/Z9OI/Wh0MF15OQED+X/gcv4/uMKozJI/j3uBE1V X-Gm-Gg: ATEYQzyc53fpnOmMzQn1cEVn2qd0rjylUZklHrKkrqKxtmWv7euqhDjksgQ0F/Im5pl KaBdyf+o//5VAVaVpnyiGtBH5sfVb+y5kozO/NyH6+E/J+GzJcNhoptxQe6Om+STIZhISCoA6C+ OkmwODRYjSIgE2SC4gr4gAzLtoMCFlVuzlZks0Q5wPbFmZ4VNkmrSLW57o882kzLcDlAhYH2ENY lzMDe83efHT0NKbot0j+G6ZhOqzupvqGTHEBQ2KsJ5GbWnY66HjE3uP/ZNg9U/d1ibji3VAvlt9 7yl1A1OSd+l3KYTbV+NaD1PF58K4xO5ykzKmY4joLeOLgZgEQerCVrJXKWUHT82J6S61oSBIkBB /VQL1MaVNzLrgenRy5NpkRbnDJgJhQDpQ2e8YdwX1lUgsiFFKCSxqcajZiizBzqJW+zFPgsMVQn T5mw/0c2hMEU13tvVYZw== X-Received: by 2002:a05:6a00:1408:b0:824:93e4:2de1 with SMTP id d2e1a72fcca58-829a2eaed31mr2478705b3a.30.1772814802771; Fri, 06 Mar 2026 08:33:22 -0800 (PST) Received: from nuvole ([109.166.36.159]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-829a4676187sm2786788b3a.27.2026.03.06.08.33.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 08:33:22 -0800 (PST) From: Pengyu Luo To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter Cc: Pengyu Luo , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/msm/dsi: fix pclk rate calculation for bonded dsi Date: Sat, 7 Mar 2026 00:32:38 +0800 Message-ID: <20260306163255.215456-1-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Recently, we round up new_hdisplay once at most, for bonded dsi, we may need twice, since they are independent links, we should round up each half separately. This also aligns with the hdisplay we program later in dsi_timing_setup() Example: full_hdisplay =3D 1904, dsc_bpp =3D 8, bpc =3D 8 new_full_hdisplay =3D DIV_ROUND_UP(1904 * 8, 8 * 3) =3D 635 if we use half display new_half_hdisplay =3D DIV_ROUND_UP(952 * 8, 8 * 3) =3D 318 new_full_display =3D 636 Fixes: 7c9e4a554d4a ("drm/msm/dsi: Reduce pclk rate for compression") Signed-off-by: Pengyu Luo Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dsi/dsi_host.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/d= si_host.c index e8e83ee61..db6da9937 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -584,13 +584,30 @@ void dsi_link_clk_disable_v2(struct msm_dsi_host *msm= _host) * FIXME: Reconsider this if/when CMD mode handling is rewritten to use * transfer time and data overhead as a starting point of the calculation= s. */ -static unsigned long dsi_adjust_pclk_for_compression(const struct drm_disp= lay_mode *mode, - const struct drm_dsc_config *dsc) +static unsigned long +dsi_adjust_pclk_for_compression(const struct drm_display_mode *mode, + const struct drm_dsc_config *dsc, + bool is_bonded_dsi) { - int new_hdisplay =3D DIV_ROUND_UP(mode->hdisplay * drm_dsc_get_bpp_int(ds= c), - dsc->bits_per_component * 3); + int hdisplay, new_hdisplay, new_htotal; =20 - int new_htotal =3D mode->htotal - mode->hdisplay + new_hdisplay; + /* + * For bonded DSI, split hdisplay across two links and round up each + * half separately, passing the full hdisplay would only round up once. + * This also aligns with the hdisplay we program later in + * dsi_timing_setup() + */ + hdisplay =3D mode->hdisplay; + if (is_bonded_dsi) + hdisplay /=3D 2; + + new_hdisplay =3D DIV_ROUND_UP(hdisplay * drm_dsc_get_bpp_int(dsc), + dsc->bits_per_component * 3); + + if (is_bonded_dsi) + new_hdisplay *=3D 2; + + new_htotal =3D mode->htotal - mode->hdisplay + new_hdisplay; =20 return mult_frac(mode->clock * 1000u, new_htotal, mode->htotal); } @@ -603,7 +620,7 @@ static unsigned long dsi_get_pclk_rate(const struct drm= _display_mode *mode, pclk_rate =3D mode->clock * 1000u; =20 if (dsc) - pclk_rate =3D dsi_adjust_pclk_for_compression(mode, dsc); + pclk_rate =3D dsi_adjust_pclk_for_compression(mode, dsc, is_bonded_dsi); =20 /* * For bonded DSI mode, the current DRM mode has the complete width of the --=20 2.53.0