From nobody Tue Sep 29 13:20:32 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (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 941B8472771 for ; Fri, 7 Aug 2026 11:47:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786103249; cv=none; b=hlluzRilCMss70ZeKqCMqG0kYg4fuRtWXueOXoqauDt640JWSVIwBkagMyykanjRU+MZaAtfgaRmMxzIwEzxTfbQ0E80NxmpV4Eed7ek8SHmciihColFV0eBjeC2jeQ6CJN0/oBg43B1XDN58dUWljg+hRz8EMMM1zde5KQBJL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786103249; c=relaxed/simple; bh=o2w43exMtvd2rKueXCYQS2aI9rHHPW6Id/WKLOxiNVQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ifmRd0StJorOAKu8XWFLO61OpOO1278lt7DlDtGx3SjV2X3cypW1ewoPknN6DErcVlsoV/Gbqd6Jq3GJyMXliQ6+wselHZkNjTQC2AQ62/9NhPnci/Yy2jETb0rx0PKePObWFOdp07TMlOhmdpVG+O/68SnEgTY9vw/B3Josj6g= 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=Hz1v0mKI; arc=none smtp.client-ip=209.85.210.177 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Hz1v0mKI" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-84830c774a0so3459871b3a.1 for ; Fri, 07 Aug 2026 04:47:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1786103222; x=1786708022; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=ZhwYEHM2ubRYoBgnMQxxPYmFjqJ2ATlRS0+mstcmx4Q=; b=Hz1v0mKIS/X/ZuaqwfmTJWQxHaexqhztiqiDVveaMvRuxeoNel9XZyEgORtH9F6RQE 4gSeAcUUVjHGHUsSx0lsSjI3YDqcnoGGr+QVFijvOSOuqA/OdhySkVZ/Pf8yQqfsjJwi qWnXGAdO/l8W0vs85u3cMeUSh/X1bux8Bp/BQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786103222; x=1786708022; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZhwYEHM2ubRYoBgnMQxxPYmFjqJ2ATlRS0+mstcmx4Q=; b=RWsy+BoYKYPzQUmLrvDlTlw5SY5+mB1BAsJ8IZ1framplivYpSqVsvWVpZtF5EC9Qr lJnNJGMNyVmJNqdc15v1cyXvMv1YiUv80DiDgc/C36w0KCczvJ6ibjxIdpJ3XXj19A1i loKRMj19gzzXsco94dzO72+bRadiQE0+Iwf8WXgH5JPLtrC/goGBUmoRqK5WMA6pWbPw 3QxBp3Eov/KZFdaRRtr0czy6YbekTTMchrnAONWozDT2gHlgBfF6uDsDVmhClYq+Lr1s Uz4xRkunGnn1jZfDb9VGIO4aVfCSQu016NwUL++ze0V7/LOvritNxE2A4yqt24djx9sB gClg== X-Forwarded-Encrypted: i=1; AHgh+Rr6HHEmOAD+0EPewr2AJRgPKxOHHHJw56nySL+PwstEHx/FXL1IusqyZaBcBCesvi+irdAMn9OCQ9HRCvs=@vger.kernel.org X-Gm-Message-State: AOJu0YwH8PQw5lYQkZeLLM/pT6sVisX9EBmrnCTUvHbWZHuQCSZsMDwK zoeTTVCP7PsAg7LpRM+dmrExFXIl0okrOTBxzEF5jTtzdMs8IUpYfvrYHJd997tK7EuAL3zMN46 jl9/PMw== X-Gm-Gg: AR+sD13IriEsbLGtq/K2j2rcRNQ7BMinimvy4w7Jw2aADbVi1Nh2QAiggnAOXcZFbc2 cBgGXfShBUwvDn77HtQ+4WvnpKLLnHGuhX/2aMfp2Q9jC5KwIpjAlMfV62mpyYgJfVrOYMi2iVx cTNbjZeiyRbKBjRi4KyI44BO/IQXhZ6QMpkUoaI1kTWizTi1J9PTPFv9ck4xfBCvnwmLFvneqce 72o69xPbTo9cHlwkS7PYM7a+iGcjjddZJyt8OkjjJV8VDmvhRvNuiE6tPtdHrqkNU21F5tmXBcu /fpP3lBuqF1XEpofRhZVwFR6fVIZs36e5THmx9qdy18VwIUBAI5S21PMMu55JlDeRQmDLb0RayI yZuLRtpErbUEXkePSFmKt39ruPVMzsbwReGSXM4kww+hCqV8lsiTyxRgd6spTWWIqF4PX1IrOca tYaJJLzK4G+Cw+G/epfXjPCvHpdOprluJBaZEDvWnSGyFdi/KtvREYxmcESz9oRes0Zo7vZe68b sRx3/WhUd7B4EAZ7vJdQc7MjFZIhM3QctHrK3+ohVAg/A== X-Received: by 2002:a05:6a00:b90:b0:848:6447:e09c with SMTP id d2e1a72fcca58-84f2e152a10mr21860852b3a.39.1786103221911; Fri, 07 Aug 2026 04:47:01 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3622:c86b:3bef:6958]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-cbe8f38839esm607634a12.29.2026.08.07.04.46.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 04:47:00 -0700 (PDT) From: Chen-Yu Tsai To: Icenowy Zheng , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH RFC v2] drm/verisilicon: Switch to drm_fb_dma_get_addr() for framebuffer addresses Date: Fri, 7 Aug 2026 19:46:53 +0800 Message-ID: <20260807114654.1373305-1-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.654.g21b8a5bc05-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The verisilicon driver has a custom framebuffer address calculating helper that the common drm_fb_dma_get_addr() can substitute. Differences from drm_fb_dma_get_addr(): - Uses drm_format_info_min_pitch() to calculate the horizontal offset; however the driver does not support any of the blocked formats, so this just ends up being the same as in drm_fb_dma_get_addr(): "cpp[plane] * y" - Uses clipped source coordinates instead of non-clipped coordinates as in drm_fb_dma_get_addr(); For the primary plane this doesn't matter, since the primary plane must match the output, i.e. it cannot be clipped. Also this driver doesn't support scaling. For the cursor plane this seems wrong, as the clipping seems to be done by the hardware, and thus the buffer address should be unclipped. As such, it should be fine to use the common helper and drop the custom code. Signed-off-by: Chen-Yu Tsai Reviewed-by: Icenowy Zheng Tested-by: Icenowy Zheng --- Changes since v1: - Fixed compile issues This is only compile tested. I do not have the hardware. --- drivers/gpu/drm/verisilicon/vs_cursor_plane.c | 4 +++- drivers/gpu/drm/verisilicon/vs_plane.c | 20 ------------------- .../gpu/drm/verisilicon/vs_primary_plane.c | 7 ++++++- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/verisilicon/vs_cursor_plane.c b/drivers/gpu/dr= m/verisilicon/vs_cursor_plane.c index fa4f601dd0c8..59778433ae84 100644 --- a/drivers/gpu/drm/verisilicon/vs_cursor_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_cursor_plane.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -176,7 +177,8 @@ static void vs_cursor_plane_atomic_update(struct drm_pl= ane *plane, break; } =20 - dma_addr =3D vs_fb_get_dma_addr(fb, &state->src); + /* hardware handles clipping as seen below */ + dma_addr =3D drm_fb_dma_get_gem_addr(fb, state, 0); =20 regmap_write(dc->regs, VSDC_CURSOR_ADDRESS(output), lower_32_bits(dma_addr)); diff --git a/drivers/gpu/drm/verisilicon/vs_plane.c b/drivers/gpu/drm/veris= ilicon/vs_plane.c index d81f7b8f4c65..38b8b536eccb 100644 --- a/drivers/gpu/drm/verisilicon/vs_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_plane.c @@ -107,26 +107,6 @@ int drm_format_to_vs_format(u32 drm_format, struct vs_= format *vs_format) return 0; } =20 -dma_addr_t vs_fb_get_dma_addr(struct drm_framebuffer *fb, - const struct drm_rect *src_rect) -{ - struct drm_gem_dma_object *gem; - dma_addr_t dma_addr; - - /* Get the physical address of the buffer in memory */ - gem =3D drm_fb_dma_get_gem_obj(fb, 0); - - /* Compute the start of the displayed memory */ - dma_addr =3D gem->dma_addr + fb->offsets[0]; - - /* Fixup framebuffer address for src coordinates */ - dma_addr +=3D drm_format_info_min_pitch(fb->format, 0, - src_rect->x1 >> 16); - dma_addr +=3D (src_rect->y1 >> 16) * fb->pitches[0]; - - return dma_addr; -} - struct drm_plane_state *vs_plane_duplicate_state(struct drm_plane *plane) { struct vs_plane_state *vs_state, *vs_state_old; diff --git a/drivers/gpu/drm/verisilicon/vs_primary_plane.c b/drivers/gpu/d= rm/verisilicon/vs_primary_plane.c index 1f2be41ae496..2750016a7f2c 100644 --- a/drivers/gpu/drm/verisilicon/vs_primary_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_primary_plane.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -126,7 +127,11 @@ static void vs_primary_plane_atomic_update(struct drm_= plane *plane, VSDC_FB_CONFIG_UV_SWIZZLE_EN, vs_state->format.uv_swizzle); =20 - dma_addr =3D vs_fb_get_dma_addr(fb, &state->src); + /* + * Primary plane cannot be moved, no clipping is involved, + * so the non-clipped framebuffer address can be used. + */ + dma_addr =3D drm_fb_dma_get_gem_addr(fb, state, 0); =20 regmap_write(dc->regs, VSDC_FB_ADDRESS(output), lower_32_bits(dma_addr)); --=20 2.55.0.654.g21b8a5bc05-goog