Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1868294ybn; Thu, 26 Sep 2019 03:28:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqzsgveynCUaDWnXzD+39fmLP0NPO3GEYeRW3DYbAhnjtfrrPP3AzESxB88R6T3cBQMz++Na X-Received: by 2002:a05:6402:17eb:: with SMTP id t11mr2601760edy.97.1569493730481; Thu, 26 Sep 2019 03:28:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569493730; cv=none; d=google.com; s=arc-20160816; b=mINfxkq7R52wQ2V1G52rbb44Gwk0rgblvYXy0NnRR6hERFeBS+N0u8z/eYzY+nqfIR svz7phCjBwvN9EkujPKLyWbKV+gUbqEjq3kTWD1l6mKwv4CsYfFrBiFzjxlHM0DCJGHy AALCvEqEQIG+/R2RPjhoWYq5EiuDGAh8yH93cbmYaNZdz3hALkoz+FduhN1U2L6KTHLm o045LcPfnl0/69e+VYnOcs2b5YGEipkzKw3vmMgAyIF4zYkrSOniB9QIZumtdh6zU502 e9yLE2/8gPzRN5jNvfDI9Pl3q7mmC2AgTD4L2gaZCrqfMWVGd9sV7t0oJ22n0HjpTPOF luPw== 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; bh=Iov0N3LzAAuj55AscgIzYCNOldlweGb6vChN4DiIxTk=; b=JemSRIvqMjA5EKVG25qblNQpNX91tRY3b3ysGX1YYz92FXBb4St+L/zH36di26eDvD n9egPM+M7b2QWfZ/kzifFJrG1VJr0DfZLhna+Gcfo/z+/hO9MvbHdCm3oep5NyvU5kBe QSD6BRcfpWFjTrFGuKKMS1Ck3vYOh87qQBkJyJ2Mv1H5qFGsoBf7nhWsgkjTBJGFkMRH ND+vw4RVYbX/kcZBpfL/5UWXRu6AJwjAXX2GY8rr4rqHO+kAkNwnEL0+gsUtJZ0k5aW1 gYDJQqPIkpKDi535FF3L1xLOiv+fw4L9cEnK63P9kSO569qka3ij7skvVE2Vwi/4SPkx KtUw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o32si1043132edc.306.2019.09.26.03.28.26; Thu, 26 Sep 2019 03:28:50 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728970AbfIZIZN (ORCPT + 99 others); Thu, 26 Sep 2019 04:25:13 -0400 Received: from lucky1.263xmail.com ([211.157.147.135]:33036 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725787AbfIZIZM (ORCPT ); Thu, 26 Sep 2019 04:25:12 -0400 Received: from localhost (unknown [192.168.167.193]) by lucky1.263xmail.com (Postfix) with ESMTP id 95CCE43BB3; Thu, 26 Sep 2019 16:25:08 +0800 (CST) X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ADDR-CHECKED4: 1 X-ANTISPAM-LEVEL: 2 X-ABS-CHECKED: 0 Received: from localhost.localdomain (unknown [58.22.7.114]) by smtp.263.net (postfix) whith ESMTP id P24701T140118476191488S1569486296531843_; Thu, 26 Sep 2019 16:25:09 +0800 (CST) X-IP-DOMAINF: 1 X-UNIQUE-TAG: X-RL-SENDER: hjc@rock-chips.com X-SENDER: hjc@rock-chips.com X-LOGIN-NAME: hjc@rock-chips.com X-FST-TO: dri-devel@lists.freedesktop.org X-SENDER-IP: 58.22.7.114 X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Sandy Huang To: dri-devel@lists.freedesktop.org, Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , David Airlie , Daniel Vetter Cc: maarten.lankhorst@linux.intel.com, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/3] drm/rockchip: Add support 10bit yuv format Date: Thu, 26 Sep 2019 16:24:49 +0800 Message-Id: <1569486289-152061-4-git-send-email-hjc@rock-chips.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1569486289-152061-1-git-send-email-hjc@rock-chips.com> References: <1569486289-152061-1-git-send-email-hjc@rock-chips.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support 10bit yuv format display for rockchip some socs, include: RK3288/RK3228/RK3328/RK3368/RK3399 Signed-off-by: Sandy Huang --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 16 ++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 + drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 2 ++ 3 files changed, 19 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index ce74218..4b87d88 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -249,6 +249,21 @@ static bool has_rb_swapped(uint32_t format) } } +static bool is_10bit_yuv(uint32_t format) +{ + switch (format) { + case DRM_FORMAT_NV12_10: + case DRM_FORMAT_NV21_10: + case DRM_FORMAT_NV16_10: + case DRM_FORMAT_NV61_10: + case DRM_FORMAT_NV24_10: + case DRM_FORMAT_NV42_10: + return true; + default: + return false; + } +} + static u32 rockchip_vop_get_offset(struct drm_plane_state *state, u8 plane) { const struct drm_format_info *info; @@ -913,6 +928,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1]; VOP_WIN_SET(vop, win, uv_vir, DIV_ROUND_UP(fb->pitches[1], 4)); VOP_WIN_SET(vop, win, uv_mst, dma_addr); + VOP_WIN_SET(vop, win, fmt_10, is_10bit_yuv(fb->format->format)); for (i = 0; i < NUM_YUV2YUV_COEFFICIENTS; i++) { VOP_WIN_YUV2YUV_COEFFICIENT_SET(vop, diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 2149a889..adc2b0b5 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -133,6 +133,7 @@ struct vop_win_phy { struct vop_reg gate; struct vop_reg format; struct vop_reg rb_swap; + struct vop_reg fmt_10; struct vop_reg act_info; struct vop_reg dsp_info; struct vop_reg dsp_st; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index d1494be..732e535 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -544,6 +544,7 @@ static const struct vop_win_phy rk3288_win01_data = { .nformats = ARRAY_SIZE(formats_win_full), .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0), .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1), + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4), .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12), .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0), .dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0), @@ -674,6 +675,7 @@ static const struct vop_win_phy rk3368_win01_data = { .nformats = ARRAY_SIZE(formats_win_full), .enable = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 0), .format = VOP_REG(RK3368_WIN0_CTRL0, 0x7, 1), + .fmt_10 = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 4), .rb_swap = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 12), .x_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 21), .y_mir_en = VOP_REG(RK3368_WIN0_CTRL0, 0x1, 22), -- 2.7.4