From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 54BDDFCB61E for ; Fri, 6 Mar 2026 16:33:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 89D6410ED85; Fri, 6 Mar 2026 16:33:24 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="EkUsr5QC"; dkim-atps=neutral Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C49810ED85 for ; Fri, 6 Mar 2026 16:33:23 +0000 (UTC) Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-829ac4670c4so265088b3a.0 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=lists.freedesktop.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=EkUsr5QCICm7FwhOL4zryKWxHqaNqFpduDy/dVjZQU2SE1cvoYjPJq36ZWsm20FXSv t81+dJ6uwI7BYi9rBJ3rOOxScd7qPZqzfgsxPO2MP6djyBPLnleTp8zZaUZEUnU2NMew CJkwZv6FxbWn8iSIPThaSnzdSpduYFbEOrZ3oSrhUzoQt0K8dQe7gQ3MH1us7SB1qMpL amZE8FzmGip3X2yK7AwLRaVjQX7xacsDVIixMJt4zAM7S67SspYC9v6LJQhIF7La3/Zz SLufsxYbjtcJ4e7d+hgeJf4t98cg6RqeINqMK3S8/N6bkzaLtCAKUElsHD9ddJYnVFNV QkJw== 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=TvNio1zfXbYja3DwbKuTtVLesijB/I382fxEAbnDW4OAwe/Lzq34pNgHPfsPmB87mb F2DyCBKE7twe4ZfUF4UjeFXl413h8klwy84R8gcOmuRj9IjDs1mFV8G4ffK+Nh90xJMT QWCV/CJrcxDaT5+euxK2Gl8yEmI0FlnOYjs1kr2xQR3RW4W5NLaApJ7PUcp77lAzA+ie 2+AoTbWg7HZ3Z0Ir0RgseMJNH3ZUn1Dma3ip8ZlBcmMxxo44Ls5I7IbA2iB6ai5xHl2Y yHqRvN7GUbrpN1Xt6lm3D+C7jDHlQij+CPxLFg6ZI9sjcO/RKRdFHMQJl5nrEc6pi82A yp8w== X-Forwarded-Encrypted: i=1; AJvYcCXEfknOvK3hX+RIt7HszTf/wn/dv4hxB0ker6vhuFMCJjpFEwVC8UKC1Fior7xQ0JOLzfJqUSJdAK4=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxM2LsfelJ0kCRHzMDYtmQLldiDXUzoZdea8aFTnPhlLA5uMUpu 4kNxQsdlJzGU7U5rPGKq7bcoWAFwDbiEMhkV+343XTMQbhevir39D6id1m202C32Do8= X-Gm-Gg: ATEYQzxk3tQc9wZmnt3CnrHBh0ddj9ITj+R+47eZBdzkyubzDT4iw9CzH2kK8gpoIyu znHDOM2HcZy+RxCXvb5DVdxjhyC5Wlz+3Eo6Fq8NXfFDR6m4QnrSpLqKTCdAoNBq7n+Af2fifX2 XrSc5qcoVAByGcA8pKUMcXoqsGmpE7O6eda882BYZm9bw+gzDRGgPAfSIe/takUK3AR8Y/b5zmT Q1tBt71soCbNrbV+wdM9kynUDbXhxkoGnyRNz11PHb5GXikzNYGCN+h0u4abUrCAzRKFMrYIvos Pv7pAvhLwPhF/6/Z9BA5fnwd/WqYbfj1tNs1FE6wZqmxc2tRf9WKzK1aarTLqjppEmqUEzS7xnE uZL8GwTus9u6q4Wk69deWLOORs+/N4LNiPgefoWhz17qHbwiIjty5xdYl8ws6Kjcgq66mpQ9YTc b49J+dkZXM982zPxMYrQ== 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 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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 = 1904, dsc_bpp = 8, bpc = 8 new_full_hdisplay = DIV_ROUND_UP(1904 * 8, 8 * 3) = 635 if we use half display new_half_hdisplay = DIV_ROUND_UP(952 * 8, 8 * 3) = 318 new_full_display = 636 Fixes: 7c9e4a554d4a ("drm/msm/dsi: Reduce pclk rate for compression") Signed-off-by: Pengyu Luo --- 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/dsi_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 calculations. */ -static unsigned long dsi_adjust_pclk_for_compression(const struct drm_display_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 = DIV_ROUND_UP(mode->hdisplay * drm_dsc_get_bpp_int(dsc), - dsc->bits_per_component * 3); + int hdisplay, new_hdisplay, new_htotal; - int new_htotal = 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 = mode->hdisplay; + if (is_bonded_dsi) + hdisplay /= 2; + + new_hdisplay = DIV_ROUND_UP(hdisplay * drm_dsc_get_bpp_int(dsc), + dsc->bits_per_component * 3); + + if (is_bonded_dsi) + new_hdisplay *= 2; + + new_htotal = mode->htotal - mode->hdisplay + new_hdisplay; 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 = mode->clock * 1000u; if (dsc) - pclk_rate = dsi_adjust_pclk_for_compression(mode, dsc); + pclk_rate = dsi_adjust_pclk_for_compression(mode, dsc, is_bonded_dsi); /* * For bonded DSI mode, the current DRM mode has the complete width of the -- 2.53.0