From patchwork Wed Sep 16 03:33:24 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chen-Yu Tsai X-Patchwork-Id: 3365 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114]) by mxe881.netcup.net (Postfix) with ESMTPS id 9E3071C1EF6 for ; Wed, 16 Sep 2026 05:36:43 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=chromium.org; spf=pass (sender IP is 172.105.105.114) smtp.mailfrom=linux-sunxi+bounces-25967-noreply=patchwork.local@lists.linux.dev smtp.helo=tor.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.105.105.114 as permitted sender) client-ip=172.105.105.114; envelope-from=linux-sunxi+bounces-25967-noreply=patchwork.local@lists.linux.dev; helo=tor.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id EA6FE39219 for ; Wed, 16 Sep 2026 03:33:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 44E821E5B9F; Wed, 16 Sep 2026 03:33:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="SGDFbIn9" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (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 BE891364934 for ; Wed, 16 Sep 2026 03:33:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529631; cv=none; b=LnNsij49RVNl83TPOplV60bwKZrYupG6vAXjAVo6laTK4H2oh+uazjVl3FFToTBARhBKvA+RiLBkt5BS50JzeAyMu09hvI9As/MSYZgyEoKEYCmF7lK9puxV+ZIETUaZxl7jGIphFOHH5w+NsSGlP48ELLX+RX3JSgxWFU6f2aw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529631; c=relaxed/simple; bh=TbBricvTVGAwifGX896eoMTqhERlhv8wQE0G/lmRl+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Movlv/CWctsaAwsZtMraZtIm+D+BmvwbxOcFEGeeqZXrtFacoOlGUkvyJq6vQ2xyLFI5D0TBiqTNX+ZjNUrgQccbcE/DJ/r9KqG/MOv8+N4zO3kCVTRjbbgTlPdAKJZv8Peg2qrt78sWYgXflg9M0NXXzySpeaxCSr4Y46WxPzk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=SGDFbIn9; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-39b350c6920so441496a91.1 for ; Tue, 15 Sep 2026 20:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789529629; x=1790134429; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=B3+7MkmB6aG1HjinH/gRhRGDcVk6ogklV5sjoZ/OmL4=; b=SGDFbIn973zAnIjWvy7/yVGvWD/jDI9UFyGJYp/5F8yQ6bS03RoPzpGjeJ1gcsKUX2 ck1t3vzAQ5NX1roEZTVrzH7JxMZnvHVAjLEVtWDKZxtT0ws1M8408THTbIOrK8J81Km2 YWOBgl68qFSX1yALmIJ+0k5nVptioVavy9CPE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789529629; x=1790134429; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=B3+7MkmB6aG1HjinH/gRhRGDcVk6ogklV5sjoZ/OmL4=; b=B83BjEcDPjlwdGDAvHdnf/3pnb/TKRHLYT73OpX2iH1J3lK1/aSV+ES+RoKdfTbxBj 44r/d4B0+oqgGT/l0aP7dJCu4qNNar3mwlwQgWnRtRjmB1WssBNsFA0BGXcVsWYSTQdB 6gdkwCV05+EqJbKdEVgoyJKsqREkwSdkEkNbJo4HWhv1oAht0t3Qxc+ullF7Nw0pp6AQ tyqEFakdg0ykArtbIL3j90XtnRPms6wUbOyi7zvLqENLK0Gie28frF08O/OicCMLV7ka ZHesYKF8efWq7PeTf5+OjRCn9Y0DW8mlTvl0TUV3gZ25VJ/nLa0p10FlRtrn1eqRIXr7 fQ5g== X-Forwarded-Encrypted: i=1; AKwUvByNS91IjR7kdFIZuVV7HRfaxEoTbPHll0twuC7GP1mgXZbMzYeZV5gPlQb4BSJWUadRcWmL2YdhJfnTkQ==@lists.linux.dev X-Gm-Message-State: AFuF++m1eTpBIAoIq+CXnemrr8u4vN7JlIpUqR5LmFVKAGyXVKwPT/g5 Bek3J5ZDJ/lgSZF78wRFS99moWMR9WzZWdPj48orAfiSY2S4fH2xoeWIM4SERfJ1aQ== X-Gm-Gg: AYBFou0Zjkk83g8oyBf0Et6bX/By9T3mNjonePIyqNzJc4T+C2vKNHlBHv+ClpWQePD 655NOi6a4OpV/ScZG14BLBOlIrYX9ROq/eSBmVv+7zinMKnJhwD5Iy0Gnq7X0WSQ0NZKgk6nqNE q2S2ASTtjm7+CYEZXplWb8C+UZpElMcQ044PJ/4vd3gQbeUz1XSFjy52IK/n/U/0y3lZUw35xZT jiHxFILo1edQrm7FeZzU+qKPGReEkYoA3J3gRU3tNec29rMde8TFwgqKLgj3VeKV0tOpZ0FbZ5D S1GIBEbEO1oXVPnRwJaUw2m+uVVDqfDvtEqNJ1e0hRva9v/EuzsubdFKsXtqelo5ro52Yhf7Qjw wcDmMukjFnvVtU7AjGl/a5h6g4A525GZN1x/DR/qWBE9qkk1lXh8UKtOnPJhQUA/oDgJuqWZvg8 mKzKBYd2vafkEnvv4LSuQEanYzFdylWXJkkK8lsZ2hMiZhPEcLCXMnSz09y+KhJFzxHXVc5sC+Y iGctRbX6RStnNP2KgfS2z46RiNiLkIk9D03GAHvAHbefHwgbPwRt6n3tQ== X-Received: by 2002:a17:90b:3b41:b0:38c:a59b:5189 with SMTP id 98e67ed59e1d1-39e1e48a416mr2215669a91.15.1789529629173; Tue, 15 Sep 2026 20:33:49 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:203d:7:1f62:7622:5d61:2578]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39e1bbe3e62sm1833477a91.10.2026.09.15.20.33.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 20:33:48 -0700 (PDT) From: Chen-Yu Tsai To: Liu Ying , Laurentiu Palcu , Lucas Stach , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: Chen-Yu Tsai , David Airlie , Simona Vetter , linux-sunxi@lists.linux.dev, imx@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH RFT v2 3/5] drm/sun4i: layers: Fix VI buffer address for clipped offsets Date: Wed, 16 Sep 2026 11:33:24 +0800 Message-ID: <20260916033327.3054126-4-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.1032.g73a4cd73de-goog In-Reply-To: <20260916033327.3054126-1-wenst@chromium.org> References: <20260916033327.3054126-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= Commit 79ac1c945ab8 ("drm/sun4i: layers: Use drm_fb_dma_get_gem_addr() to get display memory") dropped the code to calculate the framebuffer's DMA address in favor of drm_fb_dma_get_gem_addr(). This turned out to be wrong in a couple ways. The hardware is programmed with clipped dimensions, so it needs the buffer address to start at the clipped boundary. Moving to the helper negated the clipping. Also, when clipping on the left, the buffer address needs to start at the first pixel in the sub-sampling group even for the luma plane. The hardware handles the interpolation internally. Switch to the new drm_fb_dma_get_gem_clipped_addr(), which provides the buffer address starting at the clipped boundary. Calculate the intra-group offset and adjust the luma plane buffer address so that it points to the start of the sub-sampling group. Fixes: 79ac1c945ab8 ("drm/sun4i: layers: Use drm_fb_dma_get_gem_addr() to get display memory") Cc: # v7.1+, needs drm_fb_dma_get_gem_clipped_addr() Signed-off-by: Chen-Yu Tsai --- This is an alternative to Jernej's original revert: https://lore.kernel.org/all/3980ea1aeb3f7fe8b4700e36560deeba3d050664.1785772659.git.jernej.skrabec@gmail.com/ --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index bad102134726..530efae7e13c 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -130,7 +130,7 @@ static void sun8i_ui_layer_update_buffer(struct sun8i_layer *layer, ch_base = sun8i_channel_base(layer); /* Get the start of the displayed memory */ - dma_addr = drm_fb_dma_get_gem_addr(fb, state, 0); + dma_addr = drm_fb_dma_get_gem_clipped_addr(fb, state, 0); /* Set the line width */ DRM_DEBUG_DRIVER("Layer line width: %d bytes\n", fb->pitches[0]); diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 2e9cda45c04e..7a1d5f1db037 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -205,7 +205,21 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, for (i = 0; i < format->num_planes; i++) { /* Get the start of the displayed memory */ - dma_addr = drm_fb_dma_get_gem_addr(fb, state, i); + dma_addr = drm_fb_dma_get_gem_clipped_addr(fb, state, i); + + /* + * The mixer can handle odd offsets into sub-sampled YUV + * planes, but needs the address of the first pixel in each + * sub-sampled block. Adjust the luma buffer address backwards. + */ + if (i == 0) { + u32 x_diff, y_diff; + + x_diff = (state->src.x1 >> 16) & (format->hsub - 1); + y_diff = (state->src.y1 >> 16) & (format->vsub - 1); + dma_addr -= y_diff * fb->pitches[i]; + dma_addr -= x_diff * format->cpp[i]; + } /* Set the line width */ DRM_DEBUG_DRIVER("Layer %d. line width: %d bytes\n",