From patchwork Tue Nov 4 18:09:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 683 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 CE09A33DEF4 for ; Tue, 4 Nov 2025 18:10:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279807; cv=none; b=qlfHRr9wYRS6IfzxMuWd34dxnEAbrcHBNkEfH3t0e4c6xih7R8T8ZFvkZ0WHltiRAj3n8UuykQuafJAmuug9n/7hC/oSxyaJiSp+MxHi/GtSlyfllrjFVnggdUfM2yLTn/6TTnRDy5JoiMe6quLks3eX5DEbdeY7QG1K46rLf8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279807; c=relaxed/simple; bh=aREJ13it41dhVSZnZkEIp556vGl5b/Ra76n/PoBdPPM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K12JONb/EELk+CBiki6lUE9V9WKgA+0pWActUaylzuFIQaLWo3C68jyD4Ttp7nkLBZ3yTHhPoMt6j5uJMqjhJOgmiFj7utUbp0sHWe0GbHE4QgAyGemc3CY38WZa+pqXO7wrRmmzgXGSykwKCAPxMIl5TyBQBfdpDZfIX63QVzI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GPj7xd+k; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GPj7xd+k" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-475dd559b0bso78251785e9.1 for ; Tue, 04 Nov 2025 10:10:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279803; x=1762884603; 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; bh=l+/CRDV30StujBfkrHNR5F++4wuDv1TH5QOb5NIYpYA=; b=GPj7xd+kTvCzQVHp8+AHOrqLHpv36wp0P9sZD8n8XM20qbt+btzSfjtKDGuz5ijdLY RiEqgkvbqYWdvdbqaLogfcgZ8iwcbLfigTRfNXGMA54k4X+agTXiWfxeGcCAqgU3KfKO F369HdrbTPGjFjcXb1rwudIo8ZBf0xYQ94lemWZ5cknSEo36WuHbw6V+LqeRXaC9Ww5i WtBFv11PRA1cSvTdBeyza6JEGvZ5eS70Xr7d0ERsLkCWluGbQgLnjUHwLgqPTBCzG8N4 a1NG0FnEDB3xkTwojWHaDZ+SHI7HGHN0VUPBSPtn9jrkNk8ffQZVbaHtZxNnBVncTR9s GWVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279803; x=1762884603; 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=l+/CRDV30StujBfkrHNR5F++4wuDv1TH5QOb5NIYpYA=; b=anNYX1QwUiOEisua5TibAhFz+25nJwHxCBX1/yHMAgBVP87InYhu0F/20GPU8Enw9c McTZ4sffQLVAX8Ox706NVzogFV1Ihlt6IMWK550d6BVUk+4zrK+ulyYd0lQaZABm0X90 uLXpG9wab1s2G4DKwLThIlkCSQRRm+z/qz2GBWTviznEcylABnHSTayzTEuhv1KY2Ags TlcxjDa6hYOJSiwgw/MUxVj7Jblm/3bj5erv3bp0wDFIMbg2MQ49sIdlEEBMXNzzPkNd /cXFdWg+crzeVr/T2xl+wxT9teUNS343CFz/itBpTLzNnHNkUh3z2Jx3k0+ykiBkh7FA Cf3A== X-Forwarded-Encrypted: i=1; AJvYcCUEsB3Y4zD0kNh8dWBtsO+8y7PB0jBk3/dSA7tKFxclnGpH5W2BXtE/lUA4h+XKI35MTXYe42mTFxq/0w==@lists.linux.dev X-Gm-Message-State: AOJu0YzGbirIEcsPnORqylbwbzEFifsgA0299TYzJcphVGykVyFdTDdD dso888kNYm1eQyKOmQKNzU+9iT507GKeTWIOroPh4UmSptzrc/fs0H2l X-Gm-Gg: ASbGncsLiYVPklhEvIf6aJr0Xg1IlRrWYVCfj7Qt6gCSvYaJnpR5mW+QOPBbITVurAz Up1edVDPsQrZXyTsXS4qBiPhlsVcE3X012XnbCco3Lqy05O6eQYxW/BbtjIXID5kkGcFAaUvwiH NqvhzVKEbpJiZUvjC41xjAwbaYBm4ltWt5AYEsBxKuv48yV6j5SGBlwhUooB7dVZwCkwzuBC5+I Uy9Kbsj7Jn4aT/GZFGPzMUvIefUuYzRf7ufy/WeQHEoB3YoKBQzfcc7zKHOIgnOcz3167OVGLBq ES5sSrpXja9DdA6Sw3X0HGln3Nu7MsdV4FU7Ca0nGTDHLkEMPTeuxMjS7mj4wDaKTGNVqdMepyT +j1gpH66ZF9CnSWKTLao48gieUujJRj1ekhgVlHtyD+BVmX0SkKkdUG3bjTUld7VO8oy/p6uPAz lg1QZG44SA3ZvmzriQYQ== X-Google-Smtp-Source: AGHT+IGtn2Tb5IVfUa8fwzSIF6EUNQPbcBikspeOnI6L4J7SH1eZ3RvMdCq27U9/2nMsft5HkQB0Jg== X-Received: by 2002:a05:600c:5251:b0:46f:c55a:5a8d with SMTP id 5b1f17b1804b1-4775cdbd440mr2296855e9.4.1762279802950; Tue, 04 Nov 2025 10:10:02 -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.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:02 -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 , Ryan Walklin Subject: [PATCH v2 01/30] drm/sun4i: mixer: Fix up DE33 channel macros Date: Tue, 4 Nov 2025 19:09:13 +0100 Message-ID: <20251104180942.61538-2-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Properly define macros. Till now raw numbers and inappropriate macro was used. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index a1c1cbccc654..b5badfa2c997 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -39,6 +39,9 @@ #define DE3_CH_BASE 0x1000 #define DE3_CH_SIZE 0x0800 +#define DE33_CH_BASE 0x1000 +#define DE33_CH_SIZE 0x20000 + #define SUN8I_MIXER_BLEND_PIPE_CTL(base) ((base) + 0) #define SUN8I_MIXER_BLEND_ATTR_FCOLOR(base, x) ((base) + 0x4 + 0x10 * (x)) #define SUN8I_MIXER_BLEND_ATTR_INSIZE(base, x) ((base) + 0x8 + 0x10 * (x)) @@ -242,7 +245,7 @@ static inline u32 sun8i_channel_base(struct sun8i_mixer *mixer, int channel) { if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - return mixer->cfg->map[channel] * 0x20000 + DE2_CH_SIZE; + return DE33_CH_BASE + mixer->cfg->map[channel] * DE33_CH_SIZE; else if (mixer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_CH_BASE + channel * DE3_CH_SIZE; else From patchwork Tue Nov 4 18:09:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 682 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 42FA933DEFF for ; Tue, 4 Nov 2025 18:10:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279808; cv=none; b=CC2VR2nC52q0zHsTtt6yuvv2EF6vDqmb9iW4BgVjgxVKl4y1TnofI4ND41LkdFYzMNqrxxfqGhLgnx0xnsekO1f8sC2zNKrao8dp7AwEJeHtdmp5rf3KxEmtqs6txm+MfXqokuP6rqJpMzzMl4AX+W9PU8BNfx3RHc1VgkoaHhc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279808; c=relaxed/simple; bh=AVpGhbTlWMYcUtDZO75Du13zXCCyhna1uvtNgig20wg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jh5o8jNrn47TZ2QiQBPydePda9+t10UOdbYl6TquXbvCt2Gf6/UIbwz4OOAAdP7oVb2hY1DuD1wBFdcJ9kVdz0sAKX4VUa4faDT/W2gPRfRfGCC6IMDp39XTqjMISIORwAyCJ95LaHv1ND9EmHCTEAZVwjjppRJ7GCwRY6FgA88= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RSsIRYVp; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RSsIRYVp" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-47755de027eso7473005e9.0 for ; Tue, 04 Nov 2025 10:10:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279804; x=1762884604; 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; bh=dBzuHGqFjGOh4IAWV5vCG99JkAgbQed0TO0fNPxfrBM=; b=RSsIRYVpa1rqff9FpuHNPuukO0r3S4jCk2Pnrg+nuCFlkDAarXpWst4OM0skTQhvtI xTey0Wxe1KRAJb5wU19LLWp94WNNHm7I1H3lrK3sOCxYzvmtKqNXUvB7zf99yvf5slfP H7XhfCPkGRZH1gYu1l7C9S8+jF6upIwPLgnmQRdRmG4SwvrSiSOybx3inVp+jN2j9856 o2j90dW2ZXcIbbBPb/RTJqVVfQX/fto7J9Wr7wi7Hr1FycNe2haAAS46w3Y4TPWIzvht pLvV/YaCyuSSkqezOKaWZ/8WkOrbHAYeYEofX5WkGtVRzP5J2mbmfxA6V6jAjW47gH8A n/yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279804; x=1762884604; 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=dBzuHGqFjGOh4IAWV5vCG99JkAgbQed0TO0fNPxfrBM=; b=PLfueoEbwmOg+aapIp7PtQokmKOGR7XQNng1+LM3dp6c+t1kw78K/nX+yngxReuHZo YvqnPuXbe9zy7BhSoAkKdPmaxUw9iTPGe02QjYzIpRLtazc4FnOZsL3NXziT3rxCbBcz XMiE3bP+0xQdPWTsWwOlY3+l4nehX5ciObozC+0KEmwxYcCF3wZRCzRObAeXJ8ai32CP 0NlBe4tGfTnk4J6kBltF3ZEK7Lr75dsDPalY5Ub/AJSOXVtGGxmiP5U4Z6+ojwzd0v5b etpvkEnzuJQs3EA7mYRSZNDTW6mamoT/oTXb0W7/sr25DVjZGHZd3Dx9sH8uGzc08iAK dv9A== X-Forwarded-Encrypted: i=1; AJvYcCXEIo/vq8BVeLdguXLwmhGafMqmJg3J+LwxPkDge7AoMV8A4dWAnDxJ+h7C3yFGQZeO9NDySmPyyPldJw==@lists.linux.dev X-Gm-Message-State: AOJu0Yx4HQT+P7O1mWM0jORwH9ym5s8aE8jaxoM2Vxghxfnc+ljToHu9 uDwBiN/EToINphFS0AX/kZkzqGBardS2ZowBI/uqaJpkrUwvfNQB7aUf X-Gm-Gg: ASbGncvg/PS2LtnEMjM1s3ctsKbCo+X4zYPZVbCMYKTV+dOKK13w40rYwQj/mel4vYf BHWKz+7z4E8GTZ9OjfSfrvxh+Mp0HK8iUcU9pnsICKU7Pma07ozvZV2mFv8ntmjw/NrzMoGheiq WyJ0lPUYxYJ0mSS2DWjcGMXlM5+/urB4713uVjfQxofUkUA+dO0nwo0DZiwxH/N4JwJ8/G4+MOx DZqupjwNVYaO5eE5TfuDh4XJLsgS/uezNNk4J6xAwTJGdzr457M03o+q2NqurJXKPUHC+fPjcvV VWHVVVG99xSKQDGfJ1hyYxx+onx6pP3+1j3mbJ61aRj4CNFxr/6iQ++YTQa2Bwg5s7+nRnw5o9Z CEn2q16dR8efPjOiuEV78RASmUGZJx6rhfnU264P37YYPVSTXAl5+uAwGyzhxw5huqGIwitC3UV P9txbHuGySGlBN31f0KQ== X-Google-Smtp-Source: AGHT+IE+aXaz85+OcD9Vk61BR2+xCkKdEVOqbAdpjmknpg/EVMyrQo0hoti++4WquFHkKitI5cwjxQ== X-Received: by 2002:a05:600c:4e48:b0:477:54c0:6c3b with SMTP id 5b1f17b1804b1-4775cdad2admr2728525e9.2.1762279804193; Tue, 04 Nov 2025 10:10:04 -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.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:03 -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 , Ryan Walklin Subject: [PATCH v2 02/30] drm/sun4i: mixer: Remove ccsc cfg for >= DE3 Date: Tue, 4 Nov 2025 19:09:14 +0100 Message-ID: <20251104180942.61538-3-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Those engine versions don't need ccsc argument, since CSC units are located on different position and for each layer. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 31a8409b98f4..f7f210a925f8 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -790,7 +790,6 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg = { }; static const struct sun8i_mixer_cfg sun50i_h6_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE3, .mod_rate = 600000000, .scaler_mask = 0xf, @@ -800,7 +799,6 @@ static const struct sun8i_mixer_cfg sun50i_h6_mixer0_cfg = { }; static const struct sun8i_mixer_cfg sun50i_h616_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE33, .mod_rate = 600000000, .scaler_mask = 0xf, From patchwork Tue Nov 4 18:09:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 681 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 4697033E358 for ; Tue, 4 Nov 2025 18:10:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279809; cv=none; b=SY0KoHWF1Ru59Wn4uu9Se3Guxe1yBOvGqrpfVPiuHJfebRcS5MH7urTQy1BgUxVk6r0oXqKyTdyRCY85+zLR7mil5y/a+Um7LVsMz9HT/RQ36Z/DkKkaZblIpnAuO07+q7E3ryNsRtbv0WdgLulCPxDG6bcM1oqRQXWheqr4j94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279809; c=relaxed/simple; bh=EhvcCC5M8Ffhpn9lWdXwL6pO1wy+yi3roBXaKFO/oSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c7xC3csR0vQiuJnEvtJ4XoqGi9Ac+aQmkNgkek2m0AtnjV3ogZ6HGGdD2tNF/rXeB6REURVuNW804KmdHzrMprQhcp6R4bqkq9vXl96WF+sKbW+zfL1BlVc7d56hCD3A5/k4hkigv/F7lBKV+7Qq92S/OsuQEUw0+kEDWsLf80Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y5AuC8MM; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y5AuC8MM" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-47117f92e32so47876815e9.1 for ; Tue, 04 Nov 2025 10:10:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279805; x=1762884605; 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; bh=dL+KOGGetvWAx0akok8/ovUlD3VF5A+umltWwuLE0k8=; b=Y5AuC8MMtsrGppfrAJxbVU297vMeI8xSkJrKc46yvxyOj4fW4blMXI1/GDAzLLwgct fcSCmJ7aUSGqPzUOWxRmAsEOPOFQEeRYb5AsbtD1lluSAMud8Qp+/4IBJxTTtNw40Arq nReVhrhfIQWoUXLrsEwAedtMgZWt7AChhmgzmJwIkyTmxvk6q9MBUyVPVYhH3cHm6MLu iy/xIr1lCUIVIR94F6LmxTF7RpLZho2H5o9m3ickRwGZgRbvmuBtQr3QwUodJJ+FwXYk GU42dncsiAt8QK+SGwQOE4G4XRgAsjs+H7/Y6+JPShVoiDlfQbSZ9P/XnUhIr7GgbR1o nIMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279805; x=1762884605; 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=dL+KOGGetvWAx0akok8/ovUlD3VF5A+umltWwuLE0k8=; b=SlcR5TGMBCi3cJpMnI2mIF+eV6hutNbmWq58dJDCMBXYDgsM7IDiFFSY+RAcwv0p9o x6Xiso+8yolZtOEal9Z3BKER/l5COdKgf7q3FgIhRrQbHuK24nkyHJManh6YkFOmQJg8 ipnA8oEDhmYa63cgls6iS6DVK2jrvN+vpEQMvafv5GfzjSMubYpy1SQ57dFKInsugoyw k4f4dirLSe3R4grlAHS4vjyHPv/MGdW3lmpW7A4/7B7/urWg9VQiPmoYbblVotMZsbF6 bg2cEOTmfNKWYtRYZxdGhNt2D/9pm16WjPYom+xn/o+5MybQg1LnIXhWaLrZP0V9jteP pHzg== X-Forwarded-Encrypted: i=1; AJvYcCVbiPvMFKL6Hvoav832OWDDNv8vFgfWQPlHUmTeAFS9EqvFBUsKNOSMUb7gpaWfIAY57MOTKh8JT46c9A==@lists.linux.dev X-Gm-Message-State: AOJu0Yzw5kWNvGk6Exq+tqKDF8vAFh3eDnRXxWVYIo13s4OkOGrDvVh7 oHYqXTwSaMQw51SUln0xCLGsuf73XUODXGH2EK+61NhDVyoqf7R1SNJk X-Gm-Gg: ASbGnct8Y2mpAOSyhcXJSz5QUq7DshJStVj+v3lrt0tUwQCnzoc1fOS6SlX2f/q+vcj jrp5c9kqh1I1Qpd1YrOIo/oN8btb5LJn80emckyOA3I0GNv6v+OmyNdzbpCNQ/+gQ0OBEZuNtg/ vm8gEz0RORporQf3K0CU9dWdbO7HRtJfA/BywESO+D0z1+p9FUjAQaDj8fBXIK+f4AQwP8/n5ph akd6qgF4UIi8qmQif1FKAm1OjU4L/OxslDhJ+AuuJkwQJN+tgCFfNt0wiMmLe5M8s2n/KCFBmS/ 5Upo+OJd2gNbGi4P9uWMGepeNan0WJyt6LndhnQMKdbO4hlMXpy9k3zjcIFzjQmGWc2cRBKkIlj pS1elRhSHIHycUMFPpA+gOPz/T0A2fIhmNL6JDWYg0rsHAmaJyx35ghvDKRyTkFDhWfhIyDuSyB lqgEuFD1BteOMgh9KVpw== X-Google-Smtp-Source: AGHT+IFE1Vnf7zp2knUPF6yAEnxj56xkN0ItjqfzEh1DT7fbSwSU9DzT/Mss/kHxDSruSnpGcPcZVA== X-Received: by 2002:a05:600c:699a:b0:46e:32f7:98fc with SMTP id 5b1f17b1804b1-4775cdf46b2mr2500505e9.21.1762279805418; Tue, 04 Nov 2025 10:10:05 -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.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:05 -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 , Ryan Walklin Subject: [PATCH v2 03/30] drm/sun4i: de2: Initialize layer fields earlier Date: Tue, 4 Nov 2025 19:09:15 +0100 Message-ID: <20251104180942.61538-4-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O drm_universal_plane_init() can already call some callbacks, like format_mod_supported, during initialization. Because of that, fields should be initialized beforehand. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 9 +++++---- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index f97be0040aab..9b786e5c7f3c 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -304,6 +304,11 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, if (!layer) return ERR_PTR(-ENOMEM); + layer->mixer = mixer; + layer->type = SUN8I_LAYER_TYPE_UI; + layer->channel = channel; + layer->overlay = 0; + if (index == 0) type = DRM_PLANE_TYPE_PRIMARY; @@ -334,10 +339,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, } drm_plane_helper_add(&layer->plane, &sun8i_ui_layer_helper_funcs); - layer->mixer = mixer; - layer->type = SUN8I_LAYER_TYPE_UI; - layer->channel = channel; - layer->overlay = 0; return layer; } diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index a09ee4097537..bd6c7915bbc4 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -485,6 +485,11 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, if (!layer) return ERR_PTR(-ENOMEM); + layer->mixer = mixer; + layer->type = SUN8I_LAYER_TYPE_VI; + layer->channel = index; + layer->overlay = 0; + if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { formats = sun8i_vi_layer_de3_formats; format_count = ARRAY_SIZE(sun8i_vi_layer_de3_formats); @@ -543,10 +548,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, } drm_plane_helper_add(&layer->plane, &sun8i_vi_layer_helper_funcs); - layer->mixer = mixer; - layer->type = SUN8I_LAYER_TYPE_VI; - layer->channel = index; - layer->overlay = 0; return layer; } From patchwork Tue Nov 4 18:09:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 680 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 A1A6033E377 for ; Tue, 4 Nov 2025 18:10:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279811; cv=none; b=M627N23y9nBcR5DMECLzURfGT72QLRRQMPAZtvt1/i+CS2oBqep8/0lw24sTXkuPAGN5vQeqW3gJXJofjLgwziNEl3S/9+CghsGUHEJfsEaYVbQzJ1FykcRdbHYxYuOuN5xyLlc5Ov0G+J9H9Tu+U2Z3QQgmcXoq9jpDHms+7vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279811; c=relaxed/simple; bh=v75gTyjSy2HSa3UfhJ4KqrZ90JgtcxjZBdZ9oY7/Htg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YzULA0qWvJGRWL5X1Eu/BZsZdyjMkN4drAJXyDSmWSlk2FWnp1hGoqCcvtyWvU4Hby+CDVMYjBQJZ3gn7E/oBomBQnRR3UXdYA+IjnaAwbyv6SFmyreBg6H7B9gm6VtiM2c9XTyXiVXDJq2V5VoWwPn2zTissldy3suPnEhqZj0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VNRmGrxg; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VNRmGrxg" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-47755de027eso7473375e9.0 for ; Tue, 04 Nov 2025 10:10:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279807; x=1762884607; 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; bh=S/mUaml8jAYrXfg/EZn9k2T0kOPXbCuOkx1KYxiElS0=; b=VNRmGrxgXSeiFIX9ietq/d5UvWUBfi2YeQq1Iv5UE3AY7qGBkJB01kOMMqM5JWQL0N DKL6ol8lMPup64MZsnxzWYbiRijc3zPpRKP0aQKMT8MywkwZ1v/X5FUKCNCQ5F3sY3na 7JpM2I4hHNfmuZnSCwEm8KoGwmpvf8/dkjSfOU6v8perS6bCAVVIhRO6y47K/tztWx9U 48xz58hIoNDHO12/XK3YY2XzBU5g26c3m0Vtwrp5rF5mgsXWwmESYB24VxP5IqH1+eYy F9Og5fS9oMlrHutBHVOxwf/7elZHa+ePjkVsOrGPabU3pYAQ4UqP3kAGyY4oP8DJdTzz uCGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279807; x=1762884607; 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=S/mUaml8jAYrXfg/EZn9k2T0kOPXbCuOkx1KYxiElS0=; b=Hv+juTMorQr9ACi2eD/Z/KAtqCXXEVdxxV4l2h+J5FI9KCW4wH7pkyTxfFTabGODzV Mm8L1AV3s1s2sXjtpN0PN5F86cWfn7P/B7hDlvqnwQpTpSP4PRdiwUTb/1ZLFs7vsvXc H13g+lDnSkBUWXbt+r+cRiHhGbIANB4lxRStyaO3n4IuFllNl33pqnUNGg8/CXhwffkX 3mYMkADI2m42gP+NYxbo4XkbSFLFfzAwSPiwWtTJvzk6ElEwTEEfH9lSAUGwwQ7ianu1 GpY8kvr3NM0hu3RfMCPd2AeI8QkmHcRn4jk1uF7Rz6mF9DnEL+/xu26uli9JvU9210VS o02g== X-Forwarded-Encrypted: i=1; AJvYcCWEz8r1dPFwQFZop82KJmkP6qZRELpHsaP2jrfQFp1671KtdKNiAyFnimBW2Xn6eHuFo8eAAeiaQSEDaQ==@lists.linux.dev X-Gm-Message-State: AOJu0YzaW/7kRoHFvzxiN6ZTJ7rq0HuxiwEvAGON9U1OM7yvgHN2qUjm cEaoF+k1zSBI80uGE37lmxge7MAs4EUy/Zv3zY4UnrEKdZLxZkUJQJLr X-Gm-Gg: ASbGncvRnmWTytU6koXN7np8H8nKadpFNesQRIT5Q9CnlW09JO535sX6u6/SKW8PXke I+SA1JwqzHkE83M344hsMiVYdrVi4SHOfoNkWutS08wOv+t2rjXsm4r0qKCYj87zM3254aUEQFa 6b5eE8AbA34zQ/e5oHhAfylnnMxEXoVNHVcd9f5GnI0Db+KmTrO8KErWMajntnBEaq46CnvGrtW 5s83SqC8WT/6BOfOZMwFSo5T0rV4zuXkCaN5vXbb3tAzXaZG4W/eNHtPoUXrKlDc3BP4Iz1EyhD kj3wMIzckhsedBatIj7VwPuAQL62RbrfXSkeoncMKtcor0IQggPhvE64YO64ZjBVekyLANO5Rzs WC0CcQATW+hA6lQLmu61vNKdr1vxfRVyjueO8ni3Tsa117Q1ijNcnhxfNFW9pZgzofOYWoRbhVs U/FSJjr0ciC92TOUjwRQXPMcLcMXQB X-Google-Smtp-Source: AGHT+IFmRzImpuQKxnU59wlPaEzVIfge0eS811Rho4boK9lxVttq6F0W8N4VKTddLMFMzKY8tP/Egw== X-Received: by 2002:a05:600c:608a:b0:475:de68:3c2e with SMTP id 5b1f17b1804b1-4775ce3ebedmr2220945e9.40.1762279806649; Tue, 04 Nov 2025 10:10:06 -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.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:06 -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 , Ryan Walklin Subject: [PATCH v2 04/30] drm/sun4i: ui_layer: Move check from update to check callback Date: Tue, 4 Nov 2025 19:09:16 +0100 Message-ID: <20251104180942.61538-5-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O DRM requires that all checks are done in atomic_check callback. Move one check from atomic_commit to atomic_check callback. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - fixed commit message drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 9b786e5c7f3c..fce7b265c5d8 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -134,16 +134,11 @@ static int sun8i_ui_layer_update_formats(struct sun8i_mixer *mixer, int channel, struct drm_plane_state *state = plane->state; const struct drm_format_info *fmt; u32 val, ch_base, hw_fmt; - int ret; ch_base = sun8i_channel_base(mixer, channel); fmt = state->fb->format; - ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - if (ret || fmt->is_yuv) { - DRM_DEBUG_DRIVER("Invalid format\n"); - return -EINVAL; - } + sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); val = hw_fmt << SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET; regmap_update_bits(mixer->engine.regs, @@ -201,7 +196,9 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane, struct sun8i_layer *layer = plane_to_sun8i_layer(plane); struct drm_crtc *crtc = new_plane_state->crtc; struct drm_crtc_state *crtc_state; - int min_scale, max_scale; + const struct drm_format_info *fmt; + int min_scale, max_scale, ret; + u32 hw_fmt; if (!crtc) return 0; @@ -211,6 +208,13 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane, if (WARN_ON(!crtc_state)) return -EINVAL; + fmt = new_plane_state->fb->format; + ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); + if (ret || fmt->is_yuv) { + DRM_DEBUG_DRIVER("Invalid plane format\n"); + return -EINVAL; + } + min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; From patchwork Tue Nov 4 18:09:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 679 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 E05A133F8A5 for ; Tue, 4 Nov 2025 18:10:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279812; cv=none; b=W/pshIMAq24yEZlUeMWUNT0faPgDMMRojb/Pi1dml+bHD4hC3mDvG8d/rcvB1HwiBaQ4mwahLZ8FV/XpOLUb7vdUtM/5cXEIZYXBvIAvHpRK+8Q4rrzj5Qw3kMrGeZfni4IxrvxHtwz1ERkjx47cXeiGSRLIXMZc7HrIKCrc8E0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279812; c=relaxed/simple; bh=9iuYPe+y3PbTHR/R97DFIicMKJlmsqd/U6tW26GqMxw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G9rhVv/dQdx7LNGftXncBXMEhTCRQCqlodo+e7RF3mrJaMMGMFkBF4Flf5PkMIibWBbu9yzCNVbmujvSkXV4uVuwSnyzaPSevm+TwFtPxBz7vvcsZdEQ+9wHyhJLqFH5tJ29DHFkE/c89TiFLFLaVKqzf2pkLDhnhrPOFYZe96c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XzIa/rP4; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XzIa/rP4" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4775895d69cso4840305e9.0 for ; Tue, 04 Nov 2025 10:10:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279808; x=1762884608; 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; bh=nl1ilT/sObHTqPC76FAptDP4x6azYGMRqYkHZHMZay0=; b=XzIa/rP4IbI8gQh11Z7KiMfMAmS3uTohiqCfmf27HdrMHWaBepW2Jd3Nktx6j/ZSg5 3ZYRiryVEpVUaXQcj/7PRRIL3qlcagtYTzfkWl4GdmH92U9IiquArrTcvNjBbX6Ycoqn h7CyR3teZxHdvw5Ga7ipnRW0NwJGRxUZqYlQy89AcNgNdcxWDtMRv7ers5xQhcxsaVxD vsqxTGABU1+ItmdaOs9iqBKx5eh1k9/hjaMIJWHclyqrErWqNKN3+EQVkhhxPnbdmy9Z yMgiLUu+lXUqFFsBmphwmiUVHSUXG2gZtF5U9H9zrDMIXejDgi2JsUYI/lipepf4RQBY BiMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279808; x=1762884608; 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=nl1ilT/sObHTqPC76FAptDP4x6azYGMRqYkHZHMZay0=; b=UonHnuyUril2NKx9G228rJjdx5fVrzk7Vd9gIfLwqTWj1Y21ovpmrFA8oaaQSm7mlk U95uJIU0cun1o93ihBOq/azUqCJi94OuUIFcNCRMnieDWfEYwcpVlyN850Z0liwe9H1b UNLY9go93cLityL4kzY2ld2sDvxw+ESz+4J1+khKi8uax1PREJ5QmBnr0TTC+FcqZl3q CUrKZIWhbsUkDoEu8LbDM5RFF/5R+in6PPF92bY0jh8DKchySgSVp5kfSkDBOEjpWBlt l1xFnVjYBgF++sA7FsTU7r6XlBlC0lHZ27GriLvqE/0ErjDaiiuWeRmW4U9PAGgdwquh PM8g== X-Forwarded-Encrypted: i=1; AJvYcCWY8FEw1fQMSiyJPtHOwUt22OhjJeeCrjfcVvna5Y88JoRfzEHhys0meCSZCl7083MN6OsArD55GQoFDg==@lists.linux.dev X-Gm-Message-State: AOJu0Yxuq3FRT/WQSCbgjoz0BQC9HjkNRdpL7NLBIojRpHU+nDElV60c StEOJeXCecwYwRet+ZmfxjObcLA6mstDCN0YB958xSVl8uBJ5Wo+9ihQ X-Gm-Gg: ASbGncsRcst6FnOE0tDA0+FFt5YtleeHGYATm5oXZpGfgsmwAw7WqJ09nNfry1eiHN6 TSkUEBGLKWTL+mzP+rGi+YsUuJU6lYaJZNSr55uCJBRcx8FEcBhaORcZlqT6MgxDroat4s0Neo7 RpGtY8SlohCD1z60Xgd0UjfhrTbXiNSvjbQY7n3+6Zbi9e8Fyl1+JVAu2uaT3z2B5YX3UVH+FRf PAOoBh0+ujL6tQ0ONMHfnbrnxtcw+uKCm2d37sONNmMgMtP1a93oAnxUCAyS71Hnm6IgETy+Wpx LQVQDKPzDy3sI2Zx7kENTF4qmP8kC/Vp/ilmOl4QXPi/GzI/o+tm9Z1fb2Kxn9GYnFcVQH8YWBT 8XEZn1fR5a9CIsjNBnQP7qmXwmjUnrzvnuxyLk+3z+2BzvN8x6MuTKxb6KNit2TvUN5weBTEpj3 TxjxIWRC3CDU0Kh8WT6A== X-Google-Smtp-Source: AGHT+IEaQ0kJCmYAyDupR48ISzZYJfw4Ug61ieLu3o3gUFaY4n5a/nzq0x9jBMUVbLw7oK4nsgRXfg== X-Received: by 2002:a05:600c:34d0:b0:471:6f4:601f with SMTP id 5b1f17b1804b1-4775cdf54aemr2431095e9.19.1762279807980; Tue, 04 Nov 2025 10:10:07 -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.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:07 -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 , Ryan Walklin Subject: [PATCH v2 05/30] drm/sun4i: vi_layer: Move check from update to check callback Date: Tue, 4 Nov 2025 19:09:17 +0100 Message-ID: <20251104180942.61538-6-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O DRM requires that all check are done in atomic_check callback. Move one check from atomic_commit to atomic_check callback. Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - fixed commit message drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index bd6c7915bbc4..c80bdece5ffc 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -217,16 +217,11 @@ static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, struct drm_plane_state *state = plane->state; u32 val, ch_base, csc_mode, hw_fmt; const struct drm_format_info *fmt; - int ret; ch_base = sun8i_channel_base(mixer, channel); fmt = state->fb->format; - ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - if (ret) { - DRM_DEBUG_DRIVER("Invalid format\n"); - return ret; - } + sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); val = hw_fmt << SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET; regmap_update_bits(mixer->engine.regs, @@ -322,7 +317,9 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, struct sun8i_layer *layer = plane_to_sun8i_layer(plane); struct drm_crtc *crtc = new_plane_state->crtc; struct drm_crtc_state *crtc_state; - int min_scale, max_scale; + const struct drm_format_info *fmt; + int min_scale, max_scale, ret; + u32 hw_fmt; if (!crtc) return 0; @@ -332,6 +329,13 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, if (WARN_ON(!crtc_state)) return -EINVAL; + fmt = new_plane_state->fb->format; + ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); + if (ret) { + DRM_DEBUG_DRIVER("Invalid plane format\n"); + return ret; + } + min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; From patchwork Tue Nov 4 18:09:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 677 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 D8B26334C3D for ; Tue, 4 Nov 2025 18:10:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279814; cv=none; b=UwYXpAKbIFKT3g5K3LPAzvykQK1TwQ7YpP9HwJ2zgB6eyKB0yqIIs3W9APEEiET4gI10eUL5AIRK8pPkhboRjqbARMX7TPx/MD6r+rL4nU8fTIrRJmPySM360RHeC9esfefK579EJp4qOqWDu5guVPGiGVUbJD7Z5HzM9uoTXOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279814; c=relaxed/simple; bh=UMLQniINjUdHSGOyeKlaW/QFkXzdQJ8JOe+PvNsMFsM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JolA4QB03MD5NGJvHBxQd5ARG7WU7WoU3mepuHIpuWaFbfj2FDjLki3YxUns4U217jHhgGKix05+7Bfn5TsGDMCAlIwxrvAHpPBSgZwzyBqaKVAEcEzsiGWJJXapC7l8TvAEPNKjOwBIeDVts0iMn+424ZTHZ9oFBRjxcxw+aSU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=E8TTadjF; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E8TTadjF" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4775ae5684fso2513045e9.1 for ; Tue, 04 Nov 2025 10:10:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279809; x=1762884609; 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; bh=9UxxEnvD5E7Y1WhJtD+AnEMx6VMSP1mmylf6BBTY00A=; b=E8TTadjF+iZOERx5YlqbByG5s6kRRctFxfBGAM/dvlRdgCtTmqRZfB0XPutlN0qdLx yUOumfMz53ec0DbxXtWy1bRPL0eCB6FGFaRU+qBdfiQG9dbYtKAZiompJuQNcaOC6pSE DdW/I8ThXZgS7ithdFF3IrSbdNfy/S0mIvSmHCzpvgwFNHSWBwGgMdFjNomSRfyMX0jA sCm7hdEtEGB1s9ZSgtCUnSfEES4KXkJ2O4S/PWKv52jAmjaYVlE3dr8JJB0M4a5sdjAy 72ioX9x7+VOyVrLwavx4PbLZhYf+vS0m1rDJoGDo9UGECuzPaOurzwWRsLn5AUcQ5awM 4PEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279809; x=1762884609; 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=9UxxEnvD5E7Y1WhJtD+AnEMx6VMSP1mmylf6BBTY00A=; b=HooYF3tTgDHpviQLsNq82H72xtg+pgKwzvGoWPljj/o9MJI8ojz4kyOSAgZOBxIoKz IKh9F5I7UuzpqqtrEHaXRmrnri0htl5RYvSPLvnyln59ym6at8ron6OqmDtXN4TnWtV+ s1Rzhlq3zgV6C8Jt/fn/gQsc/RO/WhUFDLvO+3k/7e7Fy+MjcfN2bk9a2z8UIbj9eTtd p5pp0ActhFKG+WvPT7RZoAnRi4c/T2428+oYlB0J54zD7JW9UZDrNsa1FWxtIbzMJhX9 LjyxNV/JXRccbb7RxOTdFKFjQog9TPexW92nrowH8XRx+3jp3/5feugpB58BCS+c7pI+ fxkA== X-Forwarded-Encrypted: i=1; AJvYcCWSiGI2qxJYmrMzF/+eEyjavxyVAit3oxVhDj6u0sLh+81+4nkVE4khs8YDQ9UsYdnXEW+mggLUBd4JjQ==@lists.linux.dev X-Gm-Message-State: AOJu0Yw+UpYLqdb/LZoX+lEuj4kcaasXSXpLGECLMgfrZ4ZuD+g07X2i u901ZV4tTlUzIhygob/oVR6nlcV4sH9FO+G+OomxVk2+onhp67Uw7Dk0 X-Gm-Gg: ASbGncsXN0k0baaxT7ek9PnLizH0jHfBAYwZMUoyKFxdAR7wH5DVHm1qvGLujyuZ//+ 9/VbHsRmTUI68x8Yvb3XhTI5Z5vWX0c8Gcmk2r8afPbn3ghreUXaOw61Wce1Qf70nwqVMw7HhHc 2Wk7rEsq0grwuCXZL7VMhXcQggw9hLtEE3wLW3fo5+TYjVLMqL07XdoWbeRZkGAGgazNXe+bHfp XnHUA0lwHPpX1bOlHtMWUKLRSAwt4PMejROmRZg60ZCOeegFISGRTz9fYOBAtBkFltKwlwShftg u1xKFcIwiaJBX1OCAcWk9zIYKuCLVkcErADfrN0Voowb/K0fKz6O0MGl3KbpYJSmLhFyqS32fmF hNfNHmsYvv4V+kElHbT9u/avqA9X3FPfgzKYEEqOf15daDmhoDDaf38mVEOFwOap2RmFRFDtD3h O8jGI+OsGOtBsNnBD7cQ== X-Google-Smtp-Source: AGHT+IEJHAiuBYWEtNzJWv6C7uhRnDsBy6FovSk1I1qNjU8+nmp3MeD3eeYgDnF9LcKCHm1OTcNSBg== X-Received: by 2002:a05:600c:530d:b0:477:55ce:f3c2 with SMTP id 5b1f17b1804b1-4775cdc5874mr2504965e9.14.1762279809223; Tue, 04 Nov 2025 10:10:09 -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.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:08 -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 , Ryan Walklin Subject: [PATCH v2 06/30] drm/sun4i: layers: Make atomic commit functions void Date: Tue, 4 Nov 2025 19:09:18 +0100 Message-ID: <20251104180942.61538-7-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Functions called by atomic_commit callback should not fail. None of them actually returns error, so make them void. No functional change. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 20 +++++++------------- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 20 +++++++------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index fce7b265c5d8..8baa1d0b53bd 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -46,9 +46,9 @@ static void sun8i_ui_layer_update_alpha(struct sun8i_mixer *mixer, int channel, mask, val); } -static int sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane, - unsigned int zpos) +static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane, + unsigned int zpos) { struct drm_plane_state *state = plane->state; u32 src_w, src_h, dst_w, dst_h; @@ -124,12 +124,10 @@ static int sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, regmap_write(bld_regs, SUN8I_MIXER_BLEND_ATTR_INSIZE(bld_base, zpos), outsize); - - return 0; } -static int sun8i_ui_layer_update_formats(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_ui_layer_update_formats(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; @@ -144,12 +142,10 @@ static int sun8i_ui_layer_update_formats(struct sun8i_mixer *mixer, int channel, regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_MASK, val); - - return 0; } -static int sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; struct drm_framebuffer *fb = state->fb; @@ -184,8 +180,6 @@ static int sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, regmap_write(mixer->engine.regs, SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(ch_base, overlay), lower_32_bits(dma_addr)); - - return 0; } static int sun8i_ui_layer_atomic_check(struct drm_plane *plane, diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index c80bdece5ffc..dae6f83cea6e 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -48,9 +48,9 @@ static void sun8i_vi_layer_update_alpha(struct sun8i_mixer *mixer, int channel, } } -static int sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane, - unsigned int zpos) +static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane, + unsigned int zpos) { struct drm_plane_state *state = plane->state; const struct drm_format_info *format = state->fb->format; @@ -191,8 +191,6 @@ static int sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, regmap_write(bld_regs, SUN8I_MIXER_BLEND_ATTR_INSIZE(bld_base, zpos), outsize); - - return 0; } static u32 sun8i_vi_layer_get_csc_mode(const struct drm_format_info *format) @@ -211,8 +209,8 @@ static u32 sun8i_vi_layer_get_csc_mode(const struct drm_format_info *format) } } -static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; u32 val, ch_base, csc_mode, hw_fmt; @@ -246,12 +244,10 @@ static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE, val); - - return 0; } -static int sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; struct drm_framebuffer *fb = state->fb; @@ -305,8 +301,6 @@ static int sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, overlay, i), lower_32_bits(dma_addr)); } - - return 0; } static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, From patchwork Tue Nov 4 18:09:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 678 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 2F98833FE03 for ; Tue, 4 Nov 2025 18:10:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279814; cv=none; b=Ky7Vs903g0xbvfswQHs6G+7WzFbm2kO8c4y9q84MxEgdTCqwFzLvDQYh80NYPADVO8qjxpmoetEfyIObuUno/Im17YDn1+dgOGI0yk3twX6Qk7KngYfI5HWyeoLfHiAqJhGIBMURPjlQ2dkER1xi2yWmscel9uPXYmGgR6Z+Xeg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279814; c=relaxed/simple; bh=skVQGagTyy6PyNFI+F7smYSL+wQwoaFNd4LrPRY1PcA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Py3FcYYmSGTmv3OZYi/tKY6YmqmdBdtLgfpkDiItNcFIeFakkMy9VeNujVAWgtd5X7vx2XOOTY6apUx49rliCjeZgnaMx6t/HBwZ2qHWNmwCH15n2xbSjPkPGphwxRj8J2pKWFnGW49p6ZkxDON7J5w84CTdnlEzO6xdp5bi9LE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GHIczXvI; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GHIczXvI" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-47118259fd8so43595395e9.3 for ; Tue, 04 Nov 2025 10:10:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279810; x=1762884610; 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; bh=bDqva417xyNryg1IXFcTOy97H9FHEQaAyTZzRiGHEe8=; b=GHIczXvIeyRcnuq5LErPkZLulj7zmbN5PEYLKHXSJVVLkegJtkr3DteIRMtoxiT/0q +CQgu9D1yx/AWiElJnpXtGnm1eGRGg+71Y1ui8WZkFLMtOphK//DfUw3ydbyZHs4Db4p y+Mnk6SubBIp/vRLzNdGjSskrnKwcmIQgKRU25clXpTQWtWjECBZhhjybYrW2/+9l7St 4yDt0ogy9l3xjWGuJA6miF1Fnl0i3H5QnJ5ALhsOgZM784lwFIS02mLR489lDL9EKYOf wVDH6rq0oRrdvAlNXgHajLjWOPoO7YL8zxqTnmRsENSPGygMW7JOQ1yFKDQfyo5vCreL ZIWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279810; x=1762884610; 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=bDqva417xyNryg1IXFcTOy97H9FHEQaAyTZzRiGHEe8=; b=Bb1nibqWjRFWiR1gnSX5CeairQkHDmYEVU2OdRgsBcHn8uEqnqL8Un0JE3ggBdSuOz vn/R8MUkJPRoQj1aU0X4pdDKx7FMzU/MCV5uwKlNlSvTNedQCDKJCqjMuTEoAiRvZALD 7lUHvXJX0fvH88e4unSNiau/I3lywjDN3b78ZwXlncCs3wcDJIvvt9k4jjmtOK7HjMEF KVjsfkOyUBbSP7eZ3b1p6bWKqft3PkFzeENdi7JfTz6+cGGDT1L/MqzV5YEXwAV3kEQR SYYUxi6GETAbk9e7vi4HAN0yXFhqzKOjiKk4nYzMtef5xP3153/8cMYhtYFkVHcfQo7T RljA== X-Forwarded-Encrypted: i=1; AJvYcCXJqSKCuU5A8RQ4Z847+X7iv1gQSAvZizcUhsKiM+gxrqHd64MaSdD4fZzui1X8woNKXKAwmDtRrY4WPA==@lists.linux.dev X-Gm-Message-State: AOJu0Yz8KABfWCy8FCInbJLkAXWbTiTEgJ1QgPzs3reCXyqkbTTTZRpj peeT6f7gENKFOhczw6ppB0h6oPFTjHOiFbUG2ayUTYIDcHKKzh05LJBB X-Gm-Gg: ASbGncsEa7/YNVRFttT027B+7AUJ4p3hb1FnuQpL1W3bHYwCIxRZ1WUWORj+cbkryKX gxT0BblZ4VAlEKmVAoVWYvbA+wfroViQ+dcPTMpZRz1G6RnswGud47ZDFz3iuoeMsmDMcu5Dt5R NnyopSl+Fsku076iVgaY79JDAb7Z65jBZd8IKViO72enh3kdThaZloWKkl/YD7yoEUYEPzrL1gT +etgOD5deoZVYLxNBzMCdgjsNLgDm7jjTAV/cDGahTLArQQxpH7RG+7tEaEKXxALVUoVGkhWc25 PLGOJ8MGm1l8KB+3DjGm2UquOH5pYRnpeXB4HANm7x44zMf+K6jbrkMv95HExhdOPIoGn9iIgO9 u1sZPMmxJMYnli7zjMHhBSyxes7xmB8wsbZFppahcGG73+OEnBve8IlwZmUdwqnzr9YRxatrLYR qFeck2Jfp8ZLtkdUUyxwuBeMw4KXgt X-Google-Smtp-Source: AGHT+IHj09IPAOCbCEAg0ncAsr0LC5H9NwCy7b3YSE8GChtZbFobh2jD5PwMN9j5D94aGK3dEVmPNw== X-Received: by 2002:a05:600c:19cf:b0:45d:e28c:875a with SMTP id 5b1f17b1804b1-4775ce19fa1mr2767805e9.31.1762279810441; Tue, 04 Nov 2025 10:10:10 -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.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:10 -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 07/30] drm/sun4i: Move blender config from layers to mixer Date: Tue, 4 Nov 2025 19:09:19 +0100 Message-ID: <20251104180942.61538-8-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O With upcoming DE33 support, layer management must be decoupled from other operations like blender configuration. There are two reasons: - DE33 will have separate driver for planes and thus it will be harder to manage different register spaces - Architecturaly it's better to split access by modules. Blender is now exclusively managed by mixer. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 17 ++++++++++++++--- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 22 +++------------------- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 22 +++------------------- 3 files changed, 20 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index f7f210a925f8..a3194b71dc6d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -283,8 +283,8 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, drm_for_each_plane(plane, state->dev) { struct sun8i_layer *layer = plane_to_sun8i_layer(plane); + int w, h, x, y, zpos; bool enable; - int zpos; if (!(plane->possible_crtcs & drm_crtc_mask(crtc)) || layer->mixer != mixer) continue; @@ -295,10 +295,14 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, enable = plane_state->crtc && plane_state->visible; zpos = plane_state->normalized_zpos; + x = plane_state->dst.x1; + y = plane_state->dst.y1; + w = drm_rect_width(&plane_state->dst); + h = drm_rect_height(&plane_state->dst); - DRM_DEBUG_DRIVER(" plane %d: chan=%d ovl=%d en=%d zpos=%d\n", + DRM_DEBUG_DRIVER(" plane %d: chan=%d ovl=%d en=%d zpos=%d x=%d y=%d w=%d h=%d\n", plane->base.id, layer->channel, layer->overlay, - enable, zpos); + enable, zpos, x, y, w, h); /* * We always update the layer enable bit, because it can clear @@ -312,6 +316,13 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, /* Route layer to pipe based on zpos */ route |= layer->channel << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(zpos); pipe_en |= SUN8I_MIXER_BLEND_PIPE_CTL_EN(zpos); + + regmap_write(bld_regs, + SUN8I_MIXER_BLEND_ATTR_COORD(bld_base, zpos), + SUN8I_MIXER_COORD(x, y)); + regmap_write(bld_regs, + SUN8I_MIXER_BLEND_ATTR_INSIZE(bld_base, zpos), + SUN8I_MIXER_SIZE(w, h)); } regmap_write(bld_regs, SUN8I_MIXER_BLEND_ROUTE(bld_base), route); diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 8baa1d0b53bd..12c83c54f9bc 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -47,21 +47,17 @@ static void sun8i_ui_layer_update_alpha(struct sun8i_mixer *mixer, int channel, } static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane, - unsigned int zpos) + int overlay, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; u32 src_w, src_h, dst_w, dst_h; - struct regmap *bld_regs; - u32 bld_base, ch_base; u32 outsize, insize; u32 hphase, vphase; + u32 ch_base; DRM_DEBUG_DRIVER("Updating UI channel %d overlay %d\n", channel, overlay); - bld_base = sun8i_blender_base(mixer); - bld_regs = sun8i_blender_regmap(mixer); ch_base = sun8i_channel_base(mixer, channel); src_w = drm_rect_width(&state->src) >> 16; @@ -113,17 +109,6 @@ static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, else sun8i_ui_scaler_enable(mixer, channel, false); } - - /* Set base coordinates */ - DRM_DEBUG_DRIVER("Layer destination coordinates X: %d Y: %d\n", - state->dst.x1, state->dst.y1); - DRM_DEBUG_DRIVER("Layer destination size W: %d H: %d\n", dst_w, dst_h); - regmap_write(bld_regs, - SUN8I_MIXER_BLEND_ATTR_COORD(bld_base, zpos), - SUN8I_MIXER_COORD(state->dst.x1, state->dst.y1)); - regmap_write(bld_regs, - SUN8I_MIXER_BLEND_ATTR_INSIZE(bld_base, zpos), - outsize); } static void sun8i_ui_layer_update_formats(struct sun8i_mixer *mixer, int channel, @@ -230,14 +215,13 @@ static void sun8i_ui_layer_atomic_update(struct drm_plane *plane, struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, plane); struct sun8i_layer *layer = plane_to_sun8i_layer(plane); - unsigned int zpos = new_state->normalized_zpos; struct sun8i_mixer *mixer = layer->mixer; if (!new_state->crtc || !new_state->visible) return; sun8i_ui_layer_update_coord(mixer, layer->channel, - layer->overlay, plane, zpos); + layer->overlay, plane); sun8i_ui_layer_update_alpha(mixer, layer->channel, layer->overlay, plane); sun8i_ui_layer_update_formats(mixer, layer->channel, diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index dae6f83cea6e..1f4fa63ef153 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -49,25 +49,21 @@ static void sun8i_vi_layer_update_alpha(struct sun8i_mixer *mixer, int channel, } static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane, - unsigned int zpos) + int overlay, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; const struct drm_format_info *format = state->fb->format; u32 src_w, src_h, dst_w, dst_h; - struct regmap *bld_regs; - u32 bld_base, ch_base; u32 outsize, insize; u32 hphase, vphase; u32 hn = 0, hm = 0; u32 vn = 0, vm = 0; bool subsampled; + u32 ch_base; DRM_DEBUG_DRIVER("Updating VI channel %d overlay %d\n", channel, overlay); - bld_base = sun8i_blender_base(mixer); - bld_regs = sun8i_blender_regmap(mixer); ch_base = sun8i_channel_base(mixer, channel); src_w = drm_rect_width(&state->src) >> 16; @@ -180,17 +176,6 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, SUN8I_MIXER_CHAN_VI_VDS_UV(ch_base), SUN8I_MIXER_CHAN_VI_DS_N(vn) | SUN8I_MIXER_CHAN_VI_DS_M(vm)); - - /* Set base coordinates */ - DRM_DEBUG_DRIVER("Layer destination coordinates X: %d Y: %d\n", - state->dst.x1, state->dst.y1); - DRM_DEBUG_DRIVER("Layer destination size W: %d H: %d\n", dst_w, dst_h); - regmap_write(bld_regs, - SUN8I_MIXER_BLEND_ATTR_COORD(bld_base, zpos), - SUN8I_MIXER_COORD(state->dst.x1, state->dst.y1)); - regmap_write(bld_regs, - SUN8I_MIXER_BLEND_ATTR_INSIZE(bld_base, zpos), - outsize); } static u32 sun8i_vi_layer_get_csc_mode(const struct drm_format_info *format) @@ -350,14 +335,13 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, plane); struct sun8i_layer *layer = plane_to_sun8i_layer(plane); - unsigned int zpos = new_state->normalized_zpos; struct sun8i_mixer *mixer = layer->mixer; if (!new_state->crtc || !new_state->visible) return; sun8i_vi_layer_update_coord(mixer, layer->channel, - layer->overlay, plane, zpos); + layer->overlay, plane); sun8i_vi_layer_update_alpha(mixer, layer->channel, layer->overlay, plane); sun8i_vi_layer_update_formats(mixer, layer->channel, From patchwork Tue Nov 4 18:09:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 676 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 977F933FE3A for ; Tue, 4 Nov 2025 18:10:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279815; cv=none; b=qdaO01r9mIsTVauGKilMx02w+VcUkZRcBDppyiUd3fcxWbtwkDhJ6pL/wQ4bpgeClupxjilW2UWXClgN7gyJfBpgfges7Y3a/0YgD3cvDkDUcoE66k1SXFqsCnbr38uSlbx5XubFJ+83lOdZwgl92z4XmGinVPu4G5o5me8KpFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279815; c=relaxed/simple; bh=iGnNI0++SonwGyedd4a7sun41aecxIvT8MUtouuGC4I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L3JqlEtcck6Ar5H3hJPmG+asYFfsXmhBO6izLpabMeul8SH/hVbA9lkjysGDNRkyVxRXVff6A1TwgF+Z1G1hYmJDE+Wb73jbktmpXTEKLxZ2fJNedbqpbPs7b6+aWLTgj8jy4BXabszj/7V1wzyaY4LzYom2Samhq4Zz0K/xR20= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=a3pUMNXx; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a3pUMNXx" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-477563bcbbcso5300815e9.0 for ; Tue, 04 Nov 2025 10:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279812; x=1762884612; 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; bh=2V+kePNpXO72CJenp34f7uw6E8+eMdcIi2DhwUlA3KQ=; b=a3pUMNXxD/zLK4Ssno21ExDii4UTsN33tfe/tnvT/rGOWhYLZJb4GMVy1mAPUj6mpe gnZxO+uM2hjzqqGj+c64hwo+U8CUCA9sQdKk1Q2A/DxNhFc1qXx+R7bf73WUuMnAcsh4 KdPFWEgqDoZQFwSY1aWv+x5TKjXorrQP8ByWLAuPEENHy6QYpAUj9RebYnTUzqJWuSOe 1pdDO+PI5tdeKxs66phhIJoi33qYLixC5AtuxqZ433Wgss7FgDGtZ+h5eAkGIUIl5EdY /uqSkbVFX44vJHfLw31hm++lWzJ9KM3lX1OpgZJ4O59IJV1hSqX7l/eJs17w3buChXRF FPtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279812; x=1762884612; 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=2V+kePNpXO72CJenp34f7uw6E8+eMdcIi2DhwUlA3KQ=; b=RPW7M7GoQt5XQh2pkUocptAztPd2ELV7838VHk1tEo5Ib/LsL40LBjThU37r3O1uei 5kf0KFXYpU7YyV/07/ISLK0xvhuYcvzbdFVffpnNeKq0rQsOdCAhA/eBcUHncG7BiiwK cRR81RPKNKdb6acxE3DWKCIbeVg+PL6i4+AsLmCmxjBdJSfNnaWymE5Z7SxyHf9bPIyE zqshTc3OS4xJ3Z/VZI2/lyIW8Q1HrEls1ek781gHEF4awZ5WcbxxWXMv8UNvqg8jdJLg oKqNZLxb+E8oobhy7hfYtrrcO6O26/sCbu1TLhLTkXwn5HAGRd0jrtZrGCRhJZXVyGpr 5BpQ== X-Forwarded-Encrypted: i=1; AJvYcCXx2K4EDpesHgmOIbRKQ00YULEYFOOeTPAkoQ4wdPkhscecoKdvUF8Fsrg27tgFbReBfWavhaBj+Hn4Hg==@lists.linux.dev X-Gm-Message-State: AOJu0Yyz7Yc4b/K0pstFPU8zl5Vl/+XRdX4TZYp04n8p9L0zXF10fq2a fUY1FYe7/89Ffg3J9+SIJzmetUMr6cnu4oNQz9elcwMHtF1FGcod2vLO X-Gm-Gg: ASbGncsEybAfKsC1BYlFNNdOg6TclizsfxlbEiP4lJ1s/P1epnjJ5KcUMGlaM3R2D8q HGs7h5wKKNm49rD7Np13mjcuVZ26WTCC3ffLJBAJM6S0TiHqhrWgiHU7ClGeo8demiv3B5Yjmsl RopIV2EL+Pi90e0EZiGTPNGv9kvXbUblvTJoiWezfCqtEp59kG4OBo7w4RSLS2zS2uRjLt6AXD+ wjNYGdNTIyx0bb2JixKzbN7k1BDp8V0iJ2Z7yD6OTk4FI8dnsTtpVWLenC2PfYmfIJVTZEHGGg3 RpZrAeEiU9cndBSHHByGkxLXGrYhyiWID6H41CNT8GN8H9ojniDbQw3318zShkEA6Fu0rhS71Uv Qsus6owO4+y05A/MzCr0IIx0bTnfm6htEo2bOE4vuxfIySbQ9eFLlBpzkngjnEHcS2bspQf2GZu 43szDapYAJcPqLF8C3yQ== X-Google-Smtp-Source: AGHT+IFZg22fNOBq2/+K7yxgA1ojsJmdSdVgUH3x4JG8OH5BRdNvWipWSBISKSpBHgCgvYmvB7tQTA== X-Received: by 2002:a05:600c:6990:b0:475:de68:3c28 with SMTP id 5b1f17b1804b1-4775cdad710mr2567035e9.8.1762279811690; Tue, 04 Nov 2025 10:10:11 -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.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:11 -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 08/30] drm/sun4i: ui layer: Write attributes in one go Date: Tue, 4 Nov 2025 19:09:20 +0100 Message-ID: <20251104180942.61538-9-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O It turns out that none of the UI channel registers were meant to be read. Mostly it works fine but sometimes it returns incorrect values. Rework UI layer code to write all registers in one go to avoid reads. This rework will also allow proper code separation. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 50 +++++++++----------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 12c83c54f9bc..8634d2ee613a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -25,25 +25,27 @@ #include "sun8i_ui_scaler.h" #include "sun8i_vi_scaler.h" -static void sun8i_ui_layer_update_alpha(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_ui_layer_update_attributes(struct sun8i_mixer *mixer, + int channel, int overlay, + struct drm_plane *plane) { - u32 mask, val, ch_base; + struct drm_plane_state *state = plane->state; + const struct drm_format_info *fmt; + u32 val, ch_base, hw_fmt; ch_base = sun8i_channel_base(mixer, channel); + fmt = state->fb->format; + sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - mask = SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_MASK | - SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MASK; - - val = SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA(plane->state->alpha >> 8); - - val |= (plane->state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? + val = SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA(state->alpha >> 8); + val |= (state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_PIXEL : SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_COMBINED; + val |= hw_fmt << SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET; + val |= SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN; - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), - mask, val); + regmap_write(mixer->engine.regs, + SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), val); } static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, @@ -111,24 +113,6 @@ static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, } } -static void sun8i_ui_layer_update_formats(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 val, ch_base, hw_fmt; - - ch_base = sun8i_channel_base(mixer, channel); - - fmt = state->fb->format; - sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - - val = hw_fmt << SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET; - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), - SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_MASK, val); -} - static void sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, int overlay, struct drm_plane *plane) { @@ -220,12 +204,10 @@ static void sun8i_ui_layer_atomic_update(struct drm_plane *plane, if (!new_state->crtc || !new_state->visible) return; + sun8i_ui_layer_update_attributes(mixer, layer->channel, + layer->overlay, plane); sun8i_ui_layer_update_coord(mixer, layer->channel, layer->overlay, plane); - sun8i_ui_layer_update_alpha(mixer, layer->channel, - layer->overlay, plane); - sun8i_ui_layer_update_formats(mixer, layer->channel, - layer->overlay, plane); sun8i_ui_layer_update_buffer(mixer, layer->channel, layer->overlay, plane); } From patchwork Tue Nov 4 18:09:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 675 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 E6A60340A5D for ; Tue, 4 Nov 2025 18:10:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279817; cv=none; b=OhblubM9m7hOr0bAmO7aT3wuLzgVUPaKjxinV/m9HOPg1vi+s7y9fNCBOyi0AUeyKl4iArEQ20a6ZRJEZt7tf5T29kgpHWXR89bCuBGyU5L27TzVBtCE9CVqz5afBqPVmRi45TvnGEuYEf2TuOGwt05E8LR6vA3XccyhVv6sjI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279817; c=relaxed/simple; bh=eyy7EC4ErwCa3WckkA1iMdTKsrVPw89x2GAqOyAqd+I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kIdR0cke/g5vMhC9FY542QI/OWwbob8fSBqFwkfcCxQIgqMeFb3witKpRh+KVs7k0QcWY6cXydwtX8hT5Ochtq7JN/UA3WWGcpQo1ObvuCah0/+CYluWNbIDJ2OScldLLMSXSm5zMKM6mYwtw+oAOWI/FYoNwPuR2Dlke1vuXpg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=loLyCbp4; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="loLyCbp4" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4710a1f9e4cso48083045e9.0 for ; Tue, 04 Nov 2025 10:10:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279813; x=1762884613; 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; bh=Jjm6bAyoMllMD1Q/IvNTNZhpUzj787YRLXUAz9HfQNA=; b=loLyCbp4cQBcsMW42DcaXhqmDwrpvR+eYEhO+i/p1xkl35Kkp6saR/XmRstY1MnjQ6 BExSATLvYRxcAgqETXQalQDx4u25ENlWmsM3/lST9bmwR2SR4D+kQe4VB0Q91nl+fiW1 WNIxNeAR3/zl6ozf7Cl4N5n6rqXhOf9aUNE69z2xBJoypeApR7Gcq/2dAYcQhJoptL4I 2MKzhcYPfmKjOhhu6miXl4XH2/4zealG0Hz9geuxL0b+5ax6nC5txt4K+IHOwkzoBZob NxkLBJQIrISHNvxyOCivoLo1qPXG3xf381nkEub/oXpZkL4mKaGWVa3QYwNULlCV4MuR /mDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279813; x=1762884613; 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=Jjm6bAyoMllMD1Q/IvNTNZhpUzj787YRLXUAz9HfQNA=; b=sdE1xVY9Z1uCyxBVb0RdAmzP+cJd4HKFa1RG6WjJztv55kAMuZYOfNnbinZ9bFw0C9 eIdonm2vTZFtzgLpH5wkQJVm83K14Qekf22u2STQAfi21g4PvNzqdehMgyhhSQG/2xrP Z8utXwNkNraXIvJJu2JRYT9mv7ALDbEJw45/ONg/JK7mgxmHMglJpIrKpT4IbDaziCTB 3nylOFV4HfPWlpBu5acuBmK4+8zbrI27SmCmiP/ZTFlzU1edGd/L9DXW1tQv2jBT0geo udT/r8dfyIsFTXV9mVQa/DCt/yqT0CiftWv53hEQMh68YwYD/rPRyrLICZ1x/34U4DFs m3IA== X-Forwarded-Encrypted: i=1; AJvYcCVgd9UmbLZ8WykRMz7hNP+380Yolr9F+hRywgmFUgQVZpdHxEnBMEepw8M5+QlOoS6rXMr5vw1/Vzeozw==@lists.linux.dev X-Gm-Message-State: AOJu0YxSczXoZwTLwh/KcVwXJsR9ldzpIjTkNwrzTN/lcfL6sHcH02wM d5Cxi5Ul8URPGjtPxyGS+Nzyxh44G0v0M3KmAujuJkVmenTNU7SnxqBs X-Gm-Gg: ASbGnctdh2gyTTwaRvV6JVThumuSe64Uke+EF20L20/YRbchOCyjPhrOBBC9ibmBN9v ttMICfvEj6GENNOIOg/vCyILIUeTbxMbK3QhoQZEsDMUCJqAIeMsueM84BvoHf9+aeTDWH6tBT8 TAEz+L52OhrOMNCAYA3zj/wpn1eAdw2q7djOLCHFDxozArAG4OMyQzoU5Z+7FVnmsWUDHrV5nl1 3GfC5ijiNscdD8yZpYitU+lbE9n6eeB/3jy8dnZTErZvPPJldrercpkKUCDQQ3D635G3OujWwWJ Dc5DDqATr6yAZuz836hBCLNaYZVAzAvTDOtH/z2TUKNES0YoKNiANVuLMqTmDsdrJUTZpAV4J97 SNV51xRRZqqfAFJjEOYcV8TRQecSgYTVT/692dXNBx9rVNnTsD1O22UTqPyFdvC70tcHxh7MUkN hxTaAGp4hqwFAxI14hsiG7RB/v6E8o X-Google-Smtp-Source: AGHT+IHUjkvK3LuEYexNwytgkWNuB+3vDFUmi2M1K/MsCvY3IVkIm6wl0qrMfqC1Lyu5Q0aWPSh04g== X-Received: by 2002:a05:600c:a05:b0:475:da1a:5418 with SMTP id 5b1f17b1804b1-4775cdbd551mr2245645e9.1.1762279812965; Tue, 04 Nov 2025 10:10:12 -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.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:12 -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 09/30] drm/sun4i: vi layer: Write attributes in one go Date: Tue, 4 Nov 2025 19:09:21 +0100 Message-ID: <20251104180942.61538-10-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O It turns out that none of the VI channel registers were meant to be read. Mostly it works fine but sometimes it returns incorrect values. Rework VI layer code to write all registers in one go to avoid reads. This rework will also allow proper code separation. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 71 ++++++++++---------------- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 1f4fa63ef153..dcc4429368d6 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -18,34 +18,35 @@ #include "sun8i_vi_layer.h" #include "sun8i_vi_scaler.h" -static void sun8i_vi_layer_update_alpha(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_vi_layer_update_attributes(struct sun8i_mixer *mixer, + int channel, int overlay, + struct drm_plane *plane) { - u32 mask, val, ch_base; + struct drm_plane_state *state = plane->state; + const struct drm_format_info *fmt; + u32 val, ch_base, hw_fmt; ch_base = sun8i_channel_base(mixer, channel); + fmt = state->fb->format; + sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); + val = hw_fmt << SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET; + if (!fmt->is_yuv) + val |= SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE; + val |= SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN; if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { - mask = SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MASK | - SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_MASK; - val = SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA - (plane->state->alpha >> 8); - - val |= (plane->state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? + val |= SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA(state->alpha >> 8); + val |= (state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_PIXEL : SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_COMBINED; - - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, - overlay), - mask, val); } else if (mixer->cfg->vi_num == 1) { - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, - SUN8I_MIXER_FCC_GLOBAL_ALPHA_MASK, - SUN8I_MIXER_FCC_GLOBAL_ALPHA - (plane->state->alpha >> 8)); + regmap_write(mixer->engine.regs, + SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, + SUN8I_MIXER_FCC_GLOBAL_ALPHA(state->alpha >> 8)); } + + regmap_write(mixer->engine.regs, + SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), val); } static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, @@ -194,23 +195,14 @@ static u32 sun8i_vi_layer_get_csc_mode(const struct drm_format_info *format) } } -static void sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +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; - u32 val, ch_base, csc_mode, hw_fmt; const struct drm_format_info *fmt; - - ch_base = sun8i_channel_base(mixer, channel); + u32 csc_mode; fmt = state->fb->format; - sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - - val = hw_fmt << SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET; - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), - SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_MASK, val); - csc_mode = sun8i_vi_layer_get_csc_mode(fmt); if (csc_mode != SUN8I_CSC_MODE_OFF) { sun8i_csc_set_ccsc_coefficients(mixer, channel, csc_mode, @@ -220,15 +212,6 @@ static void sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel } else { sun8i_csc_enable_ccsc(mixer, channel, false); } - - if (!fmt->is_yuv) - val = SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE; - else - val = 0; - - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), - SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE, val); } static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, @@ -340,12 +323,12 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, if (!new_state->crtc || !new_state->visible) return; + sun8i_vi_layer_update_attributes(mixer, layer->channel, + layer->overlay, plane); sun8i_vi_layer_update_coord(mixer, layer->channel, layer->overlay, plane); - sun8i_vi_layer_update_alpha(mixer, layer->channel, - layer->overlay, plane); - sun8i_vi_layer_update_formats(mixer, layer->channel, - layer->overlay, plane); + sun8i_vi_layer_update_colors(mixer, layer->channel, + layer->overlay, plane); sun8i_vi_layer_update_buffer(mixer, layer->channel, layer->overlay, plane); } From patchwork Tue Nov 4 18:09:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 674 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 F1ECE33E35B for ; Tue, 4 Nov 2025 18:10:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279818; cv=none; b=jtB7jVzyKBW1rskIsCrYdw+3vk6ncRzFSOi5/WFNxnnWHF6Fm4Lo9C4ifhxX4MTaVjtPwOUqvh3cQBx4OtOiStlGjt/dS2VRasBW8SGsr5SU4bdmWUSFLesUJWvJprFalYPKMgW+vPKId4vj8IWLj0nReNSNdBGSjvMcVbnylQ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279818; c=relaxed/simple; bh=FlT80Jvt6ahoDIAqeU5jws3NHItu0JW+7T1K9WvKkP4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kU1nL7wy5dM5wRFWc3qL62cIjeuR8INOvNtfUfySKfssYySDeLEuIPQP68ycib1dR9NVoytTdZhUqDT8MqK3NVagiL0x9krfPyIKJPaiPDPsum1WNMoNn45aw2HHDEER2XEc4isjvtT/Q8G0YHTeBowSbw5HxzHymc6S1Rsv3gE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=J3IaTqoZ; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="J3IaTqoZ" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4710022571cso54538515e9.3 for ; Tue, 04 Nov 2025 10:10:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279814; x=1762884614; 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; bh=vqox3UkaoHNgrz/QIvGOJuxPYXtBZjdwtd1IyKwMyfs=; b=J3IaTqoZbYZ265vSUBF2nL7KdAkvHOtFmjmixYwei1N/10rUKsLCFziQc40CQqWNS5 ZSCJDxnIwkvNO6+OpSThOtIIb9PtXhuAJJfDFrCJowREQ8OjYsQgIJ3aI5wdpyaiHDLl R/FtIXzrtxYWKEPrEyOE4bvI8unPAJEawEn4XjOF0tR5WjQFhszexN+jcp64RacjtJxC lGHzreNZyyc+sJBJ3id1DZ4iDm4hrbKTvCUhsBZXShYziq+e96ohei+T8RDSe17oItgj PKfQyCH9/lwuOy1U2D5fe9Mw3wKt5mSK2ykKoiCu9ruAT7FiuRr/MFehATEtuvmmFJH3 I+eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279814; x=1762884614; 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=vqox3UkaoHNgrz/QIvGOJuxPYXtBZjdwtd1IyKwMyfs=; b=vOw5Ui9Usbi0X63KD1r6FihflPdzff8MaDBSTatU4ofqHUIKUknR5WrByrGZTLS3mc /1yjgQDHBsmoLUyFFrBdJYRBmqenBsXFWWNETKvxoAZ7bdl/2BSFkZw+O5i9IAMAxyFS Bh/ksVzTU9ZQLKAnKMTphVUJATWx6AX1F91ww66WhjMXO1SX8irkBJT7p3LxXEge+lvt WrVpukk5m6ho1edbFEvP+WsjOTYTkrsQIrTlFFVr405qVxnfLjlU1qHEMo3qf2E4Ef5N CibxfqUd2e6qbuEz7Ch53Y8ViDreLKyQKub7HRfhOW2al84xKLtbC/52hEZP7PMMyJQg IO+w== X-Forwarded-Encrypted: i=1; AJvYcCVri8t04GwnPX+3Mc2k7WRH/wXIa+bvmofxX9UjyOxNr6JpnTZp3AZahPmnhBvl0nEdzejb/dWfIbeKzA==@lists.linux.dev X-Gm-Message-State: AOJu0Yzi5M5UhflAHovDPOxvc3rrpju0yAXBh0BWpThAo3flqFnSsFSD bS5yq9bEC5yqsvEegLUm5EN9diIYTnDryKiqYxZqkIfZDwZuOai+dvdP X-Gm-Gg: ASbGncvjznzK2ybxa6wc6Zs7ntjBDzfTSnqO1DwsKoKSv7ltCvN6vjV9io79AuUily8 wciJJi2k7xsSO7PugCkVm0tK7/abjYDoPE00Ce2lqO6uK86qh6UWybqk2H+PnIywZ5ilUIRjNEd Mwxna04tJkCaWuRwK30XLd2xWYbO57JFHwDcqd27+xyuTtj70zVRNp0SWmGPtBQkI8GHDUHnf5N S8A81jYjr2MX3PJe6V7Wmff+7BSWTpfPmjHCibueSnmUtf8JFHKB70ixNe2ybJiZHqFBpMcWgeI KoSUL344S4j8QPSvfA7Xjy01yZWf9+SAP3KUI+bTsSaxgWGfW+Vz5YzOHX/MGgG2A53oVq1+bAy 1V5vsyPpi/EDlScb1umxu1/hN11ZzliroG/IeWKib3Jp5i3OBOMuBVXs2nViJyXseQuzIwYlREZ L6If8wqvRZpw4VQZWDUw== X-Google-Smtp-Source: AGHT+IGHcjr5LVZvJCkn6ps5FsbaEzRecmaWoSpniwlTk12WxNdiygIkQQYkFJg+89wFF5L7fhoGZA== X-Received: by 2002:a05:600c:821b:b0:477:54cd:2029 with SMTP id 5b1f17b1804b1-4775cdf4f48mr2528695e9.4.1762279814190; Tue, 04 Nov 2025 10:10:14 -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.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:13 -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 10/30] drm/sun4i: mixer: Move layer enabling to atomic_update Date: Tue, 4 Nov 2025 19:09:22 +0100 Message-ID: <20251104180942.61538-11-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Enable or disable layer only in layer atomic update callback. Doing so will enable having separate layer driver later for DE33. There is no fear that enable bit would be set incorrectly, as all read-modify-write sequences for that register are now eliminated. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - rewrited commit message drivers/gpu/drm/sun4i/sun8i_mixer.c | 24 ------------------------ drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 13 ++++++++++++- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 13 ++++++++++++- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index a3194b71dc6d..1fca05a760b8 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -250,24 +250,6 @@ int sun8i_mixer_drm_format_to_hw(u32 format, u32 *hw_format) return -EINVAL; } -static void sun8i_layer_enable(struct sun8i_layer *layer, bool enable) -{ - u32 ch_base = sun8i_channel_base(layer->mixer, layer->channel); - u32 val, reg, mask; - - if (layer->type == SUN8I_LAYER_TYPE_UI) { - val = enable ? SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN : 0; - mask = SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN; - reg = SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, layer->overlay); - } else { - val = enable ? SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN : 0; - mask = SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN; - reg = SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay); - } - - regmap_update_bits(layer->mixer->engine.regs, reg, mask, val); -} - static void sun8i_mixer_commit(struct sunxi_engine *engine, struct drm_crtc *crtc, struct drm_atomic_state *state) @@ -304,12 +286,6 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, plane->base.id, layer->channel, layer->overlay, enable, zpos, x, y, w, h); - /* - * We always update the layer enable bit, because it can clear - * spontaneously for unknown reasons. - */ - sun8i_layer_enable(layer, enable); - if (!enable) continue; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 8634d2ee613a..9d5d5e0b7e63 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -25,6 +25,15 @@ #include "sun8i_ui_scaler.h" #include "sun8i_vi_scaler.h" +static void sun8i_ui_layer_disable(struct sun8i_mixer *mixer, + int channel, int overlay) +{ + u32 ch_base = sun8i_channel_base(mixer, channel); + + regmap_write(mixer->engine.regs, + SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), 0); +} + static void sun8i_ui_layer_update_attributes(struct sun8i_mixer *mixer, int channel, int overlay, struct drm_plane *plane) @@ -201,8 +210,10 @@ static void sun8i_ui_layer_atomic_update(struct drm_plane *plane, struct sun8i_layer *layer = plane_to_sun8i_layer(plane); struct sun8i_mixer *mixer = layer->mixer; - if (!new_state->crtc || !new_state->visible) + if (!new_state->crtc || !new_state->visible) { + sun8i_ui_layer_disable(mixer, layer->channel, layer->overlay); return; + } sun8i_ui_layer_update_attributes(mixer, layer->channel, layer->overlay, plane); diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index dcc4429368d6..727117658c6c 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -18,6 +18,15 @@ #include "sun8i_vi_layer.h" #include "sun8i_vi_scaler.h" +static void sun8i_vi_layer_disable(struct sun8i_mixer *mixer, + int channel, int overlay) +{ + u32 ch_base = sun8i_channel_base(mixer, channel); + + regmap_write(mixer->engine.regs, + SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), 0); +} + static void sun8i_vi_layer_update_attributes(struct sun8i_mixer *mixer, int channel, int overlay, struct drm_plane *plane) @@ -320,8 +329,10 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, struct sun8i_layer *layer = plane_to_sun8i_layer(plane); struct sun8i_mixer *mixer = layer->mixer; - if (!new_state->crtc || !new_state->visible) + if (!new_state->crtc || !new_state->visible) { + sun8i_vi_layer_disable(mixer, layer->channel, layer->overlay); return; + } sun8i_vi_layer_update_attributes(mixer, layer->channel, layer->overlay, plane); From patchwork Tue Nov 4 18:09:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 673 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 5959634166A for ; Tue, 4 Nov 2025 18:10:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279819; cv=none; b=E0RXJj8YBk3xyYsKhR1owDE3wmbPLp6iBknihh7dDZTpSm55vuQggLQqvxeYlTD7OFIf5TXXP0eGGKvJDw9ItvRGKghYgsxWRfPWbOro/w/sbhLmSM8YsntlN9d4iZfLJd0d1TA8otbfR/MSdG4U4urlTpPAGaVJF9roO+sm/pM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279819; c=relaxed/simple; bh=vsQRDrwjNb3dB2XQvKOWy7fWTFXCX/LOwxxjT9gCKe8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZzexTv2r0zue6DMA2AVwMZDvogdwGUTzHyRyi3yz68XmzQKw4XAdmduVyo76tZjI8HbZST8Yt3AkRiqe2NpbujvmXSYdVr5fH/KChUswSCoTFYdfWK0St8Bc20pGzpZ3lsB19udOe6iDMJoqoJcIu+FxDS48ITl7gIc6N5pC1NE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dAjxn6Lh; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dAjxn6Lh" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47754e9cc7fso7991935e9.2 for ; Tue, 04 Nov 2025 10:10:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279816; x=1762884616; 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; bh=bd2rGfbR52BnpdSsNRlsO1gNn2vRHDyP0CX62x34+dg=; b=dAjxn6LhvnBsvh18fLoUS3t1I5drDaCURQLHBZ5Tcz5B8z3nPgYt7dA6Z98E3sTf1B /G2wbO+ldEwqrxVgx/Ec/ckTXQSU7zJ86EyquFbFTh+L5glfiJa3has9h4Y6m1AAAOgm LnhPtgyy7Z5kfRZaXQ7Z5PfkZm9CjU4uN+aaBxgVCiFVBDQZaMPB5Jglii99KOjD+OVs N/2SAbPDgZucuOyD7/fXRL5YR+Sg/DWB2oO3ZWzOfwYRlAu+txJd3h1EXeZ976u2019D NtLBGaaeR4tCRzAASL/nnpP/XmOaD62vzrZmKj3TZfyUJnYqduoq+9xtJJibWwRdx//8 QyLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279816; x=1762884616; 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=bd2rGfbR52BnpdSsNRlsO1gNn2vRHDyP0CX62x34+dg=; b=kUjggMMHHz4Snc2q5nJnlIrgtD5mXufObKD7l4NoZSzm1sWuL/z6Q+iWsd0aG0QYTH fSIL0QTio93QM95QFNbfXmltF3cZlm/P8p5JAEseIs4rTsEbbAeDsDNOZRwQjLhSy5j1 zMjvyq+6lgLbIdeYMHl+PfPWkW9gXIrUu2kqm8QPQ+NLBj74QVlKy26xRMmJnqwJjHr4 dlDq3PElJ3A21NF6F/vU3XovrAxlz3stbNluJ+sGkqAwpM9YTvAOovPznqgKn7wn2/Tl +Le6wBI9b3alz0NhLii+xX6b/x4WtXQUWNCb+d2JJmiDwjKWYOxrJhwk5CUvLomgaLLK ddSw== X-Forwarded-Encrypted: i=1; AJvYcCUcGIGa0GGATPoZbcDsH0/obgW6wKXgKvKAniIwh1KNi53JRMnmoIALgdEmBh0ZL8PoQYF60Q3lTjrGNQ==@lists.linux.dev X-Gm-Message-State: AOJu0Yx9raLAtX+vOI/Q0SvhQSGYnd14TLbjA+BJmJQLH5Osd+61XhSz 1sFitUYDlDliIpOFSe3XtZ1qmUGaFy3VlnvDG5GeNbk/KHNDhKDIt4bu X-Gm-Gg: ASbGnct1aIJYOqGLmS9ULDrMjwazP6t2rEVbnJtxNJ+6lxpWupMx1GBYM40BAyEo8Dg DBLcs12WYqfxCMSwB5Spw9cc+i7rhoKnniSC5LW/PpSy6Fi0U8fBucenyPPGW1rZofuwdoXSewc smnQ8P2kWyupQs8xBvbkj+vSKAkKUNy/r91gyeK3fXfi+OrZ2bVXvj3dcQRz7umlMqTOiE6StNP +k7ZoNWKtMDv1b8AHODbLit9suIOCvVnjli/IV/Z9KkQx55d7bcsKZtE29ybOrcfhXqW/syDl6a AdTK/U/N7rHKp7cGcmmzLfMm439unQG8GvM3OfQf3IOgQyKLzn43+rRF0Rud8NJZ2m37kjO9f6k 01TuOes2yJBnXlW6NjIvwVdHk0KBqN3C04hibUF1z76EQ3refVxpVFAtd4JKjSTftZw+kIH4Mf+ sNEOike16jwuFyK7GMWe6Z9+r6xkLy X-Google-Smtp-Source: AGHT+IG2sBblS49qAXjvkf0vtV34n/K/LEVc1O2UQPjWyBa6gyH0Uf01mtvCoKB5v5EtjbqR1NJhbg== X-Received: by 2002:a05:600c:1994:b0:475:dd59:d8d8 with SMTP id 5b1f17b1804b1-4775ce9ba5cmr1913685e9.8.1762279815509; Tue, 04 Nov 2025 10:10:15 -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.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:15 -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 11/30] drm/sun4i: de2/de3: Simplify CSC config interface Date: Tue, 4 Nov 2025 19:09:23 +0100 Message-ID: <20251104180942.61538-12-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Merging both function into one lets this one decide on it's own if CSC should be enabled or not. Currently heuristics for that is pretty simple - enable it for YUV formats and disable for RGB. DE3 and newer allows YUV pipeline, which will be easier to implement these way. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_csc.c | 89 ++++++++++---------------- drivers/gpu/drm/sun4i/sun8i_csc.h | 9 ++- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 11 +--- 3 files changed, 40 insertions(+), 69 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c index c100d29b1a89..cf0c5121661b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.c +++ b/drivers/gpu/drm/sun4i/sun8i_csc.c @@ -107,23 +107,28 @@ static const u32 yuv2rgb_de3[2][3][12] = { }, }; -static void sun8i_csc_set_coefficients(struct regmap *map, u32 base, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range) +static void sun8i_csc_setup(struct regmap *map, u32 base, + enum sun8i_csc_mode mode, + enum drm_color_encoding encoding, + enum drm_color_range range) { + u32 base_reg, val; const u32 *table; - u32 base_reg; int i; table = yuv2rgb[range][encoding]; switch (mode) { + case SUN8I_CSC_MODE_OFF: + val = 0; + break; case SUN8I_CSC_MODE_YUV2RGB: + val = SUN8I_CSC_CTRL_EN; base_reg = SUN8I_CSC_COEFF(base, 0); regmap_bulk_write(map, base_reg, table, 12); break; case SUN8I_CSC_MODE_YVU2RGB: + val = SUN8I_CSC_CTRL_EN; for (i = 0; i < 12; i++) { if ((i & 3) == 1) base_reg = SUN8I_CSC_COEFF(base, i + 1); @@ -135,28 +140,37 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base, } break; default: + val = 0; DRM_WARN("Wrong CSC mode specified.\n"); return; } + + regmap_write(map, SUN8I_CSC_CTRL(base), val); } -static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range) +static void sun8i_de3_ccsc_setup(struct regmap *map, int layer, + enum sun8i_csc_mode mode, + enum drm_color_encoding encoding, + enum drm_color_range range) { + u32 addr, val, mask; const u32 *table; - u32 addr; int i; + mask = SUN50I_MIXER_BLEND_CSC_CTL_EN(layer); table = yuv2rgb_de3[range][encoding]; switch (mode) { + case SUN8I_CSC_MODE_OFF: + val = 0; + break; case SUN8I_CSC_MODE_YUV2RGB: + val = mask; addr = SUN50I_MIXER_BLEND_CSC_COEFF(DE3_BLD_BASE, layer, 0); regmap_bulk_write(map, addr, table, 12); break; case SUN8I_CSC_MODE_YVU2RGB: + val = mask; for (i = 0; i < 12; i++) { if ((i & 3) == 1) addr = SUN50I_MIXER_BLEND_CSC_COEFF(DE3_BLD_BASE, @@ -173,67 +187,30 @@ static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer, } break; default: + val = 0; DRM_WARN("Wrong CSC mode specified.\n"); return; } -} - -static void sun8i_csc_enable(struct regmap *map, u32 base, bool enable) -{ - u32 val; - - if (enable) - val = SUN8I_CSC_CTRL_EN; - else - val = 0; - - regmap_update_bits(map, SUN8I_CSC_CTRL(base), SUN8I_CSC_CTRL_EN, val); -} - -static void sun8i_de3_ccsc_enable(struct regmap *map, int layer, bool enable) -{ - u32 val, mask; - - mask = SUN50I_MIXER_BLEND_CSC_CTL_EN(layer); - - if (enable) - val = mask; - else - val = 0; regmap_update_bits(map, SUN50I_MIXER_BLEND_CSC_CTL(DE3_BLD_BASE), mask, val); } -void sun8i_csc_set_ccsc_coefficients(struct sun8i_mixer *mixer, int layer, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range) +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) { u32 base; if (mixer->cfg->de_type == SUN8I_MIXER_DE3) { - sun8i_de3_ccsc_set_coefficients(mixer->engine.regs, layer, - mode, encoding, range); + sun8i_de3_ccsc_setup(mixer->engine.regs, layer, + mode, encoding, range); return; } base = ccsc_base[mixer->cfg->ccsc][layer]; - sun8i_csc_set_coefficients(mixer->engine.regs, base, - mode, encoding, range); -} - -void sun8i_csc_enable_ccsc(struct sun8i_mixer *mixer, int layer, bool enable) -{ - u32 base; - - if (mixer->cfg->de_type == SUN8I_MIXER_DE3) { - sun8i_de3_ccsc_enable(mixer->engine.regs, layer, enable); - return; - } - - base = ccsc_base[mixer->cfg->ccsc][layer]; - - sun8i_csc_enable(mixer->engine.regs, base, enable); + sun8i_csc_setup(mixer->engine.regs, base, + mode, encoding, range); } diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.h b/drivers/gpu/drm/sun4i/sun8i_csc.h index 828b86fd0cab..27b6807fc786 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.h +++ b/drivers/gpu/drm/sun4i/sun8i_csc.h @@ -28,10 +28,9 @@ enum sun8i_csc_mode { SUN8I_CSC_MODE_YVU2RGB, }; -void sun8i_csc_set_ccsc_coefficients(struct sun8i_mixer *mixer, int layer, - enum sun8i_csc_mode mode, - enum drm_color_encoding encoding, - enum drm_color_range range); -void sun8i_csc_enable_ccsc(struct sun8i_mixer *mixer, int layer, bool enable); +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); #endif diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 727117658c6c..adcd05acba1b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -213,14 +213,9 @@ static void sun8i_vi_layer_update_colors(struct sun8i_mixer *mixer, int channel, fmt = state->fb->format; csc_mode = sun8i_vi_layer_get_csc_mode(fmt); - if (csc_mode != SUN8I_CSC_MODE_OFF) { - sun8i_csc_set_ccsc_coefficients(mixer, channel, csc_mode, - state->color_encoding, - state->color_range); - sun8i_csc_enable_ccsc(mixer, channel, true); - } else { - sun8i_csc_enable_ccsc(mixer, channel, false); - } + 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, From patchwork Tue Nov 4 18:09:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 672 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 A01D6342169 for ; Tue, 4 Nov 2025 18:10:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279821; cv=none; b=IZ+7IzNwy8g6/7jheBZDuqT84lD5CqKbBnVZ35iHWnvuAlM4gQz/v5gEu+U8bTZViXGubfbp9+Y6OEHDVbaUBHWdxpiom1u4TbMaonfm9yr/Pc6xKBTtP79LBrD2UnK70xxF2L0gKqhyUx1CVrW+R0lGfnjTOAY1gzoqAw9BN0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279821; c=relaxed/simple; bh=sUrIHtojc8Cq5HvYFoOttAp1S2R8CQHc4BYGDanaEHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ed0efUsXIYb/tVuBaNFkm+MCQlLu7OJIKQUPOnhH2F7uSCFWWJ+ZU/rRFJ5mkc1t7u4Y0UPf2x4FWmwODU6Ar7vI0hwWpSJDKUEtmg8DF+8FjzSxvSblHwUU/A3U4/gASw8xurcsaen8nHtnAFjOYVseL8vq6zjjmOL8LmrrWa8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MVtL8dBN; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MVtL8dBN" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-477549b3082so10394515e9.0 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.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; bh=JdhmcynnandPsql64nAYpaShGCfSEifyPJ/Np9JnIqU=; b=MVtL8dBNeE06K3e2xpkfhzRsqKCVMMJTjrDzmU/AMBE1dROeyxEAIp9f0ppigjMRGb i2peprY66vYKs70gtEc9KEuaByXsc76aDfEb1hnq+1EW7FjEaiL1owFryI69+XZvoxGU Y/9rqdWcKciYDY8swXmfVRkBQnv4yKqsy0Kt+8LCxLX953hCU7eGKGUF+bT62oxXr/iz SKiEGUpUJupno0+PZtUeFNLO4ltcXusJ5QdUo0fPi/nOzWwUZ3nfmWPt0bYdc/1yshqS 0ez6kju0XRzjEVbgmq1LYi3RQGXyqnYg5nD7cZYH9NdqLv8nWoz4t13g8X3W8d5/5wX6 He5Q== 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=PkpQL9IRrt2j9zInl/CnEH3krLLeNt688XUqUujUUPyWuqaRslRBppctol6hYSlS5q Veif2gIHKt/WouKRdFGDzMlnQKdV1BZlc1yGFKPm/WsCnv9aevZOewBajZ+/NWVC1Hkv SH+Va2ljKMSYl0x8+zrHOqKeClVZJE26ZloPs3pDZxh2/CJpnkcRz1p7pCeGX/l7ougN ZGNWBivZnTCUj/O61KoyQhmrOgBRhDeXZ3MTo+8Cmhu4mpW/8nOBSsAjlqEUGe184GGb 4rubVVEyPXBc5VN47L+nBZam0Aazf11874mmHS9Bay6CvpcVsth/umDSsx7LQi2u6snP IL0w== X-Forwarded-Encrypted: i=1; AJvYcCWdcg8yEcC4K7RFWMhaeRjhH2HQw6kAhGuBKYUHMtV60/zblT09Q7Jui5TwUrJy088+mQoK7w7cXzVL7g==@lists.linux.dev X-Gm-Message-State: AOJu0Yxgf4YAx6+hWH5/Xu0jpYfIC9AXZ69IvA9qLFwOZrRCCGLgPBUt NV6BpI/gtnmpus/LmSVNhFDDzJNQVHO4w1D16MxEmfhzNAiJYXUB/0zb X-Gm-Gg: ASbGncsr0lYQirUNwYCzNtQq/NbXGUWX0+SrklIP/RcQEpCIgVFln5BALBZt+rtgxPm yenbXLsebvowDOlTxi2X2qbF3FH0lXdJ4PKYEFT+53JOHkhiTCYVKQQbGAdYMRnOnQEfjYVB1TM omtXfByh12mianLECtih8ScbCYumJx6VZPgL260uCQ7/NHmuUJoyofqksSJmEVK+YewkvIb4RJh jhrn09/W2gSU5b1xgsi9XFaXKwDjZ7sKKf3iOQXC/y48v9rmxPGKItanmSU8pkNlNVgB50p5YIq aE5cH2ALPky0ZAutuWDoWqWqBHIrwO6IVn/31NItBk8+XL97AWrK3GfmmLQQJ1ox4ukOFlwr28C /i/d/VGxtULp2b21MJSzC/k3E9b7CwkgQR4Fc6Yt/VUrf2Ihroqbz5S5+nqVZFU2lkNF3o5nlMT 1uK8TK8/7YC9Vbcsjl/xsqM5skpdEO 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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O 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); } From patchwork Tue Nov 4 18:09:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 671 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 0D5B933FE2B for ; Tue, 4 Nov 2025 18:10:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279822; cv=none; b=jzaRq1VXqoamb7DzmqW6t7VUkWBLtpvxuQKWQcbWTTjj+GXPn8QhPf8YCV1dA/JdblZPhw/ROp3UVeAxm3afbK9sdL16rOdcybso3nlxIlLh9Dia3yjEYKAEmPv/DeeQut6wgePim/ysVc8QfVZ23BN5JDhG4jUz3TwJWEJZHts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279822; c=relaxed/simple; bh=t8mJW3Fat77+qlKNgT4jR7rPDxuiYTPXp7Gff1nhJ60=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sTL0+1w96Pk41LP3bZgqOuAEs+vm4+UywNW4pYfSuafVGIf27TNG5IIn8VY4vyLASPD7GuMFzqff8/bDlmKCN5Mets7OzknRKUmdG6CnwmpTmO6K7z6KADIHK0woiBdD8akFzNhUm+kQZSXz+hSw040QTEdLsex9lvCMEJWimvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=W/Bh8nsb; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W/Bh8nsb" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4710683a644so770255e9.0 for ; Tue, 04 Nov 2025 10:10:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279818; x=1762884618; 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; bh=ZDQI5x1cDX0/wzl8C9wFmlja3WFbUj4VL1aXgGGHPcI=; b=W/Bh8nsblca8TMnei5LLnX5mY3l6WQd/bWbgMjkemWduQ+fdBCT/BnYijNlHf+RkPJ T2rJf1NMeJv7UWHrP++AE0T8JfPvLGCpjNDedGIP6AMt5m8LQUgLhxz29HlE2jgKqtpm 3udasQuDdsB7MCAvgG5LRrAJ3XGkIEwGyAAMYsfN0IseYYezRYmqpxIGjpYKEBs6wTKi VemmAeMnF/Y1z8bXQxjvrjrZ7C09lZcEAcCy3DpmMSF0NatPtBJ+mXehpew4y3qw9Afh KQJE/tNb8VFZ940NoqjpuwpJgaVx/FV/GQnmDL2ReaU6sVHzjNCIPIgbu4mKWvhKMOyr 8GiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279818; x=1762884618; 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=ZDQI5x1cDX0/wzl8C9wFmlja3WFbUj4VL1aXgGGHPcI=; b=scKNR5SMuMZa/mLb74ns15I+lKnhYucHK9hrZisms5pO7D8IMKvG00FyJKHLgCGCpq mydUG0xsrj/RQwZgJyJH6g0H940iA2lk21oUQwEqmxni7ntjyEAMudcpqHIeHBQ7a0TN NygmKpiRsIlNl+8h7oRqaxHVwgPgRY8Rswn2sMYXn7f7rYen9njbZ1Lt18+KZ+BGppue CxKmlhfN8ZjAk3+Q6BXa/kNK9MixuTUWqNs/Nnn2ozNrasLb/h2j10HtJ7puzqyT6+iu hXnPxHmQP2EQDRNX7Eo62zjUARdc46EI8k3zSLmIJC7SocKdz+mQX48PReSVUBT8Cj9B RIlA== X-Forwarded-Encrypted: i=1; AJvYcCXfzV4hWgthfNyJwj9vpzDJ9TaeQgjBlqnp16gQziuuTtYF2Df0OAa03k1MSoDQP0to0//APygOaCygdw==@lists.linux.dev X-Gm-Message-State: AOJu0Yx7gD9wcfYDByEU0yg7YUFSnRzjIfqqy1QBOaKx/v1iauQkB+Q/ E6PQCxmcBVmQskHDxJ1E5EMy3xe/argRR2pdRltbc4jY+M5EhA3U4dLF X-Gm-Gg: ASbGncsEkeMrxIv0WA4c5W/5WMD83tvTj0W0+zq/h2y+9aJvbW9rbJ7IUgxXtStzwpj Ib7euAFjYRaTFU8N53CCE4HmRhR0hSoQA9QE9zM9gNjxbOJZqLIBft6ypKmvLq73XOhs2MNAQ5v QN77z1imEzK161LMdjkeDMgRzHNTKtWdf1/q5nGQRUfClp+14N4rbpMlQJKGWkmItr6jSSz2zo1 Avk8WRxRkrbcS8mHRMTVvYlIWYnWtUnx5dN5Admi6CiY8pNXOIrnIyF/+Ed9+5iad0FDQGZdwTt w6TNMGWUOsHqsNLlMOVVq7WiP0+20+jj8RVNHVdzSFw3cHL3mEtfjhQwAI3Q1jUFTylYVZ4+8LT stS9J6Gct6Q99ZSHjjYtw6dPK8Yv5t+BiG1+kXCBrcQta4IHrHq1GY2x9TzkN2C6+v4mnNBa5h4 vA/KrM5ioXYpBtZsM/CA== X-Google-Smtp-Source: AGHT+IE6+wQNQgsRWOAqTzJlZBlSMUgDJYtvMonE1RZ+OJOG9YLIca0WKWGS8Pz1WvOiR/sQSuop1A== X-Received: by 2002:a05:600c:6dd3:b0:475:d278:1ab8 with SMTP id 5b1f17b1804b1-47754c1c553mr27491185e9.2.1762279818149; Tue, 04 Nov 2025 10:10:18 -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.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:17 -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 13/30] drm/sun4i: de2/de3: Move plane type determination to mixer Date: Tue, 4 Nov 2025 19:09:25 +0100 Message-ID: <20251104180942.61538-14-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Plane type determination logic inside layer init functions doesn't allow index register to be repurposed to plane sequence, which it almost is. So move out the logic to mixer, which allows further rework for DE33 support. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - fixed commit message drivers/gpu/drm/sun4i/sun8i_mixer.c | 15 +++++++++++++-- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 5 +---- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 1 + drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 5 +---- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 1 + 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 1fca05a760b8..e7a66d9b622a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -315,6 +315,7 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, { struct drm_plane **planes; struct sun8i_mixer *mixer = engine_to_sun8i_mixer(engine); + enum drm_plane_type type; int i; planes = devm_kcalloc(drm->dev, @@ -326,7 +327,12 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, for (i = 0; i < mixer->cfg->vi_num; i++) { struct sun8i_layer *layer; - layer = sun8i_vi_layer_init_one(drm, mixer, i); + if (i == 0 && !mixer->cfg->ui_num) + type = DRM_PLANE_TYPE_PRIMARY; + else + type = DRM_PLANE_TYPE_OVERLAY; + + layer = sun8i_vi_layer_init_one(drm, mixer, type, i); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize overlay plane\n"); @@ -339,7 +345,12 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, for (i = 0; i < mixer->cfg->ui_num; i++) { struct sun8i_layer *layer; - layer = sun8i_ui_layer_init_one(drm, mixer, i); + if (i == 0) + type = DRM_PLANE_TYPE_PRIMARY; + else + type = DRM_PLANE_TYPE_OVERLAY; + + layer = sun8i_ui_layer_init_one(drm, mixer, type, i); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", i ? "overlay" : "primary"); diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 9d5d5e0b7e63..8d74eddaa294 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -267,9 +267,9 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, + enum drm_plane_type type, int index) { - enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY; int channel = mixer->cfg->vi_num + index; struct sun8i_layer *layer; unsigned int plane_cnt; @@ -284,9 +284,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, layer->channel = channel; layer->overlay = 0; - if (index == 0) - type = DRM_PLANE_TYPE_PRIMARY; - /* possible crtcs are set later */ ret = drm_universal_plane_init(drm, &layer->plane, 0, &sun8i_ui_layer_funcs, diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index 83892f6ff211..7745aec32d76 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -51,5 +51,6 @@ struct sun8i_layer; struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, + enum drm_plane_type type, int index); #endif /* _SUN8I_UI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index cf83f7ce6c78..1192b17726d1 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -412,9 +412,9 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, + enum drm_plane_type type, int index) { - enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY; u32 supported_encodings, supported_ranges; unsigned int plane_cnt, format_count; struct sun8i_layer *layer; @@ -438,9 +438,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, format_count = ARRAY_SIZE(sun8i_vi_layer_formats); } - if (!mixer->cfg->ui_num && index == 0) - type = DRM_PLANE_TYPE_PRIMARY; - /* possible crtcs are set later */ ret = drm_universal_plane_init(drm, &layer->plane, 0, &sun8i_vi_layer_funcs, diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index 655440cdc78f..fc22b9a6bd8d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -56,5 +56,6 @@ struct sun8i_layer; struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, + enum drm_plane_type type, int index); #endif /* _SUN8I_VI_LAYER_H_ */ From patchwork Tue Nov 4 18:09:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 670 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 B7C56343D69 for ; Tue, 4 Nov 2025 18:10:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279823; cv=none; b=pnpJSnRRcsg/ZZhR9ezqM1Qh47fH++XIRGwHxN9dcpi+lZwXuDRmwMJahZEFSB/KQFkmsRpg/wX7RHw3qaCoh0ZTSQsAfSL2Cj+LSheX4vVbTbBec6JNZqPXz/dF6rh33OJxAmG1s04OoXkbO/wrEOkxtZ1pW+8yLQXhq0/0nf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279823; c=relaxed/simple; bh=aukqhPkb3SXDec5/cqcnl9bh4tAlZZ6WtRNZI9Bwr+g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L+IzF4Enup65krN5GRhw0y2n+zLyOGH5AreQYiemGdpn2srS81DemI0exTNfUemU1mVZv95k5dB+5CdWEOUt1dwzWIHSczYdyo+K/UY+a1KEqoXuYXM+TrcT7S1eYtFXB6dX5miW2/OdcPy5G/RQ7YN9t6TFjodqufaQwHIICU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DiLg4g2p; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DiLg4g2p" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-47117f92e32so47878875e9.1 for ; Tue, 04 Nov 2025 10:10:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279820; x=1762884620; 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; bh=RkKFWxjvfnPBPsn+5nRw8D/GMWr7S+bsKZMhSPQ9djA=; b=DiLg4g2pI2XwJeqYbTmm4KmUcBJBiSydNp+uJWNLetra743Hj7ffaK4V9AnOd1FzGo hySCitrseiRDLOQzt/vw0eqeXDIM6jJvPhQXtfg2trhccK93E3GxC8xxCnJAju+40YzY McuMQfGTvZSap+D7CZKi/eL1E5TA5bp7b7gBaIz6/a4wRwEpiSwvST/uWygAsSjEHZVu hfqiXr7IQXNK71a2PCgWNQCDCLfABYluii9QWGsZyfBh5ZZOZh9+aONFX+U9SaEs0RSx tVkL/jVvLlDXt2R3xKs5rbNKxSlEqw4TJRjoiqqETWu7QTYCJ9r34YmJKdg3J9mOVRW1 U3BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279820; x=1762884620; 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=RkKFWxjvfnPBPsn+5nRw8D/GMWr7S+bsKZMhSPQ9djA=; b=IY9j8impDRiWowcm8xjw0iebEEb5rz9FUfQccLdtdfQXj9mbMFzEXMPFzCn4QHXd5o A7cSHp8hNja+nqaXn8ZZ1wZt4XLv+bj+xbVd/25jeO6XaU2bwdS08INopGOp80ODrqkL bNdCobgGRbLBFZLR5HDIOKvz1//q2K4gIHyWI12xtDQtGRnRW3PYnBE1Srw5McY9es0h d5ksiQip1mqBsMKv+hYn5vA7HmE6ObI2u9r9EM+vZh/gt30LV/zVITks6vhzqhyFqj4b uwoqkMkh60kiNryIt6YdeWYU1w+NuPbZQXw8aGgAIZ0WyRQ4Zmlr2ZSR+V6w4H+LgcTe uEHw== X-Forwarded-Encrypted: i=1; AJvYcCW73QL0hDKFUBums+nJvi+zUeLZuo4eG/O/gJEm9/LIltD/3dEDCE7AebSXNghiLUhk4wZIjz556VMq4Q==@lists.linux.dev X-Gm-Message-State: AOJu0YzIKvs/ZaUFI8ETvl+u4RkjfQUm2E64TnlRR2ixdEt0WRy5G1Yp oEnO7Xu7/ecPQbD9rzI19Z7bXSkc0vCgLJTl80jPFNrWo5VZgrQSMXRR X-Gm-Gg: ASbGncs7aFTwfLq1KtmNm0dM9LbK6RP6HbiQoRsNaxlYOgRRQESjis3JVfH6XARrYMr 0wzcmISm96LcoIES3Zi7GLZMxdkTzJ5a6NWo7aQNRc8jm5w4tIEuPtXpkBUicbi5wvWFODSZlXs ZxpAhzqG0dxVLnY3yo9VSpvst6eNo9LUf7mPkFAwW5GWOCpzRqIGE3EGOb4eF7kJ/5lEvazHS2v n2JXq3PObmQ6LGKaS00ayWQUiuj8KeVIPvkoIdgJfJzCkmqooKFWCVVkygEASLiTa98Ykb79Xzv FRBtR4C/kOMuoITMrZOAM9mPIL0mAPnM5b/SXNM4qps45c8Q1o+gqUXKrHwXqRgtHgrCoffLzyv FQjRHSFGxTnRzBdTJfj+dMkNyf8XfcGzMwSMmVdmtNoojMawjU5/jdEqUJLWMHhd9va2GR/muL4 z0xfPtVZy9vSNbjDiRBg== X-Google-Smtp-Source: AGHT+IE0VNeGup3E339ZS9R9hdH9raL7VWlmheMAS7dvWwXActLDGmTaSE0UPI06AOF5H0yvEXihPQ== X-Received: by 2002:a05:600c:a0d:b0:477:1622:7f78 with SMTP id 5b1f17b1804b1-4775ce24859mr2137695e9.40.1762279819619; Tue, 04 Nov 2025 10:10:19 -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.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:19 -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 14/30] drm/sun4i: ui_layer: Change index meaning Date: Tue, 4 Nov 2025 19:09:26 +0100 Message-ID: <20251104180942.61538-15-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O In the pursuit of making UI/VI layer code independent of DE version, change meaning of UI index to index of the plane within mixer. DE33 can split amount of VI and UI planes between multiple mixer in whatever way it deems acceptable, so simple calculation VI num + UI index won't be meaningful anymore. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 5 +++-- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 5 ++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index e7a66d9b622a..17c0ab5860b5 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -343,6 +343,7 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, } for (i = 0; i < mixer->cfg->ui_num; i++) { + unsigned int index = mixer->cfg->vi_num + i; struct sun8i_layer *layer; if (i == 0) @@ -350,14 +351,14 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; - layer = sun8i_ui_layer_init_one(drm, mixer, type, i); + layer = sun8i_ui_layer_init_one(drm, mixer, type, index); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", i ? "overlay" : "primary"); return ERR_CAST(layer); } - planes[mixer->cfg->vi_num + i] = &layer->plane; + planes[index] = &layer->plane; } return planes; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 8d74eddaa294..4f6c8b0acba6 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -270,7 +270,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, enum drm_plane_type type, int index) { - int channel = mixer->cfg->vi_num + index; struct sun8i_layer *layer; unsigned int plane_cnt; int ret; @@ -281,7 +280,7 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, layer->mixer = mixer; layer->type = SUN8I_LAYER_TYPE_UI; - layer->channel = channel; + layer->channel = index; layer->overlay = 0; /* possible crtcs are set later */ @@ -303,7 +302,7 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - ret = drm_plane_create_zpos_property(&layer->plane, channel, + ret = drm_plane_create_zpos_property(&layer->plane, index, 0, plane_cnt - 1); if (ret) { dev_err(drm->dev, "Couldn't add zpos property\n"); From patchwork Tue Nov 4 18:09:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 669 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 2272A34402C for ; Tue, 4 Nov 2025 18:10:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279825; cv=none; b=AE8mbDqDd7l8Z7SiOpAyGSjvROsGF5HtOpWksBZklfVFCZGNz2NpEuQ1xKISbnsEbu9cgLjH7Ii4zjN5NMSHcoQNCzt+Mya6n/xlZSUk1K69jnOKOe3/Vej7rr5ytUXb1dWgXh29CYk93Yyb/gG6gcNUrV//5jT1OmcU+UQ1LFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279825; c=relaxed/simple; bh=fMfk5XrNq9l01XQk+tz08bGQKmauEMShCmc9xdALUaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j0fASaNwZmrwMnb0D2WxeIkrzSb94uZkAcUWHVsiI7Lz5uPM0JMz+3L+rPwBRvBvc3mczUu7apyKDK02wxEG/RDiBnRV2bNj+wO2s5x9Y1wjZyEwwn1hmEogw+8UAd3s3sL812DOoA/FutL6qMvuqrXBWwoA97OsTGzlgxWwQlE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QuprHBvl; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QuprHBvl" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-47755a7652eso8491915e9.0 for ; Tue, 04 Nov 2025 10:10:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279821; x=1762884621; 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; bh=clITce3FS5MOzvHgr4+g3DvGcjeJNYVgPXmRoIAMUA4=; b=QuprHBvlQ1lXL0h5h5sfoFNaw8LbZm+RsCgh25kwq624acOsrTW76FRXjVFpD3cC2C MVdf5YqC3yCrobR6i5Q2p0bduNWhKKygs4GNrBSgSjCvjoFbwq78Zi9Xpb6W9d2HEHbi VQNcexKGgtKoV9qw7oyy4pWN1KVCjg+IF3msiJx05afv3spQ8LZKt+0GCycuB5k3OAp6 SjIE+7dFXmEoP4Sdcxf095V8q0wEqOhC8bfo/wfCXcpywjwsmIdbqVWdg2S7mXG3S9K6 2tTq+tEEgMVkJWh9jEoO2IJFxuQciDCxCcm5pZcVMgXkIGSKHR6SOAMyyYs199BMwOhD Llpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279821; x=1762884621; 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=clITce3FS5MOzvHgr4+g3DvGcjeJNYVgPXmRoIAMUA4=; b=t4Q0XJmMy0TeZ0SzZI9yhwZSzybfnL39fAQ+x/oj3ZWXy8FqHn4teafOj1yf6/Z6Qy Z34SyadFIG7m8FuvN14ic3LGQMGAI10exJVOKLoja1ugUnULBGHjGhXAA0b/WStGj4V+ +1v+mqH42rMhUFOjnkCfhveuW4Qcz5sBfr1rAOW9NE4NZ9dCl4uAQQdJPAmxTo/Qm66+ 2VUulAhF4wTAEYnfH4qCsJC30Cm+cCoT0US76KjMYoYD+L5JUez8RQluKJYQuNhLVeJN ZTvtLISeLHKoQsFEuR2yyk3sHtIAIv4uaOQbR2MV4CXgFrxIqL3qh+CwTKAyBCmRvyvu I+vA== X-Forwarded-Encrypted: i=1; AJvYcCXfn+6nf0hZ3dQfrUt61Tiz9a1m8//zvTzCVW5Ods6G3wP5NEZgAc3ou96Dvsn8FxdbNDBnU3mSr8aOOw==@lists.linux.dev X-Gm-Message-State: AOJu0YxKk9LCG8RcylKErSfzTanQyXJU5ipCmDNTf3AOUXUR5lE8YSdh 4IDHne/JAgMVfiw1u7odHNuDtGlO98EyeDu1VNdzD7I77pqV1sE7Wm7b X-Gm-Gg: ASbGncssg6ZCySnnMcNEWodaN4QqD0zS62cQoFBjaQ/jTjRl3bA+jd+nIIp7LWGGECQ ke6nxKy+610eCktxTj9CD7vX9aLmnr5BKoSctXDDhUvC37I2bzReh4Y1IxTo8yW8TqUoP/2XJTT 507gJXpBoLAxPpZ/B1mpHVnDODMCHgRhoQ4c9CeFu3UXo5kDxp1UxayPuTraTESUwUaC64skycs 4GO74kJ8KHxuGGe3rd+o9Q2LWSR3vTTl3uDdVzY72Y2EZtORIfmMC9/lbuzO5qTiJD4z8nPGPCr /p/oxs0VG+npJCeTovo4uaI5ZAl4K2uZa9sJYiBJoTJPpYLKmbXRk+fZ/gPhcm37QrSYsa0I35h 1Gw6WgeMabXSvY5LBH4bUnh7esKS9Mr+eZW9/aMMUNARgROD4QaUyOpE/S56+LN7QneFPp/7A02 4iWbCU6jBHx2wW7ltYKQ== X-Google-Smtp-Source: AGHT+IEpdaIz/ZPa95URReRW4HZDMqPLVxE4VqmgVrqWeDCwzW1Bh5UB6FP8v4QdEMy5HSG3J/kMpg== X-Received: by 2002:a05:600c:1994:b0:475:dd59:d8d8 with SMTP id 5b1f17b1804b1-4775ce9ba5cmr1916885e9.8.1762279821052; Tue, 04 Nov 2025 10:10:21 -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.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:20 -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 15/30] drm/sun4i: layer: move num of planes calc out of layer code Date: Tue, 4 Nov 2025 19:09:27 +0100 Message-ID: <20251104180942.61538-16-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O With DE33, number of planes no longer depends on mixer because layers are shared between all mixers. Get this value via parameter, so DE specific code can fill in proper value. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 10 +++++----- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 6 ++---- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 3 ++- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +++---- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 3 ++- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 17c0ab5860b5..18dd998364ae 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -315,12 +315,11 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, { struct drm_plane **planes; struct sun8i_mixer *mixer = engine_to_sun8i_mixer(engine); + int plane_cnt = mixer->cfg->ui_num + mixer->cfg->vi_num; enum drm_plane_type type; int i; - planes = devm_kcalloc(drm->dev, - mixer->cfg->vi_num + mixer->cfg->ui_num + 1, - sizeof(*planes), GFP_KERNEL); + planes = devm_kcalloc(drm->dev, plane_cnt, sizeof(*planes), GFP_KERNEL); if (!planes) return ERR_PTR(-ENOMEM); @@ -332,7 +331,7 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; - layer = sun8i_vi_layer_init_one(drm, mixer, type, i); + layer = sun8i_vi_layer_init_one(drm, mixer, type, i, plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize overlay plane\n"); @@ -351,7 +350,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; - layer = sun8i_ui_layer_init_one(drm, mixer, type, index); + layer = sun8i_ui_layer_init_one(drm, mixer, type, index, + plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", i ? "overlay" : "primary"); diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 4f6c8b0acba6..8f6fcdfcf52a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -268,10 +268,10 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, - int index) + int index, + int plane_cnt) { struct sun8i_layer *layer; - unsigned int plane_cnt; int ret; layer = devm_kzalloc(drm->dev, sizeof(*layer), GFP_KERNEL); @@ -294,8 +294,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - plane_cnt = mixer->cfg->ui_num + mixer->cfg->vi_num; - ret = drm_plane_create_alpha_property(&layer->plane); if (ret) { dev_err(drm->dev, "Couldn't add alpha property\n"); diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index 7745aec32d76..0613b34d36e0 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -52,5 +52,6 @@ struct sun8i_layer; struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, - int index); + int index, + int plane_cnt); #endif /* _SUN8I_UI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 1192b17726d1..805db4ea714b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -413,10 +413,11 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, - int index) + int index, + int plane_cnt) { u32 supported_encodings, supported_ranges; - unsigned int plane_cnt, format_count; + unsigned int format_count; struct sun8i_layer *layer; const u32 *formats; int ret; @@ -449,8 +450,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - plane_cnt = mixer->cfg->ui_num + mixer->cfg->vi_num; - if (mixer->cfg->vi_num == 1 || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { ret = drm_plane_create_alpha_property(&layer->plane); if (ret) { diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index fc22b9a6bd8d..a568e1db1e19 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -57,5 +57,6 @@ struct sun8i_layer; struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, - int index); + int index, + int plane_cnt); #endif /* _SUN8I_VI_LAYER_H_ */ From patchwork Tue Nov 4 18:09:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 668 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 1B3AF344045 for ; Tue, 4 Nov 2025 18:10:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279826; cv=none; b=XR7NeWfTV5IrhJ4qcc9Tuq/iq4NCBCdHun9S/UoZNjz9kSOIX/M/z7jyQyqkaEzIcbzAQNAiy3eCwCpnZCOkqeWQELqEzdKzkMkI4VJNPY81B6hDlKg9OcQjzJpP3/9DXWAOIhpTuWvrUW6MD5Wb3E6Eh1U9LPMH7BkHkdVhP20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279826; c=relaxed/simple; bh=EUxwqvnihoEVCgnylqZr5GEYPPFaWHBMxkmn3kEO75k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KrlMnX+q8SQbM43OLHIQhhlzEzdhPaKixTTd00HgDN4/ZTwpJ6mOp0uo8Dqpye97x5ih+s3Ut0v9C5sjOhmuuvjFcg8r0bWd2A9YUXu/GIsNkLMXKDpAcHb3Q+zs6+E903hfSYm90ahj/QsFXFWsbCEN4PHcuOrDmd9B8GxgKpc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ShbhFVa6; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ShbhFVa6" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-471b80b994bso75235545e9.3 for ; Tue, 04 Nov 2025 10:10:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279822; x=1762884622; 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; bh=XDehL28Q27cYBAOVsoKs4qDMfKKiwU8P48oybsPCNMI=; b=ShbhFVa6qZaUwurUFVzAwmDTXGmUX+Vn+Re/dVZeI8HPJkvACfK5rPprQVx7rXlfvH p/9OC6kEiMoZqUGWzOvpyA0yhMGQcKzGtdrEeinoSL0F2cTlcLa1xN12n7+jXjbirsKM 3tX9O364x5eewElW8j8/7/PTMHLZ6kwDDGvE4BDFnnnkwvETlrSoKEkO2JPyD8QRx5KC qCQlKTBlAHlAc1qsLoi+RpnoKtAO4OsmgK0081xpNpIBptejq09HhJw1F0i9FWN9vUi8 7H3mLdaXW+7ljka+2FX+rSC5J0N+vhwIvQX1RgrNakhPkTd5sPJ1uZdp9780BCPJ4Rlw V5gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279822; x=1762884622; 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=XDehL28Q27cYBAOVsoKs4qDMfKKiwU8P48oybsPCNMI=; b=BTA+tlClXjm032XnmEVzuv6FhTmWicSgaxZxjXVesxNY9684OV6iken9G3aV3PLJrn ZHmtNPH6jms17nyv2d+Xqfav15dszaKmjMX+TecMhPZRjHmu+NZmslg22TgAcO1Ur1/B rmJr5LSQvd8cgT+VqXla1dqkqFnqkVt6V2Y8c58Hc9wP7WRoE7mFICvqmo7Yzvlo43yc knC4dSK8p8/t2JbixQTT//1UcjjnINN0g5kJq3WWpPzM8RWFj6Snc4m1m5xFt6CL/1B7 ZFui00Ry8tdRusY3tBW6H4TXp8EEspYPIalF/qvFpPfH4BF1PUEVjys5XtY76cPXJOlv nkiw== X-Forwarded-Encrypted: i=1; AJvYcCXFzqgOMG54hgDKGyEKUKtC1JGL8YmS0dL/PhouoxsqzP+R305sEOc0iA3RfecZ2ouCqigbeZsac7+cqg==@lists.linux.dev X-Gm-Message-State: AOJu0Ywt9QhGbhsNUYlAolfZyQdNGqutvi3F0QNlk7LJZpoR4it/u2bl 2eV2HbM7IRBRJcckkXdUYUHTHj8covoMcQmj0JlAFxcV5fwuagqpY6Pp X-Gm-Gg: ASbGnct9o18WssP3dx+iGJWA0ebpZMMpSTPcJySWdssgWt3Opfb+25vGgOhrmSjDolT IJ9cYfOu+2fv7cnR1aPqiH49I+t52yIJZdA4Hp2M9NOIaz1E/eprDBeOMtcslDB6dc5jmOS6kVE PfDzUFfNEMM5oUSsqzDXLkoTeLvs4a84QHY20bfFaGZQWAHxkhrEVddOEG6fYCXTLRKg7LwICB+ 8LBAdrV9PGYJ5mZ+QhEohCSt6exsoAWDLhcrDKCtnomq3Kd4jKRr4xkiJFNNDd36JOVbTFSHrQa hh44G3VnviHIK5zFzHJiEqAFMxy71dUJi7tdaeEEgraHAQhH5hOReLg+PhIC/nhasRhbnmvqDt7 fNjCL0jJTSpanPzMeT5Gtug+akmlaU5Ok/K/jV4Vgf4c4dPmpL8MIWSeO6mjtE6lMd0RJmcjUSF p9aW9FPJG5p0x11CXG3ku/1bra46qE X-Google-Smtp-Source: AGHT+IH/l6jplGcrJTw+MVPwop24SPu0Xraro0pVDB1OrwY3EC8U4W4qSO/6idS4O2pFVK6xDaJeuQ== X-Received: by 2002:a05:600c:a00c:b0:477:55ce:f3c8 with SMTP id 5b1f17b1804b1-4775ce13215mr2324825e9.25.1762279822265; Tue, 04 Nov 2025 10:10:22 -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.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:21 -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 16/30] drm/sun4i: ui_layer: use layer struct instead of multiple args Date: Tue, 4 Nov 2025 19:09:28 +0100 Message-ID: <20251104180942.61538-17-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O This change is equally a cleanup (less arguments) and preparation for DE33 separate plane driver. It will introduce additional register space. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 62 +++++++++++++------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 8f6fcdfcf52a..d5b7241acdea 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -25,24 +25,24 @@ #include "sun8i_ui_scaler.h" #include "sun8i_vi_scaler.h" -static void sun8i_ui_layer_disable(struct sun8i_mixer *mixer, - int channel, int overlay) +static void sun8i_ui_layer_disable(struct sun8i_layer *layer) { - u32 ch_base = sun8i_channel_base(mixer, channel); + struct sun8i_mixer *mixer = layer->mixer; + u32 ch_base = sun8i_channel_base(mixer, layer->channel); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), 0); + SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, layer->overlay), 0); } -static void sun8i_ui_layer_update_attributes(struct sun8i_mixer *mixer, - int channel, int overlay, +static void sun8i_ui_layer_update_attributes(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun8i_mixer *mixer = layer->mixer; const struct drm_format_info *fmt; u32 val, ch_base, hw_fmt; - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); fmt = state->fb->format; sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); @@ -54,22 +54,23 @@ static void sun8i_ui_layer_update_attributes(struct sun8i_mixer *mixer, val |= SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN; regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), val); + SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, layer->overlay), val); } -static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, + struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun8i_mixer *mixer = layer->mixer; u32 src_w, src_h, dst_w, dst_h; u32 outsize, insize; u32 hphase, vphase; u32 ch_base; DRM_DEBUG_DRIVER("Updating UI channel %d overlay %d\n", - channel, overlay); + layer->channel, layer->overlay); - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); src_w = drm_rect_width(&state->src) >> 16; src_h = drm_rect_height(&state->src) >> 16; @@ -87,7 +88,7 @@ static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, state->src.x1 >> 16, state->src.y1 >> 16); DRM_DEBUG_DRIVER("Layer source size W: %d H: %d\n", src_w, src_h); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_SIZE(ch_base, overlay), + SUN8I_MIXER_CHAN_UI_LAYER_SIZE(ch_base, layer->overlay), insize); regmap_write(mixer->engine.regs, SUN8I_MIXER_CHAN_UI_OVL_SIZE(ch_base), @@ -102,37 +103,38 @@ static void sun8i_ui_layer_update_coord(struct sun8i_mixer *mixer, int channel, vscale = state->src_h / state->crtc_h; if (mixer->cfg->de_type == SUN8I_MIXER_DE33) { - sun8i_vi_scaler_setup(mixer, channel, src_w, src_h, + sun8i_vi_scaler_setup(mixer, layer->channel, src_w, src_h, dst_w, dst_h, hscale, vscale, hphase, vphase, state->fb->format); - sun8i_vi_scaler_enable(mixer, channel, true); + sun8i_vi_scaler_enable(mixer, layer->channel, true); } else { - sun8i_ui_scaler_setup(mixer, channel, src_w, src_h, + sun8i_ui_scaler_setup(mixer, layer->channel, src_w, src_h, dst_w, dst_h, hscale, vscale, hphase, vphase); - sun8i_ui_scaler_enable(mixer, channel, true); + sun8i_ui_scaler_enable(mixer, layer->channel, true); } } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - sun8i_vi_scaler_enable(mixer, channel, false); + sun8i_vi_scaler_enable(mixer, layer->channel, false); else - sun8i_ui_scaler_enable(mixer, channel, false); + sun8i_ui_scaler_enable(mixer, layer->channel, false); } } -static void sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_ui_layer_update_buffer(struct sun8i_layer *layer, + struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun8i_mixer *mixer = layer->mixer; struct drm_framebuffer *fb = state->fb; struct drm_gem_dma_object *gem; dma_addr_t dma_addr; u32 ch_base; int bpp; - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); /* Get the physical address of the buffer in memory */ gem = drm_fb_dma_get_gem_obj(fb, 0); @@ -150,13 +152,13 @@ static void sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel, /* Set the line width */ DRM_DEBUG_DRIVER("Layer line width: %d bytes\n", fb->pitches[0]); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_PITCH(ch_base, overlay), + SUN8I_MIXER_CHAN_UI_LAYER_PITCH(ch_base, layer->overlay), fb->pitches[0]); DRM_DEBUG_DRIVER("Setting buffer address to %pad\n", &dma_addr); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(ch_base, overlay), + SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(ch_base, layer->overlay), lower_32_bits(dma_addr)); } @@ -208,19 +210,15 @@ static void sun8i_ui_layer_atomic_update(struct drm_plane *plane, struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, plane); struct sun8i_layer *layer = plane_to_sun8i_layer(plane); - struct sun8i_mixer *mixer = layer->mixer; if (!new_state->crtc || !new_state->visible) { - sun8i_ui_layer_disable(mixer, layer->channel, layer->overlay); + sun8i_ui_layer_disable(layer); return; } - sun8i_ui_layer_update_attributes(mixer, layer->channel, - layer->overlay, plane); - sun8i_ui_layer_update_coord(mixer, layer->channel, - layer->overlay, plane); - sun8i_ui_layer_update_buffer(mixer, layer->channel, - layer->overlay, plane); + sun8i_ui_layer_update_attributes(layer, plane); + sun8i_ui_layer_update_coord(layer, plane); + sun8i_ui_layer_update_buffer(layer, plane); } static const struct drm_plane_helper_funcs sun8i_ui_layer_helper_funcs = { From patchwork Tue Nov 4 18:09:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 667 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 79A633446AD for ; Tue, 4 Nov 2025 18:10:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279827; cv=none; b=Py694picuYVSGcwHe6a0WwF7VjFCV2Wqzp8K1z7MEte8lkJYDXjL7aZ6+G6+LyWFSufNJmnUOb0ZfCNuLCLaC+9IOzA5aMc4QykSWxNUgTODlz5WVbSbTmrq6VrAht7OaLOhUmnEiAH2uTdYgtbDbQS/NuBcfAZHYw2MD4YEv7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279827; c=relaxed/simple; bh=GiArxfeMeAL0CBeo7YtFoMvlFTq7fgoVCY+irBH9sNc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oVnjiAOZerZ6mpj2o+8UOpWlSkPH3WVcGnbBhByXtXZbDhdYztwWUVXkZu3B3o+UzLi2NPgi08ksHBCotRMQj5Hu0UUTQ5OzmnE7fqsXi0seQJpzh8y1ZFasxrKAvPIeY+CF3ty+2DOsjjtg5H2dIp4w86bwnY4IpQhUDcH53nE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TY1l+T/E; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TY1l+T/E" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-47754e9cc7fso7992745e9.2 for ; Tue, 04 Nov 2025 10:10:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279823; x=1762884623; 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; bh=s3EV/MxibVMeuKGvb6vWmFsIs3Yu10QpUHip3gqCW54=; b=TY1l+T/EoYoheQSj7fgq0ycot79w4YLEvPBtytjZ5fvm6r1NdDwIzCBL0JQiIB97fb QU6Fhz+hp+tCdCY1cUdJkKn2Fem3RMrBlcUNKWxcGW/Ke3F2/4m6r2rhU7uwahgn8MrR M5W8cr1/ErgXBrvuKqaotAzcuGhTHku+EWxXsBOvLS1neMAz5eeaV3tltxO03b8i3i2g WFDvdJQaQxvdiRROvpWS+YUMgKY0qNVe28oqam3OS4Kkfnlv7h+2ucJYQTB8xCG/2cfr RyPjvzeFFvq1uLMDvYSL/qBYYsKgRV5sqxNJ0yfFRC+5KtnD9Hjg/fW3ayLhBpfWh6+x B8mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279824; x=1762884624; 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=s3EV/MxibVMeuKGvb6vWmFsIs3Yu10QpUHip3gqCW54=; b=Ic3A499Jlbv42W2145HiDp3LVP6xoCUpM19vlDgBaFyuqnP5+SLOe2QXVhQkTxJOgq u2cleIzc5OhLahQRHb2S1v6ozW7tN4TStGTdSFZp7/3BpCfMT2KONRvll3H8pkXZZZVe fzbaLb231vdUgtX46LyrhhJjuhSX2+NxJpQIwG/Y8JpHkMudqje/LgpQI+ZFNKBf62rU HtrJ5V0CT6olXXlerqAovtTr8OPS91mWGPUy3JcDVBBiU99MT/5B/AIzq0mdhG06DeA1 QnbPsYoG/o0FqfwrzXEIkyakBmXeG5OptuZwfEoXc1h1RQAgG62YOCbVjdUnXaxpcr6s 7+6g== X-Forwarded-Encrypted: i=1; AJvYcCWyQq66xPivmW9pfgEARR2bV2RjDuF+O8GW/cmqNJH7lBIg3siMfxdm7faNiGUcMV1o9O3ChRScZ+UBcg==@lists.linux.dev X-Gm-Message-State: AOJu0YygACnJJ+HWqmAlhSLtvqN1NsuBOE2jv1eTE7U7FW5bRTk3WDHr EoHSVpnQVfziSoYySSgTC9O/7Ox4EE2MlXbLbBVEIPFFebmwssUBP4yH X-Gm-Gg: ASbGncsPoQ8bq4dbHVZUEAkjO3wjt+v65RosPNS/fvY7mK68XWQ+BjwtNKk89ppDXM2 hGisK8vd0tz/AbCg3vDrVP8+J3Dj++5F3pQD2VT2pYydcERDUnqP1vOP2UWi/QInY0Ol6/c4hYp Yv1QucKS2RGHqXbxxT3WtM5hsN89ut2HCLh6W4J3Hd3RSO4SJIbpPkmCW8QNoVxvc8k0wINeESy yE/tSHP654pDChV8RpmOQzXMUyTNXc0ylemlfPkYTyyxFOwHIdHtKuje92ujtEPL4LhZxmCGf9T crVe1toFW2flqQvMJp07DvuYpAgtqcg/J7FT7dlj7/Ckmy+/vE4rIkLQPJZ1My7+jW7ET2MSuts 5fAB0Bz5m/YpHdqrRsSmxCDvZHMoeG1ZPF1qS6W26DQi/WqU9DXHIazoZIbcM1NGDo6FaJCyXE6 FQNaNgmqi9eL9lfT/9M7SSbosVFkDQ X-Google-Smtp-Source: AGHT+IG3T52xUW38yiQP+ctGCFR1rUHrIm69DPF54UH5khemOeYMj6ikOX9GGLBlfNHgLEUvN0EOGw== X-Received: by 2002:a05:600c:6286:b0:477:569c:34e9 with SMTP id 5b1f17b1804b1-4775ce61516mr2003715e9.23.1762279823483; Tue, 04 Nov 2025 10:10:23 -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.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:23 -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 17/30] drm/sun4i: vi_layer: use layer struct instead of multiple args Date: Tue, 4 Nov 2025 19:09:29 +0100 Message-ID: <20251104180942.61538-18-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O This change is equally a cleanup (less arguments) and preparation for DE33 separate plane driver. It will introduce additional register space. No functional changes. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 58 +++++++++++++------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 805db4ea714b..ba9c03f04f03 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -18,24 +18,24 @@ #include "sun8i_vi_layer.h" #include "sun8i_vi_scaler.h" -static void sun8i_vi_layer_disable(struct sun8i_mixer *mixer, - int channel, int overlay) +static void sun8i_vi_layer_disable(struct sun8i_layer *layer) { - u32 ch_base = sun8i_channel_base(mixer, channel); + struct sun8i_mixer *mixer = layer->mixer; + u32 ch_base = sun8i_channel_base(mixer, layer->channel); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), 0); + SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), 0); } -static void sun8i_vi_layer_update_attributes(struct sun8i_mixer *mixer, - int channel, int overlay, +static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun8i_mixer *mixer = layer->mixer; const struct drm_format_info *fmt; u32 val, ch_base, hw_fmt; - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); fmt = state->fb->format; sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); @@ -55,14 +55,15 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_mixer *mixer, } regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), val); + SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); } -static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, + struct drm_plane *plane) { struct drm_plane_state *state = plane->state; const struct drm_format_info *format = state->fb->format; + struct sun8i_mixer *mixer = layer->mixer; u32 src_w, src_h, dst_w, dst_h; u32 outsize, insize; u32 hphase, vphase; @@ -72,9 +73,9 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, u32 ch_base; DRM_DEBUG_DRIVER("Updating VI channel %d overlay %d\n", - channel, overlay); + layer->channel, layer->overlay); - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); src_w = drm_rect_width(&state->src) >> 16; src_h = drm_rect_height(&state->src) >> 16; @@ -112,7 +113,7 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, (state->src.y1 >> 16) & ~(format->vsub - 1)); DRM_DEBUG_DRIVER("Layer source size W: %d H: %d\n", src_w, src_h); regmap_write(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_SIZE(ch_base, overlay), + SUN8I_MIXER_CHAN_VI_LAYER_SIZE(ch_base, layer->overlay), insize); regmap_write(mixer->engine.regs, SUN8I_MIXER_CHAN_VI_OVL_SIZE(ch_base), @@ -161,13 +162,13 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, hscale = (src_w << 16) / dst_w; vscale = (src_h << 16) / dst_h; - sun8i_vi_scaler_setup(mixer, channel, src_w, src_h, dst_w, + sun8i_vi_scaler_setup(mixer, layer->channel, src_w, src_h, dst_w, dst_h, hscale, vscale, hphase, vphase, format); - sun8i_vi_scaler_enable(mixer, channel, true); + sun8i_vi_scaler_enable(mixer, layer->channel, true); } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); - sun8i_vi_scaler_enable(mixer, channel, false); + sun8i_vi_scaler_enable(mixer, layer->channel, false); } regmap_write(mixer->engine.regs, @@ -188,10 +189,11 @@ static void sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, SUN8I_MIXER_CHAN_VI_DS_M(vm)); } -static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, - int overlay, struct drm_plane *plane) +static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, + struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun8i_mixer *mixer = layer->mixer; struct drm_framebuffer *fb = state->fb; const struct drm_format_info *format = fb->format; struct drm_gem_dma_object *gem; @@ -200,7 +202,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, u32 ch_base; int i; - ch_base = sun8i_channel_base(mixer, channel); + ch_base = sun8i_channel_base(mixer, layer->channel); /* Adjust x and y to be dividable by subsampling factor */ src_x = (state->src.x1 >> 16) & ~(format->hsub - 1); @@ -232,7 +234,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, i + 1, fb->pitches[i]); regmap_write(mixer->engine.regs, SUN8I_MIXER_CHAN_VI_LAYER_PITCH(ch_base, - overlay, i), + layer->overlay, i), fb->pitches[i]); DRM_DEBUG_DRIVER("Setting %d. buffer address to %pad\n", @@ -240,7 +242,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel, regmap_write(mixer->engine.regs, SUN8I_MIXER_CHAN_VI_LAYER_TOP_LADDR(ch_base, - overlay, i), + layer->overlay, i), lower_32_bits(dma_addr)); } } @@ -292,20 +294,16 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, plane); struct sun8i_layer *layer = plane_to_sun8i_layer(plane); - struct sun8i_mixer *mixer = layer->mixer; if (!new_state->crtc || !new_state->visible) { - sun8i_vi_layer_disable(mixer, layer->channel, layer->overlay); + sun8i_vi_layer_disable(layer); return; } - sun8i_vi_layer_update_attributes(mixer, layer->channel, - layer->overlay, plane); - sun8i_vi_layer_update_coord(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); + sun8i_vi_layer_update_attributes(layer, plane); + sun8i_vi_layer_update_coord(layer, plane); + sun8i_csc_config(layer->mixer, layer->channel, new_state); + sun8i_vi_layer_update_buffer(layer, plane); } static const struct drm_plane_helper_funcs sun8i_vi_layer_helper_funcs = { From patchwork Tue Nov 4 18:09:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 665 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 9B284344045 for ; Tue, 4 Nov 2025 18:10:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279830; cv=none; b=Og3cu38YLm70N6dM5QC5EFHnEcFtzoAu67qPwGeYxLgFTi3fPK3MIPjqb+1jIQ7ztDTxobslXH7PcyFjNRnEdVd8oqpBGuI/EvH/7i9ry/wgesal8a01SUCGFSeY47rnzMBd8w23CXR8Jao7ioLXRYRhn5fBLg6eVyT65xjrpAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279830; c=relaxed/simple; bh=dY6ZcTDLzk7IJaQR+fODPFvXrCrNpXJ/qB5JCNXGZaE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HJqPbXeUWeZuFXk+mWItoAsB2V8rjw2gip3iSlkQ5Tbf9D86CsODKMZYbtN8nputIEWUSDbUJCmdkxWG9ufsTXppEcrGB7Cu8aOP15mgY9fF7TOtoxNwKMaDl53rgaWsLBiwr66Avs4os+mcvyuTkGJ2nge5a/xuJlc5cftLqME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PLYRRpZR; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PLYRRpZR" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-47754e9cc7fso7992915e9.2 for ; Tue, 04 Nov 2025 10:10:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279825; x=1762884625; 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; bh=4tlXBSuCi9KYqEnYaWJPbYjWr/O8PttsygtENhT9s58=; b=PLYRRpZRKTb8aaAhyTlcAGDf2k4VprtTEJNqfX9Nrn+rCNdLm2Wi9NSKwbUfO7xqPF GkiIpEG9kW4DyCyQJg82tvRPUGjfDQMYkzjBwt2ptN/oy39GyMVCq2I2Ib5r90JaQfNR reF7bAtKb0iVTa0QsN/f2UFARaw762nh8XL8MhlfflklgZmE6Sf9T+u7m/+Eh7hkZkmN NFu85LggUzac4AT38ZdHR2tFDvV6wu5R0idP/5m3KGjd5+y1GgUubt9legDPWoj+r5a6 FYP7PXBletPZIIEljW6U5VLIFmoIbtLclsEapj4zR31rptSRZh687/tIz2dA3A7LfcVr 9f0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279825; x=1762884625; 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=4tlXBSuCi9KYqEnYaWJPbYjWr/O8PttsygtENhT9s58=; b=vmYJ1VGrkblDcN/kXuivPrSgXmhxW6Vrs3x2DsgcdH30fBhjN30Htu2BuZ6uiZFIy3 LgC4GZJTUUh2PBla6+7a6jCDuVV+fnLjhrekkTGcxOGpIUXv/M5OoBs8O1gdpxX385/A OQ+gqSjKebPiJQ2jmu4S9GU84edc7uOKd0RhDaVG/flzhfWFtY6+p6qvSzDPa2Hr4oQC p/wtRq+FAmyi1MvSOWNUtL+Ghozq0UgzecZ+uk2Cu+3aRY1ek4zP3hJhAsaa8FBdFYfC gWaRShMkaJb5Itg0+CZ45T+OKtmkEB8bvvDf6nCnut6+PFmQ9REbg8aqEHsezpAXg9ul BSjw== X-Forwarded-Encrypted: i=1; AJvYcCWZMCkHWGh0zcDCnhiMWmbzS7Ry+uvy2xdjkmATp0hVPWm/ZBCfhD0qqAAjJBSS/wAPnX/yZEP2TptXpg==@lists.linux.dev X-Gm-Message-State: AOJu0YyMDV83VpNWvfV2Y8UyBwZOpS5N8WA0ueghyZKzIgOXrvYQgm3l 6Aqe8ltPma7b0aDh8G/Hhq8Xj9Afq+eUmQCfuQdu0Nll0Hy7BeJorLyO X-Gm-Gg: ASbGncsIjUnYB2g/vA2/npyOXXZ4e/hjnhjX7/q+9fcdplXHI5Uf7TOHQatuuP9V2rC ijPE75X9+QyRLPziHaIXebHBsH9Q2fE5lyze3avg3vLd6gZbmJJKP0syeOTJc2DOb1Wd0Ioldj2 QguE9FnURWLZPkgq927qflsfE6GCVdu1fjUhlqlkpTeW2aFVp0c35nhyjlr2hz/4Gn/ed/9+KQk c/dB7t2TpBIP8NtRqXlkuCnpg2EE/tEU7ptmStigGvKXqPbjfeH85+9PB91Df7gTIZptzGV86+U rsCFxHum3W1pqDwsaE8aJknFcl08AMnpMz00XVyNzAPlqjOQscAlStCNRnUYYqUYUFYzTCRz2LQ s/k0PBbHED/sVOG97OvIDE21kSQi3j705cKCxpcHLsqSDSg+BAqUEHGLmWuxDS6RIQ7zP+1OJjh VluIXiSNR3QPdE3yl3Pg== X-Google-Smtp-Source: AGHT+IHm1TAQjaSzwnbLWrmSeHCsVmHtk5JoxXFn6C5ye+q9ij6rKyMSLmT96AnudZeM+B1bys7ikA== X-Received: by 2002:a05:600c:34d5:b0:471:1306:aa0f with SMTP id 5b1f17b1804b1-4775ce8df34mr2008325e9.38.1762279824672; Tue, 04 Nov 2025 10:10:24 -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.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:24 -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 18/30] drm/sun4i: ui_scaler: use layer instead of mixer for args Date: Tue, 4 Nov 2025 19:09:30 +0100 Message-ID: <20251104180942.61538-19-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Layer related peripherals should take layer struct as a input. This looks cleaner and also necessary for proper DE33 support later. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 9 ++++----- drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 14 ++++++++------ drivers/gpu/drm/sun4i/sun8i_ui_scaler.h | 4 ++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index d5b7241acdea..9b938e3dae9c 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -109,17 +109,16 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, state->fb->format); sun8i_vi_scaler_enable(mixer, layer->channel, true); } else { - sun8i_ui_scaler_setup(mixer, layer->channel, src_w, src_h, - dst_w, dst_h, hscale, vscale, - hphase, vphase); - sun8i_ui_scaler_enable(mixer, layer->channel, true); + sun8i_ui_scaler_setup(layer, src_w, src_h, dst_w, dst_h, + hscale, vscale, hphase, vphase); + sun8i_ui_scaler_enable(layer, true); } } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); if (mixer->cfg->de_type == SUN8I_MIXER_DE33) sun8i_vi_scaler_enable(mixer, layer->channel, false); else - sun8i_ui_scaler_enable(mixer, layer->channel, false); + sun8i_ui_scaler_enable(layer, false); } } diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index 8b7a58e27517..fcd72c4fd49a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -127,14 +127,15 @@ static int sun8i_ui_scaler_coef_index(unsigned int step) } } -void sun8i_ui_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable) +void sun8i_ui_scaler_enable(struct sun8i_layer *layer, bool enable) { + struct sun8i_mixer *mixer = layer->mixer; u32 val, base; - if (WARN_ON(layer < mixer->cfg->vi_num)) + if (WARN_ON(layer->channel < mixer->cfg->vi_num)) return; - base = sun8i_ui_scaler_base(mixer, layer); + base = sun8i_ui_scaler_base(mixer, layer->channel); if (enable) val = SUN8I_SCALER_GSU_CTRL_EN | @@ -145,18 +146,19 @@ void sun8i_ui_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable) regmap_write(mixer->engine.regs, SUN8I_SCALER_GSU_CTRL(base), val); } -void sun8i_ui_scaler_setup(struct sun8i_mixer *mixer, int layer, +void sun8i_ui_scaler_setup(struct sun8i_layer *layer, u32 src_w, u32 src_h, u32 dst_w, u32 dst_h, u32 hscale, u32 vscale, u32 hphase, u32 vphase) { + struct sun8i_mixer *mixer = layer->mixer; u32 insize, outsize; int i, offset; u32 base; - if (WARN_ON(layer < mixer->cfg->vi_num)) + if (WARN_ON(layer->channel < mixer->cfg->vi_num)) return; - base = sun8i_ui_scaler_base(mixer, layer); + base = sun8i_ui_scaler_base(mixer, layer->channel); hphase <<= SUN8I_UI_SCALER_PHASE_FRAC - 16; vphase <<= SUN8I_UI_SCALER_PHASE_FRAC - 16; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.h b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.h index 1ef4bd6f2718..872d88a58e7e 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.h @@ -35,8 +35,8 @@ #define SUN8I_SCALER_GSU_CTRL_EN BIT(0) #define SUN8I_SCALER_GSU_CTRL_COEFF_RDY BIT(4) -void sun8i_ui_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable); -void sun8i_ui_scaler_setup(struct sun8i_mixer *mixer, int layer, +void sun8i_ui_scaler_enable(struct sun8i_layer *layer, bool enable); +void sun8i_ui_scaler_setup(struct sun8i_layer *layer, u32 src_w, u32 src_h, u32 dst_w, u32 dst_h, u32 hscale, u32 vscale, u32 hphase, u32 vphase); From patchwork Tue Nov 4 18:09:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 666 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 F2AFC3451DA for ; Tue, 4 Nov 2025 18:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279830; cv=none; b=p4RSVq9cGX5ZMpHKf8roo/XuBPWm73cJc62hL75/b3rN2dTrwqEZfTu3Ya7qZGGQwj9F1RqHdhciCIB+IGvxqGTWeJv7akImdWl2h0H/K5gUCkaCxlejyYtQQT47H4LuuIIVhB2V1xz9cejyXNSrFPBHekXH4edYfymh9tKi50Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279830; c=relaxed/simple; bh=orhvpCnZQU+YiM6vENmZY8xT+JzEBx7B3ZDTqYXr+XA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U1xBKrlBGVM7kcMFDghsrZO/FM4OoMu55EhJpDjrB6XN7EDH8w+aDdO4JLCjHxYNg3W3hhTx7fyBZTbzP9+nw4sMUJKa5+RjsTVZlghueQcIpP0DqDEZT8rQjW0UGxz8rxv3JvLFc3L9YPGS7mPlKVmJa2vZ8Rg4Zk/diGUzAIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=f0CADxjv; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="f0CADxjv" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4775638d819so5232415e9.1 for ; Tue, 04 Nov 2025 10:10:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279826; x=1762884626; 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; bh=QXvWsmt1Dzl8GlEdRb8uf55RYf0uTWm1vCPWOIYaG+k=; b=f0CADxjvEerlO3JQQkHLet4GeG7mPU9C8p1UpO3/OKb9xnPQQmJWuueA40HrMzdYtb 7wdmUVJnn4yNnphKxNNXPXlrtkSABQmb81ZZ5h7iomFSairfHeHSbUyffBVQdX4ngoQB cunz3u0g5zC+mtCSrdv8L/gOV+9sTV3OP08jAuJ0DKJJu76l0e7i0pugUrn/zKoenfsi wj/PYndhDxPfcz5zM4mvS+WZIo2D1O3kdVHhpZ8MklmeH5bS5Gnf9H7F3lWrI35Rsjng kwOUB1j2/PDTMYhxBr9HqDS/OsZsu+LGubsoTct4Ajg/cQ2IGsFH28eZy5KmMvRBQFeu znZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279826; x=1762884626; 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=QXvWsmt1Dzl8GlEdRb8uf55RYf0uTWm1vCPWOIYaG+k=; b=lfrQup3iGOGW+k1e9MGZcDN146nql59yWm9pugTVFS/H7QbTiwSRZcUnlF1YJxG9LT Hg3R7d+xkx82lttGNbOMECt+AvQfHEDF6/KTeyRES8k3ybKkrXj4cMBXUxFFGLdosdiq f838pQTSBuN5C4P71Dq9bOcnod/EIrP4WJ4CdpU9hV3yN7HhyMs2rBvFts9QFgaEUpUo ytpL45tBHaRBcHAXSxyzmibztZmUxH7M3ZyJQe+34kSWqou+jizIz2FaLXI/MKwgXO8o tEufjqvEvLZGlEXbG27EuJc9tqJbuVfwANDyV7hU8j7tfi5EaMYUUUYUi29sWYcouWIa n9dg== X-Forwarded-Encrypted: i=1; AJvYcCXkRKfvN3YTuK7PDEfH6Xp0YiIDXe8amMG7bcnddk0TWGFwxfpGPuO4blMfs5KNJRZDR1EuQCuW7gblVQ==@lists.linux.dev X-Gm-Message-State: AOJu0YwyuKRoaYvNI8cY/HMK+xO73ht/HnWdZ9P3+9Ugt/H7agrqtJnS zItTiegpZUTbzlhwshptzPwqpsfgLXlUclO6H9fsZts/kmM0GUFXI4oR X-Gm-Gg: ASbGncuMaxipw8R+VIEd1SKeB0DTIHFlj8lR6qkavhKurEBjMAi0nVtbpZybIldhRdM OM82ntbtbdW4sQKWQc3qCwWV9piwu2DlNoaUqHusGqtcviORvlsmoGDet2pWCjdeATXcgfbmXeg nGUxL2mC3UKW7pb4wB9k2hISMHGDi655759Ud21sb1zwzMuypAtbAkN+kQe3tVUAsAzywWcQDVY LXe5zMQWFE18pPQdYxd32Oi/kzA9H5zQFMTcwiLeVvtfRIh5Fw9heIXXUdy2oPgIQASy99uTU7d AXmVGECnWYVWbf37jbdMXz6ZWYG8K4U5Y6rgIJyil7MmzjVJO5HQhwAf+ih/YcbhodOZcPYM5Zd OyUUPG8qutwMFnHhNZnSAQK+BjVMvZJtaldvWzPhgdL5JwPQ4ixUY+Z3YHjj0XcRs+t2wasSfY6 /razyaSJPqbw4nfzwH0A== X-Google-Smtp-Source: AGHT+IFE3mxZcmB3xFrOwCz13wK7MeGXCTbyLCsueT8YPunx796HFToC9lCdkfkmFYbtx1fnK13ZUA== X-Received: by 2002:a05:600c:46ce:b0:46e:74cc:42b8 with SMTP id 5b1f17b1804b1-4775cdcfbb5mr2723405e9.17.1762279825932; Tue, 04 Nov 2025 10:10:25 -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.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:25 -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 19/30] drm/sun4i: vi_scaler: use layer instead of mixer for args Date: Tue, 4 Nov 2025 19:09:31 +0100 Message-ID: <20251104180942.61538-20-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Layer related peripherals should take layer struct as a input. This looks cleaner and also necessary for proper DE33 support later. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 9 ++++----- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 9 ++++----- drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 10 ++++++---- drivers/gpu/drm/sun4i/sun8i_vi_scaler.h | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 9b938e3dae9c..5167c9d7b9c0 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -103,11 +103,10 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, vscale = state->src_h / state->crtc_h; if (mixer->cfg->de_type == SUN8I_MIXER_DE33) { - sun8i_vi_scaler_setup(mixer, layer->channel, src_w, src_h, - dst_w, dst_h, hscale, vscale, - hphase, vphase, + sun8i_vi_scaler_setup(layer, src_w, src_h, dst_w, dst_h, + hscale, vscale, hphase, vphase, state->fb->format); - sun8i_vi_scaler_enable(mixer, layer->channel, true); + sun8i_vi_scaler_enable(layer, true); } else { sun8i_ui_scaler_setup(layer, src_w, src_h, dst_w, dst_h, hscale, vscale, hphase, vphase); @@ -116,7 +115,7 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - sun8i_vi_scaler_enable(mixer, layer->channel, false); + sun8i_vi_scaler_enable(layer, false); else sun8i_ui_scaler_enable(layer, false); } diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index ba9c03f04f03..ce71625fa06f 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -162,13 +162,12 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, hscale = (src_w << 16) / dst_w; vscale = (src_h << 16) / dst_h; - sun8i_vi_scaler_setup(mixer, layer->channel, src_w, src_h, dst_w, - dst_h, hscale, vscale, hphase, vphase, - format); - sun8i_vi_scaler_enable(mixer, layer->channel, true); + sun8i_vi_scaler_setup(layer, src_w, src_h, dst_w, dst_h, + hscale, vscale, hphase, vphase, format); + sun8i_vi_scaler_enable(layer, true); } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); - sun8i_vi_scaler_enable(mixer, layer->channel, false); + sun8i_vi_scaler_enable(layer, false); } regmap_write(mixer->engine.regs, diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c index 82df6244af88..a76677a1649f 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c @@ -909,11 +909,12 @@ static void sun8i_vi_scaler_set_coeff(struct regmap *map, u32 base, } } -void sun8i_vi_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable) +void sun8i_vi_scaler_enable(struct sun8i_layer *layer, bool enable) { + struct sun8i_mixer *mixer = layer->mixer; u32 val, base; - base = sun8i_vi_scaler_base(mixer, layer); + base = sun8i_vi_scaler_base(mixer, layer->channel); if (enable) val = SUN8I_SCALER_VSU_CTRL_EN | @@ -925,16 +926,17 @@ void sun8i_vi_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable) SUN8I_SCALER_VSU_CTRL(base), val); } -void sun8i_vi_scaler_setup(struct sun8i_mixer *mixer, int layer, +void sun8i_vi_scaler_setup(struct sun8i_layer *layer, u32 src_w, u32 src_h, u32 dst_w, u32 dst_h, u32 hscale, u32 vscale, u32 hphase, u32 vphase, const struct drm_format_info *format) { + struct sun8i_mixer *mixer = layer->mixer; u32 chphase, cvphase; u32 insize, outsize; u32 base; - base = sun8i_vi_scaler_base(mixer, layer); + base = sun8i_vi_scaler_base(mixer, layer->channel); hphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16; vphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h index 68f6593b369a..73eecc4d1b1d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h @@ -69,8 +69,8 @@ #define SUN50I_SCALER_VSU_ANGLE_SHIFT(x) (((x) << 16) & 0xF) #define SUN50I_SCALER_VSU_ANGLE_OFFSET(x) ((x) & 0xFF) -void sun8i_vi_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable); -void sun8i_vi_scaler_setup(struct sun8i_mixer *mixer, int layer, +void sun8i_vi_scaler_enable(struct sun8i_layer *layer, bool enable); +void sun8i_vi_scaler_setup(struct sun8i_layer *layer, u32 src_w, u32 src_h, u32 dst_w, u32 dst_h, u32 hscale, u32 vscale, u32 hphase, u32 vphase, const struct drm_format_info *format); From patchwork Tue Nov 4 18:09:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 663 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 C67D0345CA1 for ; Tue, 4 Nov 2025 18:10:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279832; cv=none; b=CJS+A+tuvFuv4T2SXboBDSRxYmptDbfmeDRRPYrrJVA6qUCdl2y4YMy/Iov9iB9dF7MXBk25kyUYBMKTf+SIgNcvEAoAOVb42v4TMru9UYq2VbE+ls+H+SDD2X42+HfpmGqgU3irNZPJZS9kZphpsnzCpWkfDW3KQrPPj90H1BU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279832; c=relaxed/simple; bh=JYeyE7LbbFjoG+88syiaKUyvUvp80MIbf6YBKHpoLyc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X+7IotwaBiZJnn5U8Wb9xPU9IAcxAYUvkAuC/rYLtAxXflBlVEIPuVn5yk+zaUQXb9A9EPDjjwTQuudoqoBHTvpAumfP/CxgAAccWH+0X4HdOb03zMrfld+YeMF7VIBTtRh4YiNcN4rLSKM5E2TC9YbYSejNRazViZzFC/UaI3U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AF5I9a6/; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AF5I9a6/" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-47756a07b34so5041975e9.2 for ; Tue, 04 Nov 2025 10:10:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279827; x=1762884627; 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; bh=E9e8rf9e6LHkBiOZlGLaNm4D4EkbWbTfTmdYI52rOx4=; b=AF5I9a6/8g0pt2uP0Z/WBfvQ4DiZBYdJvdrP1f9vL4XxGW+y5R3RDm/+g0bPPsq29Y mffDU9LX5MBIlm9sNyAp1C8jpciK7sp5MyIs4xIW/F3kvB6auPZzKwO6qLApYlqxdUPT EnjR+Js1SZzu43qcF45pWkun9vTzsi99ywDzjnp/cr9PS6IEweB5q/3nlORuhNIuFJiC +auH65ZdwF7S4nSaqI+Qi96iJFr+9szMnMcRRkJuNprqUqc04Fl7eLP8E2MOi4BQnain mKTVrMfDxCCXWjVTZ7yji6ewP62xkk0N4IxYEtlxyXi/PmWdWn1rfNvoLY/lWSzW/nby SRGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279827; x=1762884627; 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=E9e8rf9e6LHkBiOZlGLaNm4D4EkbWbTfTmdYI52rOx4=; b=MFsBW0yLqcLGv+SXqUENE0hw0ouYzDR9AqMU1Rf/Rirr5H8frmAUQ/5O6QUh6eKcf5 iPACxHC/HYwtQ5yLeWJJ7F82qVXYMXjYmCfjvR3H+6+Vg6xVZj07+Hop03Miuw3TwT3w 56N38KsL60M7nnzlXitaF+F+t9IqBdJW5dd0iQ6voDmOMj3Zvga185lkony9FR7bAFYy Z7mtPEIy5/voloWwnAJ/mdGS0NO59O7h13iHKvXHnd2jhGy6cuACZBRzOvIkv78C+DMy SkqnWtWy3yzXjWonZrLMy3zZO6ApXxXthigNg1Fd0AsufS+WUpPy6hoJqSvaTIYjnqlx co7A== X-Forwarded-Encrypted: i=1; AJvYcCWLRHAynNVh5hA4VPd/5iAitBDwvbuPRsp30idQ2kYD16CqKzKbDUii807Vuw8MEf+0AV5W4mVuhzSigg==@lists.linux.dev X-Gm-Message-State: AOJu0YyxGvcmvyt/0yqepcQOgFiooOYKNx6tCn7apw39pBZZW3eczoRy qg+h7w/bhLk7y41nZCCJVFQnpI173Knc/MQ4cdAVKdq4wZMN8nYiG9TG X-Gm-Gg: ASbGnct0NR1rIGi3betTEzZd8kd13Y5MrBRb+ZVkROeicoJa9T8LSTtoDgIbskL77fF DjG9I8pizX9F9LlR+mH0GA5x0oZVHE8r66kHRiIMDcMVOBWai9uAsVDTMxTYKnSHT9WyBelv6G+ TguZPgzpirKmVod8AjxL8JwI70W68+9WJB0eY5iAqn9QypqWhWx9ScBmDRRVNywnu1b9VB4KCNs ide6Hriv6nwQW9CDgjUEEzdIBBTAeail+CGjdY+N2/QQam++ZH2p53VLDzM67pLgrMqKKBO+1ti ZJXvqgKfbYpw56umPHtlnU92mCMyYw9K38/tJNMMskA6htf01fwzJOYMUUb9+TdswPtQf2Ceaii Y7vxV8BZNurM2HIVxXqBwFuf9qh+LyCPbb/XR1rXbCT6wLgEDMuj4QKXak2o9kibPwotah00F6h coKlgr4YcLq5b9rqGL8w== X-Google-Smtp-Source: AGHT+IELopkSWYIIl/VfNpl6r5Rq+Y8BoYl0VoNX5IZB/3eyJjkFq08R9m6g4B9BfaHixSE6+v7NTA== X-Received: by 2002:a05:600c:4f0d:b0:476:84e9:b571 with SMTP id 5b1f17b1804b1-4775cdc0ed2mr2735205e9.14.1762279827150; Tue, 04 Nov 2025 10:10:27 -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.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:26 -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 20/30] drm/sun4i: layers: Make regmap for layers configurable Date: Tue, 4 Nov 2025 19:09:32 +0100 Message-ID: <20251104180942.61538-21-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Till DE33, there were no reason to decouple registers from mixer. However, with future new plane driver, this will be necessary. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 7 ++++-- drivers/gpu/drm/sun4i/sun8i_mixer.h | 1 + drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 12 ++++++---- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 1 + drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 16 ++++++------- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 22 ++++++++++-------- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 1 + drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 31 ++++++++++++------------- 8 files changed, 50 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 18dd998364ae..d2b7fc552a76 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -331,7 +331,9 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; - layer = sun8i_vi_layer_init_one(drm, mixer, type, i, plane_cnt); + layer = sun8i_vi_layer_init_one(drm, mixer, type, + mixer->engine.regs, i, + plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize overlay plane\n"); @@ -350,7 +352,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; - layer = sun8i_ui_layer_init_one(drm, mixer, type, index, + layer = sun8i_ui_layer_init_one(drm, mixer, type, + mixer->engine.regs, index, plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index b5badfa2c997..2e3689008b50 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -214,6 +214,7 @@ struct sun8i_layer { int type; int channel; int overlay; + struct regmap *regs; }; static inline struct sun8i_layer * diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index 5167c9d7b9c0..dd6cb09c2c01 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -53,7 +53,7 @@ static void sun8i_ui_layer_update_attributes(struct sun8i_layer *layer, val |= hw_fmt << SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET; val |= SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN; - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, layer->overlay), val); } @@ -87,10 +87,10 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, DRM_DEBUG_DRIVER("Layer source offset X: %d Y: %d\n", state->src.x1 >> 16, state->src.y1 >> 16); DRM_DEBUG_DRIVER("Layer source size W: %d H: %d\n", src_w, src_h); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_LAYER_SIZE(ch_base, layer->overlay), insize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_OVL_SIZE(ch_base), insize); @@ -149,13 +149,13 @@ static void sun8i_ui_layer_update_buffer(struct sun8i_layer *layer, /* Set the line width */ DRM_DEBUG_DRIVER("Layer line width: %d bytes\n", fb->pitches[0]); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_LAYER_PITCH(ch_base, layer->overlay), fb->pitches[0]); DRM_DEBUG_DRIVER("Setting buffer address to %pad\n", &dma_addr); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(ch_base, layer->overlay), lower_32_bits(dma_addr)); } @@ -264,6 +264,7 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, + struct regmap *regs, int index, int plane_cnt) { @@ -278,6 +279,7 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, layer->type = SUN8I_LAYER_TYPE_UI; layer->channel = index; layer->overlay = 0; + layer->regs = regs; /* possible crtcs are set later */ ret = drm_universal_plane_init(drm, &layer->plane, 0, diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index 0613b34d36e0..e0b2cfa02749 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -52,6 +52,7 @@ struct sun8i_layer; struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, + struct regmap *regs, int index, int plane_cnt); #endif /* _SUN8I_UI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index fcd72c4fd49a..2fc54dc20307 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -143,7 +143,7 @@ void sun8i_ui_scaler_enable(struct sun8i_layer *layer, bool enable) else val = 0; - regmap_write(mixer->engine.regs, SUN8I_SCALER_GSU_CTRL(base), val); + regmap_write(layer->regs, SUN8I_SCALER_GSU_CTRL(base), val); } void sun8i_ui_scaler_setup(struct sun8i_layer *layer, @@ -168,22 +168,22 @@ void sun8i_ui_scaler_setup(struct sun8i_layer *layer, insize = SUN8I_UI_SCALER_SIZE(src_w, src_h); outsize = SUN8I_UI_SCALER_SIZE(dst_w, dst_h); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_OUTSIZE(base), outsize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_INSIZE(base), insize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_HSTEP(base), hscale); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_VSTEP(base), vscale); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_HPHASE(base), hphase); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_VPHASE(base), vphase); offset = sun8i_ui_scaler_coef_index(hscale) * SUN8I_UI_SCALER_COEFF_COUNT; for (i = 0; i < SUN8I_UI_SCALER_COEFF_COUNT; i++) - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_GSU_HCOEFF(base, i), lan2coefftab16[offset + i]); } diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index ce71625fa06f..2290c983e177 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -49,12 +49,12 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_PIXEL : SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_COMBINED; } else if (mixer->cfg->vi_num == 1) { - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, SUN8I_MIXER_FCC_GLOBAL_ALPHA(state->alpha >> 8)); } - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); } @@ -112,10 +112,10 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, (state->src.x1 >> 16) & ~(format->hsub - 1), (state->src.y1 >> 16) & ~(format->vsub - 1)); DRM_DEBUG_DRIVER("Layer source size W: %d H: %d\n", src_w, src_h); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_SIZE(ch_base, layer->overlay), insize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_OVL_SIZE(ch_base), insize); @@ -170,19 +170,19 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, sun8i_vi_scaler_enable(layer, false); } - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_HDS_Y(ch_base), SUN8I_MIXER_CHAN_VI_DS_N(hn) | SUN8I_MIXER_CHAN_VI_DS_M(hm)); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_HDS_UV(ch_base), SUN8I_MIXER_CHAN_VI_DS_N(hn) | SUN8I_MIXER_CHAN_VI_DS_M(hm)); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_VDS_Y(ch_base), SUN8I_MIXER_CHAN_VI_DS_N(vn) | SUN8I_MIXER_CHAN_VI_DS_M(vm)); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_VDS_UV(ch_base), SUN8I_MIXER_CHAN_VI_DS_N(vn) | SUN8I_MIXER_CHAN_VI_DS_M(vm)); @@ -231,7 +231,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, /* Set the line width */ DRM_DEBUG_DRIVER("Layer %d. line width: %d bytes\n", i + 1, fb->pitches[i]); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_PITCH(ch_base, layer->overlay, i), fb->pitches[i]); @@ -239,7 +239,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, DRM_DEBUG_DRIVER("Setting %d. buffer address to %pad\n", i + 1, &dma_addr); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_TOP_LADDR(ch_base, layer->overlay, i), lower_32_bits(dma_addr)); @@ -410,6 +410,7 @@ static const uint64_t sun8i_layer_modifiers[] = { struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, + struct regmap *regs, int index, int plane_cnt) { @@ -427,6 +428,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, layer->type = SUN8I_LAYER_TYPE_VI; layer->channel = index; layer->overlay = 0; + layer->regs = regs; if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { formats = sun8i_vi_layer_de3_formats; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index a568e1db1e19..70766d752fa6 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -57,6 +57,7 @@ struct sun8i_layer; struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, + struct regmap *regs, int index, int plane_cnt); #endif /* _SUN8I_VI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c index a76677a1649f..0e308feb492a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c @@ -911,10 +911,9 @@ static void sun8i_vi_scaler_set_coeff(struct regmap *map, u32 base, void sun8i_vi_scaler_enable(struct sun8i_layer *layer, bool enable) { - struct sun8i_mixer *mixer = layer->mixer; u32 val, base; - base = sun8i_vi_scaler_base(mixer, layer->channel); + base = sun8i_vi_scaler_base(layer->mixer, layer->channel); if (enable) val = SUN8I_SCALER_VSU_CTRL_EN | @@ -922,7 +921,7 @@ void sun8i_vi_scaler_enable(struct sun8i_layer *layer, bool enable) else val = 0; - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CTRL(base), val); } @@ -968,36 +967,36 @@ void sun8i_vi_scaler_setup(struct sun8i_layer *layer, else val = SUN50I_SCALER_VSU_SCALE_MODE_NORMAL; - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN50I_SCALER_VSU_SCALE_MODE(base), val); } - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_OUTSIZE(base), outsize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_YINSIZE(base), insize); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_YHSTEP(base), hscale); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_YVSTEP(base), vscale); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_YHPHASE(base), hphase); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_YVPHASE(base), vphase); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CINSIZE(base), SUN8I_VI_SCALER_SIZE(src_w / format->hsub, src_h / format->vsub)); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CHSTEP(base), hscale / format->hsub); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CVSTEP(base), vscale / format->vsub); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CHPHASE(base), chphase); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_SCALER_VSU_CVPHASE(base), cvphase); - sun8i_vi_scaler_set_coeff(mixer->engine.regs, base, + sun8i_vi_scaler_set_coeff(layer->regs, base, hscale, vscale, format); } From patchwork Tue Nov 4 18:09:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 664 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 5223D345CC6 for ; Tue, 4 Nov 2025 18:10:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279832; cv=none; b=LBbI7mqXmYvSauEs6auxDlPKNHjvWxdef2iYlb4AF/mWVX9Nvg/ZrdGKQcxpKtCD4OHwUwBOGR1JgFL/9Hha/D1I7weHHYqZBX2GDA6S9jvp5F/zRopXXHJHBnxI9HLgeICIWNdj3XUdfqluBYfx6qforSgw4EN2lXRoQkKtJeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279832; c=relaxed/simple; bh=VFseA8+0asa6bmZbTX8OqhwqKLycWDdmZpgLOdy9Z7U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OV787sJSvIwV7SHzyH55Nl9zoRInECVMqXOJXS+O3vuErxiP/Y1rngeFQpkHNSN0aSKTjsTlDyxODcGSOY3EQ54KroJBCc9t1+1CzhAmyIejnqmRpCS/WV7SBZhPTEAUNZkaR5NMjliULqPC+OTCB6J1hcvxCNHGARAgkV0px9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=h4ttean8; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="h4ttean8" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47754e9cc7fso7993355e9.2 for ; Tue, 04 Nov 2025 10:10:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279828; x=1762884628; 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; bh=uxUKDaL1Q7bL2awForB4PNE5HPywXNIJXgBLrPAkKJk=; b=h4ttean8KJUQvw4pEuXrStYRTLGnRRsTUegorWNVAR1P886x0h5WwR5IDlXF7QJyif sdyp6oRwR2BCDOCxUNs5PbbzzRj5K1+ro+TULuP6tB6AS2q91Loy/5O/QGoWulAj+BZo Yb12nitOOYiEDu3XcQ7R5owLd7tbwHKoaGNHEXSmRjWDGIUBFzJZyhNvfWxMgA/Y6kEx wS/QDwUc8k4VP4+PLyUpr0dAgRhWHnrLAlIm3TohK1DP3lXmjhkufCXj85I4d2tID8sd uVt0qEg2TfL7QdKGXvNXBRd0/k8h32XsNc1QZ+16P/PKKsOTruB7axfswkrDle2rD6mU llpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279828; x=1762884628; 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=uxUKDaL1Q7bL2awForB4PNE5HPywXNIJXgBLrPAkKJk=; b=igfdznFocSMY15H5KOIme97lhUFs3u3o3DF6/gI42GI2U6o2gG1NNNw5v25V7eFqRT ImkBkXiQyfq7bI13aqzUXjbtOvtpcXvkF1ywKMkTzhn2bIHB0FePlmKk0wOJzf+G5X2x GoG0m+7qTNwRgULOdTW/1JZubZScwcd8JNQIR2Xfjj53COowMI1qq9Pd3B9KmBc7+zKB ZmDTwOjcGlKE5x22aUWAYnqXCmURyejRRjOwhR2pXmyRT6FhXbIRENeeL2bWpZgJSXMD RBwuQAKW7GAYP5M/WJlf38cx2vFhB7Y/cBddSk+0ZCQPw8C/CbGKKutvJJJgZAXzzH8s CGBA== X-Forwarded-Encrypted: i=1; AJvYcCUkPMo7XU3+fNa3rGGQuztCZRvBKR++a0tKO4xB1EIYQC23yUqeX/3nYVn5LLMXO4Y8G5QdVSReoyKSLg==@lists.linux.dev X-Gm-Message-State: AOJu0YwPQnn/xI52RcTrf+C0rWc75tVGTSTECJujLYfsa1tR1BX/KGGI dtIl/jReRuxUkwY6xhOm1u2toL7SfPuocDDJdwVI0EyIfuEqvTqgQszA X-Gm-Gg: ASbGncvuP94mYsaQbhFC3pNUzyzOCnWkyWlGEA6K/ZnZ7VjVW739Epg4A5KYtHGnt7g jyaQPwI3EEdouW5sJGlK7fgpmXXh0Bp+zml730+acj6RS9U3oZu5byhmi1tESYhWU4x9nHNIMIM iPh3vHOGt/3o3x2v1H59GX02jF4OJdueAB0WnfNq+25z/wHyofS5+URAEzh8naossHgsyKQVyrZ T272w2ySFS3cSKx/z5acx32ny48B7EnlU0vW83/vKQYSyAqmc4mOZCEOjUi5mBQXBbjYpfAEaOL PVXloRRQO0xfxpdgDjVk7lcHc/ChNF+IkkHgY6r/Tyzp+cGqCPqj04idW5T89VHdZv3/nHo9Pn0 z70DrLgqQuVlXO0eGphCm+dJVVr68uWzF9kyeuPKdCuVhzd/j/vgfO5igZr+FRrgk34UEhXp6JV NzwGr5ovvkextaePdDH2BomkCMScR5 X-Google-Smtp-Source: AGHT+IF5c8+mHZzz90mVXQjinbLLHXZDEwGQ66eyEvr+K8f4HxTWYfLZ4fwJ/Z+IpDrhmhZsMsoK/A== X-Received: by 2002:a05:600c:64cd:b0:475:d917:7218 with SMTP id 5b1f17b1804b1-4775ce7df88mr2080215e9.36.1762279828376; Tue, 04 Nov 2025 10:10:28 -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.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:28 -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 21/30] drm/sun4i: csc: use layer arg instead of mixer Date: Tue, 4 Nov 2025 19:09:33 +0100 Message-ID: <20251104180942.61538-22-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Layer will be more universal, due to DE33 support. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_csc.c | 10 +++++----- drivers/gpu/drm/sun4i/sun8i_csc.h | 4 ++-- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c index ac7b62adc7df..c371e94b95bd 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.c +++ b/drivers/gpu/drm/sun4i/sun8i_csc.c @@ -227,22 +227,22 @@ static u32 sun8i_csc_get_mode(struct drm_plane_state *state) } } -void sun8i_csc_config(struct sun8i_mixer *mixer, int layer, +void sun8i_csc_config(struct sun8i_layer *layer, 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, + if (layer->mixer->cfg->de_type == SUN8I_MIXER_DE3) { + sun8i_de3_ccsc_setup(layer->regs, layer->channel, mode, state->color_encoding, state->color_range); return; } - base = ccsc_base[mixer->cfg->ccsc][layer]; + base = ccsc_base[layer->mixer->cfg->ccsc][layer->channel]; - sun8i_csc_setup(mixer->engine.regs, base, + sun8i_csc_setup(layer->regs, base, 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 ce921521aaca..2a4b79599610 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.h +++ b/drivers/gpu/drm/sun4i/sun8i_csc.h @@ -9,7 +9,7 @@ #include struct drm_plane_state; -struct sun8i_mixer; +struct sun8i_layer; /* VI channel CSC units offsets */ #define CCSC00_OFFSET 0xAA050 @@ -23,7 +23,7 @@ struct sun8i_mixer; #define SUN8I_CSC_CTRL_EN BIT(0) -void sun8i_csc_config(struct sun8i_mixer *mixer, int layer, +void sun8i_csc_config(struct sun8i_layer *layer, 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 2290c983e177..4f0c929faf36 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -301,7 +301,7 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, sun8i_vi_layer_update_attributes(layer, plane); sun8i_vi_layer_update_coord(layer, plane); - sun8i_csc_config(layer->mixer, layer->channel, new_state); + sun8i_csc_config(layer, new_state); sun8i_vi_layer_update_buffer(layer, plane); } From patchwork Tue Nov 4 18:09:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 662 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 6E56C346762 for ; Tue, 4 Nov 2025 18:10:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279833; cv=none; b=M3sAsq1+z80Kq0/oHkTncoSy+qCOkzKVQo/jlH7V+J4j4e2wAkcvydcdEn9tXy256YWo8UARZIwsK5l4z8O/12Bwkfb9oVt+iXkDJG0B6mBcPNIq9ABujiEYIkRS8QAHgGSCMVuT7XMvet77YoojOu6BBKBbqshzwaWPCPhhvoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279833; c=relaxed/simple; bh=tLfdvt3kCCBnNflbYWB2jKViQDk0gZMYjhuWhiETf/w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GddLyYWrtJF8WGAi43KZrU8VDyCXEY+40Vg8g1VO/xlCbwqjbzYdnVQ3s83+nE3dtpUr1GOs1aY5usgIMqrHPnxp8F5w0yC2bUIGwSpY1o8v17CyNBZylO3WhzgYIdV3ZBhXu9bDdNGsELiCMw8KW7CSEk2rhjlS7hymir/OV9E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ULiTG58T; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ULiTG58T" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-47728f914a4so30672375e9.1 for ; Tue, 04 Nov 2025 10:10:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279830; x=1762884630; 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; bh=M9/AMl4xgUVEiUmyMxeIjWVAIaeS72AyB+f50sJb9qk=; b=ULiTG58TBnLYUj5UJcfSg57YTTcs8JmHb2m/igV7kvHJdz4R2uMR7EvOnov2oI3rgg AKE+DSNypkiyxGT3lKzdMICu9C9wgvE2YbVltJP3+Q5z+N9nbpe6Z+RJ3GVin3Cf4VU2 xcS8iQem4je+VmcRWUCmL+gr066R9WLCTBed/EccwFa0ILsP9Xp7+icyFhuvWdPg2dxm mB7icKc+6DVk3HEfpwlZrM2S4ihyhm0NXPrlqD7l8ryfgS6/wy17UIBDXpAe5PcFzNie mki7gWYbHuClfV2XEB6dUpBLhtz+qHQaYDvwKp9DUZxIUnja1crgDOvYSkMDp4ZTtJoz rhRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279830; x=1762884630; 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=M9/AMl4xgUVEiUmyMxeIjWVAIaeS72AyB+f50sJb9qk=; b=pTOHtaX/D5SSngq8R9jdwWVPicEAAZaq672dAlN8ZbQNrj7wA9QLI955fRdIaJeiW8 VnYNc7iCdy0Z/G18mbeYlCv38oE3lmkUMAXagQY0jxXrWS+EAxQn0STeek+ODhNAJsDT Fc0ZL3cc1dCUdMn+kWcbyTeA4SdsxVjiewWmbLBKkzisKQEE9IkLfpLyBTCcMzHgIAp9 LLRFjO0/w9An45Rn9lIlgXJoLLRzq4CYipTCP7+Ke+0LAAnU7uo7uP523GZHHpWirkwT K9D9sqVfISqd8nQtPaD3frMd7M5/AoOgl3KvMxwcknEDmcSZroiS8yU9gpgbVaUCFu5t My6A== X-Forwarded-Encrypted: i=1; AJvYcCU0DPlcDcZWfIUezK71hzsNXuU25pb1MFo0Y/vCYiC/q7cQk0977vtu7a+HKk7fnzpx11U0u2ipoAeYGw==@lists.linux.dev X-Gm-Message-State: AOJu0Yzci4xOad0J6vBwAx/hONt/n9N6EXpE9Y44IRvtvCSl6cy5xVGT RqXVpc+1HeJNPlWADjMxWsbjHw4ubXSLenfu9iyPiYuG0+NXgu2FtL4C X-Gm-Gg: ASbGncuT+wW/kxnpNPtBTbNxfVZdKcPTByP+7fUGh+Ab7+/hbREjKkbN7Vy1QcExVkM 28PHE/Asi09M9MscqaNmWY/gO2h0hhTrUiN24YPNQqu9uC/GV/b024bo94FMDsj2Lsg974CScGW xl3NTHjlA61vVZOpsyNchfNo2Ww65LjLqx8K6LMJGEqcphluh1o1mlB4fW4zpfhLYoImZWP/w6r a+0RpwJ//9ylCLnDUqC+O4UbfO56saUucEeA3rda/4Gp5H/cpaRDp6TbJWKQ6iy6kLvbnlxdfNM bv/KRNUnYxz0zqgqx5qvd6f8PozET58q7eYM1O6cTkuvrgI07Sgovidd/L6DCcq4tPV6jqsMvYb vpAmK3yx2NiFEHGeNRIh1E4EMonCPgU2mZVXPkmIgD3L3pzKQW//Zy/Hel01cVtX+FTF1VwuhkP W8kexfiGuieyEZtPKGqQ== X-Google-Smtp-Source: AGHT+IE8pg2fqunzszYJMCpOfAsCZLtKqT6X6xX+b+FBqXNTS7M6/iDgmxVd2/hVTJsg7USbpjI7+w== X-Received: by 2002:a05:600c:5403:b0:477:54cd:201c with SMTP id 5b1f17b1804b1-4775cd9c25amr2654245e9.6.1762279829609; Tue, 04 Nov 2025 10:10:29 -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.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:29 -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 22/30] drm/sun4i: layers: add physical index arg Date: Tue, 4 Nov 2025 19:09:34 +0100 Message-ID: <20251104180942.61538-23-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O This avoids plane mapping in layers code, which allows future refactoring, when layer code will move away from accessing mixer structure. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 17 +++++++++++++---- drivers/gpu/drm/sun4i/sun8i_mixer.h | 3 ++- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 5 +++-- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 2 +- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 5 +++-- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 2 +- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index d2b7fc552a76..267a6f75feb2 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -283,14 +283,14 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, h = drm_rect_height(&plane_state->dst); DRM_DEBUG_DRIVER(" plane %d: chan=%d ovl=%d en=%d zpos=%d x=%d y=%d w=%d h=%d\n", - plane->base.id, layer->channel, layer->overlay, + plane->base.id, layer->index, layer->overlay, enable, zpos, x, y, w, h); if (!enable) continue; /* Route layer to pipe based on zpos */ - route |= layer->channel << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(zpos); + route |= layer->index << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(zpos); pipe_en |= SUN8I_MIXER_BLEND_PIPE_CTL_EN(zpos); regmap_write(bld_regs, @@ -317,6 +317,7 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, struct sun8i_mixer *mixer = engine_to_sun8i_mixer(engine); int plane_cnt = mixer->cfg->ui_num + mixer->cfg->vi_num; enum drm_plane_type type; + unsigned int phy_index; int i; planes = devm_kcalloc(drm->dev, plane_cnt, sizeof(*planes), GFP_KERNEL); @@ -331,9 +332,13 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; + phy_index = i; + if (mixer->cfg->de_type == SUN8I_MIXER_DE33) + phy_index = mixer->cfg->map[i]; + layer = sun8i_vi_layer_init_one(drm, mixer, type, mixer->engine.regs, i, - plane_cnt); + phy_index, plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize overlay plane\n"); @@ -352,9 +357,13 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, else type = DRM_PLANE_TYPE_OVERLAY; + phy_index = index; + if (mixer->cfg->de_type == SUN8I_MIXER_DE33) + phy_index = mixer->cfg->map[index]; + layer = sun8i_ui_layer_init_one(drm, mixer, type, mixer->engine.regs, index, - plane_cnt); + phy_index, plane_cnt); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", i ? "overlay" : "primary"); diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index 2e3689008b50..d14188cdfab3 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -212,6 +212,7 @@ struct sun8i_layer { struct drm_plane plane; struct sun8i_mixer *mixer; int type; + int index; int channel; int overlay; struct regmap *regs; @@ -246,7 +247,7 @@ static inline u32 sun8i_channel_base(struct sun8i_mixer *mixer, int channel) { if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - return DE33_CH_BASE + mixer->cfg->map[channel] * DE33_CH_SIZE; + return DE33_CH_BASE + channel * DE33_CH_SIZE; else if (mixer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_CH_BASE + channel * DE3_CH_SIZE; else diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index dd6cb09c2c01..e65dc313c87d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -265,7 +265,7 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, - int index, + int index, int phy_index, int plane_cnt) { struct sun8i_layer *layer; @@ -277,7 +277,8 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, layer->mixer = mixer; layer->type = SUN8I_LAYER_TYPE_UI; - layer->channel = index; + layer->index = index; + layer->channel = phy_index; layer->overlay = 0; layer->regs = regs; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index e0b2cfa02749..9383c3364df3 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -53,6 +53,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, - int index, + int index, int phy_index, int plane_cnt); #endif /* _SUN8I_UI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 4f0c929faf36..44e699910b70 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -411,7 +411,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, - int index, + int index, int phy_index, int plane_cnt) { u32 supported_encodings, supported_ranges; @@ -426,7 +426,8 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, layer->mixer = mixer; layer->type = SUN8I_LAYER_TYPE_VI; - layer->channel = index; + layer->index = index; + layer->channel = phy_index; layer->overlay = 0; layer->regs = regs; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index 70766d752fa6..89d0c32e63cf 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -58,6 +58,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, - int index, + int index, int phy_index, int plane_cnt); #endif /* _SUN8I_VI_LAYER_H_ */ From patchwork Tue Nov 4 18:09:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 661 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 BCC86345CA1 for ; Tue, 4 Nov 2025 18:10:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279834; cv=none; b=JaCefWmSTVZh0pxnkUDweb4F3xKEjN1wUuh6PfzVVKmqmX8cvba36QXkCgWMLmZLGQ7vKtf+s+7E0icS17UJ8Iam1qMbULyvyPSO8E3gdgXXIiKmJdZOWviVnKIjhQemzbWGT8AHfb0CsQOizbykYGrkP+p1p5iyRAPUC/y+15A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279834; c=relaxed/simple; bh=KowVKeJ70bqoIp+99jXhG6SP3UVn0OWkvuzyT/VB0wo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BDvNQ4DGeX7ATh658tqp8fDUa3bHiu0P9F8kd7A0hcrsLifdbw/YvSuIIQvVFy3ls7+O9YKrBOYr/tqZcYvVr3njxHUZwP1Eu10scwpNiSMgKZxM6ArasHKyMnd/A8UyHQDa5u0EcBTei4yO8Z37lvpKNgHzx0Euomz5GeOBbfE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=b0e0tNZa; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="b0e0tNZa" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-47117f92e32so47880405e9.1 for ; Tue, 04 Nov 2025 10:10:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279831; x=1762884631; 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; bh=hJ4iKgm80T4FXqrGlRaNuAcAySKRsjOyr7WXu8sKn/8=; b=b0e0tNZaeMPp9ChRy02zPB6qLNJFPy1pv46coHvPcoGy/4dRHPY8bDSVss5/7bUx6M qk3qf2QSIQcNefV4PdK6BSdWe6bVKxcpdb+7xewVHih8ZG4BhN5LAbshyr745cZyysbF iNC9r/2wL3BduNFiRBgr4/1+HFErb9AE1mT+/Cjvy/010RY5ya5fNRQX2hNtWQ4Wx5pe 0jyT1hCFXW/Pd3o/D+zWhnCYtCe/pq+FR0InwK8GVQBBpKPxK/9Xx7DST8Y9hXTbGTcc BuyH7jCZepJS275X/zp8f3uBq+ZIzPhXJ4MZO4joduTAm5Jc4y8tDjBSsyY6YU/5fUvl 0Hjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279831; x=1762884631; 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=hJ4iKgm80T4FXqrGlRaNuAcAySKRsjOyr7WXu8sKn/8=; b=q+oCbdbkhLvUnAQ+5Rg/S3FhNyzToThghUr7KorESTIygjqRWPyJ8/wCt2V06R2HDO NWLsnu5+PsPKqR64WkUch3y71bkNXqSSXOuEbp2fmRPta+eiTzjcJaLUfJ+9pk2hKSH9 IO9c5wJ9NLivj28XnlAuMMJ6D1/c2p3c4LRg54fsrPThS1CQ5uM/9BWQiq5zdJ/CaHf6 6odmXbPm2ShgGaxmlUAYqw/zLP7yqEGhaLW+wBo+/IGj2MAZp8FeOJl2GDbr7Ag+D4i8 bE3LPEiuBegYf7mJM4oitb7p+33NaparguI4p7aePf5HPaGO3J9X29rCrDVOXDlZIJn1 k3UA== X-Forwarded-Encrypted: i=1; AJvYcCV38IYbdzRKLP8zxtcHfkskEXMvPoBiXkyHczLBrvnvLWdB36Xxxu+whd0T/S65Ii2dCC2PuTFp80Lg8A==@lists.linux.dev X-Gm-Message-State: AOJu0Yx6THeZ9OLCvA5z3axJ7mQ4fz+8bRJ+knCYtxCJAkYY8wp+KSBR voM4vtM/bCc3sj3x/jHXKPkyb+wkQq5dd2NXgZ07v/p15vgbVQDd9p+AmG3H8w== X-Gm-Gg: ASbGncuyJ2VLf314GG605SIrMzp1ttm0Xsnk/67qu+8eLMAYTVxxEqq44dWEvcXwjLd mdrxa/JaWRbJCVg/kAHj+2HtWu2tYWYy0a+ZFc8ZQbPUtmQJPTTriJx6T13w+Emhko8jyEUkVcG GtqeNsIOEgd5iLPNxjX/yMNqcwEptwVEqv/St29VCL8qsXZhYc9bh8qBEbs/d59qub0PFZziHoQ uMR6OJyIK2wedQ9jxb48NdeTJ21gzwcox72ENB3ZXg6HmCup0w88/zR47J3Elh0yQEXpkjYxlg5 /YyWlhW4/rFjHrR9YXIbofm3McACL6UUGOoy0v0RZ/9vi3xgrNooge4UBSGROGZ5Olbk5rHJ8uA jE0hvw+qub9zKMoH9sG0Vx/PxZWGx1r2/4ij3mN2PLRdGKigrPTx/ndRTBNs8iNdwH2NjbNknGy 3LWXUdb7eKIOjhm+Dn34yEoZLtTloR X-Google-Smtp-Source: AGHT+IHkpIC3aSMOHY0XvNH+UoXWk3HEri1Jf6ytHO5K5mDJ0+pJHIyqN7z61F+ww/rx9c/Kck19GA== X-Received: by 2002:a05:600d:8381:b0:46e:376c:b1f0 with SMTP id 5b1f17b1804b1-4775ce9bc74mr1190495e9.7.1762279830853; Tue, 04 Nov 2025 10:10:30 -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.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:30 -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 23/30] drm/sun4i: vi_scaler: Update DE33 base calculation Date: Tue, 4 Nov 2025 19:09:35 +0100 Message-ID: <20251104180942.61538-24-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Now that channel base calculation is straightforward, let's update VI scaler base calculation to be simpler. At the same time, also introduce macro to avoid magic numbers. Note, reason why current magic value and new macro value isn't the same is because sun8i_channel_base() already introduces offset to channel registers. Previous value is just the difference to VI scaler registers. However, new code calculates scaler base from channel base. This is also easier to understand when looking into BSP driver. Macro value can be easily found whereas old diff value was not. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 3 ++- drivers/gpu/drm/sun4i/sun8i_vi_scaler.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c index 0e308feb492a..fe0bb1de6f08 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c @@ -836,7 +836,8 @@ static const u32 bicubic4coefftab32[480] = { static u32 sun8i_vi_scaler_base(struct sun8i_mixer *mixer, int channel) { if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - return sun8i_channel_base(mixer, channel) + 0x3000; + return DE33_VI_SCALER_UNIT_BASE + + DE33_CH_SIZE * channel; else if (mixer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_VI_SCALER_UNIT_BASE + DE3_VI_SCALER_UNIT_SIZE * channel; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h index 73eecc4d1b1d..245fe2f431c3 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.h @@ -18,6 +18,8 @@ #define DE3_VI_SCALER_UNIT_BASE 0x20000 #define DE3_VI_SCALER_UNIT_SIZE 0x08000 +#define DE33_VI_SCALER_UNIT_BASE 0x4000 + /* this two macros assumes 16 fractional bits which is standard in DRM */ #define SUN8I_VI_SCALER_SCALE_MIN 1 #define SUN8I_VI_SCALER_SCALE_MAX ((1UL << 20) - 1) From patchwork Tue Nov 4 18:09:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 660 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.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 D38A5346E78 for ; Tue, 4 Nov 2025 18:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279836; cv=none; b=dydJrceB0BfC689s9EZXTUZOlI/A/9RPmC9Swy++W4h9d61ghRHT5/kJDyGNtcOzkTsS+tGe7TujHIGwFzYk9Hlvn9j+m7ra01YQBVRsuNNockX0Va+bSkoo/1sIaS9lEnVN+LGVxuo6BNg6G+gAaq8dHmqWeBIsseJWtdpNwiw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279836; c=relaxed/simple; bh=kPiLeYIsEiImYjtRwjEv/BEoeWdW4RbU08GWQ9yKjcE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hKWKBZhh788KObldfURONsZOheP3PwFlSCbA7X2vYgG7g+WLcA80j/nWlU4UKviIu//fUMv8lh6CUulmrBFN73Q4EnQXQ1MF8QcguUuitClzEmKr7bVo88tuFYFLta655t4899N6/2JtTeUKYeN6b/EAGwLecpMf0SpjaLFvFfk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GxeQakNQ; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GxeQakNQ" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-477549b3082so10396615e9.0 for ; Tue, 04 Nov 2025 10:10:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279832; x=1762884632; 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; bh=ie7hWDcTxuQcquWuqifGQoLXnJlmFfjHvsfXK9+oj4E=; b=GxeQakNQ0xY6XUiIzaVVQ5EawBduo3/oW5WM4exA5cDOISf2gA/vn6Ohtw+HND8AKv ULRMPRo4jhkW25YqNOU8xAKWN4Z5jCB2cpkyqatMaOIU0AKzpt0zV8h9bxkCB2p3UhsV 4zq5q1gWdNiVCVK/WyniquUppLt08s6/+7NqTVA18ada/ouje5K+V+CCrMSKVQA2WqfX 0b3hThaoJvF2rHjOB2y4zMfy/s/C0QNtJ0keCMJBEvQJ6dh9MgiBfAjSctKXSDMnznxr HZCyEX7XxCnULjPymCd5LNJ/48+LRIrOYNFJ87aQmStZ4I/EF9orLggvxoRuuzrYXrxf mlnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279832; x=1762884632; 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=ie7hWDcTxuQcquWuqifGQoLXnJlmFfjHvsfXK9+oj4E=; b=ngX/SNMrN+tRerj4maeo+jVpCFgdMDBNQA3HpxQPcHJGc3fEsvCjnK23Lldjw/AZZV HO7J5x3KyNiFOCVoubV+cbJ0Ct5ReebBXBUHkGpmv/r38NVsctrwagaXtkV2aSe7KlXI z69Qt13iJdVZ1zTFj8WKlTbybbOuePl4O/Tq2CcJKDwmny3a3J7WE2rUq6yufsTnqOdl z0ZRcRjtXt8bzXHuKniI3Y9GJBrNvUxaWPS6QAGVdJSh2CwK5kK9zlosETCSzB6AKR/C dTyd48M1frTOwu+oOagjLolflHyNz2o9wTMSKFj+vrEGB49o787XSW3eAl7wkjyLZoBY /11Q== X-Forwarded-Encrypted: i=1; AJvYcCX93+0kVcAk8sqqH51qkC0SvxBmpDyz4wiC1OpLjVczTmO8r4OEfDa2uxDwW5lGq6Wf+VoGCmLL226XVQ==@lists.linux.dev X-Gm-Message-State: AOJu0YySebfmvCAw5jaFXCbNm46j+4eLOSTbje3nLLZy8Y1zlA7GuG+q ph7gV5rUGT6a3Hdc9h0wfowNTVQxAfBsYeLbufzyDW/c//2gzgYW+Aq6 X-Gm-Gg: ASbGnctAF84zWxVRQvKZOgILTPxi0bd64Lh5vF1zSlSszChu4mCyeV68mTnfBOIQPsM olmChg23rT04+5wGl6WV6vVun7wY/MdXIIoI5zedqIBlEiO87xmrjwg/GOCHfVhVCibTRfCkV2t vJ3vm4PzQSr8+Fp33UwhRDDELPubS5eJqlwaxXddHStCazQyf9ToKXOB14ROh0B9TOfoGaDYp+v f60r2Cdy1zqVC1gnZkQTjpBT8Nq7mhIY8uVpBrG8w/ckxwd2OBcwYevFNi04U0sDmxd+BDIcHeE IqSlp2i3p2yquQpDkcnpUYojacfeoL+Me6AHViKvRlj/pV0kynwStmPCQHtkS5iHdZ9DTAfa2k9 bEgdhaUxxHJmIPx2/qA/v1clsNaDeqtq9F6qy7K/kX04viZcXZfa+FbJE6GzWesklOSsYO2b/QZ 7ytrGssm/cjxUsbzEfOQ== X-Google-Smtp-Source: AGHT+IEWn71DBw19df7j5vHe6/KdNSpZp9M6RzMXn87h8SZBHIPpRNzHDnrglGnelBkuvtMKpO/7HQ== X-Received: by 2002:a05:600c:a00a:b0:475:d7b7:580c with SMTP id 5b1f17b1804b1-4775cdbfademr2635395e9.12.1762279832100; Tue, 04 Nov 2025 10:10:32 -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.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:31 -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 24/30] drm/sun4i: mixer: Convert heuristics to quirk Date: Tue, 4 Nov 2025 19:09:36 +0100 Message-ID: <20251104180942.61538-25-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Determination if FCC unit can be used for VI layer alpha depends on number of VI channels. This info won't be available anymore in future to VI layer driver because of DE33 way of allocating planes from same pool to different mixers. While order is slightly changed, it doesn't affect anything due to double buffering of registers. New order keeps related registers together and quirk separate. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - updated commit message drivers/gpu/drm/sun4i/sun8i_mixer.c | 9 +++++++++ drivers/gpu/drm/sun4i/sun8i_mixer.h | 3 +++ drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 12 +++++++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 267a6f75feb2..78bbfbe62833 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -707,6 +707,7 @@ static const struct sun8i_mixer_cfg sun8i_a83t_mixer0_cfg = { .de_type = SUN8I_MIXER_DE2, .scaler_mask = 0xf, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; @@ -716,6 +717,7 @@ static const struct sun8i_mixer_cfg sun8i_a83t_mixer1_cfg = { .de_type = SUN8I_MIXER_DE2, .scaler_mask = 0x3, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; @@ -726,6 +728,7 @@ static const struct sun8i_mixer_cfg sun8i_h3_mixer0_cfg = { .mod_rate = 432000000, .scaler_mask = 0xf, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; @@ -736,6 +739,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer0_cfg = { .mod_rate = 297000000, .scaler_mask = 0xf, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; @@ -746,6 +750,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer1_cfg = { .mod_rate = 297000000, .scaler_mask = 0x3, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; @@ -766,6 +771,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer0_cfg = { .mod_rate = 297000000, .scaler_mask = 0x3, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; @@ -776,6 +782,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer1_cfg = { .mod_rate = 297000000, .scaler_mask = 0x1, .scanline_yuv = 1024, + .de2_fcc_alpha = 1, .ui_num = 0, .vi_num = 1, }; @@ -786,6 +793,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer0_cfg = { .mod_rate = 297000000, .scaler_mask = 0xf, .scanline_yuv = 4096, + .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; @@ -796,6 +804,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg = { .mod_rate = 297000000, .scaler_mask = 0x3, .scanline_yuv = 2048, + .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index d14188cdfab3..def07afd37e1 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -176,6 +176,8 @@ enum sun8i_mixer_type { * a functional block. * @de_type: sun8i_mixer_type enum representing the display engine generation. * @scaline_yuv: size of a scanline for VI scaler for YUV formats. + * @de2_fcc_alpha: use FCC for missing DE2 VI alpha capability + * Most DE2 cores has FCC. If number of VI planes is one, enable this. * @map: channel map for DE variants processing YUV separately (DE33) */ struct sun8i_mixer_cfg { @@ -186,6 +188,7 @@ struct sun8i_mixer_cfg { unsigned long mod_rate; unsigned int de_type; unsigned int scanline_yuv; + unsigned int de2_fcc_alpha : 1; unsigned int map[6]; }; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 44e699910b70..8eb3f167e664 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -48,14 +48,16 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, val |= (state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_PIXEL : SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_COMBINED; - } else if (mixer->cfg->vi_num == 1) { + } + + regmap_write(layer->regs, + SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); + + if (mixer->cfg->de2_fcc_alpha) { regmap_write(layer->regs, SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, SUN8I_MIXER_FCC_GLOBAL_ALPHA(state->alpha >> 8)); } - - regmap_write(layer->regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); } static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, @@ -450,7 +452,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - if (mixer->cfg->vi_num == 1 || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (mixer->cfg->de2_fcc_alpha || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { ret = drm_plane_create_alpha_property(&layer->plane); if (ret) { dev_err(drm->dev, "Couldn't add alpha property\n"); From patchwork Tue Nov 4 18:09:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 659 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 D0996346FBB for ; Tue, 4 Nov 2025 18:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279837; cv=none; b=oP5lTx24ZbF0ZHsQ30TGobZK45YdxDZHXMlaIu6+PjHEfmsomS/6myfHpJMdgrpIr/gcjhdzaZEfbenXBWq+Ycn/NWi3AvtU9d36n3+SgasaoawpTsZVNyMIYUSqFQr3WnWX1sX0BBCy1BLUxBwv6S261YDDkkaJH5+tRI6IPIE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279837; c=relaxed/simple; bh=ye213JbTqvKJ7OHw/ZpY6LCcPpjvObWagFZelGOjlaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d1XXeO0f3Z1sB1k25jMvjH5O5HFdrjFGX9YTMQo3lAD/PNQ3/usrxKOdQydBA2Uto7WF3o7be/HJ4NTZ9ayYISoHs2t5u6hIVuarkAsTs6qF7tezIcas4+suPDMGRX051qR6HzCBF8UpwgOU9nTu5j9Ad3BudpwmEufoVEmrnT8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=krodRSGP; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="krodRSGP" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-477563bcbbcso5302475e9.0 for ; Tue, 04 Nov 2025 10:10:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279833; x=1762884633; 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; bh=mMq6+f8w/XMhRL94h1i6thbehjh3w3EiU9h31KM0Dlo=; b=krodRSGPM9iYkDJXt3E6fRDOh+v47WAc64AuSurZlJJtAnSdb2Ox34MdidLa92Eomy 80DH5RtWx/FU8IscRgShu3Ey+KmUvtlbvTe4bWBVmSr7x2r3Ueqm//7JPivMwsxooMpw ePzOaxGygTcDf+sY9o0KPVLwT9ClLuAv2ZLwSGpWjmEi7NrEYWkdD/zSI2rnk8O9jhaj kMqzZ5anW2H1XixuElHUPyL/a2t8zkOIG/8dOS1No6DlWJnXl4CQlx6aQMF4bfRmsZM0 hDv8kINEHVGX1cr8zlY1xX4+jKGCW3sT3y+VW+IdoEXvkRwhRK6U1oqFg/oiVR1lOfmS ej2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279833; x=1762884633; 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=mMq6+f8w/XMhRL94h1i6thbehjh3w3EiU9h31KM0Dlo=; b=RKNkqySINk9UPf0PgAw5b7tImWhJHJe2OmzI84urh9L0usvOs1Nvun4D4dbOc3yGqx xsc1p7MXiXhcaCLcEqRjYSZpDNfwp20Kp6Pqvxhl1gpDJDCOFVc3IB56CEG6/5S6txPt uEClY+rnrVM9OSUArvhGrsrCvvjPg4JamoIQBZYIzSoGWscbcYE/SNolXY9EyX3YcIey /waTI/VMJODJ11wTcQHwwZbO1NFyfc3+E6z66zevyjvGYDAQvJoGQvBLL9lo8F9PaunB fXgfddNadB/ZgN06la1vz2DhR/4kuxr1Mr63dl9gExfsk30LJ9u0QmSw7QHUYXrqpOlg x4JA== X-Forwarded-Encrypted: i=1; AJvYcCVuxwtscIjv5VN+9N9yyNLeS3t5m9ESviKTDU+WFJVfAtNjiL72JpT9YyNjehOgziMnhHXn1zkYJdu8NA==@lists.linux.dev X-Gm-Message-State: AOJu0Yx2eJFE3J68xcUctk1GylNSLr/7EqPHUedN0GyvuFcyY4CXC8To vmifi7hPCMe2WQkMTkSJAXXu3i71uPgKv2DLtWAnOpw/tDR6vMf9p6Yv X-Gm-Gg: ASbGncur/7v5eWfDKrroj0AnTBVXui9Ekcrm5XRD/XN+TASlLIS5Z8S8rd4OCfB6vYW 5Xhc14o6hTIpQujKeThUnVax5Rw0fpZCI/Gt2RawxQTiMraQZ21nEnsHHDqf3Zs70H/7Dr7mDf4 WCNe82FxZ4nsMLmOwbOLOE4tW434jvAvKI3s0gIgzZJKbOYQGKRlNB7SvGWCgWECfLfa8nxQugr qDPvAC/GS00FBP8lXA8KrIGtwW9k1ZGWcnjKvpUBW6kQfwdE8jmhak1RZHqMBTOGenLNk14hpsE eHBYtKu5+L4PGBCJ5pxkqHYEpRZIkrvQuOsqPgT3VLjSqr0pEtOYEIw3gxJUbolwXFL6HWoH8rk qpoL2tshL4x+YcTVEJXYIVRQ7UoQhddT7+KMExgolHSOCkJWVj4uCTnwOQQaujSG9PmzFltkuYV IiM5IwvjiWkWDqncl+PQ== X-Google-Smtp-Source: AGHT+IGAou+/VWjl/+havcgVpIaUje7S46iuTOTBDTJA+e9THTDoYyFzTPWTWOtjQVDGfLuUQylUOg== X-Received: by 2002:a05:600c:1e1e:b0:476:6ef6:e28c with SMTP id 5b1f17b1804b1-4775ce23c7amr2190455e9.38.1762279833261; Tue, 04 Nov 2025 10:10:33 -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.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:32 -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 25/30] drm/sun4i: ui_scaler: drop sanity checks Date: Tue, 4 Nov 2025 19:09:37 +0100 Message-ID: <20251104180942.61538-26-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O They can't be triggered if mixer configuration is properly specified in quirks. Additionally, number of VI channels won't be available in future due to rework for DE33 support. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index 2fc54dc20307..c0947ccf675b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -132,9 +132,6 @@ void sun8i_ui_scaler_enable(struct sun8i_layer *layer, bool enable) struct sun8i_mixer *mixer = layer->mixer; u32 val, base; - if (WARN_ON(layer->channel < mixer->cfg->vi_num)) - return; - base = sun8i_ui_scaler_base(mixer, layer->channel); if (enable) @@ -155,9 +152,6 @@ void sun8i_ui_scaler_setup(struct sun8i_layer *layer, int i, offset; u32 base; - if (WARN_ON(layer->channel < mixer->cfg->vi_num)) - return; - base = sun8i_ui_scaler_base(mixer, layer->channel); hphase <<= SUN8I_UI_SCALER_PHASE_FRAC - 16; From patchwork Tue Nov 4 18:09:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 658 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 6A19433F38D for ; Tue, 4 Nov 2025 18:10:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279838; cv=none; b=YM7ck27qbCovISsSiMSk/UhPxQ0ku//DtnOysWpj1Px0nONecAijsgVwWls4HbSXRwrlqiNnpumRqpXpeAoPNfw8DtlQ+5/B59FqArmRlHc865MQoFmFpH9qd4Pbq3EkjnmBB2jkxwCzvzEHtiHD1ZQDumIQMvo0jn1P9hosa8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279838; c=relaxed/simple; bh=a6SqoW324qMegk6wjIIg/gIMshOekSORsRcCSwVN+8c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MQUXSSIJbgRKnpihA2oOXRxM55RE23ScKj1q02UURhmmHKz2d2XKIvxr99+T3CkpnqNwD3/+tSt9dyFrsaRAGudXeEbCsCSx+YEQR1QQU7V6CX7QX9UHeQl/LIlp5xKYzdZ2YWfPnDiWWH2aMX4tfp9A6Hx6UtvgTI1IUD2Im8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VYJy9b1g; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VYJy9b1g" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-471b80b994bso75237975e9.3 for ; Tue, 04 Nov 2025 10:10:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279835; x=1762884635; 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; bh=ejkL8TsFG1o5XiPy9Gcy/NzA7/ogTbLjmhfX6D7QHow=; b=VYJy9b1gMEx1bpa/cuIM7+WgojNUAtOb9HWLJcECBP+SYmHBZbAZRlvQDotvDGfnEo Tz+QaKLGiIvncQdNDR5jZyXSxix57xBuh3haJY6OgE8t/IFUgyWuALb+c8fOYtZCVYXe TVGDUH6ufOUn4gLQS9hn3A7LvT1vr/OkQsiGPC2SEVLmOS1crVUc9/QJigRiCGxHDWuS SfikCP+lbmllG9O6iWOuS6Y5I7uEkP8CWHuapVnGC4AHTyG5OOLGq8BonjGaz+K6XgiT In2XyNRNaeHzCJdJu5iOHWXIsmP6goeuwp4IpHtCOMmHzTUZ5iRaiuzyxnjuCypzVCVY NDSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279835; x=1762884635; 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=ejkL8TsFG1o5XiPy9Gcy/NzA7/ogTbLjmhfX6D7QHow=; b=A3X4Nwkpc+ZOgIxlLW5T+2Iu1bhxWRiltOfwEPpOfJFTiXt/o8r0LBKSSJfNmmtWl3 SyT097pMjUZ1r8oyjBFlCTCxVnxBPIT5J+mhTQ4mRKM21tvY8SqL9NKLWCb1gBatCNB/ ggT2c5+gEef0Y4SUbVIjEcAwitV9uQh8RoJnWC6BbM3b+ssfNFlXnQIzO12fJSK06+NI 9Q+VeSa+dGM5B2r+UxdWJM4iz020iO51Eln/Mg/tel8y3N3sXcjM0YpVYpNprRRSqeFq tCu8dEVgn/Wt0IZ5tXTD4kq8XEbg+v0u0k539BpF3HxeWf580OEy5uG21z5H8gJahMlP 53aw== X-Forwarded-Encrypted: i=1; AJvYcCVhEwa7kLEUl14iutpKawYxwSs1qYQXjz6l1/CaVjsriKP8fl4Ml/xkW7Xi43fH+SU/t5UT49SEo3kljQ==@lists.linux.dev X-Gm-Message-State: AOJu0YwPS6T0E/e/2q0tIgw7ON9Ybz8A3qHZ1pT2oTviSRRX7ZyVp+it gtwEmJDDMmyTqh+/87Ghfz1oqAAN7dflCGf5fBqmowCrY7djZuyKoHSP X-Gm-Gg: ASbGncskjzxicb76UhkSz/THvIbkq07sJc3XL0odnp/MLdEeWwWIkhVX6uwMs9D0G0T EgTlDK2zI5xghc2iLw2OftPE0huwQEhKuW1mI6prpoo2JUPoiEk7BROIlkv2xNSgWqjSv1vs8p7 3yr8ueEr67U/4Z7QC7joBkd05QVO83YSOMXOX3hgaUCnFuTokLQzdO3A9LZLjMTagvLbvrzosRt NDiow/sdGOgVfT/jHUEpqkZxrnM8gE9L0JUqvDyNKnzXtL4YDvege/37uYSjkjt8Z/hZJGVQsLi /NsQIL3ofog+b8oUT6Au8UG3misDV7tft7/xWH/kXKA0+GlgcZHRo2Ua0hektvNKN10pQCP0fA+ 7xHD95VuMwtdAu4T0lbKZBv4APPvdRkARMJe1976sj6+dRewycd882ITWta0TdY8tNvu5fkZbWu nvHJbsDGyf+z56pzrL9Q== X-Google-Smtp-Source: AGHT+IGULxezyFxQaS+IhExoUiRMdNFxErCJ8jQuxzUcsuWhQgiYwKFm3qElEomNCT+mnTz7K/5UIQ== X-Received: by 2002:a05:600c:5488:b0:45b:9a46:69e9 with SMTP id 5b1f17b1804b1-4775ce14dd0mr2937075e9.31.1762279834562; Tue, 04 Nov 2025 10:10:34 -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.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:34 -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 26/30] drm/sun4i: mixer: Add quirk for number of VI scalers Date: Tue, 4 Nov 2025 19:09:38 +0100 Message-ID: <20251104180942.61538-27-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O On DE2 and DE3, UI scalers are located right after VI scalers. So in order to calculate proper UI scaler base address, number of VI scalers must be known. In practice, it is same as number of VI channels, but it doesn't need to be. Let's make a quirk for this number. Code for configuring channels and associated functions won't have access to vi_num quirk anymore after rework for independent planes. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - switched position of vi_scaler_num quirk drivers/gpu/drm/sun4i/sun8i_mixer.c | 11 +++++++++++ drivers/gpu/drm/sun4i/sun8i_mixer.h | 2 ++ drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 10 +++++----- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 78bbfbe62833..da3148f42646 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -705,6 +705,7 @@ static void sun8i_mixer_remove(struct platform_device *pdev) static const struct sun8i_mixer_cfg sun8i_a83t_mixer0_cfg = { .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, .scaler_mask = 0xf, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -715,6 +716,7 @@ static const struct sun8i_mixer_cfg sun8i_a83t_mixer0_cfg = { static const struct sun8i_mixer_cfg sun8i_a83t_mixer1_cfg = { .ccsc = CCSC_MIXER1_LAYOUT, .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, .scaler_mask = 0x3, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -726,6 +728,7 @@ static const struct sun8i_mixer_cfg sun8i_h3_mixer0_cfg = { .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 432000000, + .vi_scaler_num = 1, .scaler_mask = 0xf, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -737,6 +740,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer0_cfg = { .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0xf, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -748,6 +752,7 @@ static const struct sun8i_mixer_cfg sun8i_r40_mixer1_cfg = { .ccsc = CCSC_MIXER1_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0x3, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -759,6 +764,7 @@ static const struct sun8i_mixer_cfg sun8i_v3s_mixer_cfg = { .de_type = SUN8I_MIXER_DE2, .vi_num = 2, .ui_num = 1, + .vi_scaler_num = 2, .scaler_mask = 0x3, .scanline_yuv = 2048, .ccsc = CCSC_MIXER0_LAYOUT, @@ -769,6 +775,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer0_cfg = { .ccsc = CCSC_D1_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0x3, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -780,6 +787,7 @@ static const struct sun8i_mixer_cfg sun20i_d1_mixer1_cfg = { .ccsc = CCSC_MIXER1_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0x1, .scanline_yuv = 1024, .de2_fcc_alpha = 1, @@ -791,6 +799,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer0_cfg = { .ccsc = CCSC_MIXER0_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0xf, .scanline_yuv = 4096, .de2_fcc_alpha = 1, @@ -802,6 +811,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg = { .ccsc = CCSC_MIXER1_LAYOUT, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, + .vi_scaler_num = 1, .scaler_mask = 0x3, .scanline_yuv = 2048, .de2_fcc_alpha = 1, @@ -812,6 +822,7 @@ static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg = { static const struct sun8i_mixer_cfg sun50i_h6_mixer0_cfg = { .de_type = SUN8I_MIXER_DE3, .mod_rate = 600000000, + .vi_scaler_num = 1, .scaler_mask = 0xf, .scanline_yuv = 4096, .ui_num = 3, diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index def07afd37e1..8c2e8005fc5b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -167,6 +167,7 @@ enum sun8i_mixer_type { * struct sun8i_mixer_cfg - mixer HW configuration * @vi_num: number of VI channels * @ui_num: number of UI channels + * @vi_scaler_num: Number of VI scalers. Used on DE2 and DE3. * @scaler_mask: bitmask which tells which channel supports scaling * First, scaler supports for VI channels is defined and after that, scaler * support for UI channels. For example, if mixer has 2 VI channels without @@ -183,6 +184,7 @@ enum sun8i_mixer_type { struct sun8i_mixer_cfg { int vi_num; int ui_num; + unsigned int vi_scaler_num; int scaler_mask; int ccsc; unsigned long mod_rate; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index c0947ccf675b..0ba1482688d7 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -91,16 +91,16 @@ static const u32 lan2coefftab16[240] = { static u32 sun8i_ui_scaler_base(struct sun8i_mixer *mixer, int channel) { - int vi_num = mixer->cfg->vi_num; + int offset = mixer->cfg->vi_scaler_num; if (mixer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_VI_SCALER_UNIT_BASE + - DE3_VI_SCALER_UNIT_SIZE * vi_num + - DE3_UI_SCALER_UNIT_SIZE * (channel - vi_num); + DE3_VI_SCALER_UNIT_SIZE * offset + + DE3_UI_SCALER_UNIT_SIZE * (channel - offset); else return DE2_VI_SCALER_UNIT_BASE + - DE2_VI_SCALER_UNIT_SIZE * vi_num + - DE2_UI_SCALER_UNIT_SIZE * (channel - vi_num); + DE2_VI_SCALER_UNIT_SIZE * offset + + DE2_UI_SCALER_UNIT_SIZE * (channel - offset); } static int sun8i_ui_scaler_coef_index(unsigned int step) From patchwork Tue Nov 4 18:09:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 657 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 E81CA347FC4 for ; Tue, 4 Nov 2025 18:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279840; cv=none; b=hmvhQEOmEMPwnPVCO3LeVRV/ILsix1LSdVsZIEC1xJ/h9rN7GkmGbV5tlI2HiUOFFSQgN7js01BMFl8K7X0H746rBmnzxz7Rb4JA+CDd4R6O0SW1d+pkpSLiGy93YMLLiVd4xmYsOTC/QWGP5jGQ8cZ7+BYytKySNl3NXymHoPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279840; c=relaxed/simple; bh=I/Hk0/PHLO8sCGFPEQw+OU4WzVurFU0CE21OKjEm/Lw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PPSAtfoS4x0VXGkq6P0uHlQIgI5eXLNwjhifGKS1r1195jqty3TXAhm3yePPixEXIWOlZXtysikVIHh64iDqKUSRmL/3MZ51Isb8JMZkIzEZWBfInUcRM5s+FGPBps9GljCC+WEdu2L9AFmTMyUj0SaHbjTX5RcpxpY5lw+7bA8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lIJXIRLQ; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lIJXIRLQ" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-475dd559b0bso78257995e9.1 for ; Tue, 04 Nov 2025 10:10:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279836; x=1762884636; 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; bh=oZvB8XQL4XH/MG4JrDvft0iLE7MCAIYhxytBa3l55Ko=; b=lIJXIRLQBTLAqccEEr9yk333DZVLpGiXvK60UOR/8opt1PBcy/Jl/fareAhW6aI03Q oPRAsEf1Y88+k5j+jvkwFNIqeMUah2KQHtNy54VqlilEIKR7rmNGHho78lAiKH6YOfCV 8iJh3O4kyi7i+PsMv47rhVPJmdLH8JEi6kh+hzsfomzTNpoXS6rtmHPRxd9DSwKi4xsF J/WS+7anp7w4RnF3iVFZVPvU3tYExVx8A925UpRkT3So9TNdDAlQGNzTDXK+vO/bXeTr F1XJcHmpdasgU12vWNTpLX8Qg2kiUp0lhAIAc07zeIgy9D8DpJ2ZQ1tloZ/frrrELCgj iXNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279836; x=1762884636; 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=oZvB8XQL4XH/MG4JrDvft0iLE7MCAIYhxytBa3l55Ko=; b=UYeONtPg9WDERS4z9kax6jpxWMHqYO7zJfcsKIf2NfCscWUeoopcnuCWjnVG9w971f 1VkfRQ2q6s35lixagA7IYINA5wRC7JtobUCeVthH5Z9st0nE0qHDNF4iz86wsKxIyNKX A3YZY/oVtE0i2OaUzkVv5RdlXi7xsQEfIKVozD/qCx44ez20jQel1nvxmbYWpo7tni+g Ya5dD4EUo72v0bO+wXVf6H5aklNQvo4V9MgDNg/a3c+H/oqnNulhEKCvYZXD+SKEgFAm jlMEkqW6UFp9mHM8CI8XUeGDtK3zdYlBW3grfR3BCW03l4VeQwAf50ycU9szPmdI6q/Q W9YQ== X-Forwarded-Encrypted: i=1; AJvYcCV7ZZ3A8AkeV6VyzqlFKjUTXFxElexFbEnbTI4JVmu0x9EnSUo6kzHwxz9RrWCjNLYUqiGFg7E/bvc2MA==@lists.linux.dev X-Gm-Message-State: AOJu0YxJnuBhhFgz51GR0cP1IK2V6VN8OR/SpUPqElvDXBdfP25nIZiF Dym+UhZb107/vIAKtLC9ibvUTpsIeA42n4SGvkhpnPNCZaFPQtaiZ/vi X-Gm-Gg: ASbGncsfv4TNTEU1t1O3Zimgi9OzFsvyPCcTLI9Rie2xJIda46b5BZ5ADrLnQa+Umja gC4ATR5dYPboM/9PxEaoBKA98m0m+Qo3Znxga9+2yrpN/DvIU6YRh2if0RgkcxkZJ7GnAaOkgdq bFCumfUtFz+h7dotJa8Q3Dbk6T5gNpxqEJW2gE6FALDKnh/pR+9JW0bxqIWv3wMhGVS49JoY4ux QwCT6552L8U72hmrK7hPQoUUuYakOz+kfmHJZ+VWpjOGO+9L6pVqjveXrIgJjJGFbnjMothMjaM YTjXAYmBHBd/J9yP5IMmoyjItgB8RrjP97x8qxfxeGM/VzpPSue1wqhakyQsrS5LfsYQC8Md17H oHK449P4GQ8zBX3eUmg9A+XcGVZWTdvm+TzqRCFzkK3NXCD3fWT3IIweKRlN9qDeTQ7Ob8BSfZZ 5dp8czc/PBIeKGMx9ui8DWERsejhEj X-Google-Smtp-Source: AGHT+IGmzxfk1x8fnehx5VWjAyq7IZc2z//0VTUwWlUQBtF4GSFWekOx3YeV0AJtLvY7p2RmMGNybQ== X-Received: by 2002:a05:600c:3110:b0:46e:7247:cbc0 with SMTP id 5b1f17b1804b1-4775cdcfb32mr2222405e9.18.1762279835799; Tue, 04 Nov 2025 10:10:35 -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.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:35 -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 27/30] drm/sun4i: mixer: split out layer config Date: Tue, 4 Nov 2025 19:09:39 +0100 Message-ID: <20251104180942.61538-28-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O Later special plane only driver for DE33 will provide separate configuration. This change will also help layer driver migrate away from mixer structure. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- Changes in v2: - added missing .de_type kerneldoc drivers/gpu/drm/sun4i/sun8i_csc.c | 2 +- drivers/gpu/drm/sun4i/sun8i_mixer.c | 152 +++++++++++++++--------- drivers/gpu/drm/sun4i/sun8i_mixer.h | 33 +++-- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +- drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 2 +- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 8 +- 6 files changed, 123 insertions(+), 76 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c index c371e94b95bd..30779db2f9b2 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.c +++ b/drivers/gpu/drm/sun4i/sun8i_csc.c @@ -240,7 +240,7 @@ void sun8i_csc_config(struct sun8i_layer *layer, return; } - base = ccsc_base[layer->mixer->cfg->ccsc][layer->channel]; + base = ccsc_base[layer->mixer->cfg->lay_cfg.ccsc][layer->channel]; sun8i_csc_setup(layer->regs, base, mode, state->color_encoding, diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index da3148f42646..4559e959a32d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -703,137 +703,173 @@ static void sun8i_mixer_remove(struct platform_device *pdev) } static const struct sun8i_mixer_cfg sun8i_a83t_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0xf, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, - .vi_scaler_num = 1, - .scaler_mask = 0xf, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun8i_a83t_mixer1_cfg = { - .ccsc = CCSC_MIXER1_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER1_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0x3, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, - .vi_scaler_num = 1, - .scaler_mask = 0x3, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun8i_h3_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0xf, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 432000000, - .vi_scaler_num = 1, - .scaler_mask = 0xf, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun8i_r40_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0xf, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0xf, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun8i_r40_mixer1_cfg = { - .ccsc = CCSC_MIXER1_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER1_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0x3, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0x3, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun8i_v3s_mixer_cfg = { - .de_type = SUN8I_MIXER_DE2, - .vi_num = 2, - .ui_num = 1, - .vi_scaler_num = 2, - .scaler_mask = 0x3, - .scanline_yuv = 2048, - .ccsc = CCSC_MIXER0_LAYOUT, - .mod_rate = 150000000, + .lay_cfg = { + .ccsc = CCSC_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 2, + .scaler_mask = 0x3, + .scanline_yuv = 2048, + }, + .de_type = SUN8I_MIXER_DE2, + .mod_rate = 150000000, + .vi_num = 2, + .ui_num = 1, }; static const struct sun8i_mixer_cfg sun20i_d1_mixer0_cfg = { - .ccsc = CCSC_D1_MIXER0_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_D1_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0x3, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0x3, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun20i_d1_mixer1_cfg = { - .ccsc = CCSC_MIXER1_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER1_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0x1, + .scanline_yuv = 1024, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0x1, - .scanline_yuv = 1024, - .de2_fcc_alpha = 1, .ui_num = 0, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun50i_a64_mixer0_cfg = { - .ccsc = CCSC_MIXER0_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER0_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0xf, + .scanline_yuv = 4096, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0xf, - .scanline_yuv = 4096, - .de2_fcc_alpha = 1, .ui_num = 3, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun50i_a64_mixer1_cfg = { - .ccsc = CCSC_MIXER1_LAYOUT, + .lay_cfg = { + .ccsc = CCSC_MIXER1_LAYOUT, + .de_type = SUN8I_MIXER_DE2, + .vi_scaler_num = 1, + .scaler_mask = 0x3, + .scanline_yuv = 2048, + .de2_fcc_alpha = 1, + }, .de_type = SUN8I_MIXER_DE2, .mod_rate = 297000000, - .vi_scaler_num = 1, - .scaler_mask = 0x3, - .scanline_yuv = 2048, - .de2_fcc_alpha = 1, .ui_num = 1, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun50i_h6_mixer0_cfg = { + .lay_cfg = { + .de_type = SUN8I_MIXER_DE3, + .vi_scaler_num = 1, + .scaler_mask = 0xf, + .scanline_yuv = 4096, + }, .de_type = SUN8I_MIXER_DE3, .mod_rate = 600000000, - .vi_scaler_num = 1, - .scaler_mask = 0xf, - .scanline_yuv = 4096, .ui_num = 3, .vi_num = 1, }; static const struct sun8i_mixer_cfg sun50i_h616_mixer0_cfg = { + .lay_cfg = { + .de_type = SUN8I_MIXER_DE33, + .scaler_mask = 0xf, + .scanline_yuv = 4096, + }, .de_type = SUN8I_MIXER_DE33, .mod_rate = 600000000, - .scaler_mask = 0xf, - .scanline_yuv = 4096, .ui_num = 3, .vi_num = 1, .map = {0, 6, 7, 8}, diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index 8c2e8005fc5b..5b6068755ad1 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -164,34 +164,45 @@ enum sun8i_mixer_type { }; /** - * struct sun8i_mixer_cfg - mixer HW configuration - * @vi_num: number of VI channels - * @ui_num: number of UI channels + * struct sun8i_layer_cfg - layer configuration * @vi_scaler_num: Number of VI scalers. Used on DE2 and DE3. * @scaler_mask: bitmask which tells which channel supports scaling * First, scaler supports for VI channels is defined and after that, scaler * support for UI channels. For example, if mixer has 2 VI channels without * scaler and 2 UI channels with scaler, bitmask would be 0xC. * @ccsc: select set of CCSC base addresses from the enumeration above. - * @mod_rate: module clock rate that needs to be set in order to have - * a functional block. * @de_type: sun8i_mixer_type enum representing the display engine generation. * @scaline_yuv: size of a scanline for VI scaler for YUV formats. * @de2_fcc_alpha: use FCC for missing DE2 VI alpha capability * Most DE2 cores has FCC. If number of VI planes is one, enable this. - * @map: channel map for DE variants processing YUV separately (DE33) */ -struct sun8i_mixer_cfg { - int vi_num; - int ui_num; +struct sun8i_layer_cfg { unsigned int vi_scaler_num; int scaler_mask; int ccsc; - unsigned long mod_rate; unsigned int de_type; unsigned int scanline_yuv; unsigned int de2_fcc_alpha : 1; - unsigned int map[6]; +}; + +/** + * struct sun8i_mixer_cfg - mixer HW configuration + * @lay_cfg: layer configuration + * @vi_num: number of VI channels + * @ui_num: number of UI channels + * @de_type: sun8i_mixer_type enum representing the display engine generation. + * @mod_rate: module clock rate that needs to be set in order to have + * a functional block. + * @map: channel map for DE variants processing YUV separately (DE33) + */ + +struct sun8i_mixer_cfg { + struct sun8i_layer_cfg lay_cfg; + int vi_num; + int ui_num; + unsigned int de_type; + unsigned long mod_rate; + unsigned int map[6]; }; struct sun8i_mixer { diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index e65dc313c87d..f71f5a8d0427 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -190,7 +190,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane, min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; - if (layer->mixer->cfg->scaler_mask & BIT(layer->channel)) { + if (layer->mixer->cfg->lay_cfg.scaler_mask & BIT(layer->channel)) { min_scale = SUN8I_UI_SCALER_SCALE_MIN; max_scale = SUN8I_UI_SCALER_SCALE_MAX; } diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index 0ba1482688d7..4d06c366de7f 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -91,7 +91,7 @@ static const u32 lan2coefftab16[240] = { static u32 sun8i_ui_scaler_base(struct sun8i_mixer *mixer, int channel) { - int offset = mixer->cfg->vi_scaler_num; + int offset = mixer->cfg->lay_cfg.vi_scaler_num; if (mixer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_VI_SCALER_UNIT_BASE + diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 8eb3f167e664..0286e7322612 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -53,7 +53,7 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); - if (mixer->cfg->de2_fcc_alpha) { + if (mixer->cfg->lay_cfg.de2_fcc_alpha) { regmap_write(layer->regs, SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, SUN8I_MIXER_FCC_GLOBAL_ALPHA(state->alpha >> 8)); @@ -152,7 +152,7 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, } /* it seems that every RGB scaler has buffer for 2048 pixels */ - scanline = subsampled ? mixer->cfg->scanline_yuv : 2048; + scanline = subsampled ? mixer->cfg->lay_cfg.scanline_yuv : 2048; if (src_w > scanline) { DRM_DEBUG_DRIVER("Using horizontal coarse scaling\n"); @@ -278,7 +278,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; - if (layer->mixer->cfg->scaler_mask & BIT(layer->channel)) { + if (layer->mixer->cfg->lay_cfg.scaler_mask & BIT(layer->channel)) { min_scale = SUN8I_VI_SCALER_SCALE_MIN; max_scale = SUN8I_VI_SCALER_SCALE_MAX; } @@ -452,7 +452,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - if (mixer->cfg->de2_fcc_alpha || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (mixer->cfg->lay_cfg.de2_fcc_alpha || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { ret = drm_plane_create_alpha_property(&layer->plane); if (ret) { dev_err(drm->dev, "Couldn't add alpha property\n"); From patchwork Tue Nov 4 18:09:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 656 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 15623347FEB for ; Tue, 4 Nov 2025 18:10:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279842; cv=none; b=pq+EXNcp7V2Z1yvnszoyA7AtG7Cltl28xEREOTiq+uazxeVf2RXsa0ULes0BMgWAdFOYu33qaU90xMpZrjcC6yz5GXA+mNCPGkN008VS70UlM2gqn3dGb3YtVVgWskKItXfUsOXmQJqaxV5pxzyBEkDiH32UNAycB6/6oCxp3vA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279842; c=relaxed/simple; bh=AwNsBEXtld8Vm9hp9BoKpLqlKkVlUZll6jhZVMKLZHA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FhjYbL/z72B/ye90xmikbJtmfvwMgl87aqK1FNk4YfSpMWQjV9Dhk965rzzZugzq933ziMOl5XcqfSTBT1gr+hsam6+QcVAgLWS8WU5FhFnBLXftx01V/DPyl0AzcrjgWVZfV73FwTmXAvbQD+YwcY/l5ZwRhD6DzhE7cE4nJrQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CdwLi/uz; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CdwLi/uz" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-471b80b994bso75238525e9.3 for ; Tue, 04 Nov 2025 10:10:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279837; x=1762884637; 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; bh=ZGi+vdnTcOUyDYZpLxnZDrsIWdYfcQsWdysVijdDOkg=; b=CdwLi/uzHgGScl9YsRhojGTefz5Gf8I9KlBOdo6kcHPE6oSdwnIKNhw7kyHJ/K8iqS FaqMIiHtreoJhplMF8cd/ng8DLBhfKbsrJEKfREvcDe1Sj/tieQ2wQqlTqQS1l9HfKmH h3tLMHSCjTfvYYZuGdzMjq8tdUgB3wpcP/hHvSTkDCJUcWoiENmlGU7x+swGskTktt9a g1HMpfYEiM+GXQDx2aFtw3bekiWlXf5KnOzmhycE4pjFtF6//3mEWMuZgIxAuuQJuNfD sHW2pGMOUnHfaQBUO67mvsgwP2PEDWA67Ywg2aw2Tq73rfX4uvmub9gn6qnkJeiqqGGB hXqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279837; x=1762884637; 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=ZGi+vdnTcOUyDYZpLxnZDrsIWdYfcQsWdysVijdDOkg=; b=EgYgQbNJ8EE/6bnHE91I6t5WmeGZObbaMH8Jy02cqlVFYGnYAy/dYb2cDEa/IYHAvZ MGPEmmrMh/t2q5WXoTVvcYCjHDz9tTzsYIdjIzNeYpZoaXTcsVbJ7mnWeV65adiwcF2c 2iVJ6DWFPefCb1Ghtn7xvhaBI+3aQrL1Zs+qOaC6kV/rThKe9lcZS9kyZ8e41Lhanpm0 gzuUKXFwKUmZuFEuMEIT+4EMdZ62NgxfntsUwmsjz7vKUsoZ/KSCLus6IXB8NdWHhOl1 6D1Z4IjF3UyYnUOh1u71hIfVr1EKxHcEOWWDQOQOHPhOhKMnERd3IZ7Sc2uZa93GD6XP K1bg== X-Forwarded-Encrypted: i=1; AJvYcCVdQJXosbvodGYVwVuDxX78QxIQpBEJ68/R7xs0kzK97WRS7Dz6ZTgIBOlmvvGlyxD+LCMXzYb/TX5Caw==@lists.linux.dev X-Gm-Message-State: AOJu0Yxqs8I9ZK1APssZGrNXN1QL0RrSiPSJZYC0fqm4cuJq2WE5YJBP spDb/JLc/RtvAV6snR9vfURPdoXDIggNtEJQrmcWeBgFPRSPtSuqoJhV X-Gm-Gg: ASbGncu5v9enLAqTGSfBjfZ7Ug9vRDnNjSQCB75RcL8Us5ICIensHebbx6Ow5bdRhSn DwneWjHPjhMP6GqZnhG1F6/6ejFHg0/VdD+RNkE4MRaYRekn5Y8EepAuL48i0iye6SbwyVxWGt3 3bJphomnKyNr9V4055nh1I5Fg7r060ex8BT69V6ERbwlyLPJ1iKIdBAcVc1x3rVRGqSg82eZPTc oH8HZI1K4TlTp7jGrAl8OUS5wPdR4vc/wQ4LzxqOtAKZlXcA5pNuEoY73ALfQpvcn4TXc2eNigt JAKoFJ/zBziwRHy2+d/GU9w6xMrBoQKFxaE3UO3PBijLCzG5r4tvPUozLmHjeAME14Co2nYogeR hHWqg8sVl+dwxBygFczrjU8GSK/7N71i8hQr6oVJcHUz/xLodbSSYM0YiAj/BMJsV2f/P9A8Ld8 zUfnZJfbOWr+7WChE7O2+eLxmgzoDa X-Google-Smtp-Source: AGHT+IHIwFu5ZH0/QDn36lvi+N0EaA4mwC2bsFB40ThRoEib3Q1pusV/RILcIs1eoSSs5+dZbwnBew== X-Received: by 2002:a05:600c:3f0c:b0:471:1435:b0ea with SMTP id 5b1f17b1804b1-4775cdf4413mr1867405e9.24.1762279837126; Tue, 04 Nov 2025 10:10:37 -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.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:36 -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 28/30] drm/sun4i: layer: replace mixer with layer struct Date: Tue, 4 Nov 2025 19:09:40 +0100 Message-ID: <20251104180942.61538-29-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O This allows to almost completely decouple layer code from mixer. This is important for DE33. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_csc.c | 4 ++-- drivers/gpu/drm/sun4i/sun8i_mixer.c | 6 +++-- drivers/gpu/drm/sun4i/sun8i_mixer.h | 27 ++++++++++----------- drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 24 +++++++++---------- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 3 ++- drivers/gpu/drm/sun4i/sun8i_ui_scaler.c | 16 ++++++------- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 31 ++++++++++++------------- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 3 ++- drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 19 +++++++-------- 9 files changed, 66 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c index 30779db2f9b2..ce81c12f511d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_csc.c +++ b/drivers/gpu/drm/sun4i/sun8i_csc.c @@ -233,14 +233,14 @@ void sun8i_csc_config(struct sun8i_layer *layer, u32 mode = sun8i_csc_get_mode(state); u32 base; - if (layer->mixer->cfg->de_type == SUN8I_MIXER_DE3) { + if (layer->cfg->de_type == SUN8I_MIXER_DE3) { sun8i_de3_ccsc_setup(layer->regs, layer->channel, mode, state->color_encoding, state->color_range); return; } - base = ccsc_base[layer->mixer->cfg->lay_cfg.ccsc][layer->channel]; + base = ccsc_base[layer->cfg->ccsc][layer->channel]; sun8i_csc_setup(layer->regs, base, mode, state->color_encoding, diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 4559e959a32d..50fc20100c90 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -338,7 +338,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, layer = sun8i_vi_layer_init_one(drm, mixer, type, mixer->engine.regs, i, - phy_index, plane_cnt); + phy_index, plane_cnt, + &mixer->cfg->lay_cfg); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize overlay plane\n"); @@ -363,7 +364,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, layer = sun8i_ui_layer_init_one(drm, mixer, type, mixer->engine.regs, index, - phy_index, plane_cnt); + phy_index, plane_cnt, + &mixer->cfg->lay_cfg); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", i ? "overlay" : "primary"); diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index 5b6068755ad1..3948023e095b 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -225,13 +225,14 @@ enum { }; struct sun8i_layer { - struct drm_plane plane; - struct sun8i_mixer *mixer; - int type; - int index; - int channel; - int overlay; - struct regmap *regs; + struct drm_plane plane; + struct sun8i_mixer *mixer; + int type; + int index; + int channel; + int overlay; + struct regmap *regs; + const struct sun8i_layer_cfg *cfg; }; static inline struct sun8i_layer * @@ -260,14 +261,14 @@ sun8i_blender_regmap(struct sun8i_mixer *mixer) } static inline u32 -sun8i_channel_base(struct sun8i_mixer *mixer, int channel) +sun8i_channel_base(struct sun8i_layer *layer) { - if (mixer->cfg->de_type == SUN8I_MIXER_DE33) - return DE33_CH_BASE + channel * DE33_CH_SIZE; - else if (mixer->cfg->de_type == SUN8I_MIXER_DE3) - return DE3_CH_BASE + channel * DE3_CH_SIZE; + if (layer->cfg->de_type == SUN8I_MIXER_DE33) + return DE33_CH_BASE + layer->channel * DE33_CH_SIZE; + else if (layer->cfg->de_type == SUN8I_MIXER_DE3) + return DE3_CH_BASE + layer->channel * DE3_CH_SIZE; else - return DE2_CH_BASE + channel * DE2_CH_SIZE; + return DE2_CH_BASE + layer->channel * DE2_CH_SIZE; } int sun8i_mixer_drm_format_to_hw(u32 format, u32 *hw_format); diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index f71f5a8d0427..dc4298590024 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -27,10 +27,9 @@ static void sun8i_ui_layer_disable(struct sun8i_layer *layer) { - struct sun8i_mixer *mixer = layer->mixer; - u32 ch_base = sun8i_channel_base(mixer, layer->channel); + u32 ch_base = sun8i_channel_base(layer); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, layer->overlay), 0); } @@ -38,11 +37,10 @@ static void sun8i_ui_layer_update_attributes(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; - struct sun8i_mixer *mixer = layer->mixer; const struct drm_format_info *fmt; u32 val, ch_base, hw_fmt; - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); fmt = state->fb->format; sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); @@ -61,7 +59,6 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; - struct sun8i_mixer *mixer = layer->mixer; u32 src_w, src_h, dst_w, dst_h; u32 outsize, insize; u32 hphase, vphase; @@ -70,7 +67,7 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, DRM_DEBUG_DRIVER("Updating UI channel %d overlay %d\n", layer->channel, layer->overlay); - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); src_w = drm_rect_width(&state->src) >> 16; src_h = drm_rect_height(&state->src) >> 16; @@ -102,7 +99,7 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, hscale = state->src_w / state->crtc_w; vscale = state->src_h / state->crtc_h; - if (mixer->cfg->de_type == SUN8I_MIXER_DE33) { + if (layer->cfg->de_type == SUN8I_MIXER_DE33) { sun8i_vi_scaler_setup(layer, src_w, src_h, dst_w, dst_h, hscale, vscale, hphase, vphase, state->fb->format); @@ -114,7 +111,7 @@ static void sun8i_ui_layer_update_coord(struct sun8i_layer *layer, } } else { DRM_DEBUG_DRIVER("HW scaling is not needed\n"); - if (mixer->cfg->de_type == SUN8I_MIXER_DE33) + if (layer->cfg->de_type == SUN8I_MIXER_DE33) sun8i_vi_scaler_enable(layer, false); else sun8i_ui_scaler_enable(layer, false); @@ -125,14 +122,13 @@ static void sun8i_ui_layer_update_buffer(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; - struct sun8i_mixer *mixer = layer->mixer; struct drm_framebuffer *fb = state->fb; struct drm_gem_dma_object *gem; dma_addr_t dma_addr; u32 ch_base; int bpp; - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); /* Get the physical address of the buffer in memory */ gem = drm_fb_dma_get_gem_obj(fb, 0); @@ -190,7 +186,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane, min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; - if (layer->mixer->cfg->lay_cfg.scaler_mask & BIT(layer->channel)) { + if (layer->cfg->scaler_mask & BIT(layer->channel)) { min_scale = SUN8I_UI_SCALER_SCALE_MIN; max_scale = SUN8I_UI_SCALER_SCALE_MAX; } @@ -266,7 +262,8 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, - int plane_cnt) + int plane_cnt, + const struct sun8i_layer_cfg *cfg) { struct sun8i_layer *layer; int ret; @@ -281,6 +278,7 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, layer->channel = phy_index; layer->overlay = 0; layer->regs = regs; + layer->cfg = cfg; /* possible crtcs are set later */ ret = drm_universal_plane_init(drm, &layer->plane, 0, diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index 9383c3364df3..c357b39999ff 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -54,5 +54,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, - int plane_cnt); + int plane_cnt, + const struct sun8i_layer_cfg *cfg); #endif /* _SUN8I_UI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c index 4d06c366de7f..a178da8f532a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_scaler.c @@ -89,18 +89,18 @@ static const u32 lan2coefftab16[240] = { 0x0b1c1603, 0x0d1c1502, 0x0e1d1401, 0x0f1d1301, }; -static u32 sun8i_ui_scaler_base(struct sun8i_mixer *mixer, int channel) +static u32 sun8i_ui_scaler_base(struct sun8i_layer *layer) { - int offset = mixer->cfg->lay_cfg.vi_scaler_num; + int offset = layer->cfg->vi_scaler_num; - if (mixer->cfg->de_type == SUN8I_MIXER_DE3) + if (layer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_VI_SCALER_UNIT_BASE + DE3_VI_SCALER_UNIT_SIZE * offset + - DE3_UI_SCALER_UNIT_SIZE * (channel - offset); + DE3_UI_SCALER_UNIT_SIZE * (layer->channel - offset); else return DE2_VI_SCALER_UNIT_BASE + DE2_VI_SCALER_UNIT_SIZE * offset + - DE2_UI_SCALER_UNIT_SIZE * (channel - offset); + DE2_UI_SCALER_UNIT_SIZE * (layer->channel - offset); } static int sun8i_ui_scaler_coef_index(unsigned int step) @@ -129,10 +129,9 @@ static int sun8i_ui_scaler_coef_index(unsigned int step) void sun8i_ui_scaler_enable(struct sun8i_layer *layer, bool enable) { - struct sun8i_mixer *mixer = layer->mixer; u32 val, base; - base = sun8i_ui_scaler_base(mixer, layer->channel); + base = sun8i_ui_scaler_base(layer); if (enable) val = SUN8I_SCALER_GSU_CTRL_EN | @@ -147,12 +146,11 @@ void sun8i_ui_scaler_setup(struct sun8i_layer *layer, u32 src_w, u32 src_h, u32 dst_w, u32 dst_h, u32 hscale, u32 vscale, u32 hphase, u32 vphase) { - struct sun8i_mixer *mixer = layer->mixer; u32 insize, outsize; int i, offset; u32 base; - base = sun8i_ui_scaler_base(mixer, layer->channel); + base = sun8i_ui_scaler_base(layer); hphase <<= SUN8I_UI_SCALER_PHASE_FRAC - 16; vphase <<= SUN8I_UI_SCALER_PHASE_FRAC - 16; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 0286e7322612..afe38ea03beb 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -20,10 +20,9 @@ static void sun8i_vi_layer_disable(struct sun8i_layer *layer) { - struct sun8i_mixer *mixer = layer->mixer; - u32 ch_base = sun8i_channel_base(mixer, layer->channel); + u32 ch_base = sun8i_channel_base(layer); - regmap_write(mixer->engine.regs, + regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), 0); } @@ -31,11 +30,10 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; - struct sun8i_mixer *mixer = layer->mixer; const struct drm_format_info *fmt; u32 val, ch_base, hw_fmt; - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); fmt = state->fb->format; sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); @@ -43,7 +41,7 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, if (!fmt->is_yuv) val |= SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE; val |= SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN; - if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (layer->cfg->de_type >= SUN8I_MIXER_DE3) { val |= SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA(state->alpha >> 8); val |= (state->alpha == DRM_BLEND_ALPHA_OPAQUE) ? SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_PIXEL : @@ -53,7 +51,7 @@ static void sun8i_vi_layer_update_attributes(struct sun8i_layer *layer, regmap_write(layer->regs, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, layer->overlay), val); - if (mixer->cfg->lay_cfg.de2_fcc_alpha) { + if (layer->cfg->de2_fcc_alpha) { regmap_write(layer->regs, SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG, SUN8I_MIXER_FCC_GLOBAL_ALPHA(state->alpha >> 8)); @@ -77,7 +75,7 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, DRM_DEBUG_DRIVER("Updating VI channel %d overlay %d\n", layer->channel, layer->overlay); - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); src_w = drm_rect_width(&state->src) >> 16; src_h = drm_rect_height(&state->src) >> 16; @@ -152,7 +150,7 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, } /* it seems that every RGB scaler has buffer for 2048 pixels */ - scanline = subsampled ? mixer->cfg->lay_cfg.scanline_yuv : 2048; + scanline = subsampled ? layer->cfg->scanline_yuv : 2048; if (src_w > scanline) { DRM_DEBUG_DRIVER("Using horizontal coarse scaling\n"); @@ -194,7 +192,6 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; - struct sun8i_mixer *mixer = layer->mixer; struct drm_framebuffer *fb = state->fb; const struct drm_format_info *format = fb->format; struct drm_gem_dma_object *gem; @@ -203,7 +200,7 @@ static void sun8i_vi_layer_update_buffer(struct sun8i_layer *layer, u32 ch_base; int i; - ch_base = sun8i_channel_base(mixer, layer->channel); + ch_base = sun8i_channel_base(layer); /* Adjust x and y to be dividable by subsampling factor */ src_x = (state->src.x1 >> 16) & ~(format->hsub - 1); @@ -278,7 +275,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; - if (layer->mixer->cfg->lay_cfg.scaler_mask & BIT(layer->channel)) { + if (layer->cfg->scaler_mask & BIT(layer->channel)) { min_scale = SUN8I_VI_SCALER_SCALE_MIN; max_scale = SUN8I_VI_SCALER_SCALE_MAX; } @@ -414,7 +411,8 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, - int plane_cnt) + int plane_cnt, + const struct sun8i_layer_cfg *cfg) { u32 supported_encodings, supported_ranges; unsigned int format_count; @@ -432,8 +430,9 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, layer->channel = phy_index; layer->overlay = 0; layer->regs = regs; + layer->cfg = cfg; - if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (layer->cfg->de_type >= SUN8I_MIXER_DE3) { formats = sun8i_vi_layer_de3_formats; format_count = ARRAY_SIZE(sun8i_vi_layer_de3_formats); } else { @@ -452,7 +451,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, return ERR_PTR(ret); } - if (mixer->cfg->lay_cfg.de2_fcc_alpha || mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (layer->cfg->de2_fcc_alpha || layer->cfg->de_type >= SUN8I_MIXER_DE3) { ret = drm_plane_create_alpha_property(&layer->plane); if (ret) { dev_err(drm->dev, "Couldn't add alpha property\n"); @@ -469,7 +468,7 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, supported_encodings = BIT(DRM_COLOR_YCBCR_BT601) | BIT(DRM_COLOR_YCBCR_BT709); - if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) + if (layer->cfg->de_type >= SUN8I_MIXER_DE3) supported_encodings |= BIT(DRM_COLOR_YCBCR_BT2020); supported_ranges = BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) | diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index 89d0c32e63cf..6ec68baa2409 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -59,5 +59,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, - int plane_cnt); + int plane_cnt, + const struct sun8i_layer_cfg *cfg); #endif /* _SUN8I_VI_LAYER_H_ */ diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c index fe0bb1de6f08..3dec4eeb1ba2 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_scaler.c @@ -833,17 +833,17 @@ static const u32 bicubic4coefftab32[480] = { 0x1012110d, 0x1012110d, 0x1013110c, 0x1013110c, }; -static u32 sun8i_vi_scaler_base(struct sun8i_mixer *mixer, int channel) +static u32 sun8i_vi_scaler_base(struct sun8i_layer *layer) { - if (mixer->cfg->de_type == SUN8I_MIXER_DE33) + if (layer->cfg->de_type == SUN8I_MIXER_DE33) return DE33_VI_SCALER_UNIT_BASE + - DE33_CH_SIZE * channel; - else if (mixer->cfg->de_type == SUN8I_MIXER_DE3) + DE33_CH_SIZE * layer->channel; + else if (layer->cfg->de_type == SUN8I_MIXER_DE3) return DE3_VI_SCALER_UNIT_BASE + - DE3_VI_SCALER_UNIT_SIZE * channel; + DE3_VI_SCALER_UNIT_SIZE * layer->channel; else return DE2_VI_SCALER_UNIT_BASE + - DE2_VI_SCALER_UNIT_SIZE * channel; + DE2_VI_SCALER_UNIT_SIZE * layer->channel; } static int sun8i_vi_scaler_coef_index(unsigned int step) @@ -914,7 +914,7 @@ void sun8i_vi_scaler_enable(struct sun8i_layer *layer, bool enable) { u32 val, base; - base = sun8i_vi_scaler_base(layer->mixer, layer->channel); + base = sun8i_vi_scaler_base(layer); if (enable) val = SUN8I_SCALER_VSU_CTRL_EN | @@ -931,12 +931,11 @@ void sun8i_vi_scaler_setup(struct sun8i_layer *layer, u32 hscale, u32 vscale, u32 hphase, u32 vphase, const struct drm_format_info *format) { - struct sun8i_mixer *mixer = layer->mixer; u32 chphase, cvphase; u32 insize, outsize; u32 base; - base = sun8i_vi_scaler_base(mixer, layer->channel); + base = sun8i_vi_scaler_base(layer); hphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16; vphase <<= SUN8I_VI_SCALER_PHASE_FRAC - 16; @@ -960,7 +959,7 @@ void sun8i_vi_scaler_setup(struct sun8i_layer *layer, cvphase = vphase; } - if (mixer->cfg->de_type >= SUN8I_MIXER_DE3) { + if (layer->cfg->de_type >= SUN8I_MIXER_DE3) { u32 val; if (format->hsub == 1 && format->vsub == 1) From patchwork Tue Nov 4 18:09:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 655 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 89FE3347FCB for ; Tue, 4 Nov 2025 18:10:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279842; cv=none; b=mST3unULc77DUUX1p8vZKibT+lySfZ6CuVsWjmxG2X+qINP6KKrLoTACycip0fh40oOKylkRlxsabYKpBZwi1HOy4euaDgvvfcA3Uoe/79PL3bBpUf8A+N5RYPeRrbHvH0m04eWSOx87W52ai4h/MvgGRHOuKpqsLDccMdjGEog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279842; c=relaxed/simple; bh=tn52gI++VV08p/JOXLBb4YMr7yaoLYJuCkLmlVFTHEs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cS2kVDXAc95J9NCDcybINwoKgDFROF4wk9zhpG3DhM3h9RgkSEkbcprqi+W4J0UU3GFyq7UI2HyNt2WBzgSXmD+Kf5J/fj7014maxAPnhArVgeLfJCYPqdox2Jguf0wRICPVsBlU+E/3ZbssG5A5Bbr9xFJGlXnVKK6F7KZDlDU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bgbmQVbf; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bgbmQVbf" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-47112edf9f7so47176205e9.0 for ; Tue, 04 Nov 2025 10:10:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279838; x=1762884638; 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; bh=ZdGrKH1QE0kG7REtfLe4gBCoW5I7PDPHN1PH2jaotk0=; b=bgbmQVbfty8hfXvAj5eRDebLPAF1WHc9PkW8G6DMMt0Gnh8WSu5X5CVmnWq2qZQUQQ 5WqZURzNrdkjdz1gfGh4lOyIh5SzbpbnQyFznGSFeU61XoNDs1UYuUQn0hEE6yezxEo0 aLVc3vuZLYpb+jg87LpgIM2OSqb2i2qjN3221nN1IG66cCCT636cTTlecuAz7nniaGtd 8VbgQdH2aua5rlBZB3vfZtqQzFHxBoaGt+3YCS1VAQm4IVyk+TFfhmRzwNJj83dlMRNN 7l0oW5u9Ww+34b3/EV8SEVhq8ZgR2HBPxARgHckIYHZVdI4jt6AQmaV56rr33eq90uR7 W8aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279838; x=1762884638; 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=ZdGrKH1QE0kG7REtfLe4gBCoW5I7PDPHN1PH2jaotk0=; b=KQnLydFfGZ50xXT0S0dujftZKUGZke9+bbZZyHve73+Ow7keq/OoGd6cSJV2l6WWGU tgAaAyB5wfNllWjp3Un/BPOgBQUcThmbx5/bx6eGMhgs5UgNmd/L8si/2aofrMX5U40h Rh0SwrnU+cOYep1BdUUzf+xxc9S5A+FzttHsdWLoKyTuTI0m6TtTn2xGkt4WbRrsyhpC fjZT9feauo0Ee6LfWFPJuUNXyeCF3Z+6+SpnwOAkPJ8XPpas00EvGzfmneQ0K7qU3kqS m4z/ZblmqJ8scY+f66W6fpoUVNVIaFeQaKEQ9NbPxNbFCqH8shCvJ9Fp4dQXDHPezgKF w9RQ== X-Forwarded-Encrypted: i=1; AJvYcCWn+6gi2EOCYFaKP72BSRx/pW41jSoZekSOKhmT+2amQYCkGVeyCRAC1ZWVKevXzfh8XCmcq+7wY+pzOQ==@lists.linux.dev X-Gm-Message-State: AOJu0Yw/bsDQf3BsXdxjGbapvwf86V6GwCv9qrPqWaJrt0nzgHI+Nbwt 2/jrOmV1BZXyApRL5bOWyEP0jgvGn7sf2PzdkAozh899m0i03IibbUnu X-Gm-Gg: ASbGncuO4SiR+X1bsdPI0p5q7VcgmlAgUNels4Qyya6dN5JzaBGj+XQpwFYHX13gPUe zGZgrdj1t0lUMHEvDSIjsIHmq55Ajid3p1h0PtFIS6VL/sEi/IBR+ytWFB6+I/cnVZKUmZ9k0Yj 4vIdKXzRtpyEPqVxiC0s8scCGLN53VgKelW5U6QiW/SsDcn+rOse1usgLU0DW6FJh/Yc2MT4PzI Ic4I5dnNLuVN/ijAPNmd/UOcPVZxf/DYY5nOQZYSuKlbVyzPKv7I3olP38cfCZ4AAdUvezlcBP+ 62NFqdghuTM0rt6hZScdieP19fal7rm3Ijm5680H/8yRl4df8DBu/WW8Z7YsCgdDC2QbBDaDu39 89FkJW39rjLmUHcZmarqDNtvNjvZoUpZ9/G4LzgoMql+QMN4OeegePREemGF674cFy7Exye2fUL /tOCdT9miwXOp6UwLY5A== X-Google-Smtp-Source: AGHT+IE6YV6xR2I6/+NCWHLkg0DglaeA9v7PSL0SkiyT31i7Bh4LMca9EcGx6brDtSF2nS0sWtPQUg== X-Received: by 2002:a05:600c:620d:b0:475:f16b:bcbf with SMTP id 5b1f17b1804b1-4775cdc148dmr2023655e9.14.1762279838428; Tue, 04 Nov 2025 10:10:38 -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.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:38 -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 29/30] drm/sun4i: vi_scaler: Find mixer from crtc Date: Tue, 4 Nov 2025 19:09:41 +0100 Message-ID: <20251104180942.61538-30-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O With "floating" planes in DE33, mixer can't be stored in layer structure anymore. Find mixer using currently bound crtc. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index afe38ea03beb..4534998af825 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -13,6 +13,7 @@ #include #include +#include "sun4i_crtc.h" #include "sun8i_csc.h" #include "sun8i_mixer.h" #include "sun8i_vi_layer.h" @@ -62,8 +63,9 @@ static void sun8i_vi_layer_update_coord(struct sun8i_layer *layer, struct drm_plane *plane) { struct drm_plane_state *state = plane->state; + struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(state->crtc); + struct sun8i_mixer *mixer = engine_to_sun8i_mixer(scrtc->engine); const struct drm_format_info *format = state->fb->format; - struct sun8i_mixer *mixer = layer->mixer; u32 src_w, src_h, dst_w, dst_h; u32 outsize, insize; u32 hphase, vphase; From patchwork Tue Nov 4 18:09:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jernej Skrabec X-Patchwork-Id: 654 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 89886348885 for ; Tue, 4 Nov 2025 18:10:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279845; cv=none; b=Nd80W4Llqi8yF692wnG9NOuSaV8m1vcysbG+C1ToHrDSNDgWsF1WoUgwYN4dvTo4ss+qYCk9p1G5RmrJ9mjZFzFeYtOG0H8/7neIRoIsBbZbj6tIH5ornTwgunYsWmYgn2ZnK525qaFOn5WlZb8i2Jm144NVP1uAaTtKDI6M7IA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762279845; c=relaxed/simple; bh=pwHyPYs+uvcIMdyUOYcnWKkfT8r4lZYUtB/lROjfyFc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DEaBjpHoZiDLwxleS1rtKnxUNezR+g1qjULmimWqWANRo1P4xJBKvgK5WFUIxpPzM5sZxu2vEVB0KHYhsHG0JdDVgnMSYFlYSkYpK2cf+h5pxIQsz+2FW8sW632VLe5FVVH7dFtXcid7lfbgvr7X+I87+OQgCcjJokD6LoFz97g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=S54GsgUZ; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="S54GsgUZ" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-47118259fd8so43598695e9.3 for ; Tue, 04 Nov 2025 10:10:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762279840; x=1762884640; 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; bh=YhWx9NyFnSAm1+R2uJGg2k+MOsOqirwBc3PWmOrvwX4=; b=S54GsgUZ752VWh6Fa1kn6lCz00BT9UBqzcdKcg/l5O9GgTqanmcPhf46qVH+gQYUvY srht7xBhFXKeqAQSt5EjA07VN7SeqrTP/Q091DWsCW1DVw+a8kfcxkF/FC4b7jOiVfK8 zVNU4UqRLsnxY03AkyKF1SFLBQI/VZt2m8AgfQWBCymAbldN073Vn/IgASY9Fe/W90vW vTQjod5AGY1RhXS9aKyI9qNJ4GuVWxVkDb8l+Xga9WxartxQf05xl+jONRUJULBI7y9s 1pXQppoDRAPwtxmLZAUfoNgYa/h3AJyLHnwCMXK+f5/Njpxbvq2WdQo8uIrG9gDj7A2i eABw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762279840; x=1762884640; 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=YhWx9NyFnSAm1+R2uJGg2k+MOsOqirwBc3PWmOrvwX4=; b=X1/9cCQ7ngPepe2Che7kiVTpGkOQ3dRP2WduNEzMHCjrn5uDaGa6Xl5y13pO5IEOOd GIZwtf2PMtUnKNJvlNLl656aOjHOTRgtnfynWRcRNAUtDgBwl9ghJQDjo4uA0DQK/Og1 2fg9yxgd97HrT1k3t6hd8l4IDEftZedDolt0wkIVdGHHBp2Ajz1FjYXe+V5WamD/8Pdi xLAFixZ8CmXVUNYkAH2IJmaJ+7sZDFh7mLll1LJ87yPasxkT/YJrrA+69BSYz1lqvpRw X5Wcx7LPc/mQH9wqxSFlq5qcFfCYPSE6gsc6AxnT6fab3G0oz+1WcK5smusDJ2t75XSy tQSw== X-Forwarded-Encrypted: i=1; AJvYcCXzIfXItrwGrfMsFZUVSsHN8LV+1SWb9Z3OB/4aSPdFWczG4HFLqqz2v/e90+KaoDIqRTLBFfL3u89Adw==@lists.linux.dev X-Gm-Message-State: AOJu0Yzq1xnlq4g08MZ6iLTEC1AUqX9fnmaHMzKYy2obTwOx2jki7U1E mHTlKd/0QPtDOU/mkJ7hW+POUWF8VBm3iDIUKL9tU3MJES5dOoLEHPdW X-Gm-Gg: ASbGncssbs0D+JtWS98wrA6kAf3MrJo2i/+26meUM0v+NEICOL5/Q7NU2VjqwbPTI5m pgwmqi2eEJgr7U7poXLewG9QZe5yZfihMvtxA0IcCa415YvXI99wpbryIFJw+DDulNeDjRR77oK Q2PH28c2WPR/3fsEzWqUwlC34e1ZDH9qhNmjcx9Z1E5w/hQnPND3AyTjluUEoQcdo0cWlzUTjI9 mvDZZQLm+78bSW4rPnJsoA8FX45uURc9a0XC1D7ImiSnvmmJo81zhjUYD/34jv2pr8Za+8PjE8S 4knRl8n7EOfgTBt0NPlfthjA7M9FxvZVq2IbQZwIqoMFjoLmA9dRK32wndrZafcQFvRAzinpkM+ QAcP/oPYbKABYl73orIXRMx2jF+/fgMm7sus3qcOTzn1LhpasCJbwVmrOoXMl1j04jrOurj4lGJ CTCF0vsDzhhnOALOcuOw== X-Google-Smtp-Source: AGHT+IGiymh/TsRqhwN6N3A97NvG3Bqul+I8b68ZoyUR344zIADNYxpVaPkfS3GzPbVwVEx24Kp+Fg== X-Received: by 2002:a05:600c:6388:b0:458:a7fa:211d with SMTP id 5b1f17b1804b1-4775ce1874bmr2424725e9.29.1762279839699; Tue, 04 Nov 2025 10:10:39 -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.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Nov 2025 10:10:39 -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 30/30] drm/sun4i: Nuke mixer pointer from layer code Date: Tue, 4 Nov 2025 19:09:42 +0100 Message-ID: <20251104180942.61538-31-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> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Status: O It's not used anymore, so remove it. This allows trully independent layer state from mixer. Reviewed-by: Chen-Yu Tsai Tested-by: Ryan Walklin Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun8i_mixer.c | 12 +++++------- drivers/gpu/drm/sun4i/sun8i_mixer.h | 1 - drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 -- drivers/gpu/drm/sun4i/sun8i_ui_layer.h | 1 - drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 -- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 1 - 6 files changed, 5 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c index 50fc20100c90..fde3b677e925 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c @@ -268,7 +268,7 @@ static void sun8i_mixer_commit(struct sunxi_engine *engine, int w, h, x, y, zpos; bool enable; - if (!(plane->possible_crtcs & drm_crtc_mask(crtc)) || layer->mixer != mixer) + if (!(plane->possible_crtcs & drm_crtc_mask(crtc))) continue; plane_state = drm_atomic_get_new_plane_state(state, plane); @@ -336,9 +336,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, if (mixer->cfg->de_type == SUN8I_MIXER_DE33) phy_index = mixer->cfg->map[i]; - layer = sun8i_vi_layer_init_one(drm, mixer, type, - mixer->engine.regs, i, - phy_index, plane_cnt, + layer = sun8i_vi_layer_init_one(drm, type, mixer->engine.regs, + i, phy_index, plane_cnt, &mixer->cfg->lay_cfg); if (IS_ERR(layer)) { dev_err(drm->dev, @@ -362,9 +361,8 @@ static struct drm_plane **sun8i_layers_init(struct drm_device *drm, if (mixer->cfg->de_type == SUN8I_MIXER_DE33) phy_index = mixer->cfg->map[index]; - layer = sun8i_ui_layer_init_one(drm, mixer, type, - mixer->engine.regs, index, - phy_index, plane_cnt, + layer = sun8i_ui_layer_init_one(drm, type, mixer->engine.regs, + index, phy_index, plane_cnt, &mixer->cfg->lay_cfg); if (IS_ERR(layer)) { dev_err(drm->dev, "Couldn't initialize %s plane\n", diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.h b/drivers/gpu/drm/sun4i/sun8i_mixer.h index 3948023e095b..e2f83301aae8 100644 --- a/drivers/gpu/drm/sun4i/sun8i_mixer.h +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h @@ -226,7 +226,6 @@ enum { struct sun8i_layer { struct drm_plane plane; - struct sun8i_mixer *mixer; int type; int index; int channel; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index dc4298590024..185e4ae8a11a 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -258,7 +258,6 @@ static const uint64_t sun8i_layer_modifiers[] = { }; struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, - struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, @@ -272,7 +271,6 @@ struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, if (!layer) return ERR_PTR(-ENOMEM); - layer->mixer = mixer; layer->type = SUN8I_LAYER_TYPE_UI; layer->index = index; layer->channel = phy_index; diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h index c357b39999ff..1581ffc6d4e5 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.h @@ -50,7 +50,6 @@ struct sun8i_mixer; struct sun8i_layer; struct sun8i_layer *sun8i_ui_layer_init_one(struct drm_device *drm, - struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 4534998af825..40008c38003d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -409,7 +409,6 @@ static const uint64_t sun8i_layer_modifiers[] = { }; struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, - struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, int index, int phy_index, @@ -426,7 +425,6 @@ struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, if (!layer) return ERR_PTR(-ENOMEM); - layer->mixer = mixer; layer->type = SUN8I_LAYER_TYPE_VI; layer->index = index; layer->channel = phy_index; diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index 6ec68baa2409..29cc5573691f 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -55,7 +55,6 @@ struct sun8i_mixer; struct sun8i_layer; struct sun8i_layer *sun8i_vi_layer_init_one(struct drm_device *drm, - struct sun8i_mixer *mixer, enum drm_plane_type type, struct regmap *regs, int index, int phy_index,