Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp326945imm; Thu, 2 Aug 2018 20:12:52 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdCnuCeSLFwtv63KKmRb4t7/VfrwOgbuXtWCtYqamRDZ5ENTj+psTTI5QgodjNTHdLdO1ZJ X-Received: by 2002:a63:5922:: with SMTP id n34-v6mr1933870pgb.113.1533265972644; Thu, 02 Aug 2018 20:12:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533265972; cv=none; d=google.com; s=arc-20160816; b=DRT47VLqjJybGWj/dpCRVPfVFS8IQwH0LKkwmoTiC3X3iBDS+7nrGhxmSgY3EiheFt nBYsmR1VPPwxmq36jvAetUz+NymeTaFfA9MMj9vzKEBT7ml5/hBIRHzqTFUJbtqoe3Zz pQX5v8spBBLAxctcR8NQ0QHHIvxplxOcWLbAHcTGjiVp604SvH+C9TxLaoOonO3SL/LN L581bzegihHUHNLb11wi7Ovp6uBQLBQT1BGF/00GR11+kKYCIrWi4MmsYfYRKfBOOIo7 CUSbMQef1RwaDNymcewlw/qmbHQ5EGykN2X21WafRBPiVPZK3vIf2QmKfz39iZD24ShZ WYgw== 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=IonkmwS9V8Lfccj7JgKBuUz+vbu1zuHJnmnD4AkS1Ws=; b=qAlif9ElDQwrtNiGL0AZQwYQY/XO3CbseXyarwPj9SaExGAko/hFuH/22Ey/5soJon Aw6W9I8I9UGmloU+qJyVRv80ZfDQObsX+sKXLDPySWokfNd0U2s91pk6intg1Jnuw0Ai cn73oXVJtcewGm7f4z19lHyc8+8ehdH+S7SkYRIe9yQc7DwBLWQ7X6d0q2Aa8CvihHCl ped7w8ZvGNcTgx1iGRhrBTL5cCZTjTt+HmDy4QakCkvcxU19YYmf5QKmz5K5Oc3YvrCK D2OWVKBXBSwoWMQ5C72hibPCt7FBoQS6NmQLgn0rqIyHnnWu4Ihu2QbsEfFzGoMBK7y2 ps8A== 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 y8-v6si2843340plr.136.2018.08.02.20.12.38; Thu, 02 Aug 2018 20:12:52 -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 S1728195AbeHCFFj (ORCPT + 99 others); Fri, 3 Aug 2018 01:05:39 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:47539 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727540AbeHCFFj (ORCPT ); Fri, 3 Aug 2018 01:05:39 -0400 X-UUID: 2c977039bb5d402c900ac0131d2566ff-20180803 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw02.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 1031910631; Fri, 03 Aug 2018 11:11:14 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Fri, 3 Aug 2018 11:11:12 +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; Fri, 3 Aug 2018 11:11:12 +0800 From: Stu Hsieh To: CK Hu , Philipp Zabel CC: David Airlie , Matthias Brugger , , , , , , Stu Hsieh Subject: [PATCH v2 08/15] drm/mediatek: add RGB color format support for RDMA Date: Fri, 3 Aug 2018 11:11:01 +0800 Message-ID: <1533265868-28110-9-git-send-email-stu.hsieh@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1533265868-28110-1-git-send-email-stu.hsieh@mediatek.com> References: <1533265868-28110-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 51ee5f0734df..b6a01438ac76 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; }; @@ -150,16 +157,50 @@ 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; if (pending->height == 0u || pending->width == 0u) return; + 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); writel(RDMA_MEM_GMC, comp->regs + DISP_RDMA_MEM_GMC_SETTING_0); -- 2.12.5.2.gbdf23ab