From nobody Fri Oct 2 08:26:25 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 E794940BCBC for ; Mon, 3 Aug 2026 13:52:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785765179; cv=none; b=eW1bbFLrk3zoG3ax2Hp3lioqdtgI0SJePTSqv+uvOmAifS///N/BYadwL1BC37Bt4lOWJXJXdgoGFQwgfuJsHMObhohJNVzr0l08cQKrCEEahN00m+TsLHDF86IGB3dQqYC4MyuG1etxv7Gz0S7zcesV+QVHlbAk2zyKDGWxywU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785765179; c=relaxed/simple; bh=pvRNspL5nnjT+VTn2VLyYBjtJviJHUXepC7svDV1rjo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fCbxPhI4R42vf2fuci42zMlPdBWaQm33O0DnSNnodZksUOyoZjsODGE0Q+yYaYnkvUq/83FlhzPWt6XdfgeHU5EOgyNdKmo7lNRKkjo251BfBCuQBcJx2gXygGuIxtMazT1QSFBJ1jkxsIW+wYsXsz5UMwSzTLZ5L1GGCQ8neF8= 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=e6rNdyCW; arc=none smtp.client-ip=209.85.214.181 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="e6rNdyCW" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2cab973140bso41932885ad.3 for ; Mon, 03 Aug 2026 06:52:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1785765177; x=1786369977; 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=KP2LOm/b1vDApC79L7HU3Q+z5sMfbtyywYlbaxYaS3U=; b=e6rNdyCWST44TSfAK8Fy0rV32KNNV8zzDZujZgHRMjs1E8/ZtvmrH+JGPOgctkNGep q8EVBaw7qMkFe3aTAnwpfzoJG0J+CPzTlv0UhXrwvVp/mNpA1HdHxccNIMmdwnztlQhS 1fxpSp70dOqmdZviKtdXFzEmWuhEX9Ml+gVLA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785765177; x=1786369977; 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=KP2LOm/b1vDApC79L7HU3Q+z5sMfbtyywYlbaxYaS3U=; b=bbtU8vgi6m8RUqa3eaHb0ckkwGkrrFe94ruNyedvAaMR7TUBZBPBffaewzjRAjLljT Iticme4xAFyVAnArHHvRvTpxp4FK7Q9y1U4FqMwUZXBJPm8cpT3QITZO15ojqwNjHs9v OyJhZP5z67uPCRdxr9p7Koy/u5ZbzaapOMNzSy+KGf1dUdh5t/LWYwWplyIDKN+DGGYP wiyIMB0VigdzolbSbtahlHEhvUOTTYIuCwH0+YXVcKKRAXORNTfZWp12E8uTlhka0Eab 2ZQsIK/XE1iydKUbsWLHeDu3qi22mKbiTp43zgrmaVOGbs7QGoyG+P1TcdK5l//dxvQd s8sw== X-Forwarded-Encrypted: i=1; AHgh+RpAUlRprbbKELTaJjLXxZJyT14b7Endha3X0in+xOEczmJsNdxfTkPtvbcB11BtwABz0ZyRmoyeFOeHhTY=@vger.kernel.org X-Gm-Message-State: AOJu0YxFhRZMeSR7T3pVestYpBpTUhTeH+Hn2kikQy2Mvz5vNp19BE6b 68yoiSSH4b/2WSRnoNEq2lXY10WazOU9MURoRE1dK6lbRWUyQYJ5DiMBkmzVFUb3rNFs8n0gvYs ATquA+Q== X-Gm-Gg: AR+sD13ciX4L9NlhYQkhf4YUQZk+dXDlj5TTXSzbU+52ZEy9wtRjMI5Ri3b0+C8uUh3 MV/tP+eGdeJ7V3nT/XAaFNzycrWkvGjhbD7ObaDPk7WudZw1Eumm6ktajALriGj4ayW1W8NZO/l tcIRb6u6ukgzLGzgeJM/lU0Cjkb+aTOlb4CY2OwOWFxbaKd41U9B6UpBFVJj2TPk45pAw7TOBzA hlUAyqFAj7Gl/Du3npGl+Xc1qQDwO+R953ZIUcMsPvvzYIVFoYxKftkHvVL76AxWTPl0+S8wwSG pBliSsLJfyzFKKOzirwo+ze4NdL1AkjrZAnmHSlOwPLihixHnYDOT+aqfyDXhile8o4bwU9CgT3 UQlmV9pykiaZYpzS3ZcCSqvE9hPbjUsATxnIDSYh2IWcHOEK1C+MjKKIGmQKlauFuY9rodzLxGE N226tb+bIdS5G8fiCXstI7JmLAkZ7nvySMpklENOBtMDjJsvKpZvL4lCfXS0Z6BcooiBoHgPh98 rJrAefGIk0GBCDGU7z9Vokjckc1O3e3A+RHEB7uMoN5r7YgkJ6p+s8h X-Received: by 2002:a17:902:ce0b:b0:2cc:f4d4:299f with SMTP id d9443c01a7336-2d05229b34fmr106179645ad.27.1785765177126; Mon, 03 Aug 2026 06:52:57 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:1c0b:57ba:92e2:e178]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d04b12066fsm38791965ad.60.2026.08.03.06.52.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 06:52:56 -0700 (PDT) From: Chen-Yu Tsai To: Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: Chen-Yu Tsai , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/exynos: Set supported modifiers during plane init Date: Mon, 3 Aug 2026 21:52:47 +0800 Message-ID: <20260803135249.2898083-1-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.571.g244d577d93-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 exynos driver currently checks the modifier in a helper called by the plane atomic check helper callback. This check only concerns whether the selected plane supports the tiled format or not. This is tied to the plane's hardware capability. Turns out the tiled support was added around the same time modifiers were being plumbed through DRM planes. The latter provided a way to describe per-plane modifier support. Add a field to the hardware plane capability struct to allow adding an optional list of supported modifiers. This is passed to drm_universal_plane_init(). This also allows the core to generate and pass to userspace a list of supported modifiers for each plane. EXYNOS_DRM_PLANE_CAP_TILE and the existing helper are removed, as the check is now down by the DRM atomic check. Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/exynos/exynos_drm_drv.h | 2 +- drivers/gpu/drm/exynos/exynos_drm_plane.c | 30 +---------------------- drivers/gpu/drm/exynos/exynos_mixer.c | 8 +++++- 3 files changed, 9 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exyn= os/exynos_drm_drv.h index b126cd129944..ab0edb826261 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h @@ -92,7 +92,6 @@ struct exynos_drm_plane { #define EXYNOS_DRM_PLANE_CAP_DOUBLE (1 << 0) #define EXYNOS_DRM_PLANE_CAP_SCALE (1 << 1) #define EXYNOS_DRM_PLANE_CAP_ZPOS (1 << 2) -#define EXYNOS_DRM_PLANE_CAP_TILE (1 << 3) #define EXYNOS_DRM_PLANE_CAP_PIX_BLEND (1 << 4) #define EXYNOS_DRM_PLANE_CAP_WIN_BLEND (1 << 5) =20 @@ -112,6 +111,7 @@ struct exynos_drm_plane_config { const uint32_t *pixel_formats; unsigned int num_pixel_formats; unsigned int capabilities; + const uint64_t *modifiers; }; =20 /* diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/ex= ynos/exynos_drm_plane.c index 5c04ef87e400..31f5f0941154 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c @@ -174,30 +174,6 @@ static struct drm_plane_funcs exynos_plane_funcs =3D { .atomic_destroy_state =3D exynos_drm_plane_destroy_state, }; =20 -static int -exynos_drm_plane_check_format(const struct exynos_drm_plane_config *config, - struct exynos_drm_plane_state *state) -{ - struct drm_framebuffer *fb =3D state->base.fb; - struct drm_device *dev =3D fb->dev; - - switch (fb->modifier) { - case DRM_FORMAT_MOD_SAMSUNG_64_32_TILE: - if (!(config->capabilities & EXYNOS_DRM_PLANE_CAP_TILE)) - return -ENOTSUPP; - break; - - case DRM_FORMAT_MOD_LINEAR: - break; - - default: - DRM_DEV_ERROR(dev->dev, "unsupported pixel format modifier"); - return -ENOTSUPP; - } - - return 0; -} - static int exynos_drm_plane_check_size(const struct exynos_drm_plane_config *config, struct exynos_drm_plane_state *state) @@ -245,10 +221,6 @@ static int exynos_plane_atomic_check(struct drm_plane = *plane, /* translate state into exynos_state */ exynos_plane_mode_set(exynos_state); =20 - ret =3D exynos_drm_plane_check_format(exynos_plane->config, exynos_state); - if (ret) - return ret; - ret =3D exynos_drm_plane_check_size(exynos_plane->config, exynos_state); return ret; } @@ -312,7 +284,7 @@ int exynos_plane_init(struct drm_device *dev, &exynos_plane_funcs, config->pixel_formats, config->num_pixel_formats, - NULL, config->type, NULL); + config->modifiers, config->type, NULL); if (err) { DRM_DEV_ERROR(dev->dev, "failed to initialize plane\n"); return err; diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos= /exynos_mixer.c index 69dea5049309..d74e605a452b 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -93,6 +93,12 @@ static const uint32_t vp_formats[] =3D { DRM_FORMAT_NV21, }; =20 +static const uint64_t vp_modifiers[] =3D { + DRM_FORMAT_MOD_LINEAR, + DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, + DRM_FORMAT_MOD_INVALID +}; + struct mixer_context { struct platform_device *pdev; struct device *dev; @@ -148,8 +154,8 @@ static const struct exynos_drm_plane_config plane_confi= gs[MIXER_WIN_NR] =3D { .num_pixel_formats =3D ARRAY_SIZE(vp_formats), .capabilities =3D EXYNOS_DRM_PLANE_CAP_SCALE | EXYNOS_DRM_PLANE_CAP_ZPOS | - EXYNOS_DRM_PLANE_CAP_TILE | EXYNOS_DRM_PLANE_CAP_WIN_BLEND, + .modifiers =3D vp_modifiers, }, }; =20 --=20 2.55.0.571.g244d577d93-goog