From patchwork Wed Sep 16 03:33:22 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: 3363 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 A06D81C31AB for ; Wed, 16 Sep 2026 05:36:03 +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-25965-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-25965-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 1A9AF347B8 for ; Wed, 16 Sep 2026 03:33:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 629352F39C7; Wed, 16 Sep 2026 03:33:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="KgqWrZpw" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-pj2-f43.google.com (mail-pj2-f43.google.com [74.125.227.171]) (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 AFCA8389E1A for ; Wed, 16 Sep 2026 03:33:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529623; cv=none; b=QKfWt6eAYX2ro8PuK2w9qugYzh4LGNgKHQkcpp5G6iWn0PQhj7XHzQ3iv6R+fx+MIydfUc2VNPHRpGIvfVJWYzJNf6+/qvqQSQSxExPeby4A5AicdFHA/AjU1MIsSyAwqsLYCwofQ2MM7X0JvF/UIPAB4tD3kdvDQ0epm8DbfIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529623; c=relaxed/simple; bh=es80KIPm6d34RQhtEPnuboKLoKRoUcyHS9QbOTgsSi8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=biUYWbaCUEikznJWRl4yX2/2c1DIMNgaZ0AQlNSkENjOg+w0fWk5/CGyrAbjkuC36Rik1LShp0Hb5YO8FDIhTJHcU0Idlz3/l+Xn6MZBcavjy/ZrK0AKZN6n6/2KUgVthhuEjiMZMHD7H6TlZU/ivnJG7hhC8+521vG8FSp/P+s= 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=KgqWrZpw; arc=none smtp.client-ip=74.125.227.171 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-f43.google.com with SMTP id 98e67ed59e1d1-396ccb1a98dso346935a91.0 for ; Tue, 15 Sep 2026 20:33:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789529621; x=1790134421; 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=JETOMAWav2dfMHsWYPyuoNMSTDJN0FsRCfFHE94te6U=; b=KgqWrZpw/MzjdNzJk8uKHXWRzRYVkE8Xjm6mT4e/BZzzJoH97P3F0EA+26vlox7EM9 5v40UUpF2p6Uh1WeSJROb64t71jp9Q8xd/zWuNOpqy8Njf1PLtnmqpGTRRAfviOxYg/2 2ftDT6Dz/iAYOAuY9ylGTfh9ZDm+zkI0q+U60= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789529621; x=1790134421; 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=JETOMAWav2dfMHsWYPyuoNMSTDJN0FsRCfFHE94te6U=; b=T+Uc5bFFm8yj+lWWNuuND879IYCj2iFxb9bA+T6qZT+D9oLoVAL/V9mQ0YWmxa+T+Y q8y+fLNK+0FGQASoFPp3boi7YaED1qMQXrlLKIwEDG/2cK5KoRzj1+crEbWyGXXNbAde qRwVIUv/M98W6XPFkamqNuk3V1nr8pY+GNgRV+3fnfpIK+UZQUgLrkcnv/mddxg0IXnJ aqAGinJDRC0rcj54tVJ/hH3urFl6TmqoJmbFuYghZD3jfY2xn6TMIm/K0KeaAQWsaOfR RPhzlae1UmapRk4uyGn89BwNTYt9yGWQqM8ZXkVovk282CQYjxf8vIspvjTfc00C9mza 5vyQ== X-Forwarded-Encrypted: i=1; AKwUvBy31RK/9O8tNXgQiCqQE4o/O709XYPJI69C6Y5+diLvof9PHUXybdiiNahi8c4oepKH2922oddWyyd7og==@lists.linux.dev X-Gm-Message-State: AFuF++m3I2OxkJbXKAg07F9S/khaQuuYI878SlsbmlJiKbeya126vaE9 P33+Mfp1P4q8kDWTYGDmHi5QZOL/UbO2Ara8tkcYhhlzMEQG4xjEVVXBTX6ee/YFmw== X-Gm-Gg: AYBFou2BlVSu4FcXf76bw8/xqWKwXQmE8IPNSd+D1uS5YELxzaH4Qqp9eSxjNu2n1oN CmvK9BgL9pFYEFMquX1JRyyObMTZVSWf52tJP/NAPiwISKKbYlSv3+6tBAl3srm5WGgiZh9UGFm GoA+xqoX2Pxsb3zivV+y8fHLkcaSO60IIhtpJQ6v5c5ByXIuW6wp+vpftZ0ARRVg7JG4irs4T56 2uPCa+jdGOvfUyLgp5w64GYe33NhZvkYy9yLwdk1p+g+GcLcemkwRyVRZIiUXtEOOIGexmU64Vz 6J9GWpvsLTmK+pDx/M45WThQkH4nAgGNOn1fiC102qFNYH8I5DScstCPsRilMaieogdofJu1dDq 7cY64s06gQ/LyfUpRwwli3NCr5i+YxII/6sBqjMYuWGU2J6UPIVxBWH6Gt3M/0USIvsmKMGIDOn rcgw+C9sFdi7dGBl+L0NJZ6XJfr012JPZwU1BuXC2RcN78C+X7KNqm2/qHISFnxctj9kcmhvOLu zLuJEBmgxLJBmJyzjl0TN5KBCHmXl9X0O839suUeBGVIMxDLY0LdqME1Q== X-Received: by 2002:a17:90b:2604:b0:38e:659b:f366 with SMTP id 98e67ed59e1d1-39e1df6c05dmr2364892a91.0.1789529621075; Tue, 15 Sep 2026 20:33:41 -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.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 20:33:40 -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 1/5] drm: Split framebuffer pixel offset calculation from drm_fb_dma_get_gem_addr() Date: Wed, 16 Sep 2026 11:33:22 +0800 Message-ID: <20260916033327.3054126-2-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-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]; DMARC_POLICY_SOFTFAIL(1.00)[chromium.org : SPF not aligned (relaxed), No valid DKIM,none]; MID_CONTAINS_FROM(1.00)[]; 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)[]; FROM_HAS_DN(0.00)[]; PRECEDENCE_BULK(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]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:email,tor.lore.kernel.org:rdns,tor.lore.kernel.org:helo,chromium.org:email]; RCVD_COUNT_FIVE(0.00)[6]; FROM_NEQ_ENVFROM(0.00)[wenst@chromium.org,linux-sunxi@lists.linux.dev]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:172.105.105.114]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[74.125.227.171:received,100.90.174.1:received,2a00:79e0:203d:7:1f62:7622:5d61:2578:received]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from]; FORGED_SENDER_MAILLIST(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-25965-noreply=patchwork.local]; ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: A06D81C31AB 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?= Currently drm_fb_dma_get_gem_addr() calculates the offset into the framebuffer memory for the framebuffer's unclipped source coordinates, adds that to the framebuffer's backing storage, and returns the result. We are about to add a variant that uses the clipped source coordinates, so there is already some reuse of code. However, calculating the data offset for a given pixel is not specific to the DMA FB helpers. The offset is only related to the framebuffer. Split out the offset calculation into a new framebuffer helper so that non-DMA users can also reuse the same code. Suggested-by: Thomas Zimmermann Cc: # dependency for next patch Signed-off-by: Chen-Yu Tsai --- Changes since v1: - New patch --- drivers/gpu/drm/drm_fb_dma_helper.c | 28 ++---------------- drivers/gpu/drm/drm_framebuffer.c | 45 +++++++++++++++++++++++++++++ include/drm/drm_framebuffer.h | 3 ++ 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_dma_helper.c b/drivers/gpu/drm/drm_fb_dma_helper.c index fd71969d2fb1..ab0f37d8a5ff 100644 --- a/drivers/gpu/drm/drm_fb_dma_helper.c +++ b/drivers/gpu/drm/drm_fb_dma_helper.c @@ -75,36 +75,14 @@ dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, unsigned int plane) { struct drm_gem_dma_object *obj; - dma_addr_t dma_addr; - u8 h_div = 1, v_div = 1; - u32 block_w = drm_format_info_block_width(fb->format, plane); - u32 block_h = drm_format_info_block_height(fb->format, plane); - u32 block_size = fb->format->char_per_block[plane]; - u32 sample_x; - u32 sample_y; - u32 block_start_y; - u32 num_hblocks; obj = drm_fb_dma_get_gem_obj(fb, plane); if (!obj) return 0; - dma_addr = obj->dma_addr + fb->offsets[plane]; - - if (plane > 0) { - h_div = fb->format->hsub; - v_div = fb->format->vsub; - } - - sample_x = (state->src_x >> 16) / h_div; - sample_y = (state->src_y >> 16) / v_div; - block_start_y = (sample_y / block_h) * block_h; - num_hblocks = sample_x / block_w; - - dma_addr += fb->pitches[plane] * block_start_y; - dma_addr += block_size * num_hblocks; - - return dma_addr; + return obj->dma_addr + drm_framebuffer_get_block_offset(fb, plane, + state->src_x >> 16, + state->src_y >> 16); } EXPORT_SYMBOL_GPL(drm_fb_dma_get_gem_addr); diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index d32aceb6ca9b..9e1231162047 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -1208,6 +1208,51 @@ void drm_framebuffer_print_info(struct drm_printer *p, unsigned int indent, } } +/** + * drm_framebuffer_get_block_offset() - Get offset to start of pixel block for + * the given framebuffer and coordinates. + * @fb: The framebuffer + * @plane: Which plane + * @x: x coordinate for pixel + * @y: y coordinate for pixel + * + * This function will usually be called from the PLANE callback functions, + * or from one of the helpers that calculates the framebuffer's DMA address. + * + * Return: offset from start of framebuffer to start of pixel block + */ +u32 drm_framebuffer_get_block_offset(struct drm_framebuffer *fb, unsigned int plane, + unsigned int x, unsigned int y) +{ + u8 h_div = 1, v_div = 1; + u32 block_w = drm_format_info_block_width(fb->format, plane); + u32 block_h = drm_format_info_block_height(fb->format, plane); + u32 block_size = fb->format->char_per_block[plane]; + u32 sample_x; + u32 sample_y; + u32 block_start_y; + u32 num_hblocks; + u32 offset; + + offset = fb->offsets[plane]; + + if (plane > 0) { + h_div = fb->format->hsub; + v_div = fb->format->vsub; + } + + 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; + + offset += fb->pitches[plane] * block_start_y; + offset += block_size * num_hblocks; + + return offset; +} +EXPORT_SYMBOL(drm_framebuffer_get_block_offset); + #ifdef CONFIG_DEBUG_FS static int drm_framebuffer_info(struct seq_file *m, void *data) { diff --git a/include/drm/drm_framebuffer.h b/include/drm/drm_framebuffer.h index 38b24fc8978d..c07aea1cc59f 100644 --- a/include/drm/drm_framebuffer.h +++ b/include/drm/drm_framebuffer.h @@ -220,6 +220,9 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb); void drm_framebuffer_cleanup(struct drm_framebuffer *fb); void drm_framebuffer_unregister_private(struct drm_framebuffer *fb); +u32 drm_framebuffer_get_block_offset(struct drm_framebuffer *fb, unsigned int plane, + unsigned int x, unsigned int y); + /** * drm_framebuffer_get - acquire a framebuffer reference * @fb: DRM framebuffer From patchwork Wed Sep 16 03:33:23 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: 3364 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 4E6281C1EF6 for ; Wed, 16 Sep 2026 05:36:26 +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-25966-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-25966-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 CF04138151 for ; Wed, 16 Sep 2026 03:33:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 795C635A39D; Wed, 16 Sep 2026 03:33:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="My+4johJ" 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 BC6D24BEE37 for ; Wed, 16 Sep 2026 03:33:45 +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=1789529627; cv=none; b=W3OelAm94sqFHgSVQobbhI2LfDiA87LFDHa9YfH0DndvaQIedZ0eJfxVarU2FrCz/MmV1FJbLsB/3mFLQXzA82iQbJGTS9Hrix2sFm6lmKsWxdZne4YufJfrQ4UYKXXzHl4foKwPEqmtP8Oiracy+2dbvTKYBtBxx0ItrXg83a0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529627; c=relaxed/simple; bh=4OYvQ72/SKMSJjpx0h+y2ofjW3s/V32EvXQ/gsEJdiM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pKhqu9uRc87JUA5VuinRSJMDblLzeK3hnrYx97wHFS0ZD3JxbOD5ZJfBxGw4uRNCysAhJEteEoyAw95cnMgqU+CHLESFk+MwgI4/Q7Kvmm5lOKuqJK8ZHtMJrq/HyQ+DcXdDjNu3l59GJ7Tmrx+65jyw31UEn19gaxM+dznIeSU= 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=My+4johJ; 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-396ccd4f99dso387760a91.2 for ; Tue, 15 Sep 2026 20:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789529625; x=1790134425; 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=tuWaqYdx3lVj9cpjPj9FHjq5qpjsbWLYsj0P75i5UJE=; b=My+4johJ2Los9Oc7ONqfw5GLhK8VL6k+racfCspYrSha4KnM8yQBzgNjc5/qIbraX/ vK7Qj+mq9n+D43vP/K56S1WaH2LBSWPQTcy3aYFul9aGEUTRVJwIPEkrnn3bomB621MG VL39k6jLPF2CV5uGsk7AnVaugXvPgzfpGy8RM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789529625; x=1790134425; 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=tuWaqYdx3lVj9cpjPj9FHjq5qpjsbWLYsj0P75i5UJE=; b=sTsK2GD0zpuVVpch9pGoct5dtbje5naxjEkfYYB51NVrqFOF7a1RNwmHkdVoF8M/2o 6E4jmNsVG0vWjXKf5diX8Fmw/pLMCKFPiCk6Ww6vDn0g7SABBeUKvzOyjSDhib/S5Ycz 3piUSPFqPo5d/AY8LFA2UjL49Ky7H6saymwbk1XvILcX2C8EgoRd4QliT38ICh4kEAWh ZVgVgRRYQ24GJ5E2KaEAjh6ALoAE2MaKxZTUOIUUidpXIkJJXGr3MAgeZ6vopi6MfPBJ qXkUp03FswXVkTl66jkFSYm1620OsJMCn+ismJen2/9pQ7j3Mu3QGQApUnfJg82mFmuZ xEgQ== X-Forwarded-Encrypted: i=1; AKwUvBwhftMX0kvj75k4i+xDhba9WMHRpE34sYFjAkkK57/88aEfInha1zGBNQYlKZUOsMnL4jta7acaHccaIw==@lists.linux.dev X-Gm-Message-State: AFuF++kxYqcinqqUBgO+d5a3JiKP9tB+JamG71WVC4Vu85oMSBsvbYFW rUYd5ZI9OEuyjovDxUbHZgApsA0WZSsulG6JR4RgmjD8yIMA9LeM/VbKrlL63glxmA== X-Gm-Gg: AYBFou1HmdLFLN/88GkaIaYcR/wldAUXKtqsBjt5IEQW+BsEflnJ9KF82kNNJM4uP2n +I0AJAC48+6aoyvxUiKBxFjbgx6bmgQ1w9j4j60rAdpW8wwMz3PPHIwb6urb9cDn1N9arLuzwCt U2eUVeHeCD5FacULqTn6Q6mlcWyJUqNIHm+Y/UlZ3bY+W8/Tbvjbh4Q49DXrxxmdguoheIOk+Pe xiGkqvFJz6nOG2t9BSHrzdBS0OxeFIctLOd2T7nkvMV6Etfn2R3MSFaM+Y4dDWmk2oQp4aYYm0E Nj8AwejGrEMZn2jGmh5MZfd34U9hRgB8gE0BW5zDvp6kT/I+BQIghQ2pt8EwKgjmtPukXdvfytL HQGbcFIczzvzP4YkAQotw9Ee40pvYr7VMovMonlSRO2kbaXKQBOpOrYV/FwoIjZa7YWJc05Glc5 rXZSmmnjw6CV9NRKM6dtt0DTIrstxXnuFiI4UIjQXiLn9hkPW0g1Q/QhHZtLkMckkyF0X4caKKw LzJ40Dow7FNvcitmvw6340Sx3NwrfmdFiJ8BzYQbHXXR+GJsNRHZOff8A== X-Received: by 2002:a17:90b:2604:b0:39d:f114:8f7d with SMTP id 98e67ed59e1d1-39e1e27ad34mr2355684a91.3.1789529625104; Tue, 15 Sep 2026 20:33:45 -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.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 20:33:44 -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 2/5] drm/fb-dma-helper: Add drm_fb_dma_get_gem_clipped_addr() Date: Wed, 16 Sep 2026 11:33:23 +0800 Message-ID: <20260916033327.3054126-3-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?= 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 --- Changes since v1: - Use new drm_framebuffer_get_block_offset() helper --- drivers/gpu/drm/drm_fb_dma_helper.c | 37 +++++++++++++++++++++++++---- include/drm/drm_fb_dma_helper.h | 4 ++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_dma_helper.c b/drivers/gpu/drm/drm_fb_dma_helper.c index ab0f37d8a5ff..0aaf4926db4e 100644 --- a/drivers/gpu/drm/drm_fb_dma_helper.c +++ b/drivers/gpu/drm/drm_fb_dma_helper.c @@ -60,15 +60,16 @@ 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 + * 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 - * Return the DMA GEM address for given framebuffer. * * 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, @@ -86,6 +87,34 @@ dma_addr_t drm_fb_dma_get_gem_addr(struct drm_framebuffer *fb, } 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) +{ + struct drm_gem_dma_object *obj; + + obj = drm_fb_dma_get_gem_obj(fb, plane); + if (!obj) + return 0; + + return obj->dma_addr + drm_framebuffer_get_block_offset(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 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", From patchwork Wed Sep 16 03:33:25 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: 3366 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 7190F1C1EF7 for ; Wed, 16 Sep 2026 05:37:06 +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-25968-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-25968-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 74C8339BEC for ; Wed, 16 Sep 2026 03:34:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 59D3723A99F; Wed, 16 Sep 2026 03:33:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="J3cl+qp8" 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 D195E3AA50A for ; Wed, 16 Sep 2026 03:33:53 +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=1789529635; cv=none; b=W6QuIGb2LjFrSQsPP0D8JeuvoqOH9GKFFLCZvE2YYkLHTD+ZgenyRwu9cbUZw61MitWe3W/R25sjqX1Tcv071fAz6RiVlXShbcPaNqyW2hKZOAhGQUQg44w2YR8X+nq+Keid8TOYVETe8BpI3esOVrrc9Mmyak3wWpq++uwd2Aw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529635; c=relaxed/simple; bh=qbPaYJBirbvT7ihHw211bCHk6KPsVXJrTqNHUfJUxcw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UXXzzU4pXeJsmf4qWo5dLswq3InX9hQI1sevYPRg5wcXGs6vMEAM3mt2SJ1oSVaiylHhai67JI6mDifkffedPQu4uuQhSbrk4pkSi4BQLTbkFXyHy6yaXCshfBk8pk81m72Jk1uLtUzr1sljBdtYTTHlil0s0LXXbeOy5qOragA= 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=J3cl+qp8; 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-396ccd4f99cso460385a91.0 for ; Tue, 15 Sep 2026 20:33:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789529633; x=1790134433; 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=nb71HvzDE3B3FVkEVJ/TFE9xXljAPx+xdoqH1xLqTX8=; b=J3cl+qp8f+U+uclkemHb2Dyu2xomkO0U790/vfe2qev9McN25A1WqaG7LjGboC6tSm cADUqwnC1R9ZWrgohRnLkl1syQ4AMzLOENGyNYeOfr23oouyWIIBsVkMTDIT5PqXNj5K VtXP7352W7xC6NNuj+dDCFNXFUGiUJj/wB9+Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789529633; x=1790134433; 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=nb71HvzDE3B3FVkEVJ/TFE9xXljAPx+xdoqH1xLqTX8=; b=BIgwX+9D7T8rOfZQOQYI89/IqQlFlCqudLk+bwo1loyDysxb/RXG7FjAlltgaAnP+t AgUpUQifBGkJWWdE+t9rtZVWSejOf6pSbgBmgwgtroLP5yu+PnI2ZkrPwJVcuEOFHEs0 HJ8/2jPSMrTDTZZ4DvlxFBQHYao6+cecaNyNUWAVlC+H1NVHPFhBFur8COz/I3IE1rAD Z1z1HCZpWmkyi3oM8G62Jh0vx5bmiTYUBh6ri5JjL2CCWAn8MX45qt/iNE/Z0Jb+O+jF OoBFopsm031AhIIzklMea5Er9p/iZB484qT+abOLMnzPpCOoKYhtiHCRmyn/riYgCXr+ 8YTg== X-Forwarded-Encrypted: i=1; AKwUvBxIdaEexroVgelzycgODDfwANqdD11Imk/2CPXJlXZbnpOl0gK+Ssh/VqWyti7YZIe1bR+1w6/zF5G86w==@lists.linux.dev X-Gm-Message-State: AFuF++nybPs6PhB/HnlrO+dxy24SuWQt9TyEVB0G/UXJK+JDQCxaQycP EtG35AlJXYHWtwf63I4EIoz9xQryY+pgFMr0VVimGf60jldmR2rdAy5ww1SlZe9KxQ== X-Gm-Gg: AYBFou1lPgzcFQWqaalYscjOtDcW5ndD4Ndwi/xcD5S62+cFiA/sqPF22OqX4uTrODR vzE2Wx8sF/GEbejoFJlEBkhQTx4jWoJtwt/qm9ZJms0lidSvluPR108SNKojngqOsS1qI9fklWg pb+pOGGKxGYA9ruEfwr3I4bIsq5ulx71S+7UceKRAvj+v1723kDYMk4DRRMKR056yySrJJ2Nd3y YiMeSAL42LuW8Or/WquxJrM/b7gArGQm0LUUP8fnFV4w8DseP/Ijk2maN85lSHECDje95ZWL95M YNOnKgKMwMiipTX5XdLpH7B/z0hjGiDsizgSXA+s02ddYjONSXe6fMXZTerAf2Gy84//8igBiRB mz5I15kg5SA8MpQeaGJbKpK38pyUfSLHM6MxWj1ivRjeV/WZF11P1kkNRT3ZcRb7nxMgzzt7yFV LtNMmDquSIlUVdG7NtgNC7+HppUfMkA37qr/i2UjGJfjJqVG9iq8xXwCUudUTV0X3O2P+FUmIB+ Ncx3s9aEukSCzLg0jJLy0lg8729ohnjlD2C07iLm/t4s1t5TVvIF8d82w== X-Received: by 2002:a17:90b:582b:b0:39e:f1:b2de with SMTP id 98e67ed59e1d1-39e1e4c54fcmr2477670a91.20.1789529633211; Tue, 15 Sep 2026 20:33:53 -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.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 20:33:52 -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 4/5] drm/imx/dc: plane: Switch to drm_fb_dma_get_gem_clipped_addr() Date: Wed, 16 Sep 2026 11:33:25 +0800 Message-ID: <20260916033327.3054126-5-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-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)[74.125.227.141:received,100.90.174.1:received,2a00:79e0:203d:7:1f62:7622:5d61:2578: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-25968-noreply=patchwork.local]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from] X-Rspamd-Queue-Id: 7190F1C1EF7 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 62dd0576fadc..35eb5039f5ac 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 Wed Sep 16 03:33:26 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: 3367 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 EA6F71C1EF7 for ; Wed, 16 Sep 2026 05:37:29 +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-25969-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-25969-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 262033A6DB for ; Wed, 16 Sep 2026 03:34:05 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5861F35A39D; Wed, 16 Sep 2026 03:33:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="V9Zvvjh9" 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 C944F3B0AC7 for ; Wed, 16 Sep 2026 03:33:57 +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=1789529639; cv=none; b=CHesiM6i8hw7iKmA3DLaIRc3XsyakSQz65LUdlqtnyi2hNEWBJPU5fJyKVCIRzra3RD9A9RR/8RyT/UCFh0yGyO1R0RrYHW2RUjbtJ3tfbulZitnaiQG8ESuEusdzw8w1RSpb2BbN27/25ork2elLS1Uj0Wv5UlavcO/IAAKpvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789529639; c=relaxed/simple; bh=XSW9igf1s/bJdUF9oLEzsVWFCgbqu1FOjjmLMSk9d1c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sdOy9AyLPEXqrgvdUr+94RAenZnI9UIRdBIKNwnCsbU0VcFhZ49oM3TjCm4NixkO3Zf7ny2yw9PtRJiIaF5yqIMrCOVVBzHrwi3henQwHTefYBkNOFG4ob0K9a+jod2TQhFqN3EPJ12Q2Fe60ebYfO+5rtI6e/0VwlYFFkByExY= 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=V9Zvvjh9; 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 d9443c01a7336-2d8fbef5018so5082155ad.0 for ; Tue, 15 Sep 2026 20:33:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1789529637; x=1790134437; 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=kBFRPVKNIBD0KQtZ9pcxiREtmRb8PGXwbQL+UCfrWrI=; b=V9Zvvjh9w6oy9SX6bD7o9BKCCQAYYxQkgw4k2ElE25OiDYLFcUYJS1mu3zFfeNaV4r 5K75q68jVIed/ynxAGBk2AL2cL5U4a9sfnkjmSIcIfOK5QFPamLwe7EvaJDrwyk7l0ZB WsMln0OBS6psoJ3GO+Hv487+rH4VSnJS0UmG4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789529637; x=1790134437; 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=kBFRPVKNIBD0KQtZ9pcxiREtmRb8PGXwbQL+UCfrWrI=; b=jqER/obe8WGrQ/kIb1OBSjB3IZ00U9TVGHt/8W+EQtacxZefVJeBFj+E5pjorw2CpN TR+xrmg8vJZwb5gDlAyM1Ki9g0TyW/e+nIYkaQH32VNZCZPhuej7pwxtPvZZpLhb1kkb rNTxcavSheh3hRA+onQC2Ak0JxmGRH9VXSGungYASRmKm/qPu/ivqR6lC4OS/vtlR0qF 6aSviqPiRxWpYHZVptqFeVp9+dyzEaDe/ZUKY4wGsyLO0Wj0R2tKjETzKc2pxEi7g0Rx 9zCSz4j2+fPnQ50fMGVEDQA3cI1+MInADeUaHGB4mpcApjDbGoEX6ElpLFUT+myTWLJJ aZrw== X-Forwarded-Encrypted: i=1; AKwUvByVP1T716Z/bQpQkwfUWjE4TXaByh3RInot1bcHmCkEpIPAHskiJRAzRt0xp7xyGBcVR6l2ItkAAj/Q8g==@lists.linux.dev X-Gm-Message-State: AFuF++n2vDb/Bn4cvA/NNX6WIeUzCvJYVBO2gBgSvzGK5K5TrNNO0c/I mk6N5oHEBhPkl/OfFVtTa+IzqvSPyAkPOGp7QqBuGJ6xirNYkAoF2ibFDy0cDZjcYw== X-Gm-Gg: AYBFou3UUmMa3YSSpXVSU9MQk17IemzmUNENgKWoYI6MKnKekNv1VPas+iS4C/+rTMR ZcfyQpWYXr5QHd51v7oRsneS4w4cljAgLsrZKnwkNzrIqJHJOiHeVMSi0q+ysuN7EYEk7KOla17 SvAkFepyj36NZh4fOwP9z88NDaOoo6H9KbqEAVKZ0gAsyify1PDBjBvIcDHL+qRyfvIlzUH8a/B i2kNny4BS5xUJa+QavKdwtO+b0ycoDhBvSoI8oucGcewOZaxdHSWomRrEmGr01i+TmE3BXuWUGW 2AaEgpGU1tkIKQKz8DsBJgVfN6/tMB3hPqBwespIVV9nO6NkjCyQ7PmWqsY5KSxlP6KK14F3Q0e 46zQHjh7hXr5Hzeb46OLR11rb1epkP47YDVtwD+Sphkvd0h7MtmrBK4v4pSf7apvPcfxfQWYbdZ aLWP+GOPZ9dWg1yf6RaZRobc8qmcA830tigHyJapQj+Fs/fEhr2ZrDQbFxsisfJCVl/R50JBSow j4SIspRUD0l/9q6rU3piADKCj8SnKwaeCs6ZNTDVZpElPhAk+GWLtrkYg== X-Received: by 2002:a17:90b:4c49:b0:39d:fd60:caba with SMTP id 98e67ed59e1d1-39e1e485dddmr2368694a91.14.1789529637188; Tue, 15 Sep 2026 20:33:57 -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.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 20:33:56 -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 RFT v2 5/5] drm/imx/dcss: plane: Switch to drm_fb_dma_get_gem_clipped_addr() Date: Wed, 16 Sep 2026 11:33:26 +0800 Message-ID: <20260916033327.3054126-6-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-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]; DMARC_POLICY_SOFTFAIL(1.00)[chromium.org : SPF not aligned (relaxed), No valid DKIM,none]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; MAILLIST(-0.15)[generic]; MIME_GOOD(-0.10)[text/plain]; BAD_REP_POLICIES(0.10)[]; HAS_LIST_UNSUB(-0.01)[]; PRECEDENCE_BULK(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWELVE(0.00)[17]; FREEMAIL_CC(0.00)[chromium.org,gmail.com,ffwll.ch,lists.linux.dev,lists.freedesktop.org,lists.infradead.org,vger.kernel.org]; DBL_BLOCKED_OPENRESOLVER(0.00)[chromium.org:email,tor.lore.kernel.org:rdns,tor.lore.kernel.org:helo,i.mx:url]; RCVD_COUNT_FIVE(0.00)[6]; FROM_NEQ_ENVFROM(0.00)[wenst@chromium.org,linux-sunxi@lists.linux.dev]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:172.105.105.114:c]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[74.125.227.140:received,100.90.174.1:received,2a00:79e0:203d:7:1f62:7622:5d61:2578:received]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from]; FORGED_SENDER_MAILLIST(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-25969-noreply=patchwork.local]; ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: EA6F71C1EF7 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]);