From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B64D6CCFA05 for ; Tue, 4 Nov 2025 18:10:20 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9086410E653; Tue, 4 Nov 2025 18:10:19 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fSk82zNS"; dkim-atps=neutral Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6837010E64D for ; Tue, 4 Nov 2025 18:10:18 +0000 (UTC) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-475dae5d473so7378965e9.2 for ; Tue, 04 Nov 2025 10:10:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279817; x=1762884617; darn=lists.freedesktop.org; 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; bh=JdhmcynnandPsql64nAYpaShGCfSEifyPJ/Np9JnIqU=; b=fSk82zNSX+vbxfJzOqH/1dAJ+0n7VZAtf/1vz1KBTOgQon2UGrk0SNP0UBBec5h+nE e6//NBH6tkO2MmHP1j0wz+Vi95hP5HhYHgm75m0MhYOVdH/0TVEB05mEHArvILw5WBpX rSQWKjPuiXrx2bVyYAJG6/rml2KGZe2Vk+Y4bUXfSI2gFozb0F0fiuN1KZut4Bu+Zq+A HhIUXocI8x9Sz3HPi89sdIJ+vh6GcEWzlp1xjDp6sV/v7KNyWJtZGktZ/1Kj44BLX3pL O6Opmgj9RnrAt1Kh1JmgRagdjAJguQy/N0e4nov+snb3Xj5DlbtL5dFDFe705KmU3osd /LAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279817; x=1762884617; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JdhmcynnandPsql64nAYpaShGCfSEifyPJ/Np9JnIqU=; b=vwGOjas6Y/Dc+vbbrFSaoPfIYRRqyq9JH+28YBX6iXpQ76qBEmjuE67EgkkYRflGvG wvkl9csP5Z0m32hatctdc+JlUcro/AZehOlafAf9pDRm9KF72VKkPLrYRkB/iL+AkV7m epsAjVDYM3a2szm0sWPpix63ux+1F4N67YBKsKZyoEEmd0K1ehNsNQz6++L6kfVtMxXh dL0KzuvSgfIGU3Lftw44re52LlAkUzjXQpUyJ2ic3TujX5FR4+0f8inY31kkdgZTLnRC qwgkUFhZCrYNSqCW2OtF5wDxCpsK09KLW0w4NczOTdJw+3U9b9pFbwOB/0hLpNU63X0Q G7HQ== X-Forwarded-Encrypted: i=1; AJvYcCUoUpPL8+sC0TNllxdxlWUOKgVDKVCFmowkoYmppd1rNGmA1VBaFCVwrnMS2XY0CV0W1GqTL6HLXJQ=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx94gkQ2Of7nfFsfKBoaIBp/r909JcO6UmCcP8uWL8hzUj7nTSo VKcx9T08n5YxvudoWaexkmQ+BKoFwhFHhlAjQX+NQbu46+5mULfajb2K X-Gm-Gg: ASbGncsXJ267lcAQovipm5hx6yU2X0oNjST21aOwues8FaoXAe/TpnVvYmTUQwrX/8O Q8vgpB9+zA2y9mzrw4646Zx12LjlzylKnr3SYsg1OuqasxLNjmNgBmOkgvl+b9b8Y+efu6NXFU8 VHkXamB+94pQ7zGnGPNumpsCLa18pISyeJ4s6RAOOSC7ki04r1rYohnPLcAckGXYc0cb1qe4JUD RmoJlDQ/xCQnsbdv592PHUbIIShHIkrmCDlIBwwvphd377LMlTY+Yzih89sL49PML4hAGiLcgpx ahqyXjNcSNnFJmYOkVSxAxRPzztIDukM3r3UYP+g8YSKaHZ3ECCXTiZ/WXLNOX9aOvkOpISgkdR VHD0Y0zjr2l/+DT1mD0WjlBuxZ04c/g3k8FoT1tx+PCZl0CD5k6QTjP8FrySXTfUg0lyGFkMFUz FOlaO21ZQobhqeC4yJIs863kfHbq7i X-Google-Smtp-Source: AGHT+IHAn9E17efLdK3gkIKUuQG/k5i67Pxhzd6m2tYSUMyKeGk6z7xhuvIzYFMNgqNcBWlY1dxfwQ== X-Received: by 2002:a05:600c:524d:b0:46e:436c:2191 with SMTP id 5b1f17b1804b1-4775ce12cbcmr2349175e9.25.1762279816823; Tue, 04 Nov 2025 10:10:16 -0800 (PST) Received: from jernej-laptop ([178.79.73.218]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-477558c1a03sm24688685e9.2.2025.11.04.10.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:16 -0800 (PST) From: Jernej Skrabec To: wens@csie.org Cc: mripard@kernel.org, maarten.lankhorst@linux.intel.com, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, samuel@sholland.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec , Chen-Yu Tsai , Ryan Walklin Subject: [PATCH v2 12/30] drm/sun4i: csc: Simplify arguments with taking plane state Date: Tue, 4 Nov 2025 19:09:24 +0100 Message-ID: <20251104180942.61538-13-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251104180942.61538-1-jernej.skrabec@gmail.com> References: <20251104180942.61538-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Taking plane state directly reduces number of arguments, avoids copying values and allows making additional decisions. For example, when plane is disabled, CSC should be turned off. This is also cleanup for later patches which will move call to another place. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_csc.c | 42 +++++++++++++++++++++++--- drivers/gpu/drm/sun4i/sun8i_csc.h | 11 ++----- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 33 +------------------- 3 files changed, 40 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c index cf0c5121661b..ac7b62adc7df 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.c +++ b/drivers/gpu/drm/sun4i/sun8i_csc.c @@ -3,11 +3,20 @@ * Copyright (C) Jernej Skrabec */ +#include +#include +#include #include #include "sun8i_csc.h" #include "sun8i_mixer.h" +enum sun8i_csc_mode { + SUN8I_CSC_MODE_OFF, + SUN8I_CSC_MODE_YUV2RGB, + SUN8I_CSC_MODE_YVU2RGB, +}; + static const u32 ccsc_base[][2] = { [CCSC_MIXER0_LAYOUT] = {CCSC00_OFFSET, CCSC01_OFFSET}, [CCSC_MIXER1_LAYOUT] = {CCSC10_OFFSET, CCSC11_OFFSET}, @@ -196,21 +205,44 @@ static void sun8i_de3_ccsc_setup(struct regmap *map, int layer, mask, val); } +static u32 sun8i_csc_get_mode(struct drm_plane_state *state) +{ + const struct drm_format_info *format; + + if (!state->crtc || !state->visible) + return SUN8I_CSC_MODE_OFF; + + format = state->fb->format; + if (!format->is_yuv) + return SUN8I_CSC_MODE_OFF; + + switch (format->format) { + case DRM_FORMAT_YVU411: + case DRM_FORMAT_YVU420: + case DRM_FORMAT_YVU422: + case DRM_FORMAT_YVU444: + return SUN8I_CSC_MODE_YVU2RGB; + default: + return SUN8I_CSC_MODE_YUV2RGB; + } +} + void sun8i_csc_config(struct sun8i_mixer *mixer, int layer, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range) + struct drm_plane_state *state) { + u32 mode = sun8i_csc_get_mode(state); u32 base; if (mixer->cfg->de_type == SUN8I_MIXER_DE3) { sun8i_de3_ccsc_setup(mixer->engine.regs, layer, - mode, encoding, range); + mode, state->color_encoding, + state->color_range); return; } base = ccsc_base[mixer->cfg->ccsc][layer]; sun8i_csc_setup(mixer->engine.regs, base, - mode, encoding, range); + mode, state->color_encoding, + state->color_range); } diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.h b/drivers/gpu/drm/sun4i/sun8i_csc.h index 27b6807fc786..ce921521aaca 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.h +++ b/drivers/gpu/drm/sun4i/sun8i_csc.h @@ -8,6 +8,7 @@ #include +struct drm_plane_state; struct sun8i_mixer; /* VI channel CSC units offsets */ @@ -22,15 +23,7 @@ struct sun8i_mixer; #define SUN8I_CSC_CTRL_EN BIT(0) -enum sun8i_csc_mode { - SUN8I_CSC_MODE_OFF, - SUN8I_CSC_MODE_YUV2RGB, - SUN8I_CSC_MODE_YVU2RGB, -}; - void sun8i_csc_config(struct sun8i_mixer *mixer, int layer, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range); + struct drm_plane_state *state); #endif diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index adcd05acba1b..cf83f7ce6c78 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -188,36 +188,6 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, SUN8I_MIXER_CHAN_VI_DS_M(vm)); } -static u32 sun8i_vi_layer_get_csc_mode(const struct drm_format_info *format) -{ - if (!format->is_yuv) - return SUN8I_CSC_MODE_OFF; - - switch (format->format) { - case DRM_FORMAT_YVU411: - case DRM_FORMAT_YVU420: - case DRM_FORMAT_YVU422: - case DRM_FORMAT_YVU444: - return SUN8I_CSC_MODE_YVU2RGB; - default: - return SUN8I_CSC_MODE_YUV2RGB; - } -} - -static void sun8i_vi_layer_update_colors(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) -{ - struct drm_plane_state *state = plane->state; - const struct drm_format_info *fmt; - u32 csc_mode; - - fmt = state->fb->format; - csc_mode = sun8i_vi_layer_get_csc_mode(fmt); - sun8i_csc_config(mixer, channel, csc_mode, - state->color_encoding, - state->color_range); -} - static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, int overlay, struct drm_plane *plane) { @@ -333,8 +303,7 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, layer->overlay, plane); sun8i_vi_layer_update_coord(mixer, layer->channel, layer->overlay, plane); - sun8i_vi_layer_update_colors(mixer, layer->channel, - layer->overlay, plane); + sun8i_csc_config(mixer, layer->channel, new_state); sun8i_vi_layer_update_buffer(mixer, layer->channel, layer->overlay, plane); } -- 2.51.2