From nobody Tue Sep 29 13:20:32 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 1BFF2332614 for ; Fri, 7 Aug 2026 10:48:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786099709; cv=none; b=BK6SyM9WdXaIFZMmz/P3Ofx1HwU4P1XG5r3Xb2v1LUgiPVEq5MP1mKe3MpNZ6hJxsYJEIUqXWC+YKnyo3EZTdnATv3huUymFqr53qJUIowFxjF+3OXX5GHnc880f/xhL30QCwZyYog5rd0zHR5kYOl1FcQaLgtRxl60anaJadvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786099709; c=relaxed/simple; bh=y1netkFxuu87McYpuxO78QGB6SvnYBX56ArTJgHf2yw=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=aAWSoV/IAvV6GdtDV3IR6jSPmKr3QRh0QAgQ+aJ6qRKOpZeHAYCfaP6bnxXYWmBK3ZC1jD67U3kCRxg2Y/jroDhrjuQiW84viZtocofgAV2aqdWtt9jqC6v4peUGgmweua6K1IHfqQTbigkXo9h9PvWO1zMejRhmZik53xfBWY0= 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=iUCNmvmb; arc=none smtp.client-ip=209.85.216.49 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="iUCNmvmb" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-38dcbade417so2656963a91.1 for ; Fri, 07 Aug 2026 03:48:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1786099707; x=1786704507; 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=8LAC89Pa2inBFGUYibeK6Z3jEuTy6YAb4F0fhnyfSBc=; b=iUCNmvmbbbI599nvunz4lIjmKaxekBmCwb5oMc78XD7ZA5MEEzMdyUwvIQijAl74qG FL4CrEJFJG03JfS1wQ7TdsGTmVxouQYaw+uc89J/Mv4MKn5nTwVUYrfGxMO0P4iPzhis U6GA78Y/vbAhL73UWdu78D8uds84+Mq3uDUWA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786099707; x=1786704507; 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=8LAC89Pa2inBFGUYibeK6Z3jEuTy6YAb4F0fhnyfSBc=; b=c/2EK7zWKoi2EQDALQm7awMUdJ3/viWPkHo3ZT4XQFaYHbsHl2+Csy1QR/ql6WHBuf yRpfcU/UF/TJrgwuvFWFjUebt/fC3LUmSX/u7twajt5FUXDqrcbo2GoIkUADGEDSZpZW PahaD6mMQYN2ukAQ2bfzi9r94KWOBuJDjWFODv448pkNgWyZpNpOFHYdI4GuOzKwdWG7 sTfzcuZKdAIivGXUPN1XzpvacYaWSmVg4VF5vVTrjzYLf9QQVjaaWpiVKxUm+gF4Bmdr 3TxEmVETnbwRrSvjgvIjQkP7dlVr3RSYoaUpX7fkxIOysXh3qqSFHnQlSdEDEYkyOS/d COow== X-Forwarded-Encrypted: i=1; AHgh+RqXNHUKjtE9abUbTG2YuUm1YPES/7v/B4GfBN8SNVTicMh4RbMhy1oyydefFjdaEkfUJhpumYSZdhxgdr8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1r1hwTt5ber3I4VWQMyjOzijXoUY1Na+inTUmlqC2f8hZ3BHc YGVZ24Dr8l4npkvkgq26Yu/q8aDagkUAPV9q7ehX9gixHgSJEGXbaQhKElshlbmbJw== X-Gm-Gg: AR+sD12Taqqhw4ps6vYwg7OsFMgBFN6W6pnta4BRD2cb031HW8c4gpTzlUGQb7Yfvp8 BrjRCRVrZ0SMaWNUCoCeSh7RnJ8HHwIhmQT96HeZ79miSOldKfAw9xZNzOlEwWYrhqhwXM2+gG3 Ol0PcDjyEuHjbWUu3Qaux7wxSrFHFT3PjjfoI+/mQdSFlxOikOqCQFWJYsNlOBaue2M3RiiuhcR V6/Nu3Mw/T0I+DqlAIAYVAbZVPRB9Et/JX/mZ2R7L/yz5LCjWTb6BDCez2gvxvpcCyQXzeojrgE Cibg8sLdywCu9jDVHQhAiSfp0ptF8dsqEM2R5F0h+sLnUVdh+gkvzNuYMc/ZEvElZdy4Rg+0wsj 4LWJ98wiUGOovrVuPGVCAKKCLC5SCTLAMofncGLx1G20gJlkYFxlqFAvS9WwbzEvL8rrIpMnZjQ NOWAgU3E3qjcVmCjqi9yn7BZkNNhUWDIhIs6l0PEZeQvLrmiyjUzomc49E997ggSOTeFEYWXgod yrVR9wQvUd8qtOciDVwa9WD0vJSS2NV/0Emv1PZChZIGQ== X-Received: by 2002:a17:90b:5251:b0:38e:4cb:51f with SMTP id 98e67ed59e1d1-3903c59212bmr22546372a91.11.1786099707376; Fri, 07 Aug 2026 03:48:27 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3622:c86b:3bef:6958]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-390b37eac8csm957518a91.4.2026.08.07.03.48.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 03:48:26 -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] drm/verisilicon: Switch to drm_fb_dma_get_addr() for framebuffer addresses Date: Fri, 7 Aug 2026 18:48:18 +0800 Message-ID: <20260807104819.1295812-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 --- This is only compile tested. I do not have the hardware. --- drivers/gpu/drm/verisilicon/vs_cursor_plane.c | 3 ++- drivers/gpu/drm/verisilicon/vs_plane.c | 20 ------------------- .../gpu/drm/verisilicon/vs_primary_plane.c | 6 +++++- 3 files changed, 7 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..ae03d415d66b 100644 --- a/drivers/gpu/drm/verisilicon/vs_cursor_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_cursor_plane.c @@ -176,7 +176,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, 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..46653469caaf 100644 --- a/drivers/gpu/drm/verisilicon/vs_primary_plane.c +++ b/drivers/gpu/drm/verisilicon/vs_primary_plane.c @@ -126,7 +126,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, 0); =20 regmap_write(dc->regs, VSDC_FB_ADDRESS(output), lower_32_bits(dma_addr)); --=20 2.55.0.654.g21b8a5bc05-goog