From patchwork Mon Mar 6 10:46:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64594 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1769269wrd; Mon, 6 Mar 2023 02:53:11 -0800 (PST) X-Google-Smtp-Source: AK7set/Sv5kIFR+FSx8qtQEtR3zmwSg+U/XdHmG6OAv8iJctixQLGQfOYqO3P29ItnJDn8p72GTG X-Received: by 2002:a17:906:308e:b0:8b1:7aaa:4c25 with SMTP id 14-20020a170906308e00b008b17aaa4c25mr10391216ejv.29.1678099990843; Mon, 06 Mar 2023 02:53:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678099990; cv=none; d=google.com; s=arc-20160816; b=bWn6RYE5YHKr1ZEHDuzUVt8FpKv6oT5Gn9bMulPtITygOaCTauCm8O/+pm3KtrRBOf o4iGykpaioir8j6p0JX6R1ZUyQWqfa6mZUsR3Bxjs9Ip4MzLrTgEGPKqW0HZrVu+VL4Q zFWWSkC3Y3s1Zz3lgl8orTlqqCtVRCFYx0na/gLy1TemBBIxQboBYj5LA6RzHBkPNL3C CVqI3MuMXfGYVnx9Lj6N4/mvMagJHdHTeLUMNA9QGuXrmY68m/fkYzkdPy0ci0w+StZY WWnmsvfzpoj+oOS6pt8W1yvbZgYLAp1PkARZYA40h4bLgwxXfehRaTNVGS0Q+Z72Q9Lv iWSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=WpTOBsdjitBp97qEBqoruubIoNGb9rZNa01UrTQRCH8=; b=Vx2Y5Lc6dw8bFIK59q08xoLsxUs9HXnv/5KS1xxgwIX/XbI0dga9ecZH0C490pSW2I rjvZgNPSkSMaeUrWezT2pmNpnaxSVp8rAItwJWVwNoCeTgIsxBClfGWjxYSjxygtdF5Z 5q3oBfkfHIVYnfIFuoGbrcIXyaDWeWyp+z9ZjE5yaZjfsmBSuu8PwbnoZ/TGZMSmUPkH 0CpMKYtaDosfdnlCUIsiVfkzlXlLObtYAe2gkXfNjcyc6MR1TnMpk2gJziWEhiOVQR9X t3Zen180n0xesky6ghno/LXdMCr7C9nZc7y8wgySCZ4fSqGwq5/hHJXgkrCzz7cLgkLb KxUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=oIiSGDw3; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=ntOFCUxa; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h16-20020aa7de10000000b004acb5b5b339si4854957edv.219.2023.03.06.02.52.47; Mon, 06 Mar 2023 02:53:10 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=oIiSGDw3; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=ntOFCUxa; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229980AbjCFKtr (ORCPT + 99 others); Mon, 6 Mar 2023 05:49:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229952AbjCFKtp (ORCPT ); Mon, 6 Mar 2023 05:49:45 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CCD52331E for ; Mon, 6 Mar 2023 02:49:43 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 6F7615C01D1; Mon, 6 Mar 2023 05:49:42 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Mon, 06 Mar 2023 05:49:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099782; x=1678186182; bh=WpTOBsdjitBp97qEBqoruubIoNGb9rZNa01 UrTQRCH8=; b=oIiSGDw3bhLfPZB1wC/VQ4sEMzRRF3DAVEYI/cm2hIThVhO8Ci8 owGLi1LYs4+xBa+HhCpoBnt9DmOxetRbuKz8+48UpYz+3UVtdZ406J/BOSLQd3Fo 1myShvBpo2g5vy/ZmcoKzU0iutbFOmoYx3MTy1ogw2PDn9vmZ5ff0kWc7A/ps3gJ LPiSz9GKu6hHF0kPRQwtYNmAKpEQrYNWFKqGQ+bK67/lr1mq0At/SwKrB/rYsDVJ K4l5aYdmm0KBWDaCjZFi0RIpI7pPAXC+V+gHewrTM/i+g+nJ/9mDAp7twfuOiUsH QksVC0X0fPzzjFUpkCjA600VSnDEHBzQOsQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099782; x=1678186182; bh=WpTOBsdjitBp97qEBqoruubIoNGb9rZNa01 UrTQRCH8=; b=ntOFCUxa3Y6J7aE0pMLgIkoJMWfMzM0J+jT+FLMDmUyw13frr+B mmAz1FhYVKPjNF0nmJP5mPKUUDbyRXgDfIImfapj7MJ7MO4dGYiKqIea4cnnE5Ef kzIq2aFaTm7FwM+xutMHAYFzFOcdYBbVeC3LtaDjxVvk+A078c27Wh/MEibj8OOb WBwfZeM7lGF2K6DXLUmBwS5+cPfauzO/AZFUNGiNI8kkJQ+KwkcF7qqZC90o40vZ cEdN3GeZzF/U+u9ucCrtwZuSLFl0oIZutTb89dfS0u8pkdigSgYFIacwo6n945sf Iig+rsavquhi6dAdZSNhIYcka1mOtEg6ySg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:41 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:42 +0100 Subject: [PATCH v3 1/9] drm/vc4: Switch to container_of_const MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-1-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=13673; i=maxime@cerno.tech; h=from:subject:message-id; bh=ezENJzreOEib1mQhz3sukSD/w2Uriixv0pvxlqyaI6c=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR6b/XFf0SfnD5pKb03OSVit+cDrUv1qKe95T3fQZO4vv xzvad5SyMIhxMciKKbLECJsviTs163UnG988mDmsTCBDGLg4BWAiL8oY/orKumVJWQn6G1Rw1BnFii yd1KNktPmsYgAzD9+BO1cqjjEyvN4/OUl0+tNfqddeims93zQpXHjlY0aPtmufL65qS0o7yggA X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS,T_FILL_THIS_FORM_SHORT 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615375955525137?= X-GMAIL-MSGID: =?utf-8?q?1759615375955525137?= container_of_const() allows to preserve the pointer constness and is thus more flexible than inline functions. Let's switch all our instances of container_of() to container_of_const(). Signed-off-by: Maxime Ripard Reviewed-by: Javier Martinez Canillas --- drivers/gpu/drm/vc4/tests/vc4_mock.h | 3 ++ drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 4 +- drivers/gpu/drm/vc4/vc4_dpi.c | 7 +--- drivers/gpu/drm/vc4/vc4_drv.h | 65 +++++++++-------------------- drivers/gpu/drm/vc4/vc4_dsi.c | 17 +++----- drivers/gpu/drm/vc4/vc4_hdmi.h | 16 +++---- drivers/gpu/drm/vc4/vc4_kms.c | 16 +++---- drivers/gpu/drm/vc4/vc4_plane.c | 3 +- drivers/gpu/drm/vc4/vc4_txp.c | 12 ++---- drivers/gpu/drm/vc4/vc4_vec.c | 14 ++----- 10 files changed, 51 insertions(+), 106 deletions(-) diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock.h b/drivers/gpu/drm/vc4/tests/vc4_mock.h index db8e9a141ef8..2d0b339bd9f3 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock.h +++ b/drivers/gpu/drm/vc4/tests/vc4_mock.h @@ -43,6 +43,9 @@ struct vc4_dummy_output { struct drm_connector connector; }; +#define encoder_to_vc4_dummy_output(_enc) \ + container_of_const(_enc, struct vc4_dummy_output, encoder.base) + struct vc4_dummy_output *vc4_dummy_output(struct kunit *test, struct drm_device *drm, struct drm_crtc *crtc, diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c index 8d33be828d9a..6e11fcc9ef45 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c +++ b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c @@ -80,7 +80,7 @@ int vc4_mock_atomic_add_output(struct kunit *test, crtc = vc4_find_crtc_for_encoder(test, drm, encoder); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); - output = container_of(encoder, struct vc4_dummy_output, encoder.base); + output = encoder_to_vc4_dummy_output(encoder); conn = &output->connector; conn_state = drm_atomic_get_connector_state(state, conn); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); @@ -126,7 +126,7 @@ int vc4_mock_atomic_del_output(struct kunit *test, ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL); KUNIT_ASSERT_EQ(test, ret, 0); - output = container_of(encoder, struct vc4_dummy_output, encoder.base); + output = encoder_to_vc4_dummy_output(encoder); conn = &output->connector; conn_state = drm_atomic_get_connector_state(state, conn); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c index f518d6e59ed6..e68c07d86040 100644 --- a/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c @@ -97,11 +97,8 @@ struct vc4_dpi { struct debugfs_regset32 regset; }; -static inline struct vc4_dpi * -to_vc4_dpi(struct drm_encoder *encoder) -{ - return container_of(encoder, struct vc4_dpi, encoder.base); -} +#define to_vc4_dpi(_encoder) \ + container_of_const(_encoder, struct vc4_dpi, encoder.base) #define DPI_READ(offset) \ ({ \ diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h index 95069bb16821..e23084f3d6c2 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.h +++ b/drivers/gpu/drm/vc4/vc4_drv.h @@ -232,11 +232,8 @@ struct vc4_dev { struct kref bin_bo_kref; }; -static inline struct vc4_dev * -to_vc4_dev(const struct drm_device *dev) -{ - return container_of(dev, struct vc4_dev, base); -} +#define to_vc4_dev(_dev) \ + container_of_const(_dev, struct vc4_dev, base) struct vc4_bo { struct drm_gem_dma_object base; @@ -285,11 +282,8 @@ struct vc4_bo { struct mutex madv_lock; }; -static inline struct vc4_bo * -to_vc4_bo(const struct drm_gem_object *bo) -{ - return container_of(to_drm_gem_dma_obj(bo), struct vc4_bo, base); -} +#define to_vc4_bo(_bo) \ + container_of_const(to_drm_gem_dma_obj(_bo), struct vc4_bo, base) struct vc4_fence { struct dma_fence base; @@ -298,11 +292,8 @@ struct vc4_fence { uint64_t seqno; }; -static inline struct vc4_fence * -to_vc4_fence(const struct dma_fence *fence) -{ - return container_of(fence, struct vc4_fence, base); -} +#define to_vc4_fence(_fence) \ + container_of_const(_fence, struct vc4_fence, base) struct vc4_seqno_cb { struct work_struct work; @@ -368,11 +359,8 @@ struct vc4_hvs_state { } fifo_state[HVS_NUM_CHANNELS]; }; -static inline struct vc4_hvs_state * -to_vc4_hvs_state(const struct drm_private_state *priv) -{ - return container_of(priv, struct vc4_hvs_state, base); -} +#define to_vc4_hvs_state(_state) \ + container_of_const(_state, struct vc4_hvs_state, base) struct vc4_hvs_state *vc4_hvs_get_global_state(struct drm_atomic_state *state); struct vc4_hvs_state *vc4_hvs_get_old_global_state(const struct drm_atomic_state *state); @@ -382,11 +370,8 @@ struct vc4_plane { struct drm_plane base; }; -static inline struct vc4_plane * -to_vc4_plane(const struct drm_plane *plane) -{ - return container_of(plane, struct vc4_plane, base); -} +#define to_vc4_plane(_plane) \ + container_of_const(_plane, struct vc4_plane, base) enum vc4_scaling_mode { VC4_SCALING_NONE, @@ -458,11 +443,8 @@ struct vc4_plane_state { u64 membus_load; }; -static inline struct vc4_plane_state * -to_vc4_plane_state(const struct drm_plane_state *state) -{ - return container_of(state, struct vc4_plane_state, base); -} +#define to_vc4_plane_state(_state) \ + container_of_const(_state, struct vc4_plane_state, base) enum vc4_encoder_type { VC4_ENCODER_TYPE_NONE, @@ -489,11 +471,8 @@ struct vc4_encoder { void (*post_crtc_powerdown)(struct drm_encoder *encoder, struct drm_atomic_state *state); }; -static inline struct vc4_encoder * -to_vc4_encoder(const struct drm_encoder *encoder) -{ - return container_of(encoder, struct vc4_encoder, base); -} +#define to_vc4_encoder(_encoder) \ + container_of_const(_encoder, struct vc4_encoder, base) static inline struct drm_encoder *vc4_find_encoder_by_type(struct drm_device *drm, @@ -591,11 +570,8 @@ struct vc4_crtc { unsigned int current_hvs_channel; }; -static inline struct vc4_crtc * -to_vc4_crtc(const struct drm_crtc *crtc) -{ - return container_of(crtc, struct vc4_crtc, base); -} +#define to_vc4_crtc(_crtc) \ + container_of_const(_crtc, struct vc4_crtc, base) static inline const struct vc4_crtc_data * vc4_crtc_to_vc4_crtc_data(const struct vc4_crtc *crtc) @@ -608,7 +584,7 @@ vc4_crtc_to_vc4_pv_data(const struct vc4_crtc *crtc) { const struct vc4_crtc_data *data = vc4_crtc_to_vc4_crtc_data(crtc); - return container_of(data, struct vc4_pv_data, base); + return container_of_const(data, struct vc4_pv_data, base); } struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc, @@ -636,11 +612,8 @@ struct vc4_crtc_state { #define VC4_HVS_CHANNEL_DISABLED ((unsigned int)-1) -static inline struct vc4_crtc_state * -to_vc4_crtc_state(const struct drm_crtc_state *crtc_state) -{ - return container_of(crtc_state, struct vc4_crtc_state, base); -} +#define to_vc4_crtc_state(_state) \ + container_of_const(_state, struct vc4_crtc_state, base) #define V3D_READ(offset) \ ({ \ diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c index a5c075f802e4..9e0c355b236f 100644 --- a/drivers/gpu/drm/vc4/vc4_dsi.c +++ b/drivers/gpu/drm/vc4/vc4_dsi.c @@ -600,19 +600,14 @@ struct vc4_dsi { struct debugfs_regset32 regset; }; -#define host_to_dsi(host) container_of(host, struct vc4_dsi, dsi_host) +#define host_to_dsi(host) \ + container_of_const(host, struct vc4_dsi, dsi_host) -static inline struct vc4_dsi * -to_vc4_dsi(struct drm_encoder *encoder) -{ - return container_of(encoder, struct vc4_dsi, encoder.base); -} +#define to_vc4_dsi(_encoder) \ + container_of_const(_encoder, struct vc4_dsi, encoder.base) -static inline struct vc4_dsi * -bridge_to_vc4_dsi(struct drm_bridge *bridge) -{ - return container_of(bridge, struct vc4_dsi, bridge); -} +#define bridge_to_vc4_dsi(_bridge) \ + container_of_const(_bridge, struct vc4_dsi, bridge) static inline void dsi_dma_workaround_write(struct vc4_dsi *dsi, u32 offset, u32 val) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h index dc3ccd8002a0..5d249ac54cd1 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.h +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h @@ -223,17 +223,14 @@ struct vc4_hdmi { enum vc4_hdmi_output_format output_format; }; -static inline struct vc4_hdmi * -connector_to_vc4_hdmi(struct drm_connector *connector) -{ - return container_of(connector, struct vc4_hdmi, connector); -} +#define connector_to_vc4_hdmi(_connector) \ + container_of_const(_connector, struct vc4_hdmi, connector) static inline struct vc4_hdmi * encoder_to_vc4_hdmi(struct drm_encoder *encoder) { struct vc4_encoder *_encoder = to_vc4_encoder(encoder); - return container_of(_encoder, struct vc4_hdmi, encoder); + return container_of_const(_encoder, struct vc4_hdmi, encoder); } struct vc4_hdmi_connector_state { @@ -243,11 +240,8 @@ struct vc4_hdmi_connector_state { enum vc4_hdmi_output_format output_format; }; -static inline struct vc4_hdmi_connector_state * -conn_state_to_vc4_hdmi_conn_state(struct drm_connector_state *conn_state) -{ - return container_of(conn_state, struct vc4_hdmi_connector_state, base); -} +#define conn_state_to_vc4_hdmi_conn_state(_state) \ + container_of_const(_state, struct vc4_hdmi_connector_state, base) void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct vc4_hdmi_connector_state *vc4_conn_state); diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index a7e3d47c50f4..5495f2a94fa9 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -31,11 +31,8 @@ struct vc4_ctm_state { int fifo; }; -static struct vc4_ctm_state * -to_vc4_ctm_state(const struct drm_private_state *priv) -{ - return container_of(priv, struct vc4_ctm_state, base); -} +#define to_vc4_ctm_state(_state) \ + container_of_const(_state, struct vc4_ctm_state, base) struct vc4_load_tracker_state { struct drm_private_state base; @@ -43,11 +40,8 @@ struct vc4_load_tracker_state { u64 membus_load; }; -static struct vc4_load_tracker_state * -to_vc4_load_tracker_state(const struct drm_private_state *priv) -{ - return container_of(priv, struct vc4_load_tracker_state, base); -} +#define to_vc4_load_tracker_state(_state) \ + container_of_const(_state, struct vc4_load_tracker_state, base) static struct vc4_ctm_state *vc4_get_ctm_state(struct drm_atomic_state *state, struct drm_private_obj *manager) @@ -717,7 +711,7 @@ static void vc4_hvs_channels_destroy_state(struct drm_private_obj *obj, static void vc4_hvs_channels_print_state(struct drm_printer *p, const struct drm_private_state *state) { - struct vc4_hvs_state *hvs_state = to_vc4_hvs_state(state); + const struct vc4_hvs_state *hvs_state = to_vc4_hvs_state(state); unsigned int i; drm_printf(p, "HVS State\n"); diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c index 97c84a3f5a46..00e713faecd5 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c @@ -1334,8 +1334,7 @@ u32 vc4_plane_write_dlist(struct drm_plane *plane, u32 __iomem *dlist) u32 vc4_plane_dlist_size(const struct drm_plane_state *state) { - const struct vc4_plane_state *vc4_state = - container_of(state, typeof(*vc4_state), base); + const struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); return vc4_state->dlist_count; } diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c index ef5cab2a3aa9..c5abdec03103 100644 --- a/drivers/gpu/drm/vc4/vc4_txp.c +++ b/drivers/gpu/drm/vc4/vc4_txp.c @@ -168,15 +168,11 @@ struct vc4_txp { void __iomem *regs; }; -static inline struct vc4_txp *encoder_to_vc4_txp(struct drm_encoder *encoder) -{ - return container_of(encoder, struct vc4_txp, encoder.base); -} +#define encoder_to_vc4_txp(_encoder) \ + container_of_const(_encoder, struct vc4_txp, encoder.base) -static inline struct vc4_txp *connector_to_vc4_txp(struct drm_connector *conn) -{ - return container_of(conn, struct vc4_txp, connector.base); -} +#define connector_to_vc4_txp(_connector) \ + container_of_const(_connector, struct vc4_txp, connector.base) static const struct debugfs_reg32 txp_regs[] = { VC4_REG32(TXP_DST_PTR), diff --git a/drivers/gpu/drm/vc4/vc4_vec.c b/drivers/gpu/drm/vc4/vc4_vec.c index a3782d05cd66..d6e6a1a22eba 100644 --- a/drivers/gpu/drm/vc4/vc4_vec.c +++ b/drivers/gpu/drm/vc4/vc4_vec.c @@ -219,17 +219,11 @@ struct vc4_vec { writel(val, vec->regs + (offset)); \ } while (0) -static inline struct vc4_vec * -encoder_to_vc4_vec(struct drm_encoder *encoder) -{ - return container_of(encoder, struct vc4_vec, encoder.base); -} +#define encoder_to_vc4_vec(_encoder) \ + container_of_const(_encoder, struct vc4_vec, encoder.base) -static inline struct vc4_vec * -connector_to_vc4_vec(struct drm_connector *connector) -{ - return container_of(connector, struct vc4_vec, connector); -} +#define connector_to_vc4_vec(_connector) \ + container_of_const(_connector, struct vc4_vec, connector) enum vc4_vec_tv_mode_id { VC4_VEC_TV_MODE_NTSC, From patchwork Mon Mar 6 10:46:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64602 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1775168wrd; Mon, 6 Mar 2023 03:08:19 -0800 (PST) X-Google-Smtp-Source: AK7set/b6+/BAo/+ec5YpY6AqHfek+ifV2RZBHMXzERakK2HjQSisjI31oYcTrNGxvmEXKOoA4xD X-Received: by 2002:a05:6a20:1448:b0:be:cbee:edbc with SMTP id a8-20020a056a20144800b000becbeeedbcmr12587036pzi.24.1678100899277; Mon, 06 Mar 2023 03:08:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100899; cv=none; d=google.com; s=arc-20160816; b=dxD7938yP5bOCk5WgkLct40SrMCOCAmdrHzPuMgz51gl6bDMjVaum3knOe6/zlEwwA btlVz0X0jzJGUoH0qwkDZeOSL8wpaycavOtH8VU7zfzyidx9wDQe1Fr2Y6u+bG5VjaAM teGVcghxW5pUZa/D33kpC8fnVdi8brzq7qV4HvFtnhcaXduc6IuFasFNejItsK4lZyP1 VKtTR+bGHbwuVQQoalI+/bL97HwLxdIYSijmyVFtVQVjXPXdQVXetKP1QqdDlIwpH/lX VP+HReWAfPHTZ2j/na3B6RcyAjekvj+CLVs5IY5/Q4nx8Vmp1XlqXvH0Cs7aP82XnTIw 6v6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=5voqj1UTp1uxxITYu9fh9Ol0FbqK4YPPE+0tPe4AYbI=; b=eyIU64r9zjjXAnpxCXzu9mf3PQVAXr/tfKXm+zHaAAG4s0z3qn6AHwiQcM3JALZs3X pGoxv5J+fti33SYm0EcKsFVEnb19N1qDMP/nYBTdMZrj72Em1OGafNdNMFcX/OY8sAqW 6dKs7rAzmmsSnqTdEU3IbDnix0dvGRVgmZq0D/LQi+w7W3fTvZlHrFWA+PPfT8Pfxghl /7C3hFGPP863nrk20K++QXsEABQv4LrA4GtEsflw65NYarPkiPihzzx9aEKOYStIwFzs YrGZjfqwhyNB2KyDB10wx+ngIlTRvEq24uTxH8bCf8kaNQM+2BCygPcwgtK8M8zeSg7C My6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=VNUmW2wV; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=c6k6muqo; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k12-20020aa7972c000000b005a48ecab9a1si9942105pfg.167.2023.03.06.03.08.06; Mon, 06 Mar 2023 03:08:19 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=VNUmW2wV; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=c6k6muqo; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230022AbjCFKt5 (ORCPT + 99 others); Mon, 6 Mar 2023 05:49:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57848 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229486AbjCFKtq (ORCPT ); Mon, 6 Mar 2023 05:49:46 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 227E8227BC for ; Mon, 6 Mar 2023 02:49:45 -0800 (PST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 8E3635C01A5; Mon, 6 Mar 2023 05:49:44 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Mon, 06 Mar 2023 05:49:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099784; x=1678186184; bh=5voqj1UTp1uxxITYu9fh9Ol0FbqK4YPPE+0 tPe4AYbI=; b=VNUmW2wV9jTVXVHAnDhDswnbqCEZ1v5c8MTh2HtMSq/qIomoB6O HsPsKlCMFo98vW3XcQ/TJLLWQ253Akp8cnkgoKRu7S7HuFTnVjXsByojjorebaUR 7rAOwkB5RYRzrFzjkzW0dQIBY+P1ar0DRmt/USIK+Q4RrQE0CScUa4cQyASKYAZE uhiSadrrsJLotyaSCa9kYqeDBJyrQdMo4c/OD2OfhVApdVjZJZoOD0p5unq/I5Tf hqCPDM5HETjuzVyWsA7qeCGU4rboFfErepSLb5RQWNIDAR0mbRNMnBmV3BxwKoqL Cl2TA6QefOCjiItO9qLSfkLl70WBzu97aHg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099784; x=1678186184; bh=5voqj1UTp1uxxITYu9fh9Ol0FbqK4YPPE+0 tPe4AYbI=; b=c6k6muqoTRfDOzgyjuDAEJCEP+DL3APUDle1M2sJFSbI3OI5wvB dBCZ1EBk3YLMtdSEykFqzVffnMRD4LSHPVU2vBJBfDBPVXkvEUzmZJ5Xcp79OgkO ekprCX6K90+gDxsh3sGViQPUn+kQVKZgMDpSp/9jdXxcfYI0vzdX+CfZOR9cz1XB M88jmRX+MmaRky9y4S3dXUHoatU5wDbEk0WzJk03FcgYVdnQY+ZDmH9F7xfKCvR8 UoSE0/cp0W1UzE2ziUtUQde3rVM8MhmGm3yx/RSs95xpBBa7qAuiq0bQkDoWoxJh OR8/OB9ASoytAcEBA8PO29zyi0rHT0J7M9A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgudelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepgfffgeeiteevheffudfgkeetvddvhfduiefftdelheegudevgfevfeel ffekffdunecuffhomhgrihhnpehmrghrghhinhhsrdhtohhpnecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrgihimhgvsegtvghrnhhordht vggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:43 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:43 +0100 Subject: [PATCH v3 2/9] drm/vc4: hdmi: Update all the planes if the TV margins are changed MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-2-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2097; i=maxime@cerno.tech; h=from:subject:message-id; bh=/Ss7R3gA1j6Cq8lhyLN7QCMVAwk0YkENDxLmFGr0ejY=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR6Yn3L30oTe8XohdvLNKxm8HZ82ndf6syTJcq6Msg7nN HyV1lLIwiHExyIopssQImy+JOzXrdScb3zyYOaxMIEMYuDgFYCITIhn+F6UcucF6IG7TS0PevqwrrD VWhxonuNtaxHd9No+eG+gnzMiw/fKtVfLFV5c/z/r1s/GU7hbWm02SORoKaxyMkucfT9rECAA= X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS,T_PDS_OTHER_BAD_TLD 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759616328441662133?= X-GMAIL-MSGID: =?utf-8?q?1759616328441662133?= On VC4, the TV margins on the HDMI connector are implemented by scaling the planes. However, if only the TV margins or the connector are changed by a new state, the planes ending up on that connector won't be. Thus, they won't be updated properly and we'll effectively ignore that change until the next commit affecting these planes. Let's make sure to add all the planes attached to the connector so that we can update them properly. Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index ea22c9bf223a..522cfbc83fe4 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -535,6 +535,32 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector, if (!crtc) return 0; + if (old_state->tv.margins.left != new_state->tv.margins.left || + old_state->tv.margins.right != new_state->tv.margins.right || + old_state->tv.margins.top != new_state->tv.margins.top || + old_state->tv.margins.bottom != new_state->tv.margins.bottom) { + struct drm_crtc_state *crtc_state; + int ret; + + crtc_state = drm_atomic_get_crtc_state(state, crtc); + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); + + /* + * Strictly speaking, we should be calling + * drm_atomic_helper_check_planes() after our call to + * drm_atomic_add_affected_planes(). However, the + * connector atomic_check is called as part of + * drm_atomic_helper_check_modeset() that already + * happens before a call to + * drm_atomic_helper_check_planes() in + * drm_atomic_helper_check(). + */ + ret = drm_atomic_add_affected_planes(state, crtc); + if (ret) + return ret; + } + if (old_state->colorspace != new_state->colorspace || !drm_connector_atomic_hdr_metadata_equal(old_state, new_state)) { struct drm_crtc_state *crtc_state; From patchwork Mon Mar 6 10:46:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64595 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1769274wrd; Mon, 6 Mar 2023 02:53:12 -0800 (PST) X-Google-Smtp-Source: AK7set81PYPv04eBa2jds74kzE0ovMJqhlvbhYbK6wg1cFVmnn3qRjw/4E1kfbZvZ5wSWvAk6Dnf X-Received: by 2002:a17:906:9744:b0:900:a150:cea3 with SMTP id o4-20020a170906974400b00900a150cea3mr13093919ejy.9.1678099991844; Mon, 06 Mar 2023 02:53:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678099991; cv=none; d=google.com; s=arc-20160816; b=Q0oymDY3Y8TSlI+9LZAsBJBeB3JK718JSiU+Raq2WIxkxw0HVceqH28mUL8A3vkGbS O1sKELQ/JEmtO3cArtRkqEqYHIsCrKzXUfewGPCNeMfxkxGRK31VMP7Ns4YwTvaNxP4J UF1K2S7vgaiXoNLnNMPZnHYT/4to+Bj1zAoxJ9eTdTrLPk5blAFBjCsQsibgXswrxjNl yG/ky89ss/C3zw71dnVJs25puuWkzP3n31KuxAqD6C6KOpam/QNM17TxIP4umjv0gcoK evRba/R0+8uMl56Ct9PB/SSWturkeEvA9ap8gy5+d9SrvRqI4nJgidXZxvwk5MKXM9JU Fr+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=IRi/LV6dR8lxjkA56/olwYNpNudyHVuxQ5un23PSJmk=; b=e2x4qIN89BQcAuqkfS2RVN+By7+k5TtRipJGnZObzt62L2w3x1o8G82TDKmTcHJUtp 8D6UPkgYE1rPSM2vehXy3JF8zWNRdI5xgJK0YrXqnOyF4ppshvi1slyG1YnyqliBffm3 H4nzX5Wey5jCNa9VFcvDJk5lHd3z8go0YzYdDOkLXey3nH3EWAG53Pkg9XohncrVTtkM pmXTJDVDpSV6WWLPGCRYNi4n3SX8hyJbzTjbKY2Ue6ARf+Ot7e/6MSa0tc6Zpe8JpThR oWOLrOzbSvVB31Z0O+EIHg6XxyuYqpOXvLT8fTrXCOrde8DR/DAv+g2zZRiJEOB2zx5e jaxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=O0qMAI3C; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=UzEEQbro; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hp40-20020a1709073e2800b008dffe5c6769si8408970ejc.354.2023.03.06.02.52.48; Mon, 06 Mar 2023 02:53:11 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=O0qMAI3C; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=UzEEQbro; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230058AbjCFKuA (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230013AbjCFKts (ORCPT ); Mon, 6 Mar 2023 05:49:48 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63F1D25B97 for ; Mon, 6 Mar 2023 02:49:47 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id B4D625C0249; Mon, 6 Mar 2023 05:49:46 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 06 Mar 2023 05:49:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099786; x=1678186186; bh=IRi/LV6dR8lxjkA56/olwYNpNudyHVuxQ5u n23PSJmk=; b=O0qMAI3CFX02TrHrskAcIzTj4s1M/Lme9/CATwLmL56AYEk05U1 AXcjAoJ1+4aPch+U/a/vovjo+SQVn5L6JKH8cqVleXedSaNF1bdBh+ey/MDMY952 qBNiCPa+iyxoxsMiEIxtEyE3Q74Jw5m9cT6zpUjsHQwNyPS2jSRQ4dC8YXuCwvB7 5O2Rjl4IIypGRPC3JdcfQtbsR3sbAiTJG8zHEXinis7MwxB34kzQVkLzbwespET3 TcIWQjJv3PLyCePvdx5AroqFkp9Y2RmKaihiFZEHIApLAPEFl4XUeGVBqLoznzFf Zuvk20USuAu+WV8B0hFT5N8EdANg0MKIuWg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099786; x=1678186186; bh=IRi/LV6dR8lxjkA56/olwYNpNudyHVuxQ5u n23PSJmk=; b=UzEEQbro2pZqrtjCmze/pM3+ebSPUIToDN+cZh50IsDwG+t6hcg /qrX9QCVKazDnqq+Lt1oNfUv6xeQwKBgAeMe4LcB3UwgbNfBGL2hUPvTm5fuzF/y AycVnrB4X+MyvbwOpxOtrOxNplqFSuek8RTMCpvymsf2cYnRNXYxduTuqVVE3bfz u+S8IYG8eMuspQsKmk0Gwe48j3GpIEW+aZmuyOmowYF+G/lP4HIqY7GR6qy+vSMX s7Q/nvVj51bmnxVWuuRHEGdRtcMY9R8Ogq5gTL4CbxnFRMNtV4rQDyAZZSPxFGC1 piZNkPba8i5pXe3OSbqVQdRhGGHk/T+vaAw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:46 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:44 +0100 Subject: [PATCH v3 3/9] drm/vc4: hdmi: Add Broadcast RGB property to allow override of RGB range MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-3-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=9122; i=maxime@cerno.tech; h=from:subject:message-id; bh=94Ur22Wx0ZTY8UhfX5QQ+W5gUZBJJLtQgSWEMZgujjQ=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR6ZnuN2eVSs2Yavl2glN/hMjjk67HBm2i9nvJd9nCTZt C9/vHaUsDGJcDLJiiiwxwuZL4k7Net3JxjcPZg4rE8gQBi5OAZhI20eG/6G1FrFOqenV0x00Jnkan2 2rmNMk/F5PxvDqDBHX/3cer2RkOKR5yWvvL1XN/N73ax16vvbc03O++sNjE6vGkq7QKf8NeQE= X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615376911509768?= X-GMAIL-MSGID: =?utf-8?q?1759615376911509768?= From: Dave Stevenson Copy Intel's "Broadcast RGB" property semantics to add manual override of the HDMI pixel range for monitors that don't abide by the content of the AVI Infoframe. Signed-off-by: Dave Stevenson Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 97 ++++++++++++++++++++++++++++++++++++++++-- drivers/gpu/drm/vc4/vc4_hdmi.h | 9 ++++ 2 files changed, 102 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 522cfbc83fe4..d23c0c3df2ee 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -154,10 +154,16 @@ static bool vc4_hdmi_mode_needs_scrambling(const struct drm_display_mode *mode, } static bool vc4_hdmi_is_full_range_rgb(struct vc4_hdmi *vc4_hdmi, - const struct drm_display_mode *mode) + struct vc4_hdmi_connector_state *vc4_state) { + const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode; struct drm_display_info *display = &vc4_hdmi->connector.display_info; + if (vc4_state->broadcast_rgb == VC4_HDMI_BROADCAST_RGB_LIMITED) + return false; + else if (vc4_state->broadcast_rgb == VC4_HDMI_BROADCAST_RGB_FULL) + return true; + return !display->is_hdmi || drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_FULL; } @@ -528,8 +534,12 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector, { struct drm_connector_state *old_state = drm_atomic_get_old_connector_state(state, connector); + struct vc4_hdmi_connector_state *old_vc4_state = + conn_state_to_vc4_hdmi_conn_state(old_state); struct drm_connector_state *new_state = drm_atomic_get_new_connector_state(state, connector); + struct vc4_hdmi_connector_state *new_vc4_state = + conn_state_to_vc4_hdmi_conn_state(new_state); struct drm_crtc *crtc = new_state->crtc; if (!crtc) @@ -562,6 +572,7 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector, } if (old_state->colorspace != new_state->colorspace || + old_vc4_state->broadcast_rgb != new_vc4_state->broadcast_rgb || !drm_connector_atomic_hdr_metadata_equal(old_state, new_state)) { struct drm_crtc_state *crtc_state; @@ -575,6 +586,49 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector, return 0; } +static int vc4_hdmi_connector_get_property(struct drm_connector *connector, + const struct drm_connector_state *state, + struct drm_property *property, + uint64_t *val) +{ + struct drm_device *drm = connector->dev; + struct vc4_hdmi *vc4_hdmi = + connector_to_vc4_hdmi(connector); + const struct vc4_hdmi_connector_state *vc4_conn_state = + conn_state_to_vc4_hdmi_conn_state(state); + + if (property == vc4_hdmi->broadcast_rgb_property) { + *val = vc4_conn_state->broadcast_rgb; + } else { + drm_dbg(drm, "Unknown property [PROP:%d:%s]\n", + property->base.id, property->name); + return -EINVAL; + } + + return 0; +} + +static int vc4_hdmi_connector_set_property(struct drm_connector *connector, + struct drm_connector_state *state, + struct drm_property *property, + uint64_t val) +{ + struct drm_device *drm = connector->dev; + struct vc4_hdmi *vc4_hdmi = + connector_to_vc4_hdmi(connector); + struct vc4_hdmi_connector_state *vc4_conn_state = + conn_state_to_vc4_hdmi_conn_state(state); + + if (property == vc4_hdmi->broadcast_rgb_property) { + vc4_conn_state->broadcast_rgb = val; + return 0; + } + + drm_dbg(drm, "Unknown property [PROP:%d:%s]\n", + property->base.id, property->name); + return -EINVAL; +} + static void vc4_hdmi_connector_reset(struct drm_connector *connector) { struct vc4_hdmi_connector_state *old_state = @@ -594,6 +648,7 @@ static void vc4_hdmi_connector_reset(struct drm_connector *connector) new_state->base.max_bpc = 8; new_state->base.max_requested_bpc = 8; new_state->output_format = VC4_HDMI_OUTPUT_RGB; + new_state->broadcast_rgb = VC4_HDMI_BROADCAST_RGB_AUTO; drm_atomic_helper_connector_tv_margins_reset(connector); } @@ -611,6 +666,7 @@ vc4_hdmi_connector_duplicate_state(struct drm_connector *connector) new_state->tmds_char_rate = vc4_state->tmds_char_rate; new_state->output_bpc = vc4_state->output_bpc; new_state->output_format = vc4_state->output_format; + new_state->broadcast_rgb = vc4_state->broadcast_rgb; __drm_atomic_helper_connector_duplicate_state(connector, &new_state->base); return &new_state->base; @@ -621,6 +677,8 @@ static const struct drm_connector_funcs vc4_hdmi_connector_funcs = { .reset = vc4_hdmi_connector_reset, .atomic_duplicate_state = vc4_hdmi_connector_duplicate_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, + .atomic_get_property = vc4_hdmi_connector_get_property, + .atomic_set_property = vc4_hdmi_connector_set_property, }; static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs = { @@ -629,6 +687,33 @@ static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs = .atomic_check = vc4_hdmi_connector_atomic_check, }; +static const struct drm_prop_enum_list broadcast_rgb_names[] = { + { VC4_HDMI_BROADCAST_RGB_AUTO, "Automatic" }, + { VC4_HDMI_BROADCAST_RGB_FULL, "Full" }, + { VC4_HDMI_BROADCAST_RGB_LIMITED, "Limited 16:235" }, +}; + +static void +vc4_hdmi_attach_broadcast_rgb_property(struct drm_device *dev, + struct vc4_hdmi *vc4_hdmi) +{ + struct drm_property *prop = vc4_hdmi->broadcast_rgb_property; + + if (!prop) { + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, + "Broadcast RGB", + broadcast_rgb_names, + ARRAY_SIZE(broadcast_rgb_names)); + if (!prop) + return; + + vc4_hdmi->broadcast_rgb_property = prop; + } + + drm_object_attach_property(&vc4_hdmi->connector.base, prop, + VC4_HDMI_BROADCAST_RGB_AUTO); +} + static int vc4_hdmi_connector_init(struct drm_device *dev, struct vc4_hdmi *vc4_hdmi) { @@ -675,6 +760,8 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, if (vc4_hdmi->variant->supports_hdr) drm_connector_attach_hdr_output_metadata_property(connector); + vc4_hdmi_attach_broadcast_rgb_property(dev, vc4_hdmi); + drm_connector_attach_encoder(connector, encoder); return 0; @@ -829,7 +916,7 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) drm_hdmi_avi_infoframe_quant_range(&frame.avi, connector, mode, - vc4_hdmi_is_full_range_rgb(vc4_hdmi, mode) ? + vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state) ? HDMI_QUANTIZATION_RANGE_FULL : HDMI_QUANTIZATION_RANGE_LIMITED); drm_hdmi_avi_infoframe_colorimetry(&frame.avi, cstate); @@ -1069,6 +1156,8 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, struct drm_connector_state *state, const struct drm_display_mode *mode) { + struct vc4_hdmi_connector_state *vc4_state = + conn_state_to_vc4_hdmi_conn_state(state); struct drm_device *drm = vc4_hdmi->connector.dev; unsigned long flags; u32 csc_ctl; @@ -1082,7 +1171,7 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, VC4_HD_CSC_CTL_ORDER); - if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, mode)) { + if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state)) { /* CEA VICs other than #1 requre limited range RGB * output unless overridden by an AVI infoframe. * Apply a colorspace conversion to squash 0-255 down @@ -1235,7 +1324,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, case VC4_HDMI_OUTPUT_RGB: if_xbar = 0x354021; - if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, mode)) + if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state)) vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_rgb); else vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_unity); diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h index 5d249ac54cd1..89800c48aa24 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.h +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h @@ -117,6 +117,12 @@ enum vc4_hdmi_output_format { VC4_HDMI_OUTPUT_YUV420, }; +enum vc4_hdmi_broadcast_rgb { + VC4_HDMI_BROADCAST_RGB_AUTO, + VC4_HDMI_BROADCAST_RGB_FULL, + VC4_HDMI_BROADCAST_RGB_LIMITED, +}; + /* General HDMI hardware state. */ struct vc4_hdmi { struct vc4_hdmi_audio audio; @@ -129,6 +135,8 @@ struct vc4_hdmi { struct delayed_work scrambling_work; + struct drm_property *broadcast_rgb_property; + struct i2c_adapter *ddc; void __iomem *hdmicore_regs; void __iomem *hd_regs; @@ -238,6 +246,7 @@ struct vc4_hdmi_connector_state { unsigned long long tmds_char_rate; unsigned int output_bpc; enum vc4_hdmi_output_format output_format; + enum vc4_hdmi_broadcast_rgb broadcast_rgb; }; #define conn_state_to_vc4_hdmi_conn_state(_state) \ From patchwork Mon Mar 6 10:46:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64599 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1771656wrd; Mon, 6 Mar 2023 03:00:43 -0800 (PST) X-Google-Smtp-Source: AK7set8pyXHsqGvy3YyBNzvtTf0lgn4xqb8b4tFlpulIXZylviksnIQTejtrwo86rswU5lHQUDB/ X-Received: by 2002:a50:fa83:0:b0:4c7:269d:ed8b with SMTP id w3-20020a50fa83000000b004c7269ded8bmr9047568edr.18.1678100443207; Mon, 06 Mar 2023 03:00:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100443; cv=none; d=google.com; s=arc-20160816; b=DQpOy+TAfIMUL23ZJX5IW5ReJySJLYhqkT6WECkNCHdpJEk/ido3w9054vzv8QMu0/ UkCa8O1zMPKZC+UpjsDRu576ughs5yVuX0hjDTYj3Rryfddl6qaQ4k8PenJMz5pWX3gM UfWfLxhobVJOYpa6Q4p0D6krYVCsmxN4Fz9rObRDSBNKcD/2hOineQlW0EgdIl5fYks7 1zqpos3kfi1tjpWOSZn66yQB3BhxmPBcpvIS5zvyfAWFQHMGk1DnVnPOcsGSbsBuU58P KSNt3AypA65PMx/KM0Bf6e0jDTLbSs/KmbHQlNdSXZ3YK0epGdn4GyIpuKMFVnKOqu3u DISQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=JfNzjXLO1YdKUgsAWm6X1NZ1YOgQ0xHf45VsHbsYWqQ=; b=yV0jVRigtynASyVBvYa3ow7dm0KfuNpXSueRXQt9FJMSYhnmOpe2V8X64oqx9uvjlL Ngb7hUw95r/89GQz/saWpEmTyoayWxOMLiJVlAre7itbNJh58iyYUpQpNRP3wi/JG7I8 9LgmlvmILBrjr8mig7ruMKAmlGpl6uuNe1+WBHWI1yhWPbFujztDtIDqReM0iBlp0+IY nzLTU23MTzGP1mdRqdeo4IcUm5PcfXV3sAchHSTr7tlNfqsUCuWSuap7JbhLlrCdmzk5 CRXZy8ljEoZtyITyDVaRNKv1oUVV33zy/5XIw/lLvol4Mnxpj6uCq+6+zLXRrC6LAiaF 0jiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=H5r9NvJL; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=l0JOWEdo; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k21-20020a05640212d500b004ad12c250a7si339660edx.111.2023.03.06.03.00.19; Mon, 06 Mar 2023 03:00:43 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=H5r9NvJL; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=l0JOWEdo; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230013AbjCFKuE (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230044AbjCFKtv (ORCPT ); Mon, 6 Mar 2023 05:49:51 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71AF82386E for ; Mon, 6 Mar 2023 02:49:49 -0800 (PST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id E04F45C0085; Mon, 6 Mar 2023 05:49:48 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 06 Mar 2023 05:49:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099788; x=1678186188; bh=JfNzjXLO1YdKUgsAWm6X1NZ1YOgQ0xHf45V sHbsYWqQ=; b=H5r9NvJLWWQ5bGSZc+d85NschPha9CzrGYnwcRSyqoTkHCo2na3 Ebk2wk/9qk6/+2vsgHYg4+spSNfIM6WS6Sb7ok2IMVuBmhWIhF+MfJj54uOcHCTU Pia5KK/orT+gtBXY/haztGeoyVO1clFXSwcjr/FsCvx0rgORUYfwUYkjPsTk8MwV 1SGY25s/joyt/VlRchNEp083Toh8dLvKyhSyW189URGlFBvGFFbbZJs1vw+Y6yyE tRD5wtPGM9U249sa7ZuaxgRvDnAs/dZfWxDYrQbBwO6b8tpuMnpgBJsOmlAqvz5u gLevttPJKo4+xZ8Oy9JJt5jD1CLcsAzNzgw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099788; x=1678186188; bh=JfNzjXLO1YdKUgsAWm6X1NZ1YOgQ0xHf45V sHbsYWqQ=; b=l0JOWEdouAA082Zqeh/2/d3wENTLIQBoWw57mjjtdt6wJJ2UOAA 0xaFoeHjRyu9O6Vct2o8KJhcpKKgo/QbrEJjr8p11CYPAjQACa1YP+SQpT03ZNjk Farsda4SFPfHgZ5X+kRbNhoscidcf4045OnSwvWwOIrGXqmtdDEMm63c0tZdfrfE gbGlth+RdRObhIPg0IxTvHtJJJipzls08ENqQWzzIaAhJqiciTxEjkmBZJyoFNZM x4MtvGkMvKHHI7yMX4lSKEhR3PWq/NqdbeA1ww3ByQ3nUmInLffGZjzcW0+tQgMn qo5U9D5LmLLlqgb2MMgfhPuiD8hSdbmEHkA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgudelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:48 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:45 +0100 Subject: [PATCH v3 4/9] drm/vc4: hdmi: Rename full range helper MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-4-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2552; i=maxime@cerno.tech; h=from:subject:message-id; bh=LSMVyKlq7BMbrNWJnYkmXQAzNzyhLN8BWiELqi29aPQ=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR6YXmvn2lZhdLo1yEa3e8b136b/JBadmPBV0ea4XE973 MDq1o5SFQYyLQVZMkSVG2HxJ3KlZrzvZ+ObBzGFlAhnCwMUpABNpWsbw3016UdTP7mXbJPs5z/0M3P d19V31EiP3b0eYZuw2LLyU1cvIcPKF4jHO14vaL9XNOFv4TmJp53s/K4HT5+apmiVf1KlPZAEA X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615850583850690?= X-GMAIL-MSGID: =?utf-8?q?1759615850583850690?= From: Dave Stevenson The VC4 HDMI driver has a helper function to figure out whether full range or limited range RGB is being used called vc4_hdmi_is_full_range_rgb(). We'll need it to support other colorspaces, so let's rename it to vc4_hdmi_is_full_range(). Signed-off-by: Dave Stevenson Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index d23c0c3df2ee..f0d8da241f24 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -153,8 +153,8 @@ static bool vc4_hdmi_mode_needs_scrambling(const struct drm_display_mode *mode, return clock > HDMI_14_MAX_TMDS_CLK; } -static bool vc4_hdmi_is_full_range_rgb(struct vc4_hdmi *vc4_hdmi, - struct vc4_hdmi_connector_state *vc4_state) +static bool vc4_hdmi_is_full_range(struct vc4_hdmi *vc4_hdmi, + struct vc4_hdmi_connector_state *vc4_state) { const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode; struct drm_display_info *display = &vc4_hdmi->connector.display_info; @@ -916,7 +916,7 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) drm_hdmi_avi_infoframe_quant_range(&frame.avi, connector, mode, - vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state) ? + vc4_hdmi_is_full_range(vc4_hdmi, vc4_state) ? HDMI_QUANTIZATION_RANGE_FULL : HDMI_QUANTIZATION_RANGE_LIMITED); drm_hdmi_avi_infoframe_colorimetry(&frame.avi, cstate); @@ -1171,7 +1171,7 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR, VC4_HD_CSC_CTL_ORDER); - if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state)) { + if (!vc4_hdmi_is_full_range(vc4_hdmi, vc4_state)) { /* CEA VICs other than #1 requre limited range RGB * output unless overridden by an AVI infoframe. * Apply a colorspace conversion to squash 0-255 down @@ -1324,7 +1324,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, case VC4_HDMI_OUTPUT_RGB: if_xbar = 0x354021; - if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, vc4_state)) + if (!vc4_hdmi_is_full_range(vc4_hdmi, vc4_state)) vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_rgb); else vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_unity); From patchwork Mon Mar 6 10:46:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64604 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1775730wrd; Mon, 6 Mar 2023 03:09:42 -0800 (PST) X-Google-Smtp-Source: AK7set+hWTjU6Op0zh3Ucs742Ux4V/qxdSC4gsrNJGcLKRRFcPc775W7nxRhZGXgxbMxVsSIyS6/ X-Received: by 2002:aa7:9e8c:0:b0:5d2:7988:2b80 with SMTP id p12-20020aa79e8c000000b005d279882b80mr8296104pfq.14.1678100982075; Mon, 06 Mar 2023 03:09:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100982; cv=none; d=google.com; s=arc-20160816; b=LT1aVOm5uf0QwN+uiNzHGSMu8l3/BvZBqXCL2a7S2QaXJus39fy1vzt/9AGz7uDD7V a9LgAssuzj6kT/k/xH7cDP335reHYOxKUxEjEaYhCWSZuhzvwXryXcObRVBpXRm20iGC AEV6GmuQI44ghpy7v56lArWDnHFHz0VRZGLlPw+l40P3LHnyiNOceRERZ4bwVh0uxs/8 vcyXWESX7J87ObO6z33EtR5+NelUhz3q4J3Fb7EddheYr0Cz96+66/ES7LL8dHn4KTQO +/RpeIWJOAecLIhvDFQU5xmO4ZVya4ZHSFdt94jrtjcZNJn1OT8GajUElXTzbGeteqpJ hRTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=krfDOlTMEX6NMuZifF8fsycLCd1Sm7BNd636r55wqgo=; b=mIuyaXyLM/Jno3RfgwlozDOyv7/qiHFoa6bJIsdF+Rfm+xMft1zAYsTcVtGwUdjYgo WbJT4XIp99wKYy1qS6Qn4eNhXt3oUzIFRxXpum+P328a9LqWRyH+5ewm4LlmjDnqy3lC n4NTF7ycGZucs0kqQVlu2ZqNLlu35rifIQxwOXUkO2RLcBgaAnTnhInl2Cgt+whJQd+A NapMLYFO4KA5gtE0NkgK0ZpvymI3MixsW1p7e69Jeq5o2EvJ39tDXPDsZr11FzLKOOrQ sJ6msxtQ4uCKI+sTmQ+VLNPHKxtjDp2SaXPGsepSSxGFqDoOFfOVC7fgQEgCC/j6r0Oe AOUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=dOUo4m0l; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=aStXbmi4; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k12-20020aa7972c000000b005a48ecab9a1si9942105pfg.167.2023.03.06.03.09.28; Mon, 06 Mar 2023 03:09:42 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=dOUo4m0l; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=aStXbmi4; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230025AbjCFKuK (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230109AbjCFKtx (ORCPT ); Mon, 6 Mar 2023 05:49:53 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F827233F2 for ; Mon, 6 Mar 2023 02:49:51 -0800 (PST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 06E4F5C024C; Mon, 6 Mar 2023 05:49:51 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Mon, 06 Mar 2023 05:49:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099791; x=1678186191; bh=krfDOlTMEX6NMuZifF8fsycLCd1Sm7BNd63 6r55wqgo=; b=dOUo4m0lSiOb6scovVsJ+A2E8cvfBCB6ch6Bf5TNivioYhjxsHf NIrV2FhIQ8TMNTLB2ZylymwkRPM7Pa2YNgvMOZNJ48oHULJSyfsqLdVbt1ekE8ki FE/RiC3iAXKC8xeFcdvj5KYsKbrN0Jz7eXQpfbyCoN45yOsV2ArbhzZyMG0kj6tH FGOG6H5JH6sWm2zYWkhUraCwTDvc/YhpNchgFymv0yuFmdqUui5OjCv/j2UudAFY WORIeaFywpEOQsvGaj+aez1ZwmhilRK9zwKOFhhrQ9zIIHpWDuWsxldCeowz+xW5 u8fKJy6fNhleOlcjy/nDspWiOGBykCSGrrw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099791; x=1678186191; bh=krfDOlTMEX6NMuZifF8fsycLCd1Sm7BNd63 6r55wqgo=; b=aStXbmi4wpe6Ewp9YnyYVyN0lOF/XkVfCk0WJA2OjwDyqUiV0Ap +tL9hQX1UD6YpaSIYxxO/aObcXgP4KlyBDAmKGzEbSK04oeJzNUKjuh5qoP1PP1l alRDciAdPcK3+T8654+SE++ilu7lr4SC5Er+I75f28FaTx1/L6OyGKexh+/r3bCU 6qC+/Z14GfTs4mBIcoS2bc3gPmqf+8JlVteQUCf8Sl0D/V89kzGVocX3xBO29vLg Shphqcgw64oHVWQjE0j2NSPRleeiMofRBBoZ/bvvOfdGVRA9vK9GRRZ9Zdd04peR bekHZ7wiWlcGe7m3JnzJGIwuIVf3bmmTOoQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgudelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:50 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:46 +0100 Subject: [PATCH v3 5/9] drm/vc4: hdmi: Swap CSC matrix channels for YUV444 MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-5-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3982; i=maxime@cerno.tech; h=from:subject:message-id; bh=82ngVmZANnzei7Xxy7a1H4a9x+IIfQ/+X+g9NLSgDK4=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR6bv+aQsuM30uteJZV+k/s9ROWzDUy3gIXW3z8+yz4g7 XeZERykLgxgXg6yYIkuMsPmSuFOzXney8c2DmcPKBDKEgYtTACbCX8zIcJVLdGLF/o9ctVm7GbY0ym lONDrddvfRr/c9MjdiI4KKFjMydGad3qNqvf/gFFeu6Nuda85e6ZyzqOpp4YWE42uYF549wQkA X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759616415390802516?= X-GMAIL-MSGID: =?utf-8?q?1759616415390802516?= From: Dave Stevenson YUV444 and YUV422 actually require the same matrix, but programmed differently. We've dealt with it in the past by having two matrices, with the one for YUV444 reordered to accomodate the hardware. This gets in the way of subsequent reworks so let's define a function that will take the coefficients swap into account, and remove the now redundant YUV444 matrix. Signed-off-by: Dave Stevenson Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index f0d8da241f24..f051e501efe6 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1236,7 +1236,7 @@ static const u16 vc5_hdmi_csc_full_rgb_to_limited_rgb[3][4] = { }; /* - * Conversion between Full Range RGB and Full Range YUV422 using the + * Conversion between Full Range RGB and Limited Range YUV using the * BT.709 Colorspace * * @@ -1246,28 +1246,12 @@ static const u16 vc5_hdmi_csc_full_rgb_to_limited_rgb[3][4] = { * * Matrix is signed 2p13 fixed point, with signed 9p6 offsets */ -static const u16 vc5_hdmi_csc_full_rgb_to_limited_yuv422_bt709[3][4] = { +static const u16 vc5_hdmi_csc_full_rgb_to_limited_bt709[3][4] = { { 0x05d2, 0x1394, 0x01fa, 0x0400 }, { 0xfccc, 0xf536, 0x0e00, 0x2000 }, { 0x0e00, 0xf34a, 0xfeb8, 0x2000 }, }; -/* - * Conversion between Full Range RGB and Full Range YUV444 using the - * BT.709 Colorspace - * - * [ -0.100268 -0.337232 0.437500 128 ] - * [ 0.437500 -0.397386 -0.040114 128 ] - * [ 0.181906 0.611804 0.061758 16 ] - * - * Matrix is signed 2p13 fixed point, with signed 9p6 offsets - */ -static const u16 vc5_hdmi_csc_full_rgb_to_limited_yuv444_bt709[3][4] = { - { 0xfccc, 0xf536, 0x0e00, 0x2000 }, - { 0x0e00, 0xf34a, 0xfeb8, 0x2000 }, - { 0x05d2, 0x1394, 0x01fa, 0x0400 }, -}; - static void vc5_hdmi_set_csc_coeffs(struct vc4_hdmi *vc4_hdmi, const u16 coeffs[3][4]) { @@ -1281,6 +1265,20 @@ static void vc5_hdmi_set_csc_coeffs(struct vc4_hdmi *vc4_hdmi, HDMI_WRITE(HDMI_CSC_34_33, (coeffs[2][3] << 16) | coeffs[2][2]); } +static void vc5_hdmi_set_csc_coeffs_swap(struct vc4_hdmi *vc4_hdmi, + const u16 coeffs[3][4]) +{ + lockdep_assert_held(&vc4_hdmi->hw_lock); + + /* YUV444 needs the CSC matrices using the channels in a different order */ + HDMI_WRITE(HDMI_CSC_12_11, (coeffs[1][1] << 16) | coeffs[1][0]); + HDMI_WRITE(HDMI_CSC_14_13, (coeffs[1][3] << 16) | coeffs[1][2]); + HDMI_WRITE(HDMI_CSC_22_21, (coeffs[2][1] << 16) | coeffs[2][0]); + HDMI_WRITE(HDMI_CSC_24_23, (coeffs[2][3] << 16) | coeffs[2][2]); + HDMI_WRITE(HDMI_CSC_32_31, (coeffs[0][1] << 16) | coeffs[0][0]); + HDMI_WRITE(HDMI_CSC_34_33, (coeffs[0][3] << 16) | coeffs[0][2]); +} + static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, struct drm_connector_state *state, const struct drm_display_mode *mode) @@ -1303,7 +1301,8 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, switch (vc4_state->output_format) { case VC4_HDMI_OUTPUT_YUV444: - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_yuv444_bt709); + vc5_hdmi_set_csc_coeffs_swap(vc4_hdmi, + vc5_hdmi_csc_full_rgb_to_limited_bt709); break; case VC4_HDMI_OUTPUT_YUV422: @@ -1318,7 +1317,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, if_cfg |= VC4_SET_FIELD(VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422_FORMAT_422_LEGACY, VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422); - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_yuv422_bt709); + vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_bt709); break; case VC4_HDMI_OUTPUT_RGB: From patchwork Mon Mar 6 10:46:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64596 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1769432wrd; Mon, 6 Mar 2023 02:53:45 -0800 (PST) X-Google-Smtp-Source: AK7set8QCsuaCkvPO0CaLofLLKCMlXHo3FlCZbZWz2+f+AICD8vz61Sc5sRWwLRRXgFJdLjuFxt1 X-Received: by 2002:aa7:c544:0:b0:4ab:cb8c:932b with SMTP id s4-20020aa7c544000000b004abcb8c932bmr8325811edr.40.1678100025374; Mon, 06 Mar 2023 02:53:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100025; cv=none; d=google.com; s=arc-20160816; b=kEAqavcea9igje6xYVnDFGo5cIAaZzvqQ3+DUl/Bkrq9+l7KFHW+wyEu41hNtoGKcL y/SW8hOk2itXjoF2XD/tJ5UQTwNag4Qo7F7GJ3sVSLINnVmffhCjVhj+4iEQnxEzP/cB CaPG8cM0u1mfwHr0coam4EYKwZC5CmwAtyrVPwxv3TqYOzjG9vKL9Sr2SmxiebKgQBs8 Gokk+vfFV/so8Cmv28mJ6NVuHryZ2xOEk1OwywXjV0pQHL2d5R5G46Zk2gF+NtjvhSSR 6SXzafNcYIoair5xyOvdviNUPtaHbbsxJF+dy3jnGGABGcfmF0aAI4+nHEJpBiH1JP9R XNdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=B/Z+p1AK5jc8n7UUDbdl2pFRQGJ8lrqKYlGLcuSbBV8=; b=rYHP15E2fJrIquLj/h/gmhVuoKLbJC8QxZlMnkLQzUKg5GY8PRrAQxCpPa43V/+Gxx 6FuBZTCmnOP6zlB0Kk7CKX6a7pbZPh/APr2eIFR0HNarifAil6WLBRfGnDLM88PXO1Hc PlNGC6vVfZssEgj26g2O5cGHSytGC9hqc84/PiiKJEhHI6zafusFRlbN5i/b1WeuUAv2 fPTwNMpLJQAFK9WFPPLvvND/5qit8R8kaW/mLRqOm1+G8zoRK9R+8LCD+m94kOG4yAvC 8AGWLjZNZmGxKqumbxXs9RfkPU2cDiir2MsHrAlV8txaz1rkO4hUepQA1IKB1/fV02UB P8/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=Ql3zfqpm; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=rLALT+cY; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e6-20020a170906044600b008d14edd754dsi7610773eja.405.2023.03.06.02.53.21; Mon, 06 Mar 2023 02:53:45 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=Ql3zfqpm; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=rLALT+cY; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230044AbjCFKuP (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229952AbjCFKtz (ORCPT ); Mon, 6 Mar 2023 05:49:55 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D24CF23312 for ; Mon, 6 Mar 2023 02:49:53 -0800 (PST) Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 3A8A65C0190; Mon, 6 Mar 2023 05:49:53 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Mon, 06 Mar 2023 05:49:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099793; x=1678186193; bh=B/Z+p1AK5jc8n7UUDbdl2pFRQGJ8lrqKYlG LcuSbBV8=; b=Ql3zfqpmtqzU/S6Z7gn7nL4ugeY8xvP5wgGlLbloGmI6bjjNU6/ +0wkoyAZyr3FjeEJrhG2lxpvru6NX5B5KDzAgH44hwnMtYGZHUA+TkfeU2AXaIa6 5W7j8aB+AYrt4fnDibye61N3ByXCH9A7zLQvrTtklm2nN/KsJAGb0eQmW17Pwiqg d+h01d/DJJojBXpc5cveisvG3gGwhRSotuefKWgSmiSUhGJmtsYEshjipx/Fqsdf vrMA7MfIMBmqIbt1m2l0E1MsidJCtBXCBg5P2Quq1CHclDSU7iVsLyeo1kZHD8lv gK6q0V4TSUDHBgy7UQsiO6aXjjlpKrZ+Xcw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099793; x=1678186193; bh=B/Z+p1AK5jc8n7UUDbdl2pFRQGJ8lrqKYlG LcuSbBV8=; b=rLALT+cYPH597oWNX5B7cxkaDtN0Azvft/QrI02KdfwR/42+pt2 Md1LTiZGdtZrOrQ7OaQfXrzW5oIWV0Q0ic4pRi6cZzOMo4/vqxfsqqjO3p+INgI1 c69C9MAwKpeAGVRd/dB9zwY+KJNrhqhEVHoLZjRk3GimCKXqhj3G4YULHQ4SdA8R UooxoSCS2qoWOBrF0xTNYRUMcwu8QCAwq+P1LLPnQj5s6nZg5XXGIqx/KK9u1nkq 9ISO7RIt7pJGscXUupQlJU4hSbf95vEPTEyWg42BZjc/V3IiWrFUqHnkPeQJXomC msErEBHy+RTdU2UOBm3PZmJEZAl7kS6XI/g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgudelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:52 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:47 +0100 Subject: [PATCH v3 6/9] drm/vc4: hdmi: Rework the CSC matrices organization MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-6-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=5801; i=maxime@cerno.tech; h=from:subject:message-id; bh=rxeJvK6JSutlcyZ/g6klgHxw9zXFlnP7Vh4aySwW3nU=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR2YExfKEHXE8m63I+XXSBeZniz9ds+z2O7Ho2ov3wlev nyu+11HKwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJ2Isx/Hd4zD3n50PW3Vy97sfKdV 68Od9gHb/HZZ11UxODXd3dR/8Z/oo09J2NTlc1OTjl3OQjwYtzz4uE5M5uYfun3HOR62rpTQ4A X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615412579933179?= X-GMAIL-MSGID: =?utf-8?q?1759615412579933179?= From: Dave Stevenson The CSC matrices were stored as separate matrix for each colorspace, and if we wanted a limited or full RGB output. This created some gaps in our support and we would not always pick the relevant matrix. Let's rework our data structure to store one per colorspace, and then a matrix for limited range and one for full range. This makes us add a new matrix to support full range BT709 YUV output. Signed-off-by: Dave Stevenson Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 108 ++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index f051e501efe6..a3e0bf00e4c6 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1204,52 +1204,72 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, } /* - * If we need to output Full Range RGB, then use the unity matrix + * Matrices for (internal) RGB to RGB output. * - * [ 1 0 0 0] - * [ 0 1 0 0] - * [ 0 0 1 0] - * - * Matrix is signed 2p13 fixed point, with signed 9p6 offsets + * Matrices are signed 2p13 fixed point, with signed 9p6 offsets */ -static const u16 vc5_hdmi_csc_full_rgb_unity[3][4] = { - { 0x2000, 0x0000, 0x0000, 0x0000 }, - { 0x0000, 0x2000, 0x0000, 0x0000 }, - { 0x0000, 0x0000, 0x2000, 0x0000 }, +static const u16 vc5_hdmi_csc_full_rgb_to_rgb[2][3][4] = { + { + /* + * Full range - unity + * + * [ 1 0 0 0] + * [ 0 1 0 0] + * [ 0 0 1 0] + */ + { 0x2000, 0x0000, 0x0000, 0x0000 }, + { 0x0000, 0x2000, 0x0000, 0x0000 }, + { 0x0000, 0x0000, 0x2000, 0x0000 }, + }, + { + /* + * Limited range + * + * CEA VICs other than #1 require limited range RGB + * output unless overridden by an AVI infoframe. Apply a + * colorspace conversion to squash 0-255 down to 16-235. + * The matrix here is: + * + * [ 0.8594 0 0 16] + * [ 0 0.8594 0 16] + * [ 0 0 0.8594 16] + */ + { 0x1b80, 0x0000, 0x0000, 0x0400 }, + { 0x0000, 0x1b80, 0x0000, 0x0400 }, + { 0x0000, 0x0000, 0x1b80, 0x0400 }, + }, }; /* - * CEA VICs other than #1 require limited range RGB output unless - * overridden by an AVI infoframe. Apply a colorspace conversion to - * squash 0-255 down to 16-235. The matrix here is: - * - * [ 0.8594 0 0 16] - * [ 0 0.8594 0 16] - * [ 0 0 0.8594 16] - * - * Matrix is signed 2p13 fixed point, with signed 9p6 offsets - */ -static const u16 vc5_hdmi_csc_full_rgb_to_limited_rgb[3][4] = { - { 0x1b80, 0x0000, 0x0000, 0x0400 }, - { 0x0000, 0x1b80, 0x0000, 0x0400 }, - { 0x0000, 0x0000, 0x1b80, 0x0400 }, -}; - -/* - * Conversion between Full Range RGB and Limited Range YUV using the - * BT.709 Colorspace - * - * - * [ 0.181906 0.611804 0.061758 16 ] - * [ -0.100268 -0.337232 0.437500 128 ] - * [ 0.437500 -0.397386 -0.040114 128 ] + * Conversion between Full Range RGB and YUV using the BT.709 Colorspace * - * Matrix is signed 2p13 fixed point, with signed 9p6 offsets + * Matrices are signed 2p13 fixed point, with signed 9p6 offsets */ -static const u16 vc5_hdmi_csc_full_rgb_to_limited_bt709[3][4] = { - { 0x05d2, 0x1394, 0x01fa, 0x0400 }, - { 0xfccc, 0xf536, 0x0e00, 0x2000 }, - { 0x0e00, 0xf34a, 0xfeb8, 0x2000 }, +static const u16 vc5_hdmi_csc_full_rgb_to_yuv_bt709[2][3][4] = { + { + /* + * Full Range + * + * [ 0.212600 0.715200 0.072200 0 ] + * [ -0.114572 -0.385428 0.500000 128 ] + * [ 0.500000 -0.454153 -0.045847 128 ] + */ + { 0x06ce, 0x16e3, 0x024f, 0x0000 }, + { 0xfc56, 0xf3ac, 0x1000, 0x2000 }, + { 0x1000, 0xf179, 0xfe89, 0x2000 }, + }, + { + /* + * Limited Range + * + * [ 0.181906 0.611804 0.061758 16 ] + * [ -0.100268 -0.337232 0.437500 128 ] + * [ 0.437500 -0.397386 -0.040114 128 ] + */ + { 0x05d2, 0x1394, 0x01fa, 0x0400 }, + { 0xfccc, 0xf536, 0x0e00, 0x2000 }, + { 0x0e00, 0xf34a, 0xfeb8, 0x2000 }, + }, }; static void vc5_hdmi_set_csc_coeffs(struct vc4_hdmi *vc4_hdmi, @@ -1286,6 +1306,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, struct drm_device *drm = vc4_hdmi->connector.dev; struct vc4_hdmi_connector_state *vc4_state = conn_state_to_vc4_hdmi_conn_state(state); + unsigned int lim_range = vc4_hdmi_is_full_range(vc4_hdmi, vc4_state) ? 0 : 1; unsigned long flags; u32 if_cfg = 0; u32 if_xbar = 0x543210; @@ -1302,7 +1323,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, switch (vc4_state->output_format) { case VC4_HDMI_OUTPUT_YUV444: vc5_hdmi_set_csc_coeffs_swap(vc4_hdmi, - vc5_hdmi_csc_full_rgb_to_limited_bt709); + vc5_hdmi_csc_full_rgb_to_yuv_bt709[lim_range]); break; case VC4_HDMI_OUTPUT_YUV422: @@ -1317,16 +1338,13 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, if_cfg |= VC4_SET_FIELD(VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422_FORMAT_422_LEGACY, VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422); - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_bt709); + vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_yuv_bt709[lim_range]); break; case VC4_HDMI_OUTPUT_RGB: if_xbar = 0x354021; - if (!vc4_hdmi_is_full_range(vc4_hdmi, vc4_state)) - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_limited_rgb); - else - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_unity); + vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_rgb[lim_range]); break; default: From patchwork Mon Mar 6 10:46:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64597 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1769440wrd; Mon, 6 Mar 2023 02:53:47 -0800 (PST) X-Google-Smtp-Source: AK7set8+6cTs9OzsHoHNi5jUAcRpp2CghDQIqyiJ6mNJxEnQZcK0CsjxhdiDMxdJSX71ZYhGJtdy X-Received: by 2002:a17:907:7ea5:b0:8a5:3d1e:6302 with SMTP id qb37-20020a1709077ea500b008a53d1e6302mr12333210ejc.56.1678100027026; Mon, 06 Mar 2023 02:53:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100027; cv=none; d=google.com; s=arc-20160816; b=sOb6dFRXb3m0zNc3Yk08jN5npbGX8St75pxJUfpC8tWr5c1e+w6QEoLcLu28LQmRZW TDxfbpfw/y3tpR32G4daU++c/z2Zwtcq4EFXOLoFvotpEHQ69cE76antW6/prafcYaLW Mq1qpG8vyY/cow0NajfFD8hByz1zCTIt7wp9CMinPfi1DKS09LTrVmq5QLjkIRklYQqW e7j/TAnemdQ+/XDX+/opCLD2t4RWvgSUQYTDCimOlIGpJOa5irnKqfFIDGOR99FMq8Ng m7YO5MNPDZwpobXDZtwVgfXNyvWxwPn7b1uxY/LBT5uAb+Y8WTbPc4+cFp3RsWq9RyuB ssaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=U6WvYvGj+f6Jr+yF0TNYNLkePrZ5UiOb/5yLjPbLweU=; b=OU8nkRZ0iT1Au5oKYJCrCc2FkDDtcn7g041NbpsTVZ7Nrgu6Ht5pjhLu/h89GYN1Eq Mc5F9L3XGHY66M0MefSCMbFo9dKNPKTRtnSxe6LKGUu/9pSgTP6NedSwoUsZLlQ7UqFq xcbNiIBVE9+BGIpULT7WAfSgus+/JlV9Tw6w2lwMS7u7jWFpa+K2Hk7JtrIfoHzV4C6e Mi0bH3Z5ir99UZWWr8J1H8exgK0MyWjDnnaE70UbMhk7/FmPhUbBHzr4TcX3JkW0r4Ks XNRF8RRX4aJAM9XAHmiytudgGAwsp6ftovHXl9RCsTgr45SXHFCClZEzQnMKDpdgE8o8 1I+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=Rhbmyswe; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=Ev3X+XmU; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j17-20020a17090686d100b008eb0766f2dbsi2982966ejy.524.2023.03.06.02.53.23; Mon, 06 Mar 2023 02:53:47 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=Rhbmyswe; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=Ev3X+XmU; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230119AbjCFKuY (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230077AbjCFKuA (ORCPT ); Mon, 6 Mar 2023 05:50:00 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 250D225E35 for ; Mon, 6 Mar 2023 02:49:56 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 8D45E5C0085; Mon, 6 Mar 2023 05:49:55 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 06 Mar 2023 05:49:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099795; x=1678186195; bh=U6WvYvGj+f6Jr+yF0TNYNLkePrZ5UiOb/5y LjPbLweU=; b=RhbmysweGmGMNXTZBJzGnra6qF60EdYNzt5UVON246FMWUbGd/B KP00jCpnjN+q/1azw8pPOoJoCmYlRyN10kQ+2vhFCByWyiH0rEXGrQFcecARj43I V+ycRC0irRR6cKl7Z3bMY81iOhMF6LU2wrmsKBUXQkesD4kWyyVABxpieWL6s1hQ P93TL3GuvT1COeYWs1Nv0pl2x9FOC+eJ0+rg9aS7h/qGVMWc08yfIamIWXDT0pR/ 37ULKJc4+vFYZ/i4KrieJVvD7y6vLLR4t6OcAkHW2IPW7e3hbL+AYbrXnV4IUSD7 7Ywe353GUsXhrpaBkrQSGV97BPFXJVq6fiA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099795; x=1678186195; bh=U6WvYvGj+f6Jr+yF0TNYNLkePrZ5UiOb/5y LjPbLweU=; b=Ev3X+XmUJ47svJjjlhjRy8i8oRZjlbgFMwZdphwADQ3e0f9hazO /n7e1O11A47ubz1KQzI7ITLNkY21HS01iVsANgKhHmIyOZ+81fNk2nZfD1IpGJk6 w96nTsVKDl/Qo1yhH+gkHOUy2IHRvFGUI5JA1qQcEhOtp+syx0hnG2UBoKoL5U9m qg89ywrhLxEScMJTiuM5W4cibIk8LyG5Kr1fOhUhbf9gcFqnZUrwXLWFxf40oIz8 w6odSny8DikIE0Q6/TThbQPEf3rR62C7tlp3E6ooGFKjEiYn2H23g9x5V9hn5JSI L8mluXB4a/jbNMrdXSC6B/ChR6h5J/Ra8JA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:54 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:48 +0100 Subject: [PATCH v3 7/9] drm/vc4: hdmi: Add a function to retrieve the CSC matrix MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-7-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2847; i=maxime@cerno.tech; h=from:subject:message-id; bh=07Z626J9apTaH2nWy8eyHugnVc3F1Vi8gC2KI7yAn9Q=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR2Z0JMw4P9OFdZ/4VrlOWffKhU/eyVrKlqZUVZv3HmP9 YrSio5SFQYyLQVZMkSVG2HxJ3KlZrzvZ+ObBzGFlAhnCwMUpABOJYGBk+Gsktsj3+gy2Wx4vdOb5SB WrXWF7fJX71Kq1CbKrBbbLczP8rzK7V/lgUnGleO6kKbdvad+f6ZYlfOq40PmLv1c2Rt9p5wIA X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615413991807584?= X-GMAIL-MSGID: =?utf-8?q?1759615413991807584?= From: Dave Stevenson The CSC matrix to use depends on the output format, its range and the colorspace. Since we're going to add more colorspaces, let's move the CSC matrix retrieval to a function. Signed-off-by: Dave Stevenson Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index a3e0bf00e4c6..1424835bd83e 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1299,6 +1299,20 @@ static void vc5_hdmi_set_csc_coeffs_swap(struct vc4_hdmi *vc4_hdmi, HDMI_WRITE(HDMI_CSC_34_33, (coeffs[0][3] << 16) | coeffs[0][2]); } +static const u16 +(*vc5_hdmi_find_yuv_csc_coeffs(struct vc4_hdmi *vc4_hdmi, u32 colorspace, bool limited))[4] +{ + switch (colorspace) { + default: + case DRM_MODE_COLORIMETRY_NO_DATA: + case DRM_MODE_COLORIMETRY_BT709_YCC: + case DRM_MODE_COLORIMETRY_XVYCC_709: + case DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED: + case DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT: + return vc5_hdmi_csc_full_rgb_to_yuv_bt709[limited]; + } +} + static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, struct drm_connector_state *state, const struct drm_display_mode *mode) @@ -1308,6 +1322,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, conn_state_to_vc4_hdmi_conn_state(state); unsigned int lim_range = vc4_hdmi_is_full_range(vc4_hdmi, vc4_state) ? 0 : 1; unsigned long flags; + const u16 (*csc)[4]; u32 if_cfg = 0; u32 if_xbar = 0x543210; u32 csc_chan_ctl = 0; @@ -1322,11 +1337,14 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, switch (vc4_state->output_format) { case VC4_HDMI_OUTPUT_YUV444: - vc5_hdmi_set_csc_coeffs_swap(vc4_hdmi, - vc5_hdmi_csc_full_rgb_to_yuv_bt709[lim_range]); + csc = vc5_hdmi_find_yuv_csc_coeffs(vc4_hdmi, state->colorspace, !!lim_range); + + vc5_hdmi_set_csc_coeffs_swap(vc4_hdmi, csc); break; case VC4_HDMI_OUTPUT_YUV422: + csc = vc5_hdmi_find_yuv_csc_coeffs(vc4_hdmi, state->colorspace, !!lim_range); + csc_ctl |= VC4_SET_FIELD(VC5_MT_CP_CSC_CTL_FILTER_MODE_444_TO_422_STANDARD, VC5_MT_CP_CSC_CTL_FILTER_MODE_444_TO_422) | VC5_MT_CP_CSC_CTL_USE_444_TO_422 | @@ -1338,7 +1356,7 @@ static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, if_cfg |= VC4_SET_FIELD(VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422_FORMAT_422_LEGACY, VC5_DVP_HT_VEC_INTERFACE_CFG_SEL_422); - vc5_hdmi_set_csc_coeffs(vc4_hdmi, vc5_hdmi_csc_full_rgb_to_yuv_bt709[lim_range]); + vc5_hdmi_set_csc_coeffs(vc4_hdmi, csc); break; case VC4_HDMI_OUTPUT_RGB: From patchwork Mon Mar 6 10:46:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64603 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1775185wrd; Mon, 6 Mar 2023 03:08:23 -0800 (PST) X-Google-Smtp-Source: AK7set8lvKKOtfl1YnLGihEHqaq6ZaMv6UQm3ANFtHzT9/vvWoc9NVtZtbq7ukZ1WS1n6LEn1lgA X-Received: by 2002:a05:6402:1357:b0:4c7:f36b:7e1a with SMTP id y23-20020a056402135700b004c7f36b7e1amr9952104edw.22.1678100902898; Mon, 06 Mar 2023 03:08:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100902; cv=none; d=google.com; s=arc-20160816; b=TYX0eI28wIsXcdqIiVNZb+dD9t8OQQzbvWJsNiTVrJYtu/5Z8gM/eV+SpzIwvT2Yam kadW89Vt4o9uFTqzRWlgHWzoKAwyl369yITu6xuHmJbuhO8dugvtyNasdN1lVfPOJMtw kpG7xoj/ujqsaTa6Ox7P+veYC+/6UBzG4muXx44k5lC3rQ6gvyKdZ9ZiQUBDhfzvWLJl GkKLwCkd9o7M5tx5JJ0+RbCpR7lyfcdopSyj1a/tHF2TSJsDkdYzULlPKcpOcTC+rF/f LwQx2o1ugNHUUhPcCpAIyv1ilyz6uDaOZJcA7pvAkIUnLG1/aVid7kGVA3kid9bYrD+b nF+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=3LgWprbX5kA5Va6btukRYvTCS0RBMIhdHYR4XuAfLz0=; b=S5dLMqlgMUvhfwbgjkO7uCkQ4+XlKP8qYnn4BWPwn5IQx274lGZ8NmWOnRm5jGc6Iw DSc5898SJWUyU2gyURzxHA8f5tq3bU0LFhyFZrwCOi4qUZ5/7YyLrkA2a/RmexXyY7Y5 a49bmHdvRKXeI14ILkXKWlaj5+F6YXT3rh2o0S7XQ3tZYFhsisJ67LlJCPMYObi//sQJ i5tEwAtlBblxeMuQcRyOkvXUYJ6PHWfAfgIeBw4jVKziqN0mt5KPlbI/eaxq7KARSnZB np8reqMZY7Qh6zm8nR2gGgwbQTyaCDxN4zqv7S9JUxcR06zWOEMnMyvF5JB9m6RPxdNz ZEeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=afEgjWaZ; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=DDy9neEk; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id be6-20020a0564021a2600b004ad726540b2si9714669edb.468.2023.03.06.03.07.59; Mon, 06 Mar 2023 03:08:22 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=afEgjWaZ; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=DDy9neEk; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229996AbjCFKua (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229744AbjCFKuV (ORCPT ); Mon, 6 Mar 2023 05:50:21 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9186726874 for ; Mon, 6 Mar 2023 02:49:58 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id E2F365C01D1; Mon, 6 Mar 2023 05:49:57 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 06 Mar 2023 05:49:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099797; x=1678186197; bh=3LgWprbX5kA5Va6btukRYvTCS0RBMIhdHYR 4XuAfLz0=; b=afEgjWaZ9jP611VXN/fYX6bLaJqszML5NEiQnCn4MSVmsxLB6pc dM4u8YHKHV918ptc41kqgx5QyEdNIxMNVf8nXaricQaOQxYUzmns8y+NnP9XlnhT qxqHF5rFz7Ck8bP43Mvw3pbg8IW3K4xTPmgZJfgGY5vXx0eEkhEB4K36GqlxeF5P OIMsG8p0ZP66eWwKsb3VntJOLyqL15ndsjV2/3n9eUORpm13oWX+O6h1UFSYYGii Hsppjp0+Qdp7hbUPDhSyxoaCdRd+tb44LJv9P7HvStRWPd3Rb4ZPq1V3JMAst4EG xPyOFnVlmzu0pRsHHeczENYn0P37T6YGJSw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099797; x=1678186197; bh=3LgWprbX5kA5Va6btukRYvTCS0RBMIhdHYR 4XuAfLz0=; b=DDy9neEkmfzCQ7YhCL0ka9SaAdNkguHqmXmUUVHwDAwttD12KRs KalbVrB4ZbohDmAMHSximmXFhDggODlbO+Kdvit1y1PlohTbYdPm3N+UE7otrtHx tlZAa3YwrlYTCkH4FEC8tIfy0obkKLF5h0Y3HGcazyNTglnmiuxYTNdMbnqC9yQu GMRTY2JzC4rOgpwzlVONrpYW3VNn4cM4HmqP7/FLiaFkRiLyHBTK/Nt9nPYfRhFD IxZvpg9+O5zq0F132tYKQbs7uEvpAv8xD1s60/50hjcoRCO4zziTYgvUu4RQtzE0 UyzXnVgewwZAuQi3r8aMOnzRqJNmIuqDc1g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:57 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:49 +0100 Subject: [PATCH v3 8/9] drm/vc4: hdmi: Add BT.601 Support MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-8-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2186; i=maxime@cerno.tech; h=from:subject:message-id; bh=ycrDK940BO7WIBUGy7jz8rSeJQgc2LgRhkJYTmg16KI=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR2ZsndDGfDvypHiFoebbCo/3iTM5LG2Cb2Z02yStnN6w 90NFRykLgxgXg6yYIkuMsPmSuFOzXney8c2DmcPKBDKEgYtTACbSp8Xwzzbl5YsjgVr+Tzm7xb7vS3 r5vc7rY+Tx8BzZfFFFicnTKhgZXsu7TynP6pLefNY77nIBy3y5P7UfXR0q3ty1Vvu68X82PwA= X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759616332179233292?= X-GMAIL-MSGID: =?utf-8?q?1759616332179233292?= From: Dave Stevenson Even though we report that we support the BT601 Colorspace, we were always using the BT.709 conversion matrices. Let's add the BT601 ones. Signed-off-by: Dave Stevenson Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 1424835bd83e..ad38cac3d1b9 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1240,6 +1240,37 @@ static const u16 vc5_hdmi_csc_full_rgb_to_rgb[2][3][4] = { }, }; +/* + * Conversion between Full Range RGB and YUV using the BT.601 Colorspace + * + * Matrices are signed 2p13 fixed point, with signed 9p6 offsets + */ +static const u16 vc5_hdmi_csc_full_rgb_to_yuv_bt601[2][3][4] = { + { + /* + * Full Range + * + * [ 0.299000 0.587000 0.114000 0 ] + * [ -0.168736 -0.331264 0.500000 128 ] + * [ 0.500000 -0.418688 -0.081312 128 ] + */ + { 0x0991, 0x12c9, 0x03a6, 0x0000 }, + { 0xfa9b, 0xf567, 0x1000, 0x2000 }, + { 0x1000, 0xf29b, 0xfd67, 0x2000 }, + }, + { + /* Limited Range + * + * [ 0.255785 0.502160 0.097523 16 ] + * [ -0.147644 -0.289856 0.437500 128 ] + * [ 0.437500 -0.366352 -0.071148 128 ] + */ + { 0x082f, 0x1012, 0x031f, 0x0400 }, + { 0xfb48, 0xf6ba, 0x0e00, 0x2000 }, + { 0x0e00, 0xf448, 0xfdba, 0x2000 }, + }, +}; + /* * Conversion between Full Range RGB and YUV using the BT.709 Colorspace * @@ -1303,6 +1334,13 @@ static const u16 (*vc5_hdmi_find_yuv_csc_coeffs(struct vc4_hdmi *vc4_hdmi, u32 colorspace, bool limited))[4] { switch (colorspace) { + case DRM_MODE_COLORIMETRY_SMPTE_170M_YCC: + case DRM_MODE_COLORIMETRY_XVYCC_601: + case DRM_MODE_COLORIMETRY_SYCC_601: + case DRM_MODE_COLORIMETRY_OPYCC_601: + case DRM_MODE_COLORIMETRY_BT601_YCC: + return vc5_hdmi_csc_full_rgb_to_yuv_bt601[limited]; + default: case DRM_MODE_COLORIMETRY_NO_DATA: case DRM_MODE_COLORIMETRY_BT709_YCC: From patchwork Mon Mar 6 10:46:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 64598 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1769634wrd; Mon, 6 Mar 2023 02:54:26 -0800 (PST) X-Google-Smtp-Source: AK7set+3fwogLyX36WaaLH0wEPvzSeXFO4dMq+EqWkaarKaO4XsUNZfYYHbn58Z3O4FSi5MHt2xY X-Received: by 2002:aa7:cf03:0:b0:4c0:8bd8:b4d2 with SMTP id a3-20020aa7cf03000000b004c08bd8b4d2mr10811264edy.42.1678100066587; Mon, 06 Mar 2023 02:54:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678100066; cv=none; d=google.com; s=arc-20160816; b=jsCdlj1gAczhKmK650UNMbFuFBxKqPGdVoCl8De6IpHZt6jTQU83tzbIJzRDN6L+/a 2sBcruiPesdg6I0bj52R8cUYM7UPUyjY5wPew4XW/8R/ipNAeAihuibF60l/gJH7+K+B mkZ5ED9fgg5OtQcrcGcDGOiDyTTkccKaJ+63T9/pH/v++lPjnMTF7SDmtpLX6ZfPL/RJ fMAoV5xf5ggd6N+wasLKqUuSB0WyyXLHEZEqub5qnF8O0ONzD1q1l5A4QRc6ob4/ZLZD ORIG+4FOH809kFSEIje7MYKfpE60elqZnh4Vk0y85tbqlYm3oCmFHyYPQ4EKYp/ygM8Q SdtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=6eoGrQcwaexD/rm/MylmiHZat3xXP2tZ2Cn2eZX6KLc=; b=Ae0Jors/OTwoohOPqehqll4E4Tv/ChOt3xpO4h+C4O0ERfy/cOzxk59StdzPXFTA8/ 5yImyUU+PFjDz8prAbJDdEFaslmeIdeFeq3D1Gy/wwZ6Hj6yyY5ss9iVRVjRfyl3r5FD NvpqFz6o4FNcnt003TRO1RHCW0WkK3DIxf2hK8sU0Vw6DvJbCUhbq/psbDLakbA4cKbE Se1HsWY1HpWZcG1iSChLbG5UZx1szpRr6eWVtCE7mDSFgwN2GcI3bAXsEjCg+FutqBCk TeBjfVCRy+JgVLPQtydm/pTY98jH93BtVmLNk+CXbzBtSR63zU0xBS9FWwzOGBGou3nM fdgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=iWwoIK+Z; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=owOq8F45; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i19-20020a170906a29300b008b138238f31si9022661ejz.970.2023.03.06.02.53.39; Mon, 06 Mar 2023 02:54:26 -0800 (PST) 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=@cerno.tech header.s=fm2 header.b=iWwoIK+Z; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=owOq8F45; 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=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230023AbjCFKuf (ORCPT + 99 others); Mon, 6 Mar 2023 05:50:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230118AbjCFKuY (ORCPT ); Mon, 6 Mar 2023 05:50:24 -0500 Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B586725B90 for ; Mon, 6 Mar 2023 02:50:00 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 2F8125C0249; Mon, 6 Mar 2023 05:50:00 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 06 Mar 2023 05:50:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm2; t= 1678099800; x=1678186200; bh=6eoGrQcwaexD/rm/MylmiHZat3xXP2tZ2Cn 2eZX6KLc=; b=iWwoIK+Z+MAXcB42fJPUnXOrPmUVRsSsvaQ5o4S1ofnAvAMVLXI yer0cQxnO3Xq2n9nJGrqQLvysRa4WPisnrm1w+xnPCyhll3wRR56ZIJNBlYBftF1 8Ziq/tky6E/091IQpE8xVtplQThFfYhBPQZp1KgEZ9aXPCeesq9hJbrFVn3HuocH Vgqkyx0usD/g8dRLj3VoHKCRuzoX9RmD2A9glSbpGH/sVy2N8NeqNkhXyGJI7ADh sCDXivC6bd68wO/YYSYuLG9IDbi9g6+eYiUBhO1h3J4cGP6sLfvPaXwwpNKWaXAE P4EDkEEitmGSdvn2u8zNOQYqK8SuEQcdV4g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1678099800; x=1678186200; bh=6eoGrQcwaexD/rm/MylmiHZat3xXP2tZ2Cn 2eZX6KLc=; b=owOq8F45Wm7DCoZANWJ/CTsic5e33gBtWihR2HMrpUoXcKxXquH 1m6ST8zX8yPzqWJGd7I1R4u2eDdE9DgNOKdV+mqcFygVP5eLWKalIZJxkkWoE/vr jwtjBeq8xAd8qUje0p1Cj4uUZD5TD2e/XtAy0XkAB3d7kOn0FEHh3FsX6tMyEULj JZZlJ1IR16IZV1PtS/QihuAigGRgcbU2EUm+bh3nAio6YSaNo7df5Bt7tlSk4xcE Y5cDYsbnn894ED62rK+zXhkIohL7kNg3N0NBuNTduBPhKvsyQTcvlu8N7FRj7rW1 VHDvSb++oGf7wzByN6vyGGe00AEGe0ReoaA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvddtiedgvddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 6 Mar 2023 05:49:59 -0500 (EST) From: Maxime Ripard Date: Mon, 06 Mar 2023 11:46:50 +0100 Subject: [PATCH v3 9/9] drm/vc4: hdmi: Add BT.2020 Support MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v3-9-bdd54f66884e@cerno.tech> References: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v3-0-bdd54f66884e@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Hans Verkuil , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2176; i=maxime@cerno.tech; h=from:subject:message-id; bh=p7y74BMTOFXpAKXaHOFAbcxdR3Y3fjhhLH8Fd1pRb58=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDCmsR2YYXjt/JMr59aTIlJhnU9iDPte5qiRnX1uboXGkX/Fn 4H3/jlIWBjEuBlkxRZYYYfMlcadmve5k45sHM4eVCWQIAxenAEwkpozhn+4MtX97TWNv7nn+mrtaKd ho+Vv7hdPdQ4wn+/Y6J6hZFDIyLJ6yMG7d8v86doqWEWu3l79RffepiWNZ7Jln3H+1xLJSOQA= X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759615455136211020?= X-GMAIL-MSGID: =?utf-8?q?1759615455136211020?= From: Dave Stevenson Even though we report that we support the BT.2020 Colorspace, we were always using the BT.709 conversion matrices. Let's add the BT.2020 ones. Signed-off-by: Dave Stevenson Reviewed-by: Thomas Zimmermann Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index ad38cac3d1b9..2787284e60ea 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1303,6 +1303,37 @@ static const u16 vc5_hdmi_csc_full_rgb_to_yuv_bt709[2][3][4] = { }, }; +/* + * Conversion between Full Range RGB and YUV using the BT.2020 Colorspace + * + * Matrices are signed 2p13 fixed point, with signed 9p6 offsets + */ +static const u16 vc5_hdmi_csc_full_rgb_to_yuv_bt2020[2][3][4] = { + { + /* + * Full Range + * + * [ 0.262700 0.678000 0.059300 0 ] + * [ -0.139630 -0.360370 0.500000 128 ] + * [ 0.500000 -0.459786 -0.040214 128 ] + */ + { 0x0868, 0x15b2, 0x01e6, 0x0000 }, + { 0xfb89, 0xf479, 0x1000, 0x2000 }, + { 0x1000, 0xf14a, 0xfeb8, 0x2000 }, + }, + { + /* Limited Range + * + * [ 0.224732 0.580008 0.050729 16 ] + * [ -0.122176 -0.315324 0.437500 128 ] + * [ 0.437500 -0.402312 -0.035188 128 ] + */ + { 0x082f, 0x1012, 0x031f, 0x0400 }, + { 0xfb48, 0xf6ba, 0x0e00, 0x2000 }, + { 0x0e00, 0xf448, 0xfdba, 0x2000 }, + }, +}; + static void vc5_hdmi_set_csc_coeffs(struct vc4_hdmi *vc4_hdmi, const u16 coeffs[3][4]) { @@ -1348,6 +1379,13 @@ static const u16 case DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED: case DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT: return vc5_hdmi_csc_full_rgb_to_yuv_bt709[limited]; + + case DRM_MODE_COLORIMETRY_BT2020_CYCC: + case DRM_MODE_COLORIMETRY_BT2020_YCC: + case DRM_MODE_COLORIMETRY_BT2020_RGB: + case DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65: + case DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER: + return vc5_hdmi_csc_full_rgb_to_yuv_bt2020[limited]; } }