Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp2128674ybf; Mon, 2 Mar 2020 02:32:53 -0800 (PST) X-Google-Smtp-Source: APXvYqzuC924TcTj3VVEX1aRCDhS1BdK4tGYexyYkQLu/W/mHwcFu+lE6LqiABR32Gpxzww+7vMV X-Received: by 2002:a9d:8b5:: with SMTP id 50mr12314933otf.362.1583145173362; Mon, 02 Mar 2020 02:32:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583145173; cv=none; d=google.com; s=arc-20160816; b=Y/5eSI1lyYCpsxKrti/kkuMnxRVnj5M99kcYKJQWirg+OqsrJq4ZfCEjbaylAfaPEF uFF5Kwnl08/XkkZNfUCBak6QTB6c3PQ59RbW77v3krT/8j7/UEsaTY15Hq1VR0k3B14+ Ng46aIeDcEw1LNtw4Loga/AN33U+G4kPHLvu+J5eDHMEHunt51YlBof6baDxXOdbbtvY JYZLMwYEhj8LOXFwAMlIvHuiyDoQWBS4OGkOgMmvwyLPd3w6RtzB7FhpYR2ECsCzwH9E bi4XM6kSCZJvsGjIuvq6cAgekfmhDgbIy29QBzzUqWzOTcRbQTDkw842iejAVzl+TxTg 3kUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=uLIaYc1loUOAm4+uaD8q8oswzLA6rRb7RCx9g07PJYY=; b=hodHVYitdzLpfW4EQpSxayEN7Fv6JyIZp5MysWVFeQTBX40HRVAY6ByLrKCdnkXu5D gvTJI+z4cjLM/xJD5SQZH0OL6E8j221s8gIQn4qNDqbn8nAqcYHzdcK3+KZtaDVEZbVt 9yvMRNmtfJEaAkqg63i+IuHC3+gajsRdkpYIXGLQMEx0y9kTPIUppGm783wb15KYhdvq um5gZxmJ8yTqd0Xiawf1t2zFBHWR5F+OAQruLHDwXGWFQj6xSqcmdCUia2+MtVqPLT/h uwilvneEMyd3gmN54KthzXAfy3C5+wgY71EFJxWYOGzkCwEY3vXcutH4jkgBMomA0PAL H1SA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MBzdb3+4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a205si6074520oif.159.2020.03.02.02.32.40; Mon, 02 Mar 2020 02:32:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MBzdb3+4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727548AbgCBKcd (ORCPT + 99 others); Mon, 2 Mar 2020 05:32:33 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:40809 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727505AbgCBKcd (ORCPT ); Mon, 2 Mar 2020 05:32:33 -0500 Received: by mail-lf1-f68.google.com with SMTP id p5so1210552lfc.7 for ; Mon, 02 Mar 2020 02:32:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=uLIaYc1loUOAm4+uaD8q8oswzLA6rRb7RCx9g07PJYY=; b=MBzdb3+4hisLETfeMWwX64k7SKGvbtMnVn0gvRNrPJ/yOT8xOaVoRAw38w9Q33DZSj LbjFcT/5pUq4iYaS+RY+bW1hZcfUYHcKgYS2d2WPBdrADHT5MWzHtchifYkyw5QpiWWp Z11Rcyb4HptVPnNdttcwxL9zrJ31x3+vv04R9Uiw+jH2aTe3FVXzV4Yj0AxedG+LmzMX JG1DmLbZVM7nOw+sAjakxcA1rGGpjjLv5cBCgyVqCqSoBoD2KkeHAHkLFQY1tCNmTvzR O9okeWvAxznl5m1nFE/eFvvkNcofZVjpcTqGYseKxAfGJgKJBtgmzMtb5bQ9aHDn7/6z yAZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=uLIaYc1loUOAm4+uaD8q8oswzLA6rRb7RCx9g07PJYY=; b=bMgetipsBueirmgoGGJ7xSiJDkREJ+m+lvsjEru+O8kht56SP2VXJUCMmvHXv6IBTR nK27gVb8YeQTDQOM/YUGjSp3GSHO/uJTcQdmydl4vqb01dAy5/7BQ+D0gdEpfAU/PPQF jYJlQ9+lc4s7AnUpb5wSH2dcD2BYg3U+gzdqbP54JP5YHd8WYam5fPlfMYpU+FfzakgQ ld3orLD2UsdNdeaaxwNUFMdyf9nUeoLCNhXyaMBUbaqIFGbssVYf97Y1Ohp1qtAk8vr3 0k5iyffF+XNjAzZjdY47erj6qH9NMRXYNxx/Iq2cmLLlkJi35CcjZaqdP44BRCGUcAl1 NZuA== X-Gm-Message-State: ANhLgQ0z9Zwh+fAhN82yvDMcWR2dnQ5eZB92vBehPBKxSu4nrO6NCufE txvn8PGeGwtTUaRqz98rePQ= X-Received: by 2002:a19:4f4e:: with SMTP id a14mr10315202lfk.175.1583145149536; Mon, 02 Mar 2020 02:32:29 -0800 (PST) Received: from localhost.localdomain ([149.255.131.2]) by smtp.gmail.com with ESMTPSA id n21sm3895328lfh.2.2020.03.02.02.32.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2020 02:32:29 -0800 (PST) From: Roman Stratiienko To: jernej.skrabec@siol.net, mripard@kernel.org, wens@csie.org Cc: airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Roman Stratiienko Subject: [PATCH v4 2/4] drm/sun4i: Add alpha property for sun8i and sun50i VI layer Date: Mon, 2 Mar 2020 12:31:36 +0200 Message-Id: <20200302103138.17916-3-r.stratiienko@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200302103138.17916-1-r.stratiienko@gmail.com> References: <.> <20200302103138.17916-1-r.stratiienko@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DE3.0 VI layers supports plane-global alpha channel. DE2.0 FCC block have GLOBAL_ALPHA register that can be used as alpha source for blender. Add alpha property to the DRM plane and connect it to the corresponding registers in the mixer. Do not add alpha property for V3s SOC that have DE2.0 and 2 VI planes. Signed-off-by: Roman Stratiienko Reviewed-by: Jernej Skrabec --- v2: Initial version by mistake v3: - Skip adding & applying alpha property if VI count > 1 V4: - Changed author e-mail address to avoid mail rejecting - Picked reviewed-by line --- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 48 +++++++++++++++++++++----- drivers/gpu/drm/sun4i/sun8i_vi_layer.h | 11 ++++++ 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 2344938be3e4..f2469b5e97ee 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -65,6 +65,36 @@ static void sun8i_vi_layer_enable(struct sun8i_mixer *mixer, int channel, } } +static void sun8i_vi_layer_update_alpha(struct sun8i_mixer *mixer, int channel, + int overlay, struct drm_plane *plane) +{ + u32 mask, val, ch_base; + + ch_base = sun8i_channel_base(mixer, channel); + + if (mixer->cfg->is_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) ? + 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)); + } +} + static int sun8i_vi_layer_update_coord(struct sun8i_mixer *mixer, int channel, int overlay, struct drm_plane *plane, unsigned int zpos) @@ -248,14 +278,6 @@ static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE, val); - /* It seems that YUV formats use global alpha setting. */ - if (mixer->cfg->is_de3) - regmap_update_bits(mixer->engine.regs, - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, - overlay), - SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MASK, - SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA(0xff)); - return 0; } @@ -373,6 +395,8 @@ static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, sun8i_vi_layer_update_coord(mixer, layer->channel, layer->overlay, plane, zpos); + 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_buffer(mixer, layer->channel, @@ -472,6 +496,14 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm, plane_cnt = mixer->cfg->ui_num + mixer->cfg->vi_num; + if (mixer->cfg->vi_num == 1 || mixer->cfg->is_de3) { + ret = drm_plane_create_alpha_property(&layer->plane); + if (ret) { + dev_err(drm->dev, "Couldn't add alpha property\n"); + return ERR_PTR(ret); + } + } + ret = drm_plane_create_zpos_property(&layer->plane, index, 0, plane_cnt - 1); if (ret) { diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h index eaa6076f5dbc..48c399e1c86d 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.h +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.h @@ -29,14 +29,25 @@ #define SUN8I_MIXER_CHAN_VI_VDS_UV(base) \ ((base) + 0xfc) +#define SUN8I_MIXER_FCC_GLOBAL_ALPHA_REG \ + (0xAA000 + 0x90) + +#define SUN8I_MIXER_FCC_GLOBAL_ALPHA(x) ((x) << 24) +#define SUN8I_MIXER_FCC_GLOBAL_ALPHA_MASK GENMASK(31, 24) + #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN BIT(0) /* RGB mode should be set for RGB formats and cleared for YCbCr */ #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE BIT(15) #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET 8 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_MASK GENMASK(12, 8) +#define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_MASK GENMASK(2, 1) #define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MASK GENMASK(31, 24) #define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA(x) ((x) << 24) +#define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_PIXEL ((0) << 1) +#define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_LAYER ((1) << 1) +#define SUN50I_MIXER_CHAN_VI_LAYER_ATTR_ALPHA_MODE_COMBINED ((2) << 1) + #define SUN8I_MIXER_CHAN_VI_DS_N(x) ((x) << 16) #define SUN8I_MIXER_CHAN_VI_DS_M(x) ((x) << 0) -- 2.17.1