From patchwork Mon Jul 31 13:04:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AngeloGioacchino Del Regno X-Patchwork-Id: 128685 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2015169vqg; Mon, 31 Jul 2023 06:29:11 -0700 (PDT) X-Google-Smtp-Source: APBJJlH+iMMCCCvokYdQAiQokRO7dHaHta7fHng4WEjyhbQOyPtj7D/ZVnHXzNMlaQxi4B4TzoAy X-Received: by 2002:a05:6a00:1741:b0:686:de6c:a9e5 with SMTP id j1-20020a056a00174100b00686de6ca9e5mr12872116pfc.31.1690810151010; Mon, 31 Jul 2023 06:29:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690810150; cv=none; d=google.com; s=arc-20160816; b=VOt0df3C/OwAsgrM6XCgaDzbvh/0jy0ne2pvI/j0y52R3bkzHgHd9pfuH0RKVXe1Xu ZnaXTDbtJugSsP4tOungdWOA/N9bIaxdx7j63zHxFbR0cWwdvHvQyEiKZgEuBbfl1Hnv WsOHFcruQovKandZzBbFxpzgDHGyZb6KEdcZ8hZyxPEWBBfje+OdnvPaut6Bu4v3ObyM hGsdvoCoOZifUl3EZDDYiHImD+LChxuh0mDSHZlrJxodO8gp3LnbWj0XjM/qa8EurRJO HJ2P9PfJsGM1hOtLKzV1a8DEZfMZZFOKD50Wuh9uPRR3fyKo5MzuxgsoD078TFQ6/tD3 9RZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HB+HZWBM7tPTSGGnj20X/FY1SFqRET0vKitAUXYktpU=; fh=wVZEQimxp/UyE4Mf0Sn+nsZcfrBLHvkvU7kacOC/59o=; b=ePh+yq+FP2hhOo/L3v2P3MWlzuaG4A36EHCWbL6+8M1yaj1R8nkOckrj+T+QemLYZP Ts2c0hECBo5Z1Kh5/vtHRx0rbqQfsrI4s4KLqLJpzDQeWmlJJzPfRnWn4oZo2+YR66SB v42d7KSRFIB1g2nLxXkSdDfPborMTciEFPMkwCCZ1XRXLBRKMzR5PJtqqwgGG5D8HVQH hwGl3Ij+GWvaMp0/QgBGErvJWZrAomi8eO46MT9aUg2rSjP4mBzmoMk7pTJ//Ip2oN/C caI1HS1l57W431dusg25iEKG1LeoUejL3p185IBQIalPX0QD9kdERs3ty9+9CGoydUbb JRuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=TUmLNvZG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s10-20020a056a0008ca00b006871cbe9759si3862904pfu.227.2023.07.31.06.28.58; Mon, 31 Jul 2023 06:29:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=TUmLNvZG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232316AbjGaNFD (ORCPT + 99 others); Mon, 31 Jul 2023 09:05:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231542AbjGaNEw (ORCPT ); Mon, 31 Jul 2023 09:04:52 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8483B0 for ; Mon, 31 Jul 2023 06:04:50 -0700 (PDT) Received: from IcarusMOD.eternityproject.eu (2-237-20-237.ip236.fastwebnet.it [2.237.20.237]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madras.collabora.co.uk (Postfix) with ESMTPSA id C33906607105; Mon, 31 Jul 2023 14:04:48 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1690808689; bh=pRGB2s9t6NTvTDhsegnJ/Yxt/Lp5Ax+diF2jcyd4avU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TUmLNvZGZL9lGCqA4MRBWifBlAWNO7+tiJJIOGW4bL1wl7h0KqpUTtsPXyVmHkQnC FMW8O+PAMLUOrCZ/T7Lv+fa3UvKf5k3wSuM3Ov6T2SXLCBL72eeLQ7QNsaWlDpV7Ru mZb5QlsgTLejSzpb0kI84O6k7Ckc4NrEctFpqZRrsZscIGE1jIbuBAmmkOBcjgslOu hOxNxxBy3kLUUItMwh1BcPauAtpHmY0RgGE5H6KCkR0v88j9XES6kQmB53f3xJyEh3 4cLOSVw4SsZXBHwtOMKHhf3iSpnKhrOWjcQXXxorcYrCDEj7Y67BcC6I46x9zSAFC4 6ut8+6qqJf0lQ== From: AngeloGioacchino Del Regno To: chunkuang.hu@kernel.org Cc: p.zabel@pengutronix.de, airlied@gmail.com, daniel@ffwll.ch, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, wenst@chromium.org, kernel@collabora.com, ehristev@collabora.com, "Jason-JH . Lin" , Alexandre Mergnat Subject: [PATCH v7 04/13] drm/mediatek: gamma: Improve and simplify HW LUT calculation Date: Mon, 31 Jul 2023 15:04:32 +0200 Message-ID: <20230731130441.173960-5-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230731130441.173960-1-angelogioacchino.delregno@collabora.com> References: <20230731130441.173960-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772942945208773648 X-GMAIL-MSGID: 1772942945208773648 Use drm_color_lut_extract() to avoid open-coding the bits reduction calculations for each color channel and use a struct drm_color_lut to temporarily store the information instead of an array of u32. Also, slightly improve the precision of the HW LUT calculation in the LUT DIFF case by performing the subtractions on the 16-bits values and doing the 10 bits conversion later. Signed-off-by: AngeloGioacchino Del Regno Reviewed-by: Jason-JH.Lin Reviewed-by: Alexandre Mergnat --- drivers/gpu/drm/mediatek/mtk_disp_gamma.c | 30 +++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c index 7575237625d2..fd6a75a64a9f 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_gamma.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_gamma.c @@ -74,7 +74,6 @@ void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crt bool lut_diff; u16 lut_size; u32 word; - u32 diff[3] = {0}; /* If there's no gamma lut there's nothing to do here. */ if (!state->gamma_lut) @@ -97,18 +96,29 @@ void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crt lut_base = regs + DISP_GAMMA_LUT; lut = (struct drm_color_lut *)state->gamma_lut->data; for (i = 0; i < lut_size; i++) { + struct drm_color_lut diff, hwlut; + + hwlut.red = drm_color_lut_extract(lut[i].red, 10); + hwlut.green = drm_color_lut_extract(lut[i].green, 10); + hwlut.blue = drm_color_lut_extract(lut[i].blue, 10); + if (!lut_diff || (i % 2 == 0)) { - word = (((lut[i].red >> 6) & LUT_10BIT_MASK) << 20) + - (((lut[i].green >> 6) & LUT_10BIT_MASK) << 10) + - ((lut[i].blue >> 6) & LUT_10BIT_MASK); + word = hwlut.red << 20 + + hwlut.green << 10 + + hwlut.red; } else { - diff[0] = (lut[i].red >> 6) - (lut[i - 1].red >> 6); - diff[1] = (lut[i].green >> 6) - (lut[i - 1].green >> 6); - diff[2] = (lut[i].blue >> 6) - (lut[i - 1].blue >> 6); + diff.red = lut[i].red - lut[i - 1].red; + diff.red = drm_color_lut_extract(diff.red, 10); + + diff.green = lut[i].green - lut[i - 1].green; + diff.green = drm_color_lut_extract(diff.green, 10); + + diff.blue = lut[i].blue - lut[i - 1].blue; + diff.blue = drm_color_lut_extract(diff.blue, 10); - word = ((diff[0] & LUT_10BIT_MASK) << 20) + - ((diff[1] & LUT_10BIT_MASK) << 10) + - (diff[2] & LUT_10BIT_MASK); + word = diff.blue << 20 + + diff.green << 10 + + diff.red; } writel(word, (lut_base + i * 4)); }