From patchwork Tue Sep 8 09:07:40 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: 3222 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sto.lore.kernel.org (sto.lore.kernel.org [172.232.135.74]) by mxe881.netcup.net (Postfix) with ESMTPS id C26DB1C02BC for ; Tue, 8 Sep 2026 11:19:01 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=chromium.org; spf=pass (sender IP is 172.232.135.74) smtp.mailfrom=linux-sunxi+bounces-25683-noreply=patchwork.local@lists.linux.dev smtp.helo=sto.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.232.135.74 as permitted sender) client-ip=172.232.135.74; envelope-from=linux-sunxi+bounces-25683-noreply=patchwork.local@lists.linux.dev; helo=sto.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sto.lore.kernel.org (Postfix) with ESMTP id BFEFA6038F2 for ; Tue, 8 Sep 2026 09:11:35 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 936FA50AC14; Tue, 8 Sep 2026 09:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="MY7DjU7g" X-Original-To: linux-sunxi@lists.linux.dev 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 F0069503BF9 for ; Tue, 8 Sep 2026 09:07:59 +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=1788858482; cv=none; b=s2kj0j+9FU/bcTYUznvZtlDyBVyihC3yigesEqKw6RJ4W3x0xra3pzJcMJ12GQOa8UZNOWPROG9IX6R2WPr+Za8jezxeAh6y9+xh8WLp2KeFlUM/LEJPY6xcOytJoWcbMx81uHQlS5JAdp3MFU8dfrTu2Mb9eYeC8SuiZb0Or3k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858482; c=relaxed/simple; bh=h38nWmHGokmgNrF8M7H1ZEOsIaWfmOwXRv9fJbwDAq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PpmDx7xkpDucymjnBJL2trMuCJXQKuL+n31zu9eqZexvQS4k0x3hZ5WBsLclyU3j5otFzbdZJppHQ8zFfxTiY4C2udg/XcoNG+ZHwLpJNX/uWPuMZMAgJbUuHo+KJLrqMg09dVqb+udg/deZ+uovUwliLA4RnqswbujZJKU5vSE= 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=MY7DjU7g; arc=none smtp.client-ip=209.85.214.170 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-pl1-f170.google.com with SMTP id d9443c01a7336-2d5cad1a6baso37980635ad.3 for ; Tue, 08 Sep 2026 02:07:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788858479; x=1789463279; 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=htcWMQzzIdN2OMq/lgGMWw6WmNo5HAqJQi0+KH0X9Sk=; b=MY7DjU7gmhOLPAHoxlYGH6XO4kyy35SpqKt90h8EibI6dKw349CSyL/0b9iCXRHOC3 enlTu676BrZp0Vcpb8zxBW7s2/CXMyy7SkQL4N04zR8H4F6hh1xng6oeXCbmX61hmswQ Q2t4LJge4iTir6c/msa9lSi2yr7QFsExIL58w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788858479; x=1789463279; 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=htcWMQzzIdN2OMq/lgGMWw6WmNo5HAqJQi0+KH0X9Sk=; b=KZ1Le1ql3DBfjggBZHptjY4hTMkSuCG73t5cbdhNxLIelGK8MD3NZj6xMtxYWBbVUW vO3YikOlno/cMOzMfy4dp4Lqy2K2NKYufq71GZeM5SMkD17UQzY2Lj1fzPmc2KYd3cyp yVX98IPXr6hEQluxAmImE2qO/OC13j9w+FAMWyUskXBlMFdZiI12519xlhw9wJDb8Pa9 AYeRSH3TWiDCUNSxOR3777D3AJFaumhvwBSCiIvrzCxeu4MyEJf/aw5v5zJhNEan/l9t P2BC2uZCcl6stnwZ50bnV7WWzWsEvZgm0k0DIIztrU3VR1hUAZ0CjEcDhCSIAkCdEeD7 /ppg== X-Forwarded-Encrypted: i=1; AKwUvBzZyGwuNNm1wSncDPy/Xfxr4W4Wc/M64Vqip+DXhHkT1RM9WLRg57BX/GCGQDzx5GnMsNefJkIThaTpmw==@lists.linux.dev X-Gm-Message-State: AFuF++kj3humbooCLuuxxfq508FgcM3Ud7O97Gu7McyLBElrorldy1eE hBIc7xSV1wVsUskr8XOvu+qrB5ZJ1L/O7JGpkxa9zvwV4gOK1ALK8xCJLyPi71DOuQ== X-Gm-Gg: AYBFou1f+lPVr1g7n1PsliCsjAOyAgD+I42k22XwOBpbeo750x+I2HDNJB9PpwHlnPi /pnMwnK+GBAGVjVxbKqyKqibrBOTMexhr3dGV5ybiZKMCKyEC4tX+F5lbozxTsg49GfdTmOEJOa Zpa89dTannJS8lWfEb4pB1bBvSsQonvZE8HXG5nby8m3AiSYB8dSl7ovANRtpyJGLemC/PNMg/s QGyBwT4C3OW8bH6zDv9Zzh7fCETVx9TI/gMWOeoBcVKoOzbq61NB8bh85agnGCfNsQLik0gbwJU easjbqY2UiK7+H8y7BjePWwlZoTWSBB3xr21yeeeeGTGwRBhO36VCRHCPpZEUqN7mGZyWBgHtIy tGeAUfKcRIOCH+4Ukqli1fwg0Jxwdq8d03ntexam663kTBIAMaT0KAnLFsk4xxu8Yi+mv4f2Z44 AuRcgbRc2gbsBrKomlEiCIyNaD2Ce1h+aMywNmC+H/R0a/uB9QlcDLP+GUCFWk7leOTyNCvr6nT 8Cvp7YNS0Io5qj2Y2unYZufFMatG1bBWObGXdi5OSBUBUA= X-Received: by 2002:a17:90b:2784:b0:395:4de5:1054 with SMTP id 98e67ed59e1d1-39b26272bdcmr47233218a91.16.1788858479259; Tue, 08 Sep 2026 02:07:59 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:201d:8:e541:8c2f:4ce9:823a]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b4b72f62esm19718804a91.5.2026.09.08.02.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 02:07:58 -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 1/4] drm/fb-dma-helper: Add drm_fb_dma_get_gem_clipped_addr() Date: Tue, 8 Sep 2026 17:07:40 +0800 Message-ID: <20260908090745.1089143-2-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260908090745.1089143-1-wenst@chromium.org> References: <20260908090745.1089143-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?= drm_fb_dma_get_gem_addr() returns the DMA address to the "unclipped" framebuffer. However some display drivers want the "clipped" framebuffer instead, as they are also using the clipped coordinates to program the hardware. Some of these drivers are open-coding drm_fb_dma_get_gem_addr() with the source coordinates replaced, while others have been incorrectly converted to using drm_fb_dma_get_gem_addr(), which would end up causing incorrect parts of the framebuffer to be displayed if it were somehow clipped. Add drm_fb_dma_get_gem_clipped_addr(), a "clipped" version of drm_fb_dma_get_gem_addr() for these drivers to use. Cc: # dependency for next patch Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/drm_fb_dma_helper.c | 63 +++++++++++++++++++++-------- include/drm/drm_fb_dma_helper.h | 4 ++ 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_dma_helper.c b/drivers/gpu/drm/drm_fb_dma_helper.c index fd71969d2fb1..a260e7cd5667 100644 --- a/drivers/gpu/drm/drm_fb_dma_helper.c +++ b/drivers/gpu/drm/drm_fb_dma_helper.c @@ -59,20 +59,10 @@ struct drm_gem_dma_object *drm_fb_dma_get_gem_obj(struct drm_framebuffer *fb, } EXPORT_SYMBOL_GPL(drm_fb_dma_get_gem_obj); -/** - * drm_fb_dma_get_gem_addr() - Get DMA (bus) address for framebuffer, for pixel - * formats where values are grouped in blocks this will get you the beginning of - * the block - * @fb: The framebuffer - * @state: Which state of drm plane - * @plane: Which plane - * Return the DMA GEM address for given framebuffer. - * - * This function will usually be called from the PLANE callback functions. - */ -dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, - struct drm_plane_state *state, - unsigned int plane) +static dma_addr_t _drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, + unsigned int plane, + unsigned int x, + unsigned int y) { struct drm_gem_dma_object *obj; dma_addr_t dma_addr; @@ -96,8 +86,8 @@ dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, v_div = fb->format->vsub; } - sample_x = (state->src_x >> 16) / h_div; - sample_y = (state->src_y >> 16) / v_div; + sample_x = x / h_div; + sample_y = y / v_div; block_start_y = (sample_y / block_h) * block_h; num_hblocks = sample_x / block_w; @@ -106,8 +96,49 @@ dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, return dma_addr; } + +/** + * drm_fb_dma_get_gem_addr() - Get DMA (bus) address for unclipped framebuffer, + * for pixel formats where values are grouped in blocks this will get you the + * beginning of the block + * @fb: The framebuffer + * @state: Which state of drm plane + * @plane: Which plane + * + * This function will usually be called from the PLANE callback functions. + * + * Return: GEM DMA address for given framebuffer, unclipped. + */ +dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, + struct drm_plane_state *state, + unsigned int plane) +{ + return _drm_fb_dma_get_gem_addr(fb, plane, state->src_x >> 16, + state->src_y >> 16); +} EXPORT_SYMBOL_GPL(drm_fb_dma_get_gem_addr); +/** + * drm_fb_dma_get_gem_clipped_addr() - Get DMA (bus) address for clipped + * framebuffer, for pixel formats where values are grouped in blocks this + * will get you the beginning of the block + * @fb: The framebuffer + * @state: Which state of drm plane + * @plane: Which plane + * + * This function will usually be called from the PLANE callback functions. + * + * Return: GEM DMA address for given framebuffer, clipped. + */ +dma_addr_t drm_fb_dma_get_gem_clipped_addr(struct drm_framebuffer *fb, + struct drm_plane_state *state, + unsigned int plane) +{ + return _drm_fb_dma_get_gem_addr(fb, plane, state->src.x1 >> 16, + state->src.y1 >> 16); +} +EXPORT_SYMBOL_GPL(drm_fb_dma_get_gem_clipped_addr); + /** * drm_fb_dma_sync_non_coherent - Sync GEM object to non-coherent backing * memory diff --git a/include/drm/drm_fb_dma_helper.h b/include/drm/drm_fb_dma_helper.h index c950732c6d36..b2a0bd7ef9d0 100644 --- a/include/drm/drm_fb_dma_helper.h +++ b/include/drm/drm_fb_dma_helper.h @@ -17,6 +17,10 @@ dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, struct drm_plane_state *state, unsigned int plane); +dma_addr_t drm_fb_dma_get_gem_clipped_addr(struct drm_framebuffer *fb, + struct drm_plane_state *state, + unsigned int plane); + void drm_fb_dma_sync_non_coherent(struct drm_device *drm, struct drm_plane_state *old_state, struct drm_plane_state *state); From patchwork Tue Sep 8 09:07:41 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: 3223 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) by mxe881.netcup.net (Postfix) with ESMTPS id 9FF521C2054 for ; Tue, 8 Sep 2026 11:33:23 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=chromium.org; spf=pass (sender IP is 104.64.211.4) smtp.mailfrom=linux-sunxi+bounces-25684-noreply=patchwork.local@lists.linux.dev smtp.helo=sin.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 104.64.211.4 as permitted sender) client-ip=104.64.211.4; envelope-from=linux-sunxi+bounces-25684-noreply=patchwork.local@lists.linux.dev; helo=sin.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id F182F316B4 for ; Tue, 8 Sep 2026 09:11:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E1802511189; Tue, 8 Sep 2026 09:08:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ofZ9V/R8" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (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 4881950EBEE for ; Tue, 8 Sep 2026 09:08:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858485; cv=none; b=DNxD7vxmoBMpB6XTE6eSP/aq4EhBUv7h9d3joqK81A85t+FKLT68wn7TgvtanuIEmY3bmPVpaPbxk0IBBB/0Av7OuIxxNuhPRfOYKz5MQWp7TgUXbY9WpXGI/HuE0HSNwfOw4xl8wyqOl664QIQexKGmriyBa78QqmdDxITtrNI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858485; c=relaxed/simple; bh=w0FP0wBCIa+/EHsZH1IzuHconhrkS9VP6UooovR5/Jo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u9eka15ixEFIFBN92mwHXkvhU8NoxGlqQ3z1my/NewkrPJMRzZ9sUiyS5eTXD6YWfPym70n5RMMz0paKjgFFUJLNWWYV97VffgBmhvubTMvYpMBxaBIELsjpsiqyKWUeJgKEmDgekDIfSKg4x07+fjSJDZ6Me5vUi8Fn+MJHgRc= 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=ofZ9V/R8; arc=none smtp.client-ip=74.125.227.140 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-f12.google.com with SMTP id 98e67ed59e1d1-396ccd78e6eso313672a91.0 for ; Tue, 08 Sep 2026 02:08:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788858483; x=1789463283; 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=2nbiAaHsEOkyMIOSUPLzzSXJU25j/HCglaTjq/uSdS0=; b=ofZ9V/R8wPI6nE5U1LUNJ9PdGyyvq/pg21Hs2BleXJfr5SrhSkdyQ3BGkZjfuL90pW rGZgWl7ExkCSmihUL+bQDmdtHEN31eXoD2rJfqZwDSt2C8Mtgmjary6crXErBEIN2BFG FQcooDBbyYq5rLXp7e8MCTaHGZ4Z1n5OaILlg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788858483; x=1789463283; 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=2nbiAaHsEOkyMIOSUPLzzSXJU25j/HCglaTjq/uSdS0=; b=USbn+EbskkVKD9IamUul6wp0lPQrGQr2cXSVJcJvak5hYDOQD8WNa6SR7VNQeAnomh DwrmshXbrrehDv1Sgys/M6FYEXqgpy1wuVp7ROnvE/2kEd2SY1MO3KDUB+HDzoxk9ffS CVpodSKNNQ8ZHsZ8xVBYll0A/pv9QNctQS4BfnqK6erTgoiaMVgKL5M81T6feXVCLsk0 r+vSAI47EvAEXQg9x0W38YINU9Ul0EcTTsjIm7DHjyHwL662JqteYvIeN98y/xTEh1/u gLK5vYefmvM2dfZV5+LP6/Igyl4e8E1XwwHBOxrrcfwdiFg+RdtCWgi7Asw96hsw5hYl C86g== X-Forwarded-Encrypted: i=1; AKwUvByNZntxC4ZTRnyFhHpJaqKz/S7/SWslbuCqhHV/+THZGr7W174x3qFnvgYZwwmrYO5PEHyr/yNaddVklA==@lists.linux.dev X-Gm-Message-State: AFuF++neH288jubfheq3aTyAXloSp4jTUq9pkc0DcJ11H6zWpzhYxAr5 /6ptqVGQmsbJDXfwIrq98BBULFK2J4a/L5e5MaS12bz+7AXN9AEMiSpvWPG/rZPapQ== X-Gm-Gg: AYBFou3jOTV8ta8RX7b+odiM7ZsOUIpSHLatQKIlhMELodm9BwvxcVZ3hx39gGbQG1D jXly8l3wiCk2UukKBrLqH19fRVt+NPqmNJZLWREM+FpRVSwUDZZWzkzTb1YbhVVfhPEZyHDJ421 qDwu0LlgBr+JpPp41WWWAyfns47PNts7sMyOIjoBf2McDSnJMDRvTmYCRy2ECk+5iwKusyDqvNk wifmarpy4qc13kl1bC/o32Zto+TZirBMCvGQW30bOS2NP9NPstfpxMZRslvsSO7FSMe3/c/tFnS GIrMVIjLuH6ylnXxYgObMqAHUn5aadY9jOBT3bmreh6Y/HXrSUoPgg/DM+/eGSlugLgR4/BMnYc N9n5/vqoU46vk7E+z2QR/e2mfoxf0WyilDWpF3fJzgqi2fW2MNNZTAFY87s/opJk/KYzNHPy2vW Ab5RyQfoY7aK+Opl9ATVIOCM5iug6FwWRD/Da0pBwYEt6J7tmX0NJdP+mKSu1X8pC579LnDPKdF oIjYwBi6S240qkfIgTPWxzrqYLPi8Z8KIadd8jFNOZibt0= X-Received: by 2002:a17:90a:d010:b0:38f:de94:bf34 with SMTP id 98e67ed59e1d1-39b8be7a13dmr4691886a91.10.1788858483369; Tue, 08 Sep 2026 02:08:03 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:201d:8:e541:8c2f:4ce9:823a]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b4b72f62esm19718804a91.5.2026.09.08.02.07.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 02:08:02 -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 2/4] drm/sun4i: layers: Fix VI buffer address for clipped offsets Date: Tue, 8 Sep 2026 17:07:41 +0800 Message-ID: <20260908090745.1089143-3-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260908090745.1089143-1-wenst@chromium.org> References: <20260908090745.1089143-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", From patchwork Tue Sep 8 09:07:42 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: 3224 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 6602F1C5889 for ; Tue, 8 Sep 2026 11:43:25 +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-25685-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-25685-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 5E8B6630CD for ; Tue, 8 Sep 2026 09:11:56 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C4D70511231; Tue, 8 Sep 2026 09:08:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="BnKwVQQo" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 2CE9151121A for ; Tue, 8 Sep 2026 09:08:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858490; cv=none; b=c7QH2QqeVP0hsT/iUi+BCxfm88dOEHQcjLS28KEiKkYAbkA6bFlmJQtM1Vf/ofE/Y0tGyk/XVmCw+50Ro2CWA9ejJI6yWRQdy/3p4nADpTvx1Ee6cQ1lwIvLKhuC50VbAGkKVXAVqsF1JZfpj8PxG33h1SUuvj3E9tByU4olDC8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858490; c=relaxed/simple; bh=xMbO6EhJUi/RdJ3ufWkeSaYG56Ls5TGr7006uLTOZQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W1XqzOMCig/1dwFzaVHpoZ2QnPbdldSs/KrPafLEyeFD09IQnU9deUR8Fx4a0ph3ioLFV67ZmWFomDMSZWhbaU/pUZzru+m+i3BTqy+Odr9+coFhUF07+Xaj9kY410KHamrwI0XeQROaxpx2p6kIyIhZtruvkCqYLtO/8obi5Y0= 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=BnKwVQQo; arc=none smtp.client-ip=209.85.216.42 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-pj1-f42.google.com with SMTP id 98e67ed59e1d1-3990fe066ebso3570128a91.1 for ; Tue, 08 Sep 2026 02:08:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788858488; x=1789463288; 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=EZHoy8f3OpVjs16q22My2K8o0ZC/itaQqMauUbs1Www=; b=BnKwVQQoa/HkK5OZ1uv8EjB5FNgimdO1WyF42VKY7C7QE0pMdCSTu43wtKjWZm3zPU lSneFuLXqsLBj5jwGXF2YBHKdilNn37irr0ISfkmX33qsU9YDSSzyE+GgYiBlTwwYb74 byHVQrMWBFlOQW0o2gHmrdpdnKVITGOhfqqP8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788858488; x=1789463288; 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=EZHoy8f3OpVjs16q22My2K8o0ZC/itaQqMauUbs1Www=; b=bLd8U1wwJjuqOR9PAHYi/LGvOZXnjUWjGlkqO+mdBMtLmxYrWHHi1wXKdB9JOp09aR l0gzY1RGHSeUgXMGbUZ/pU5Zr8VbJbYy2cuITA1lS4TFgDW1EXdOSOTSEld+qd38gS9j 3JTCw6KUeldNTESZCHsJMjNeXyrxY0DGCvTt9DWPYzbS8MI0fM065QoryIv6EoARdOoY RqZhs5Jd4OINYqjm74O+bmM7LCydkjzNjaj4xH9j03Txc5DuTXEb/X4XEk+sCIWdxQ8A jw3uvumgCtC7+F6Jx4Hq5QZPG/V97DG6oI0A5W8k7+y+3YzzgMW9d5HTdrHW/hzn7d0n AeIg== X-Forwarded-Encrypted: i=1; AKwUvBzr5RzaxCiDZSaX0mLEMTljdBn+3a72l1mh3A6wnuoiUgsQ1/6y5lIH1sOL49wN4XBaTlYo5e7j1asDXw==@lists.linux.dev X-Gm-Message-State: AFuF++lNqwyHipyMZXPDJw73XbGBiJCAFelbYRjeLrvApCzTERdXt3AS JlM2rQ7Yy4BIhSeb2SgrMYKh0xl9l2SbeFP7CudaTXNx4lhydL6KM9GmBY8WTQDMvQ== X-Gm-Gg: AYBFou0mpJ1vQAaFNkpnn6PX551KLJP6Yo1zDGqbjf9S9huA1yHR+oLr75GNUVZO890 mKZ8D0/1vcf/F+88lcq8Xp3b9XkZC7V+NjVKSb0SIoZRMcUVPvn0OoEox5vs/kOSmDRfK3lW4l9 zxMq4msbaBhPGAwVtAqzWnCYDxf1KfzPsHFh1mOpH5QEb7CbdSbJ1BI4mjDVuDHws8HaGtpCFtX owMJLXLrauNgasmvNfimtyaOxetqHzZjzKjTK+381qc9KND3E+ygzVIUmf68Hw1ecKULCenx36w P/d7Yoc2a/US6NBv54dRBlIB7dKMUsWi6t91zZd6jjZNJTeGYKTLpx9Y+sBpBWIQCHEzAoUfJLi L0U3eVSogKevfTtu6VLdfeU+v5hBSVBU1l0uVbQ2+cIuErgyqwbc5ln78Inw1PjUwjkuKHcX0U5 3gkwH6MdMt76N9piz8pTuIYj+zYjcQTWdRac+XM6a6YJYvMopL+NJ6xEuJPD2aTqwv6bVWQnIDu 2k4TciK1/RkA+hi4XzY6CquoLAmrQf92aw094i9IavqKiKibP7hSpC77g== X-Received: by 2002:a17:90a:d003:b0:398:ba9e:75ff with SMTP id 98e67ed59e1d1-39b26273a40mr43384810a91.21.1788858488251; Tue, 08 Sep 2026 02:08:08 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:201d:8:e541:8c2f:4ce9:823a]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b4b72f62esm19718804a91.5.2026.09.08.02.08.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 02:08:06 -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 3/4] drm/imx/dc: plane: Switch to drm_fb_dma_get_gem_clipped_addr() Date: Tue, 8 Sep 2026 17:07:42 +0800 Message-ID: <20260908090745.1089143-4-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260908090745.1089143-1-wenst@chromium.org> References: <20260908090745.1089143-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-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-1.16 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.105.105.114:from]; MID_CONTAINS_FROM(1.00)[]; DMARC_POLICY_SOFTFAIL(1.00)[chromium.org : SPF not aligned (relaxed), No valid DKIM,none]; R_MISSING_CHARSET(0.50)[]; MAILLIST(-0.15)[generic]; BAD_REP_POLICIES(0.10)[]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; PRECEDENCE_BULK(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[tor.lore.kernel.org:rdns,tor.lore.kernel.org:helo,chromium.org:email]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[18]; FREEMAIL_CC(0.00)[chromium.org,gmail.com,ffwll.ch,lists.linux.dev,lists.freedesktop.org,lists.infradead.org,vger.kernel.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_NEQ_ENVFROM(0.00)[wenst@chromium.org,linux-sunxi@lists.linux.dev]; FORGED_SENDER_MAILLIST(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:172.105.105.114]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; TO_DN_SOME(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a00:79e0:201d:8:e541:8c2f:4ce9:823a:received,100.90.174.1:received,209.85.216.42:received]; RCVD_COUNT_FIVE(0.00)[6]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG]; RCVD_TLS_LAST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; TAGGED_FROM(0.00)[bounces-25685-noreply=patchwork.local]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from] X-Rspamd-Queue-Id: 6602F1C5889 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?= The hardware is programmed with clipped source and destination dimensions, but the framebuffer address is calculated using drm_fb_dma_get_gem_addr(), which uses the full source dimensions. This will not match the source offset if the top and/or left sides are clipped. Switch to the new drm_fb_dma_get_gem_clipped_addr(), which provides the buffer address starting at the clipped boundary. Fixes: 711a3b878366 ("drm/imx: Add i.MX8qxp Display Controller KMS") Cc: # Needs drm_fb_dma_get_gem_clipped_addr() Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/imx/dc/dc-plane.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/imx/dc/dc-plane.c b/drivers/gpu/drm/imx/dc/dc-plane.c index dea7404fe659..7bab75d5dedd 100644 --- a/drivers/gpu/drm/imx/dc/dc-plane.c +++ b/drivers/gpu/drm/imx/dc/dc-plane.c @@ -65,7 +65,7 @@ static int dc_plane_check_max_source_resolution(struct drm_plane_state *state) static int dc_plane_check_fb(struct drm_plane_state *state) { struct drm_framebuffer *fb = state->fb; - dma_addr_t baseaddr = drm_fb_dma_get_gem_addr(fb, state, 0); + dma_addr_t baseaddr = drm_fb_dma_get_gem_clipped_addr(fb, state, 0); /* base address alignment */ if (baseaddr & 0x3) { @@ -146,7 +146,7 @@ dc_plane_atomic_update(struct drm_plane *plane, struct drm_atomic_commit *state) src_w = drm_rect_width(&new_state->src) >> 16; src_h = drm_rect_height(&new_state->src) >> 16; - baseaddr = drm_fb_dma_get_gem_addr(fb, new_state, 0); + baseaddr = drm_fb_dma_get_gem_clipped_addr(fb, new_state, 0); fu_ops = dc_fu_get_ops(dplane->fu); From patchwork Tue Sep 8 09:07:43 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: 3225 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 CE92A1C206F for ; Tue, 8 Sep 2026 11:43:56 +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-25686-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-25686-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 BD8903CADE for ; Tue, 8 Sep 2026 09:12:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2A798511E98; Tue, 8 Sep 2026 09:08:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="S678CECK" X-Original-To: linux-sunxi@lists.linux.dev 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 A06FC4F30D3 for ; Tue, 8 Sep 2026 09:08:14 +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=1788858496; cv=none; b=Pm/Gwkf3DXd9k45plmYtXzgk+eXqvEPsEZqn6Sz6KPv+thCJQc/t4pyu+XUnJ9jBclZgkrfKw7cdpAwFq0tgi14D4vuydNv4i1YmAJqk9Z3Kwl6sZJkXp/ObImSqJ/CTXF9lZmyo8+/Pe2l5dIVgxi7lBFT9WrKm1c1BzXY/ljM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788858496; c=relaxed/simple; bh=qJDTSQf3mOWj1wTBmShDO4bnN0jyzbEKQlcjgoU7YP0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A+5IMaiUxYaFn0voD9ofKpms6KNE2rzC0rtH+ZeVjozbQwL8wH/bBfVGimxqvK/NDpelp9qwFHNO/PJTBPa1gwk3lbdNsdf7FM7jZip1QAJ2+wzJpLrxBv02OTH2Y3S4XSM27/aq2dHb2CKJ4PlBaWFXHZVrVDKxDZE/7NeyoU8= 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=S678CECK; arc=none smtp.client-ip=209.85.216.54 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-pj1-f54.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so5015005a91.0 for ; Tue, 08 Sep 2026 02:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1788858494; x=1789463294; 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=KZyOo+ygFnvVbouyZiGeNffeUNQ7tsTzDFqw1u+OtP0=; b=S678CECKn6ux/Wupl9Kj9K4SaCTjSzZPC/8GM3oiUxlfonoj9oBwTPleb5vMzhEj3o qrrnwWOu9cuxnSZQofbbB+5BDyDoZPzP/DGfzUoB39QUTc2KRifvYE45afJ6FYoXrMrE gunFPQU34LPljz+0wGCvDjofl6r+XzTuObWOA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788858494; x=1789463294; 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=KZyOo+ygFnvVbouyZiGeNffeUNQ7tsTzDFqw1u+OtP0=; b=F5Ind4WuRKjWNPDUU2rIDGqxkq2UZb5iG++khGk1li4qs+9B5q5IzPCFS13whB88aO PnIFzcX4RNXMSvWfBVNn5+FPTybCE7QLi532sA5Ae+NMvenZkr8seLAoJYpeHYSc4U9a +1Pn1rswMUZYM/Qwi2rOZr8SGrseqqyBXeAhH3XtVmmCRf5Y6HWZkZTUKPvGSM+PytXz Q5Oi/40cl6LdzUBggHpmiCCCG69tOUThO/XJnXnqOz/pFliitdDf5f2UOI6k0KhM5kX0 WCq0/tUmDGWHgrOXUWkMS8tYw8yhJkKozLjJoWSdiNAXiQLprbh0whzen1XLAyukHfRj zYBA== X-Forwarded-Encrypted: i=1; AKwUvBwvry1v72yktUMh1LSXR+xuuEoQx/q+5zzri3W8l0iGbj/ydzSxDOxZQ7UcTzpQVfALzyaPJqPSGcN6AA==@lists.linux.dev X-Gm-Message-State: AFuF++nMdlSh7NaerW5eLgvVnxeikLrxVyF1H9xF1tu9f25zPEvHTtD1 g9ebMFzOxGXfcyk7jYNJKICF436WPNcYpcoLWnPfOnIvCG3+C1+6nACNhuaRHt3eeA== X-Gm-Gg: AYBFou3wmTNApI2FxjvWklqH5fBhT/ClwWC7wavnn+LJVVE6Bwrfh1GhVN0jSdATMG+ oX+bzRvPsHoYWEhVjfGLM9HFTQbMqAx6z1qs4gRhCGoCtmcWvmXr3j2a23DjRFdxTZjmz+wKDr1 0ruYzoSKh9IXC5+LoOOoXksFqzaCE41X/kUCl4Er95QgOBJ2Z4TY0xtLyeHa6vLxzM1upE3vWc+ 98AbO1gkJeY3gbAgdARJG9yPntFB4MBJLunqFjMIZOFoQg6Ui70a3AucA65ExSMfZRef2SoCRhT gD9YHYH2Ru7KC3CH4/KUtLlJ3PdhLBYHPn78ZZAElY5cpzf14eJJZzGgT2EXFqBtIWNKntyT7MS DhQAvuP/ZARYtwPRaN7BPR4L3tqSU+D70JF+uR0Jqe/+LgVSNwVbIP3sU0iJ3pLn+2P/BDx0cM0 MdoLCgD5F9OrxwyDGQ5VQaOYa37cGIRRhIGhwOixV0HXiXq+rvfAQ3AvXrT5Djjo5BEHIazQyen FQimZJMnVx2oNSIUMdf0Plc1nz9kFI26fF0g8SI6FhpME0= X-Received: by 2002:a17:90b:586c:b0:398:a2ed:7b5c with SMTP id 98e67ed59e1d1-39b2623ef65mr47890193a91.24.1788858493952; Tue, 08 Sep 2026 02:08:13 -0700 (PDT) Received: from wenst-7875.tpe.corp.google.com ([2a00:79e0:201d:8:e541:8c2f:4ce9:823a]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39b4b72f62esm19718804a91.5.2026.09.08.02.08.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 02:08:11 -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 Subject: [PATCH 4/4] drm/imx/dcss: plane: Switch to drm_fb_dma_get_gem_clipped_addr() Date: Tue, 8 Sep 2026 17:07:43 +0800 Message-ID: <20260908090745.1089143-5-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog In-Reply-To: <20260908090745.1089143-1-wenst@chromium.org> References: <20260908090745.1089143-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?= The i.MX DCSS driver is open coding drm_fb_dma_get_gem_clipped_addr(), with only a slight difference of rounding down the X offset for the first plane if the format is packed, sub-sampled YUV. This is likely to correct the buffer address to the first pixel of the 2-pixel group. Otherwise the hardware will start the scan-out from the second pixel, which leads to the U/V components getting swapped around, and the chroma component of the next pixel group being used. Switch to drm_fb_dma_get_gem_clipped_addr(), and offset the address by a pixel if the X offset is odd. Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/imx/dcss/dcss-plane.c | 34 +++++++++++---------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/imx/dcss/dcss-plane.c b/drivers/gpu/drm/imx/dcss/dcss-plane.c index 303e93fd036c..580d9cfb4053 100644 --- a/drivers/gpu/drm/imx/dcss/dcss-plane.c +++ b/drivers/gpu/drm/imx/dcss/dcss-plane.c @@ -219,28 +219,22 @@ static void dcss_plane_atomic_set_base(struct dcss_plane *dcss_plane) struct dcss_dev *dcss = plane->dev->dev_private; struct drm_framebuffer *fb = state->fb; const struct drm_format_info *format = fb->format; - struct drm_gem_dma_object *dma_obj = drm_fb_dma_get_gem_obj(fb, 0); unsigned long p1_ba = 0, p2_ba = 0; - if (!format->is_yuv || - format->format == DRM_FORMAT_NV12 || - format->format == DRM_FORMAT_NV21) - p1_ba = dma_obj->dma_addr + fb->offsets[0] + - fb->pitches[0] * (state->src.y1 >> 16) + - format->char_per_block[0] * (state->src.x1 >> 16); - else if (format->format == DRM_FORMAT_UYVY || - format->format == DRM_FORMAT_VYUY || - format->format == DRM_FORMAT_YUYV || - format->format == DRM_FORMAT_YVYU) - p1_ba = dma_obj->dma_addr + fb->offsets[0] + - fb->pitches[0] * (state->src.y1 >> 16) + - 2 * format->char_per_block[0] * (state->src.x1 >> 17); - - if (format->format == DRM_FORMAT_NV12 || - format->format == DRM_FORMAT_NV21) - p2_ba = dma_obj->dma_addr + fb->offsets[1] + - (((fb->pitches[1] >> 1) * (state->src.y1 >> 17) + - (state->src.x1 >> 17)) << 1); + p1_ba = drm_fb_dma_get_gem_clipped_addr(fb, state, 0); + + /* + * TODO fix address until helpers know packed, sub-sampled YUV format block size + * + * The buffer address for packed, sub-sampled YUV formats such as DRM_FORMAT_UYVY + * need to be on the first pixel of each pixel group or block. Otherwise the first + * pixel of the next pixel group is read and the U/V values get swapped around. + */ + if (drm_format_info_is_yuv_packed(format)) + p1_ba -= ((state->src.x1 >> 16) & 1) * format->cpp[0]; + + if (format->num_planes > 1) + p2_ba = drm_fb_dma_get_gem_clipped_addr(fb, state, 1); dcss_dpr_addr_set(dcss->dpr, dcss_plane->ch_num, p1_ba, p2_ba, fb->pitches[0]);