From nobody Fri Oct 2 08:29:12 2026 Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [40.65.178.148]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BEF6136A34D for ; Mon, 3 Aug 2026 10:49:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=40.65.178.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785754162; cv=none; b=ZlRLJxvg3L2JbSdPQArOvGAJZLOV9piucmBclpOKITWPf5lpXFreFarRpegllS+YIlmXzZPe5+5JCcdQ0SZh1TuP3H1t93rBSokUhPMw2hSWl2lpknVRSyzeQdEX06IkSlsUpqYKzg/QVMGpxlARMLY4dLblNPKRI3B2Ga3Jb/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785754162; c=relaxed/simple; bh=tvJ1euV7FDbvhXjiBQ1lJADramsy4QYrtjt5cFKgSxI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Lu9015EufIYOQ7CcSyvC84gpFoAEejD3+SewITOloh25bNDQfdPF2TBu68UVOzULJm1R9ZQFdy8bCcg3CrMI794D12uFG44kj8ZAcW0iwTllrxxhq3MoBxMfugOGCxOG53LjsLkzA6wvjlzRAWLnJqp7Uafx4aivHzcuNNScLAs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fzu.edu.cn; spf=pass smtp.mailfrom=fzu.edu.cn; arc=none smtp.client-ip=40.65.178.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=fzu.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fzu.edu.cn Received: from fzu.edu.cn (unknown [10.132.197.192]) by mtasvr (Coremail) with SMTP id _____7DwUyEYcnBq2lcAAA--.2452S3; Mon, 03 Aug 2026 18:48:58 +0800 (CST) Received: from Archlinux (unknown [10.132.197.192]) by front25 (Coremail) with UTF8SMTPA id GTAi0gCnyz4XcnBq2uxuAA--.50465S2; Mon, 03 Aug 2026 18:48:56 +0800 (CST) From: Jinman Ma To: jani.nikula@linux.intel.com, rodrigo.vivi@intel.com Cc: joonas.lahtinen@linux.intel.com, tursulin@ursulin.net, airlied@gmail.com, simona@ffwll.ch, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jinman Ma Subject: [PATCH] drm/i915/dsi: Fix command mode line time calculation Date: Mon, 3 Aug 2026 18:48:51 +0800 Message-ID: <20260803104851.267090-1-justdreemurr@fzu.edu.cn> X-Mailer: git-send-email 2.55.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 X-CM-TRANSID: GTAi0gCnyz4XcnBq2uxuAA--.50465S2 X-CM-SenderInfo: iquskiirrsiqxi2xhvlgxou0/1tbiAgESCGouWYYI+gAFs1 X-CM-DELIVERINFO: =?B?lpiVhlYeYwyZs1/OPERtTLXWCzObpZf1vPAd2grVCeLVvPYVy3YxDVAdnk3XoxBjmT FP3v7bm1J9PyKx+2fd9CIHRdmrlGNtfKhuBLPtL3lDv3lQUTY2S4wmrhU4Y8UQjjd+SC1d fd1r1LZddvxYrmO58nDOG/uV0q9X+IDSycOTKX3y X-Coremail-Antispam: 1Uk129KBj93XoWxGryxGF15GryxuFWrCr45urX_yoW5Xw4fpr WfKr98tr4rAFyv9348A3WjvFyrWas7tFWUJr1DWwsIk3Z8X3Z5GFs2yFW7GF98W3Z3Ar18 ZF97WFZIg3WFk3gCm3ZEXasCq-sJn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ36c02F40EFcxC0VAKzVAqx4xG6I80ewCY02Avz4vE-sDv73VFW2AGmfu7 bjvjm3AaLaJ3UjIYCTnIWjp_UUUYv7AC8VAFwI0_Gr0_Xr1l1xkIjI8I6I8E6xAIw20EY4 v20xvaj40_Wr0E3s1l1IIY67AEw4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0 rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVWUJVWUCwA2z4x0Y4vE2Ix0cI8IcVCY1x0267 AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIE14v26r4UJVWxJr1l84ACjcxK6I8E87Iv6xkF7I0E 14v26r4UJVWxJr1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44 I27wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2 jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwACjI8F5V A0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2ka0xkIwI1lc2xSY4AK6svPMxAIw28I cxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2 IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCI42IY6xIIjxv20xvE 14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20x vaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8 JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUbXdbUUUUUU== Content-Type: text/plain; charset="utf-8" The command mode path in gen11_dsi_set_transcoder_timings() first truncates the AFE clock period to an integer number of nanoseconds, and then truncates the resulting line time to microseconds. At high link rates, 1000000 / afe_clk() can evaluate to zero. Even at lower rates, the successive integer divisions can make line_time_us zero. DIV_ROUND_UP(400, line_time_us) then triggers a divide error during the atomic commit and prevents i915 KMS from initializing. Calculate the line time directly in nanoseconds using 64-bit arithmetic. Use bits per pixel with the per-lane AFE bit clock and retain nanosecond precision until calculating how many lines are needed for 400 microseconds. Tested on a Huawei MateBook E with an Alder Lake-P GPU and a 2560x1600 dual-link DSI panel. The change prevents the divide error and allows KMS to reach the display manager. Signed-off-by: Jinman Ma --- This does not completely fix the panel. After entering Plasma, the image still shows visible tearing or jitter, sometimes with an obvious offset between the two halves of the dual-link panel. Switching to a text console can also leave the panel black. I am continuing to investigate this as a separate timing or synchronization issue. Please let me know which additional i915 debug logs or register dumps would be most useful for the remaining issue. I'm pleasured to collect them. --- drivers/gpu/drm/i915/display/icl_dsi.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/= display/icl_dsi.c index ea0cdb782..c89e24de7 100644 --- a/drivers/gpu/drm/i915/display/icl_dsi.c +++ b/drivers/gpu/drm/i915/display/icl_dsi.c @@ -917,16 +917,19 @@ gen11_dsi_set_transcoder_timings(struct intel_encoder= *encoder, if (is_vid_mode(intel_dsi)) { vtotal =3D adjusted_mode->crtc_vtotal; } else { - int bpp, line_time_us, byte_clk_period_ns; + u64 line_time_ns; + int bpp; =20 if (crtc_state->dsc.compression_enable) bpp =3D fxp_q4_to_int(crtc_state->dsc.compressed_bpp_x16); else bpp =3D mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format); =20 - byte_clk_period_ns =3D 1000000 / afe_clk(encoder, crtc_state); - line_time_us =3D (htotal * (bpp / 8) * byte_clk_period_ns) / (1000 * int= el_dsi->lane_count); - vtotal =3D vactive + DIV_ROUND_UP(400, line_time_us); + line_time_ns =3D DIV_ROUND_UP_ULL((u64)htotal * bpp * 1000000, + afe_clk(encoder, crtc_state) * + intel_dsi->lane_count); + vtotal =3D vactive + + DIV_ROUND_UP_ULL(400 * 1000, line_time_ns); } vsync_start =3D adjusted_mode->crtc_vsync_start; vsync_end =3D adjusted_mode->crtc_vsync_end; --=20 2.55.0