Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3440721imm; Mon, 6 Aug 2018 05:00:59 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeoVUii4MuibgrO6IqQqImgewZCf6VECPMyrwO+mNNnBESX8KSXaC+2Eee5yO76CcrSSQ75 X-Received: by 2002:a17:902:5617:: with SMTP id h23-v6mr13536369pli.324.1533556859488; Mon, 06 Aug 2018 05:00:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533556859; cv=none; d=google.com; s=arc-20160816; b=sHR8SrWxLYPBeALbiNRlWyUz6v9TUJu47PczkXyFnpPtd773XmhfZ2sp7I3t/zsr4f g6UMWfw7AZhUmZoj2Nh4skht6cO4issBZLJ0z5uGUzkIn0Kvsm6blaFWnOr4YZ715TJq sZCRglJdz01ocLOQaDfSYjMDFSaxCUyyNAmDt+FkZ6tpB116HdJMopJAFQ/vbl6eDm2Z i9e0HYloGedStQPnHfCYa4juHR1LikEQckra73QxmnumSh2UDA+rZfSduH6o38Zh+4gb 5WkbKT2YiywHBBMcBUWypdwLWvDB1RJE/HOEN5CZP13UDSPfZK0S15b2EOcXoJvKZIju wdgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=qb72jW1R80siIqK3RKZ4qrRUFNBvlTL5a0MhLJ/xyZk=; b=TMGIosiBQtUztNEAquYssTdIsd35U5De5mf24xWVuniy48YMjAPnIrSbey/xIRA/j+ cF9hwDBJJqxHfQb9tyoj4IGApkTm/VdcwiZH0u4ZVpmzxEgHWbW/PsrR2snFcyC6IXLa bwmlUUPWfWywoPlN4Ayl8OOFNAPAwxCwSLasZSiE03tMtNMI4eMxJuSmrSXUOOWEWur0 UnN1cAhNUWiVCTQAlIXcBXuZKh5ZP8w+rehWNcWOaEPMP3PydH0qwl3fIX4BpZbfz99n 99EjvAVJ1L3zU9BngpXEiceJKHtDLcxNIi/GiKAijeP32S7J/l2BQHbStX34px0FYe4v jotA== 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 z123-v6si6512808pfc.289.2018.08.06.05.00.44; Mon, 06 Aug 2018 05:00:59 -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 S1732266AbeHFOIM (ORCPT + 99 others); Mon, 6 Aug 2018 10:08:12 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:31001 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1731564AbeHFOHP (ORCPT ); Mon, 6 Aug 2018 10:07:15 -0400 X-UUID: e22c9db41d4c47f4b224137c4bd0a88a-20180806 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 621863004; Mon, 06 Aug 2018 19:58:24 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs03n2.mediatek.inc (172.21.101.182) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Mon, 6 Aug 2018 19:58:23 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1210.3 via Frontend Transport; Mon, 6 Aug 2018 19:58:23 +0800 From: Stu Hsieh To: CK Hu , Philipp Zabel CC: David Airlie , Matthias Brugger , , , , , , Stu Hsieh Subject: [PATCH v3 06/13] drm/mediatek: add RGB color format support for RDMA Date: Mon, 6 Aug 2018 19:58:13 +0800 Message-ID: <1533556700-26525-7-git-send-email-stu.hsieh@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1533556700-26525-1-git-send-email-stu.hsieh@mediatek.com> References: <1533556700-26525-1-git-send-email-stu.hsieh@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch add RGB color format support for RDMA, including RGB565, RGB888, RGBA8888 and ARGB8888. Signed-off-by: Stu Hsieh --- drivers/gpu/drm/mediatek/mtk_disp_rdma.c | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c index 08866550740f..ba72d392dc27 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c @@ -35,6 +35,8 @@ #define DISP_REG_RDMA_SIZE_CON_0 0x0014 #define DISP_REG_RDMA_SIZE_CON_1 0x0018 #define DISP_REG_RDMA_TARGET_LINE 0x001c +#define DISP_RDMA_MEM_CON 0x0024 +#define MEM_MODE_INPUT_SWAP BIT(8) #define DISP_RDMA_MEM_SRC_PITCH 0x002c #define DISP_RDMA_MEM_GMC_SETTING_0 0x0030 #define DISP_REG_RDMA_FIFO_CON 0x0040 @@ -46,6 +48,11 @@ #define RDMA_MEM_GMC 0x40402020 +#define MEM_MODE_INPUT_FORMAT_RGB565 0x0 +#define MEM_MODE_INPUT_FORMAT_RGB888 (0x001 << 4) +#define MEM_MODE_INPUT_FORMAT_RGBA8888 (0x002 << 4) +#define MEM_MODE_INPUT_FORMAT_ARGB8888 (0x003 << 4) + struct mtk_disp_rdma_data { unsigned int fifo_size; }; @@ -144,12 +151,46 @@ static void mtk_rdma_config(struct mtk_ddp_comp *comp, unsigned int width, writel(reg, comp->regs + DISP_REG_RDMA_FIFO_CON); } +static unsigned int rdma_fmt_convert(struct mtk_disp_rdma *rdma, + unsigned int fmt) +{ + switch (fmt) { + default: + case DRM_FORMAT_RGB565: + return MEM_MODE_INPUT_FORMAT_RGB565; + case DRM_FORMAT_BGR565: + return MEM_MODE_INPUT_FORMAT_RGB565 | MEM_MODE_INPUT_SWAP; + case DRM_FORMAT_RGB888: + return MEM_MODE_INPUT_FORMAT_RGB888; + case DRM_FORMAT_BGR888: + return MEM_MODE_INPUT_FORMAT_RGB888 | MEM_MODE_INPUT_SWAP; + case DRM_FORMAT_RGBX8888: + case DRM_FORMAT_RGBA8888: + return MEM_MODE_INPUT_FORMAT_ARGB8888; + case DRM_FORMAT_BGRX8888: + case DRM_FORMAT_BGRA8888: + return MEM_MODE_INPUT_FORMAT_ARGB8888 | MEM_MODE_INPUT_SWAP; + case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ARGB8888: + return MEM_MODE_INPUT_FORMAT_RGBA8888; + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_ABGR8888: + return MEM_MODE_INPUT_FORMAT_RGBA8888 | MEM_MODE_INPUT_SWAP; + } +} + static void mtk_rdma_layer_config(struct mtk_ddp_comp *comp, unsigned int idx, struct mtk_plane_state *state) { + struct mtk_disp_rdma *rdma = comp_to_rdma(comp); struct mtk_plane_pending_state *pending = &state->pending; unsigned int addr = pending->addr; unsigned int pitch = pending->pitch & 0xffff; + unsigned int fmt = pending->format; + unsigned int con; + + con = rdma_fmt_convert(rdma, fmt); + writel_relaxed(con, comp->regs + DISP_RDMA_MEM_CON); writel_relaxed(addr, comp->regs + DISP_RDMA_MEM_START_ADDR); writel_relaxed(pitch, comp->regs + DISP_RDMA_MEM_SRC_PITCH); -- 2.12.5.2.gbdf23ab