From patchwork Thu Jan 26 13:46:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48663 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279794wrn; Thu, 26 Jan 2023 05:52:59 -0800 (PST) X-Google-Smtp-Source: AMrXdXsKE3pOKacWNtCV/3PynTE/fxata/bjOy80Yw74Uy/l7pQlCK9tWZ0VSgwXKvAzwDwzG+qt X-Received: by 2002:a17:907:a2c6:b0:7c1:92b2:fa9e with SMTP id re6-20020a170907a2c600b007c192b2fa9emr39606865ejc.59.1674741179435; Thu, 26 Jan 2023 05:52:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741179; cv=none; d=google.com; s=arc-20160816; b=E8efECVxh0SdG/SdafDXY9vqOt26xGrQZdMUMClRig+hKJoybZTbImJQAmPe6jY8Gc Mst9clC2ynLefx6n757sucNVP7PpSlrd0DvyYC9uqNXOBNs8IuPmhHZ1fg/XYitoFDXg GQkeGgNlg4IPu/M6lP+SFU75Hd/qWfXXv9jBjbdU4zgCnBrBkyYKZEQmFJjTLpWej73h gEUDAHZmonSkDowgF9YBpx0nbtxhZeO/W8V73YWfnRaXMZCLkO+vKcVK1Rkx7SkMIBrk 9sUNUXKvwUhteWPPXTM7Ajo8JB/uDXABrxM1/PGWcimxdnh/GlTtpZOU6P8vJMYLkcDg Rtzw== 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=FSsBpcw8mXuSh/KQFKh6xmtSoH5w0b+NrRMQp1tcEu8=; b=vfoZZbqamIUfh0Tg4SOvN0AhMiAdgk1uQQRh1qXNd8ihuKg7SDGzK0QsFd+b5adEDu Nbz41ArRL7PTlzvs7+sEofcpTm6NhuHV4uttXgcP/RZ+snf/Ju+6sKrHkhkZzBPiY0U7 nkdY1DpO/5+CRmrkDHmegcu1joM57wLwyhJgZHOiBf7r6IYAEIJxwH3PkkvWnrIiCuXg 0orua9OkD8QZVLvJYhHnWJX/b30+2P8AWoLs2bOwIseOsNaKdcDksplJQB3RSArUVrEx z+6PaymOeDvSzBi9+cmkSql9L6aFlGAlYszuyJdpHXBgg+gSwENf+mSWEyqlRu6uvVhZ 3SRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=fGCzjB5Z; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=Y96I1dIF; 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 o18-20020a50c292000000b004a0e8d82badsi531639edf.617.2023.01.26.05.52.35; Thu, 26 Jan 2023 05:52:59 -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=fm1 header.b=fGCzjB5Z; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=Y96I1dIF; 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 S231542AbjAZNsI (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229547AbjAZNsG (ORCPT ); Thu, 26 Jan 2023 08:48:06 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D7CC20072 for ; Thu, 26 Jan 2023 05:48:04 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id D49685C04A1; Thu, 26 Jan 2023 08:48:03 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Thu, 26 Jan 2023 08:48:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740883; x= 1674827283; bh=FSsBpcw8mXuSh/KQFKh6xmtSoH5w0b+NrRMQp1tcEu8=; b=f GCzjB5Z5aUbBkjzEm4Ge9Tu/shANs8Xtt+uvgso6iQ5gs5MUBK6URnq97+l+qjix WsKx+0Og/qBVA9Ndjvac8hgdNIm/OTLt0YsVZQT/zF1yzGvBSi683/c52XjO31c+ Kf9DrVew6QJH/3gga58z99JzHQ5vbBVa7cri4oFJ7MRSAXLamKVhKlg3kwsnzhA9 s6gSNfrvrfxcq5gEm42JI5+kbsjljKpmybhqHSbnKKB4/bzL30RxAoDLgn9bnlwP y+PbytoyM3VyFRo6m2Bu1OLF1JDjvGEVoI7XXGKveGSsjorsMaruyWQ0bMqoAhO8 BZGcJKpuBVfuds5+FGI4A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740883; x= 1674827283; bh=FSsBpcw8mXuSh/KQFKh6xmtSoH5w0b+NrRMQp1tcEu8=; b=Y 96I1dIFYxH2KZ1y8pYCg1FrpncmPQpqlnak8Sr1DWOHDX8mebMQHuK/kCsZQJ/Ub rthHqalqp3mHTU78xbIInyQPGN8NDg7r2w3QMc/FFtclaHwnaQvABYmLL7V1x6NJ k9p3gBPz1Iiah8x3S4Gqmem5beDNCq7o4kHGWrnpjEJMG82o9s7Sw+yOXaWkTLRZ GueN3OoDs+IDqo/+bTF+V+jO2h1LrT0PZ97H+v04My8LXAgWOAdTqGF8lpJPEIAn eIVdWEMDn/BB6IbEEqe5S35u0qtuouhaCQ9PQpxAypHPRqKKdagLcWEGpAYbSFvx zSgT8swJhxLG0vnNJDppg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:02 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:35 +0100 Subject: [PATCH v2 1/9] drm/vc4: Switch to container_of_const MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-1-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=18543; i=maxime@cerno.tech; h=from:subject:message-id; bh=ztOSJ+35LdG0dBYR2QkyRaLU6ifgGzImhDjDgcVKD6s=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlwiXy5ZGqgwcbf3ztMlU6TXfe0o9X1+4O3uS8m17zw5 Tmye11HKwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJHDJi+J91uqv5g7qmz5NNX5004w xXnV1QUTCv+wi3sd4/pe72H4sZ/kqeza3nvpTYwCc70701+fzBv6pyu4+57LmtMD2+ccfB+7wA 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093407243324682?= X-GMAIL-MSGID: =?utf-8?q?1756093407243324682?= 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 --- drivers/gpu/drm/vc4/tests/vc4_mock.h | 3 ++ drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 4 +- drivers/gpu/drm/vc4/vc4_bo.c | 2 +- drivers/gpu/drm/vc4/vc4_crtc.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 | 19 ++++----- drivers/gpu/drm/vc4/vc4_gem.c | 7 ++-- drivers/gpu/drm/vc4/vc4_hdmi.c | 7 ++-- drivers/gpu/drm/vc4/vc4_hdmi.h | 16 +++---- drivers/gpu/drm/vc4/vc4_irq.c | 2 +- drivers/gpu/drm/vc4/vc4_kms.c | 16 +++---- drivers/gpu/drm/vc4/vc4_plane.c | 2 +- drivers/gpu/drm/vc4/vc4_txp.c | 12 ++---- drivers/gpu/drm/vc4/vc4_v3d.c | 2 +- drivers/gpu/drm/vc4/vc4_vec.c | 14 ++----- 16 files changed, 65 insertions(+), 117 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_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c index 86d629e45307..d0a00ed42cb0 100644 --- a/drivers/gpu/drm/vc4/vc4_bo.c +++ b/drivers/gpu/drm/vc4/vc4_bo.c @@ -609,7 +609,7 @@ static void vc4_free_object(struct drm_gem_object *gem_bo) static void vc4_bo_cache_time_work(struct work_struct *work) { struct vc4_dev *vc4 = - container_of(work, struct vc4_dev, bo_cache.time_work); + container_of_const(work, struct vc4_dev, bo_cache.time_work); struct drm_device *dev = &vc4->base; mutex_lock(&vc4->bo_lock); diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c index cdc0559221f0..4425dc15308d 100644 --- a/drivers/gpu/drm/vc4/vc4_crtc.c +++ b/drivers/gpu/drm/vc4/vc4_crtc.c @@ -869,7 +869,7 @@ vc4_async_page_flip_complete(struct vc4_async_flip_state *flip_state) static void vc4_async_page_flip_seqno_complete(struct vc4_seqno_cb *cb) { struct vc4_async_flip_state *flip_state = - container_of(cb, struct vc4_async_flip_state, cb.seqno); + container_of_const(cb, struct vc4_async_flip_state, cb.seqno); struct vc4_bo *bo = NULL; if (flip_state->old_fb) { @@ -897,7 +897,7 @@ static void vc4_async_page_flip_fence_complete(struct dma_fence *fence, struct dma_fence_cb *cb) { struct vc4_async_flip_state *flip_state = - container_of(cb, struct vc4_async_flip_state, cb.fence); + container_of_const(cb, struct vc4_async_flip_state, cb.fence); vc4_async_page_flip_complete(flip_state); dma_fence_put(fence); 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..0923680f2b2b 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) @@ -1625,7 +1620,7 @@ static void vc4_dsi_dma_chan_release(void *ptr) static void vc4_dsi_release(struct kref *kref) { struct vc4_dsi *dsi = - container_of(kref, struct vc4_dsi, kref); + container_of_const(kref, struct vc4_dsi, kref); kfree(dsi); } diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c index 628d40ff3aa1..0cb2e86edbf3 100644 --- a/drivers/gpu/drm/vc4/vc4_gem.c +++ b/drivers/gpu/drm/vc4/vc4_gem.c @@ -315,7 +315,7 @@ static void vc4_reset_work(struct work_struct *work) { struct vc4_dev *vc4 = - container_of(work, struct vc4_dev, hangcheck.reset_work); + container_of_const(work, struct vc4_dev, hangcheck.reset_work); vc4_save_hang_state(&vc4->base); @@ -1039,7 +1039,8 @@ vc4_job_handle_completed(struct vc4_dev *vc4) static void vc4_seqno_cb_work(struct work_struct *work) { - struct vc4_seqno_cb *cb = container_of(work, struct vc4_seqno_cb, work); + struct vc4_seqno_cb *cb = + container_of_const(work, struct vc4_seqno_cb, work); cb->func(cb); } @@ -1077,7 +1078,7 @@ static void vc4_job_done_work(struct work_struct *work) { struct vc4_dev *vc4 = - container_of(work, struct vc4_dev, job_done_work); + container_of_const(work, struct vc4_dev, job_done_work); vc4_job_handle_completed(vc4); } diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 14628864487a..b3e7030305ea 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -948,9 +948,10 @@ static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder) static void vc4_hdmi_scrambling_wq(struct work_struct *work) { - struct vc4_hdmi *vc4_hdmi = container_of(to_delayed_work(work), - struct vc4_hdmi, - scrambling_work); + struct vc4_hdmi *vc4_hdmi = + container_of_const(to_delayed_work(work), + struct vc4_hdmi, + scrambling_work); if (drm_scdc_get_scrambling_status(vc4_hdmi->ddc)) return; 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_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c index 1e6db0121ccd..6408fbd1684e 100644 --- a/drivers/gpu/drm/vc4/vc4_irq.c +++ b/drivers/gpu/drm/vc4/vc4_irq.c @@ -63,7 +63,7 @@ static void vc4_overflow_mem_work(struct work_struct *work) { struct vc4_dev *vc4 = - container_of(work, struct vc4_dev, overflow_mem_work); + container_of_const(work, struct vc4_dev, overflow_mem_work); struct vc4_bo *bo; int bin_bo_slot; struct vc4_exec_info *exec; 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 dee525bacd4b..f3cb28657973 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c @@ -1333,7 +1333,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); + container_of_const(state, typeof(*vc4_state), base); 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_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c index 29a664c8bf44..f48cf1ea48bb 100644 --- a/drivers/gpu/drm/vc4/vc4_v3d.c +++ b/drivers/gpu/drm/vc4/vc4_v3d.c @@ -349,7 +349,7 @@ int vc4_v3d_bin_bo_get(struct vc4_dev *vc4, bool *used) static void bin_bo_release(struct kref *ref) { - struct vc4_dev *vc4 = container_of(ref, struct vc4_dev, bin_bo_kref); + struct vc4_dev *vc4 = container_of_const(ref, struct vc4_dev, bin_bo_kref); if (WARN_ON_ONCE(!vc4->bin_bo)) return; 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 Thu Jan 26 13:46:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48664 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279801wrn; Thu, 26 Jan 2023 05:53:01 -0800 (PST) X-Google-Smtp-Source: AK7set8tngJrcTq3gnDLePNV/MPaD/Bn7ye2OPFjujQ/j4yMYwgz3kIjVkHy/abGNifsmeWAVlYP X-Received: by 2002:a50:fa8c:0:b0:4a0:dbc2:eb3c with SMTP id w12-20020a50fa8c000000b004a0dbc2eb3cmr2450790edr.38.1674741181002; Thu, 26 Jan 2023 05:53:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741180; cv=none; d=google.com; s=arc-20160816; b=083obhp+1gdghS4V4XzbtNYavCJH0DXCV1vGi0ezzIKmKjRZCiE/6i/HzTuIceiDDQ ToNc683GB29g7mKGX6bP1iYYHgjBLPO7drNgfNfbOW7t4k0RBsllOfcva7/p2ypyutzT C74qMmlOtEtTOPWMqrMOeWPiEziuha11PdZGMwpe+I+FTFrEtX9s1GoI8nlY0q5YL+BM 0cyrCAWbzGrEX3hsnsfINNDOqQdtbat2VQlNNzV6mm9mjAn+UMNOR9q2x4KfD3N30zuh 5dkZZ1iT+9EWUG8AYDs0/8WyWM/BxXkg/AwY0iNPUTXidksgVCatVjpRUuDKYPrlRK+O 49Og== 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=ZjpSJFMrmWinFii5kkvh12npkuO0y8aDkcdGEE9wdRs=; b=WVriPOopgUBK99sfx9vlsnYiC3lrbdppq9Y5T6ZGy7rLVSbGnaIUHWgTxWFtghcN5a c6AO6qVf/hbKeS7KrofMGtK7GtGqRvl0sf/RqFsjCNVntg36k621HmasIE5FG8ufqxVz fVlhuY1ydHI8nlJPWi8kQXQVSIl5dZKSlMgo6QiDSqZbM/q41UZesQhXbN1Cx70RptfF PhU9T3NgaxWQfvmTGlgCuKSvzq37k/UZL3ZXvnCWH7e8G8BMy1uH5RT9dBr90/EJBPcM jMIwx4eycORLF5ynvU1gT70JeBGdZVB+o2YRhpHzMkvSMzj8OksDHxzXPd2XXT9nItkv Jviw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=lk1RUEMN; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=nMcfZfm7; 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 h11-20020a50ed8b000000b0049ecc8190basi1877680edr.254.2023.01.26.05.52.37; Thu, 26 Jan 2023 05:53:00 -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=fm1 header.b=lk1RUEMN; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=nMcfZfm7; 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 S231570AbjAZNsM (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231465AbjAZNsJ (ORCPT ); Thu, 26 Jan 2023 08:48:09 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2ADDF34311 for ; Thu, 26 Jan 2023 05:48:06 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 90F575C00DC; Thu, 26 Jan 2023 08:48:05 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Thu, 26 Jan 2023 08:48:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740885; x= 1674827285; bh=ZjpSJFMrmWinFii5kkvh12npkuO0y8aDkcdGEE9wdRs=; b=l k1RUEMNa2F0dKV+f9yCKtyEdH8n4JS854AsCDTvq5Zvfi8xQ9cxHuaJNZIwthevq GodcpZ/QAA5bz5SyDlUmvmvTvFSlphtgV9Eb3FjcXOcm0ngi+NHozZYuxsJ4H6Nf 6obIvr7cYfEJzMmfi4Kos7PLCJkvUKs9/noEwk9S1MNL+BJaApOQnREfnnxO9pzX TFgnHLcBl0aPwpSN4OU6IZbfs/ixD0ZxJBvgWRn5/Karc2tKeiqkQsWVPznWoXmM eGYfHZUBFGyjamFm+dR2HuKDvwz/Q6B58/2MrjFmDRVQI75tuqFKoj72dZt6ulGe fx8N22lJCa2owLZ9DPKuA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740885; x= 1674827285; bh=ZjpSJFMrmWinFii5kkvh12npkuO0y8aDkcdGEE9wdRs=; b=n McfZfm7LzP0rAmB04IwPmm8eo9P21uRJqFLL0D56nMyBWMzQRhpmJlqpx2jIIruR KMfGnGLnZA6tWNRKhtjDs7E8T/SqaHe7gQufiv2m51v1wDfrHkecNyLcSRrTxWao UYgzV85UDbkVtZmiu0jJ6PlpxXwcHGi21Z/KC8rnsESJwTpMM6jKs8TwIRFTLCWk L5ZgPR6bHEyA8XGJPjhD5droxljRRefUbF/MTLmXJiUsmR743OihPlMU2jDPms+O 3W0v/PJZ85Tjt/a5/EsEl+mi23eu1ZXu5vuRgNq+wozI4WMQb8AdI9rW5Y5ojmCE wPJkEJY8vVsnJ3JEClyZQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepgfffgeeiteevheffudfgkeetvddvhfduiefftdelheegudevgfevfeel ffekffdunecuffhomhgrihhnpehmrghrghhinhhsrdhtohhpnecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrgihimhgvsegtvghrnhhordht vggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:04 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:36 +0100 Subject: [PATCH v2 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-v2-2-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2097; i=maxime@cerno.tech; h=from:subject:message-id; bh=eatPppDqwp0/6f++a7JzjT1vBTqBU80VwZ/o7/LoupU=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlwMBc8uvbDS7UV0dWR5tlrs99T5TNlRk3ju7bjef13p fXxORykLgxgXg6yYIkuMsPmSuFOzXney8c2DmcPKBDKEgYtTACaSqcbI0JS56MgVzYX+tcUsT8LNO3 8+2vKt9cVli83zDi8pyk8+UcDwm7XvWW0yN8vUi4lM9b+T1Px8cmIeHNpomCKgcOdxu6cBJwA= 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093408609148727?= X-GMAIL-MSGID: =?utf-8?q?1756093408609148727?= 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 b3e7030305ea..4b3bf77bb5cd 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -531,6 +531,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 Thu Jan 26 13:46:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48665 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279862wrn; Thu, 26 Jan 2023 05:53:11 -0800 (PST) X-Google-Smtp-Source: AMrXdXvnPJeq16prUW63cyBdkdV41mtZV7no6s9bcnBLOliuF/lm/4HzgvPvnrN66T6Lmzh4Gq7J X-Received: by 2002:a05:6402:501e:b0:472:1436:73ab with SMTP id p30-20020a056402501e00b00472143673abmr43179989eda.28.1674741191423; Thu, 26 Jan 2023 05:53:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741191; cv=none; d=google.com; s=arc-20160816; b=uBpG+6UCZiTOlG5Jzf7FZr2H8Qws1EJyu19Rt5TWELDOz2y+ZgklTkJf78iqExhcf+ 3UEdHI7AWsm+HJvAlFkd+/Kym/gITHsS7aBb0oR5COcF15e9LwPT2cfntpY//3xAs/oS wTFfl2NyuMTYyXZ7nj3vVMovlIq47dD5NtDHy2V3CKHybiCtm8xSoIKE3jC8p+kfIy5u DTLpZGnMs7jw2iwxJUynDc/J/wC1U0OkdNw8LBxNrMwIPoALG8YrhXi5dFbykmC0vkaO d6sCKa/4DE0GiFU0VrPz1PtQ2zo1wphNIHcZfGGtqf1RtaQrDArn9k3SYYzvLv+OqxXI WYmg== 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=lkNErsxE6JCadru7+e17OWwyojhxsSXvn/3JQJuZvmA=; b=upxr4HrPo80iP1OamNVeityYrU30rWDAwNkHBUNFQJGzZiH88FTyb2/2RJofUG85bt z9MgVq1wp73P0G665ErVNUA5oecxyS5zRb21BHdwkJYkv8jv+OrkwaI4t0HJV2PlXZjw BliuRIJPwENttJ/5/N+zWxRze52COxdMxdSvVkLA+Gs2cr1iuMUtOC2g+1wEJ2jZVm2I UtY/i0ovSmT21Kl4ekZ/ATzPizHg1CuqZvAFVeKEPn+z/I8QDx9ABVl0TTkVbMJTAKi8 QxKUiW6jisJLdcfOI2FQSZiHEHPCSfDJytsgwtydW9QfZtUF109y1Z5yjWhLD/bl9hb0 vm9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=hikzqE6J; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=SGEjHcF4; 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 ui42-20020a170907c92a00b00872baebe5dbsi1231888ejc.968.2023.01.26.05.52.47; Thu, 26 Jan 2023 05: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=fm1 header.b=hikzqE6J; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=SGEjHcF4; 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 S231582AbjAZNsP (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231508AbjAZNsJ (ORCPT ); Thu, 26 Jan 2023 08:48:09 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D65B21EFDC for ; Thu, 26 Jan 2023 05:48:07 -0800 (PST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 4DB985C0112; Thu, 26 Jan 2023 08:48:07 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Thu, 26 Jan 2023 08:48:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740887; x= 1674827287; bh=lkNErsxE6JCadru7+e17OWwyojhxsSXvn/3JQJuZvmA=; b=h ikzqE6JUpGMkM94olc/rqIGfFzirueIBEPKBqUbjD7YVa/jwe8yWyQK6YLcQ94Z+ C3HVUFc2MEWTgxLL5Tuwoj+zYyb/hc75sDBrpId+1RzoXzcCKb3lBbbwPY4JnmGP Fp5EBjA8vskJD/ABHhDx+Gxbvg8F/VCwzWbBgHiiyfXgx2llMqU2yRO5tA/fNmjP DAEvoZVqdJLlzdVa7uXcSjyGCJFKkz4is1WT7VwTu/rfDyAc2AbRr4A6n1WsjqiC Pbrlbpt0vOKkosIyHlAm42q0TAL0lzu2PSWdGsDhryrraP/QeZx5KxPh+nZNSl7Z I4EDEeFqG6P8slWYSJyQg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740887; x= 1674827287; bh=lkNErsxE6JCadru7+e17OWwyojhxsSXvn/3JQJuZvmA=; b=S GEjHcF4WVKer9I9s7OnXlgbL/4v6s6X9iZf+waVvZHYjJ7dWQT1rIIOyMm65GFNy cXG057xHUDkA+XsASkFJVZ/H1m8yvTrXpxuN7c0MZkUUulegQd/1GHP9X/WNVUgf d6AfLhQWemrcDsMjcbxvuijLEb/nk5b/aZDM0f/MglDuusE3jI4wTkpIt12KZ0iE 5ESLHmOzPeFYJGVJW0RX+U1G6kDlLjzyCWHMVHhGnioEcHy1Vltat7F3TWiACAhL 2lk0ZvguhZ1wqxviD59h8dWwYWPOa8ZN++9y77tpB0rRMZYF2Ih8WccRKEdE7ibF G/aqrQ1sR2zVX+iddAPtg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:06 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:37 +0100 Subject: [PATCH v2 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-v2-3-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9122; i=maxime@cerno.tech; h=from:subject:message-id; bh=ROFwTmDmTipZX1NujgN7qD+totvTR+KbvIAOA92Q4X0=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWly2zPktsrn3j8ryMM1rF2apfdgTciKy6voF/7MfN+6e Gyr5v6OUhUGMi0FWTJElRth8SdypWa872fjmwcxhZQIZwsDFKQATEdzHyDDh4gxbNinRhv5pQuzZfm KqGSwPjkyfor9C69X7e79+dZsy/FO66f7ritn6hraipcsfp16XyvBQ4+OOjKlf/in60ZzopQwA 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093419560446031?= X-GMAIL-MSGID: =?utf-8?q?1756093419560446031?= 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 Reviewed-by: Hans Verkuil --- 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 4b3bf77bb5cd..78749c6fa837 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -150,10 +150,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; } @@ -524,8 +530,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) @@ -558,6 +568,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; @@ -571,6 +582,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 = @@ -590,6 +644,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); } @@ -607,6 +662,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; @@ -617,6 +673,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 = { @@ -625,6 +683,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) { @@ -671,6 +756,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; @@ -825,7 +912,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); @@ -1066,6 +1153,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; @@ -1079,7 +1168,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 @@ -1232,7 +1321,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 Thu Jan 26 13:46:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48666 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279872wrn; Thu, 26 Jan 2023 05:53:13 -0800 (PST) X-Google-Smtp-Source: AK7set/XAQxkAFPa8G4qvuEES0solb4VZ105Q8Tlv+cdpHnR/bYZKP6ixiDKnxgf7me1U1K7w/2Q X-Received: by 2002:a17:907:b9d3:b0:878:5f7a:7aab with SMTP id xa19-20020a170907b9d300b008785f7a7aabmr2331498ejc.39.1674741193131; Thu, 26 Jan 2023 05:53:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741193; cv=none; d=google.com; s=arc-20160816; b=M8SCwCwTA1Pl8eZkVGO5uA9li8oh6z816xdln2EakXxa/55oQGpDXS4stN3xYdFlag p6aNWJGyRvFdWopg892quSHdtn05Ny7hzHM3pvpEJn0H8l8/74eWAzxivi2Ni2NYFTIV eIY+5D/h2b/FtXrvUtUQ+zAK/HED8Rt6ukGltSq1PnlRewd7b1aVrgV2MIorvsWKwJ9d 5okOvk2+VDLje3xo892uRsXkT1T43JMjRq5d1wDGvCqVKeqlulEIxjLMkdR7wtNVuKRD P1VSpr5GkviQVNzGM1wuh4MFrzk94QtGerDoKIy2nM8rMwsbgwPHTYL72kHQvys52Q49 dMUg== 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=XGrEKHTYz6nA9/VAaFVxHfP6prEhOr+ugwbRh3H9DB8=; b=fA4oNxsnmCnQxKM26XWDHWIzMFZr11rq+dO3sahDoK6FwEEW2YQA92kmkiLc5CmKEf dv1b2IgNK7xDQfOX4wFAM7ngue9W5XC4aFw17mpsER3/6sCr2HDyjPDOPY0eH5r1BTWA 8NI9LrDyXRpC6S+P/VT+Wg4RgdvVTcJw0d+r62Cx9sC1JTUAEGZe+lWSKdASee+sH6yb m+lMlywtgHYLDUWbqgdYHKnnDX51OsYMmQl2ThrLiamvgieAHHGNuIRiSz7A8Qk3IV46 NgQCrVolzAAjWQs/U+QvHHOdhxF5bKfDyy1TazVb+v3TLlKmtprGrJs+cff9OsRePI/U MfXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=qsRkxsVH; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=B1NoyuJS; 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 mf19-20020a1709071a5300b00872baebe5ccsi1300183ejc.558.2023.01.26.05.52.48; Thu, 26 Jan 2023 05:53:13 -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=fm1 header.b=qsRkxsVH; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=B1NoyuJS; 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 S229871AbjAZNsX (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231522AbjAZNsK (ORCPT ); Thu, 26 Jan 2023 08:48:10 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DBC02201F for ; Thu, 26 Jan 2023 05:48:09 -0800 (PST) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 052935C04A1; Thu, 26 Jan 2023 08:48:09 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Thu, 26 Jan 2023 08:48:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740889; x= 1674827289; bh=XGrEKHTYz6nA9/VAaFVxHfP6prEhOr+ugwbRh3H9DB8=; b=q sRkxsVHnZQdJEPBCRV7BwtU3AHQaAxZN/7ExVxlCjtdRfqrPT7kIFHCqyY/D7E5r vmQfxaQwfB48skcMyi8OmkwqDX/eChaEBwl82Mc8/8U+x+9+nNiW0e9KL3+XYbI3 IbIkQL5CGAVphwU0El+vR104QP3o7BaGRwuM2ofs1d5TF3Y50wU2Y0O7CbNem0Q7 t6EJhikLCU7w6xRSglDDxbnZPp9qcPlfN/77FnGULIgQgkeSfuIYI0J+v7hN+LVZ n4yDWso63Mr9a8aIGMGoviYzdXc6Ea3X3qCm89C26SQlDp9hMGV30/06tfp+MjFS 820KfRmWvJCYYx9IT1mzQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740889; x= 1674827289; bh=XGrEKHTYz6nA9/VAaFVxHfP6prEhOr+ugwbRh3H9DB8=; b=B 1NoyuJSMcYNmNIw1+73Q8cKD1Uk8cQNU107nW6Ss0uaIWQBogLb4YUZ8JZhM26D/ 0Y9MgoKv5GqNz/ITNNtBaN/Vmhg5FcdYO0auzJvwStk4oH8zsfA31vII+LL3ogFh j0PZ0NTL0p2kHpRXcvnfXY20fwHbvZBlD1uMD2CpNCDewRoU/mSMcj0eptatMPk4 L9bhr4shOlPStZFgo1hRhz0nsJAYMcpOefgZWmWIkqRWwleEiCxiWmjq1lh57Phk 9pek6ThYosmPrqb5Dk70VrhlOSfOqkYRa1Ru3YiJl7zJpcKpjjksgjoIbbOLN+xa L8F3P6lLC1gaJbuB7cflw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:08 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:38 +0100 Subject: [PATCH v2 4/9] drm/vc4: hdmi: Rename full range helper MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-4-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2552; i=maxime@cerno.tech; h=from:subject:message-id; bh=d2aItoeUC/s/UiOJC9dEbNXl2/8BxfR9KuTFFgdahVI=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlz26iXb7/d16MypUt6z/RvD2ZqMtq+X9H03a3xYtir9 XfyXjlIWBjEuBlkxRZYYYfMlcadmve5k45sHM4eVCWQIAxenAEykL5OR4dnlqcXn38yMcpfXXmjtd2 I2y7SeTNn7TNNi5VIXm4o2tTIyTJmY/eusoKRfEvuzbLes1Smhnx68ShFvWTi5UXBLQOg8RgA= 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093421269011776?= X-GMAIL-MSGID: =?utf-8?q?1756093421269011776?= 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 78749c6fa837..e5e7fe4c6a63 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -149,8 +149,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; @@ -912,7 +912,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); @@ -1168,7 +1168,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 @@ -1321,7 +1321,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 Thu Jan 26 13:46:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48667 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279884wrn; Thu, 26 Jan 2023 05:53:15 -0800 (PST) X-Google-Smtp-Source: AMrXdXs7wxlmkwi1DIDDjpVW3vFGbmSJQfYhOgqdEF8kte/xqVdmrRrO5dQQL1EcOxqnVJ/PFvKA X-Received: by 2002:a05:6402:27cf:b0:46b:4011:9863 with SMTP id c15-20020a05640227cf00b0046b40119863mr48293813ede.39.1674741195400; Thu, 26 Jan 2023 05:53:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741195; cv=none; d=google.com; s=arc-20160816; b=CeTU3h4yu99iPu2o9li799uODsew/ZpbejY3XiRgV/BRk1pAt7dCQQ3jKXe7M+SjRk 50/X7w9hnbAv8n6xD+V/TLVVArUyIq8R/C7eLr67APxA0Z4Y16kgqJmiwzrNJ+v5Dx4U qCMOBdYRig2Bpsy/IDVwFOJqQpuB0Xg/vLvQPqDWMcFYGZyf+f1jmzYCGKp2Vk7mhXSi L1Xj2zT2SDWgRAXJSnvbCr7TbwfZH2wYuTRs3s92s4gj/gxB/jaNjoP2hQuNI01q6ROZ SWKZnQ1qqk78zVGkeNixo9fB31aGcT8VTBdrZ6cv9sZqjFnynBo2K4YjwSTi4BRp8u/U oRYA== 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=VyRefU5Aq6YeN6sKzbecpukjT1UK8lBHWpRvWflgq+c=; b=SfJ8JCqxrfYEv6+VZxi9KcjxbW/8iPFHLKLd/5iOQFtmL3beZnMx/5p3vrbhFvW5fW anVBEwQERRO7UlfOxYm6jmBXD4bQFNZFvr/dqPTFSsIB/l51F8NXziwZ/ncjVKzM5yk3 /DxE+1a1YI6IOWkpmqWXQRpoh+09ktdVAey/lwAgT2NSLsUQsl0QyY6fvkVLj0MaFZ9I xMIOoUyE+3SA4WfDbwznOV0ysiPDxDv+TRobdZrSDisnZYR9g1M996tn0D7k88MlqJl4 y2j1z40Wn3HRbGURk3XPjpmv3iboQ/ZWQCxDOzN5DZJLCnklTP1wUvuQzMXOZCyOpx2u d8kA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=N25AsFHH; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=dRJLXvSR; 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 e12-20020a50a68c000000b0049ea121e9a9si1768454edc.551.2023.01.26.05.52.51; Thu, 26 Jan 2023 05:53:15 -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=fm1 header.b=N25AsFHH; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=dRJLXvSR; 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 S231696AbjAZNs0 (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231663AbjAZNsW (ORCPT ); Thu, 26 Jan 2023 08:48:22 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6DE9534315 for ; Thu, 26 Jan 2023 05:48:11 -0800 (PST) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id C86FE5C00ED; Thu, 26 Jan 2023 08:48:10 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute5.internal (MEProxy); Thu, 26 Jan 2023 08:48:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740890; x= 1674827290; bh=VyRefU5Aq6YeN6sKzbecpukjT1UK8lBHWpRvWflgq+c=; b=N 25AsFHHnTdqFN2JNV5t7J3OUD6bk5Adl8OMcGnzWCsBn7SuiWvMn3a6kB0oou68I ynHNmm3NwOVCnZAG/U+bgsIn2ukxDeRx8zhiBLtrVg3iY6F/3f1L5OnUgKqiCVnx gRLt8UeCO5YI5+l7y3VEZg4DVCdGGJxUmjCK+rvukKpcgf+CahbhCJ4jn+bgi8Of tg+2H3TvzRIkz0/CM7xcYMFMIbxoN+PnsUm4kt6Znh9ex2pben49FrvQl0qSGI2d xXy5AKEmVUX6eTru/dhLmhh3Vk9dIz9dhnipGEjrJd85Z2uY+zDTFmkKOXGiQ51k 5IIbaJbusWdJ/ZPtkWJiQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740890; x= 1674827290; bh=VyRefU5Aq6YeN6sKzbecpukjT1UK8lBHWpRvWflgq+c=; b=d RJLXvSRdgPu5XnU1Ac2KmnWsgV/TEm5SoFtdAvwlMS8BFRh1OGhnbvDJBNhNMjNs CyJDwu5q5hzdjinWhj3xqqarcCSj30Ip6/f2bNOENhlMRyPc0xMqWue5mdu5fHAS AWCKk2R8lVlROU79ObH2zf99FZwhh5b/lzzBkunOB7ayrfRR0KVrxP/MChLrHo3L COXATd+GC/B65oF7cyk/IRX2gUg+PyXEHL/2WkEDMJ/muylIRQLl7z3U2ieZq+P4 l0lMPqyzA5V1O7SlLwsnaDPbwkXDzEAjhkQCUQg5tWXqWLmG47RZw5eg8/qoWzEy oA+7nkh2XR/qQrbHU0swQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:10 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:39 +0100 Subject: [PATCH v2 5/9] drm/vc4: hdmi: Swap CSC matrix channels for YUV444 MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-5-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3982; i=maxime@cerno.tech; h=from:subject:message-id; bh=UwqOqS6r27oEfGDwQDiRBXO6hHK4sEFg3b7mVees1oE=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlzmHNiedZSz41bj8pxaxQePtk++wfupqbN8lvqSmwfL JbwSOkpZGMS4GGTFFFlihM2XxJ2a9bqTjW8ezBxWJpAhDFycAjCRLykM/wNbg9U2CzmFtWy+sX2VmI xK21T/l73mRnZP/p+fEGB67QIjw4rlduEP950pMNlhMcN5XY5G3ZoPmqma217sDONeuo3RnAEA 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093423677427467?= X-GMAIL-MSGID: =?utf-8?q?1756093423677427467?= 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 e5e7fe4c6a63..78c17166f296 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1233,7 +1233,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 * * @@ -1243,28 +1243,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]) { @@ -1278,6 +1262,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) @@ -1300,7 +1298,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: @@ -1315,7 +1314,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 Thu Jan 26 13:46:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48668 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279903wrn; Thu, 26 Jan 2023 05:53:17 -0800 (PST) X-Google-Smtp-Source: AMrXdXvPB7VPARX6V33afL8eqLoCDgE5ADoKoHHier7n6e2OO8wTTuGomsnw+fI9zvWAaC3FNou5 X-Received: by 2002:a05:6a00:44c5:b0:580:8c2c:d0ad with SMTP id cv5-20020a056a0044c500b005808c2cd0admr33354814pfb.13.1674741197629; Thu, 26 Jan 2023 05:53:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741197; cv=none; d=google.com; s=arc-20160816; b=SvpwCMYyTnsN4ni2cLpk9xU/TonVfOz8opCGg09o1W20Z/5Xc54oURgXQjhiO6zX+Q sLV0NndRPteLtgXAhIew/Dkr0n3tvw7WjHNm77EnQ9u1cR2G2a7wXBPxK5MHTigTn6PF 4xQv4sPitR+QJTdMWaj4eWqLBBTf5Zoi7UjVmySQ8Cfnen3phSwpDMGjSZPyxDoYNyCT SQQ0uxIWKROMIFgXzgRhjM/KwePRsy5brocQtSi+/2jHRotL4KUja+dqs9IP1pCtrKB0 g+H/5ELwb44d4rGRadhFyhZ8WuQquJGZYkJFy2tf30McS36hXC8ZIUyC/ELja1k38CvE o32A== 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=gQddrZfTsheamKKxKHXVLxyt3cVC0iF9SaFezEVOhEQ=; b=UmWRZfIZVvriAE49suGwGXnkaEZZC9Dhp0Akj4xlCJ+xWKMdeUDyH89ZOAPmbwQ5IF j4Rqcr0b8tlJE7k79OewIn0z5Dhk2R/LpEJdKIJHChIGLEaUhhDkUJ791rEJF1wG9RaD QS4a++NqVFEyWkLquh7onvwB3SAhEMkh+6cKeMV72NF/GRvbP31vrIODZeHkzHU1YN1c TFyKnuZA6G1UEYe2tv2H3rpI5TGn8aNr5zPLEaN5LOHY5al3eFujVRN6rJgLbihgk34Q uP2vMPz7/A9Lws9kKGvRTicFy38wPLcFlRJamk26PDgq+J4Vx8d/GcMclw2SRGfjYIE7 8EuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=YRtDH4h2; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=lwDjDvXQ; 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 y193-20020a62ceca000000b005808bb470a0si1190384pfg.180.2023.01.26.05.53.04; Thu, 26 Jan 2023 05:53:17 -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=fm1 header.b=YRtDH4h2; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=lwDjDvXQ; 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 S231722AbjAZNsa (ORCPT + 99 others); Thu, 26 Jan 2023 08:48:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231714AbjAZNsX (ORCPT ); Thu, 26 Jan 2023 08:48:23 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C57534336 for ; Thu, 26 Jan 2023 05:48:13 -0800 (PST) Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 831F65C0051; Thu, 26 Jan 2023 08:48:12 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Thu, 26 Jan 2023 08:48:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740892; x= 1674827292; bh=gQddrZfTsheamKKxKHXVLxyt3cVC0iF9SaFezEVOhEQ=; b=Y RtDH4h2USdFu4a4bVHFfUhowcdbaH1aVs4FQ3qmAQssteu3cZQBO8O9Mdq6ehZ7s JMsmKc/DggBcc+WveQDyG969hYlYbaYRPiHQxbwIt2Hf5pm4e8mvBSAR2vMC96wQ f+W2SMAqhp0iXV422DYGRRLLOQzA/lMtbuRrWM7CYjCNdLghAM5wEOGDoGId7wb0 v7u7xPjoO1PHcxw2Rd8k5mkX+Md6wGxiqriOcwvCb5NVazviYMcdH+wuPxcJ2uIe EvAn4uTNQN5szmgQmzcLL+ClspBXLFFlVKGq1HdUssPnsHAoFE0i8rNNom0496GE DvVPGKLu+VJH/4s5zJatA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740892; x= 1674827292; bh=gQddrZfTsheamKKxKHXVLxyt3cVC0iF9SaFezEVOhEQ=; b=l wDjDvXQe9rsL0k2Jy5V0SH2ZJRQ9B1jp/yfRTqO0LJgwxJN0TGSS52jKG7HIDOqI 7sGZkZQisNeL6yH1OJKznf/HQAAcR3AwrZ6BHcPPvYztjz/xrDUBBQsLwTEMSYC4 qFf/hA0FSJK40wFJ4nKWCX0Avjh5ViA2FHmVtm4iauK4GcNlzqpbd0YhF+Kmv2Mj h17Jhop1oxAl0UC74SVH2XIqTYdS6QSOdWvDYoTTdv9xu6kAdDTjo0Tz4VJtBOc9 bxpvAS9efYgbLN2H1s5zevvVkdoRCMLtBtiQs/mCWtqAi0vXos9wHxdbos23utrV kwjaheaoQ4CMGMy2SH9gA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:11 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:40 +0100 Subject: [PATCH v2 6/9] drm/vc4: hdmi: Rework the CSC matrices organization MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-6-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5801; i=maxime@cerno.tech; h=from:subject:message-id; bh=9mWtiavcMAMWQYdNf4lsjPBInIWnS6JaAa/lz5o6k1o=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlz2NT1+onXZYLHGhF+bTO7qeK13nzPp2fltqe3bvlqy LP1l01HKwiDGxSArpsgSI2y+JO7UrNedbHzzYOawMoEMYeDiFICJNB5lZPjq5/5itnbs3SC52ui0Z4 1r92q4bdAs3pcZvVHqhEV2ihzD/+J/P9wCny9ufFJ3/oXJu1tCOeFdEjyP/90S5DrquzVkARsA 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093425928594847?= X-GMAIL-MSGID: =?utf-8?q?1756093425928594847?= 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 78c17166f296..53e4afcacc6f 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1201,52 +1201,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, @@ -1283,6 +1303,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; @@ -1299,7 +1320,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: @@ -1314,16 +1335,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 Thu Jan 26 13:46:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 48669 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279911wrn; Thu, 26 Jan 2023 05:53:19 -0800 (PST) X-Google-Smtp-Source: AK7set+Jh7cCtcv0iYByft6C7H6sJcVqnKUIXCCeLWlT/3uYbT9W4kt3M2KmkwNuJ9rNhz4fVXI0 X-Received: by 2002:a17:903:4052:b0:192:6bb1:ed5a with SMTP id n18-20020a170903405200b001926bb1ed5amr1408680pla.38.1674741198847; Thu, 26 Jan 2023 05:53:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741198; cv=none; d=google.com; s=arc-20160816; b=QNWTifn+Ht4uN2JJTItLwGM/1U6/5435uapvVXvJoINwhS6frMeUC4M56a/TX9T70u euFo7/AHB4Eh8HYynx/w6AzKuhSK7nMfywa0+hmeecSzkULI4AytC47txZF4FyLivwo6 SP7nJehDe0LvFCqFNAUiks7K8g8LPgAQxcbWT8CB16Rw95RlCcBogxf/Q0YrGieXTY5D ufNK5PjVoYi1EUb8k5QG5TsqPW7sdHy7LkeqjWInwSxW+85E4rk8KyalYK0fBOR2eLkh avUrzxb33DTjfB2o35Y5PUxEhTs9eWJ5tJTdtMtqj0njy73MMJvlhapWetrShaxokveg duxA== 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=Yl2QMeY1R8uRwnchXZuSN5eN1rTw7te+NweGsXybA0g=; b=AjTvXs7uMd6a23c3DVJKyPG2B0gsJDLbMQ+4OV+kQAHM54sgAtcLY5NUFExjEMugGF lnn7NZjadaG65DLVOOK9sZ8oPkiHh1LVGXUAYXie0RExqtnmPfR2dkbKv5JgRZla8EW3 cPmCnG+ILKxot1cAPSKKhjoHp78bKPX++88aMTlmF+KYv8eh0p3HWYmtph3DBmL+VrdW aAGXQy40/hR3XULZVdPNPqc+pi7Ug5Ne5fQbOdogwL62I+tEilzZLjVXu0YxObzlG2MX C9CJK//QdyugxxPXtwAORSNb61Ofj8kf9d1rcqESvZzpPlJm0zdszrULfT1zB0KPyEJ6 l40w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=PwqCok4D; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=qZIHES3p; 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 az4-20020a170902a58400b0017e8aa47020si1446242plb.472.2023.01.26.05.53.06; Thu, 26 Jan 2023 05:53:18 -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=fm1 header.b=PwqCok4D; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=qZIHES3p; 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 S231837AbjAZNtC (ORCPT + 99 others); Thu, 26 Jan 2023 08:49:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231807AbjAZNsZ (ORCPT ); Thu, 26 Jan 2023 08:48:25 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 069FC5529E for ; Thu, 26 Jan 2023 05:48:14 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 4CD235C00DC; Thu, 26 Jan 2023 08:48:14 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Thu, 26 Jan 2023 08:48:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740894; x= 1674827294; bh=Yl2QMeY1R8uRwnchXZuSN5eN1rTw7te+NweGsXybA0g=; b=P wqCok4Dha8guYh4eIa2TrUT3AMqMXCY+5z02eJsBN1zKKAZYnzgJQDzjBfu8gTna Af+qg54TtyrHl3xOGsxuuyQop5jEjrTjqs1MSvt+ogNL0gc4+LmFMi7ApArhminA wLbKU+WUy+lHWni3VD5YteoPwn/25NHqMtH6sbCEqmakgYhUBNZfZ0H/pHojnk7k PBOhlAkg+goIVEmIfZHzG1e4U/0WANd8DAZDDMe6NJTRhDU3ZTtEwaL1rEzi6Ksk OgRNLKIB9f3cukZ31v60u+3cCmCw213VpIdh09bbv5ogm1phMObtzoly0tC/FXn6 +pR+d5ujqaSxa0M3P84aw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740894; x= 1674827294; bh=Yl2QMeY1R8uRwnchXZuSN5eN1rTw7te+NweGsXybA0g=; b=q ZIHES3pXmDKIxROQAbveYBvbwr9zlrhUCcPAGN2zgT9Bqp3aO2iC63bIu+5gN7Q/ /vU1J/guTIglLbqTQUouTskcKfbj3Ln/F3o2Pq4DTXybekZuJxIWzCsXx0QO83g2 hs45q8poRqGmamh+oZjrwvsRbL3IX24YWeNSYu2BtUuRv1z7mwbsrDQ1eNTGnyQR T1Qehg5s+75kefWNQF+26xwHs7yQZHfKO9xy21OqZNRhriR/23SXVHJ9rPI4e0JV /Lw4x+xxciQ9dSL1QwNTvzxRaGLETKLcIBeEgi1Ok/F2t4MXcEWHdPrfUz8d84+O 2TA4mnGBL1cO0A1UYnxcg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:13 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:41 +0100 Subject: [PATCH v2 7/9] drm/vc4: hdmi: Add a function to retrieve the CSC matrix MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-7-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2847; i=maxime@cerno.tech; h=from:subject:message-id; bh=R4yRhw5Ff9H9FP1UiW4FWLDooLnHV7Z/0sgvtIA1QW0=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlyKBEPMuNS52ZbZ9VYwMx2QLcvPuO6wd7nfdgtRoe+b N8/sKGVhEONikBVTZIkRNl8Sd2rW6042vnkwc1iZQIYwcHEKwER2bGZkuLLsaqdDbeKmlJ83eeYsiW aZEjMv+n3+tHWzzp0ye67SNZWR4fri38etzk6b7sM9Z+LK0v/yn8oZTb7t2t3fbP77oargHl4A 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093427139228762?= X-GMAIL-MSGID: =?utf-8?q?1756093427139228762?= 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 53e4afcacc6f..c74a01f97de5 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1296,6 +1296,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) @@ -1305,6 +1319,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; @@ -1319,11 +1334,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 | @@ -1335,7 +1353,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 Thu Jan 26 13: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: 48670 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp279974wrn; Thu, 26 Jan 2023 05:53:29 -0800 (PST) X-Google-Smtp-Source: AK7set/9I9cwThOb4LyfyRzAyujpbTmBSBl5TnDCAd06gG3KV8J6sgJQG72Eqk9d4NCyHacPpqEe X-Received: by 2002:a17:902:d212:b0:194:d8a3:441a with SMTP id t18-20020a170902d21200b00194d8a3441amr1583183ply.41.1674741209380; Thu, 26 Jan 2023 05:53:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741209; cv=none; d=google.com; s=arc-20160816; b=Rk7PoKqSanfftoWqTpR9soUP4GWCJTjFHpVJeSJYxp8Xq2iR+tosXR5yEqYmGtKrAR AXkMRrWVN1v16ouLfPs/lGpw8uXI7qIKFNlxA3+570qT/7GqxJXPQAluRht0hbVQNwCP WfKXYphX/kt9UNPgKnTRAP//N4xXAzit/6yw+brg52ZAvKNsTzBhBYpcu+bmR+Uddw3Q whmgMcFwuW0X6vIfr9X+jxBLzZdAY+aZUfgkNO/qZ9QqsoBoZlpSIZ8E5lhnBpZxi4Ak eZyltRljs8Y/1tznrdBVhBb7kCnqbje8dvHsUuAGoq/hLa+ciwn1yqAFcmgVppQRqDl3 7kkA== 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=7Ocr1OPj0XEAK6K/oP9BSLvRt/V3DbsreKFmkSzzphQ=; b=0nx9/MfIOk0vt6ul4858k9fW/b4IQwgEfAcbY9A3c7gP1hzO7i52TnJQbDZmcuoivL E0Af9KCNGsgymwA70+srWAgXwKP39EnPOU9fAZp8z6ftMRouqd+1LD/+5JzSi93MY3uN 3kzdc53ZC6Qwx9WQvOOm1Nr+/6jksDqxVwb1C1hCDsaNjvHHHIRVA8lmkl1yxSSidNZX nbX2T3rIIX6iaeamWaVWnUzqOvvDWMx4qvql6WQriEqGoUKSQtqXEFljAPg7Rz1E7WP5 hlGNPUZcOcSGQoTBVP+QJx0O/qtrE/SRmZl62zd+fqUSwtpmtPHAFByUiwyTy4kNLsth dzaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=LrjpBoA0; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=QRM1zNde; 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 k11-20020a170902760b00b0018c166e2391si1506682pll.392.2023.01.26.05.53.16; Thu, 26 Jan 2023 05:53:29 -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=fm1 header.b=LrjpBoA0; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=QRM1zNde; 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 S231616AbjAZNtE (ORCPT + 99 others); Thu, 26 Jan 2023 08:49:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231858AbjAZNsc (ORCPT ); Thu, 26 Jan 2023 08:48:32 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 326CE6DFE2 for ; Thu, 26 Jan 2023 05:48:16 -0800 (PST) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 18FEE5C04A1; Thu, 26 Jan 2023 08:48:16 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Thu, 26 Jan 2023 08:48:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740896; x= 1674827296; bh=7Ocr1OPj0XEAK6K/oP9BSLvRt/V3DbsreKFmkSzzphQ=; b=L rjpBoA074uT/3xYJgNlGmm+1+kMUYi0PtUvZEW7qsTmzmkwspUlLsexK6NeQda2n +e6UtoqHrzbu9N3y4khr+CnUmLaOdC7uLI+/HetqwAHzsX644D59rQhbbt0uyAaF Yao7+P5l0H7gabLuujjsW4TCefDC3uPXrt+Zu1JSrgZI0txfrmb+exgRnUufbiGo Nun0W5UQZwbrqe/Ikx1P1SeAmIUj24jNpLWzDVs2RQfhUXM5bKiFtBNLbT4/BcFC OoomhKmRLzGdQ5JCiGa8cluwIjMnDuMUtxSrwWiHwcyWeDZbxPQ7l6JOTq2p/7rg plHIT3UzVWbS8kxWue/HA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740896; x= 1674827296; bh=7Ocr1OPj0XEAK6K/oP9BSLvRt/V3DbsreKFmkSzzphQ=; b=Q RM1zNde83JaVyifELnjKcDE1Ao9BmIy8lm0jEvWH3pgNWuKuBNPaOd1BqMH0ugFn ux57g2toRDNPLx+whyzlzeJsYcvyBo2h5Pvt8Qvqjnmf0HXasGbxAJPQEFnkkRGp NMvDrhpmEg+z34UE7TGtM8oWEJGeXn1E0a+iQXhwqx2hbwR1eu6BQ0jueaPEOcfh /mGX6WxYGcqNbfZbtJ/NMNbg1MANrp6ZFMYwbH0KvrbOOwW3Tp4qG8slbsOHsbs0 rHz+9wOwK8/DgHFNxqaBjyeUswnp9Yxbqr9BkiMP9dUBcT7cO71b+XUoufxiyLdG 54lC0O0QEcHsKHKb7Y2KQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:15 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:42 +0100 Subject: [PATCH v2 8/9] drm/vc4: hdmi: Add BT.601 Support MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-8-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2186; i=maxime@cerno.tech; h=from:subject:message-id; bh=eSsypKbbtQQn/VQJzOqV5FzksiiFE/c/tMFcoMAuIuY=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlxkp/au7hbSP5DBEGAgXV24mtvaJv8cI8vkU7e+fhBt 3O/VUcrCIMbFICumyBIjbL4k7tSs151sfPNg5rAygQxh4OIUgIl8Ocbwz8BQ7Nj1428z6yV4Ch9MPX bpnV3c//avK/4u4Nmo5zR7aTIjw8so5tRor6bwC4u/f191beWRvdf/3NWyLIw5uUl9XaNzGg8A 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093438143244805?= X-GMAIL-MSGID: =?utf-8?q?1756093438143244805?= 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 c74a01f97de5..5d37952d620b 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1237,6 +1237,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 * @@ -1300,6 +1331,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 Thu Jan 26 13: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: 48671 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp280008wrn; Thu, 26 Jan 2023 05:53:34 -0800 (PST) X-Google-Smtp-Source: AK7set8O3CMsfh7uFRJEzX3Y9waxQW2yf7QnCiwm+jIUPigrGZ69SGPZ7fl9esCnNXmRi0EffriU X-Received: by 2002:a05:6a00:44ce:b0:580:e549:559e with SMTP id cv14-20020a056a0044ce00b00580e549559emr2146819pfb.17.1674741214043; Thu, 26 Jan 2023 05:53:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674741214; cv=none; d=google.com; s=arc-20160816; b=CNfv0VI3H8rjhHq6yZPsvXkXuBCgp0hXLSh9xNbJSYP4ctqFni0QYBH3nWAFQ+NrPh ZgoY2D8z6zjwrSoo2qDamzqJ1/oYJMLiuJcN+NI750pGG35G2vLREgKNYUSb3sKBltpy 2fGt/BNHdH6Z9e/2xCd8kTWDC5d3iQW1Bvkj72yMXvq0dO1d7/k2wPhApVXj+72Zgr7+ f45/K5YPEnzm/tTZbdETm7caZqLUFb6UB6dV/rxkFjdsOlt1wV4mZ3407iZo29NTre09 CxkS399seAxkVwNo7oTwerkAXTQUu9KRz3RgAWlHEnYw5kc2d773nv+wUcvyG9XZ38gZ aMng== 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=EFCszt7mMoi4GmfPSY0XcTDr+E65T3khWEeN25Yggv4=; b=jiWR58bpnD7YaE0ZEkZiaXJKB7UKntuqAcyUcmz+Jz050mV50yK1+QZsLMUxxaw0sR yzFvOw7wI1qfkxgjtQOg3m3fW7hycNmwWe2kiZy7jbARtj07CmGln6lOa7hruLIA6LIs cYAoB+I0Jthw86B38rfS8B2BaDqcxjXFelicoE3F/QLZ7leNAu3FnPCzB2H17720bgkx EXocD+v0CAFFlA4W7gKkSxxdzNVTyGv5QX/WjZsozdaJRxqDaixDFMq/MuoEp4OVD28G Lfw0dQGq0rVmJG0r9u4yijbrmBK7/ETWIN0oxWr8aTCt9apTWKtUwgTVTFRuXnCSx0Sz 9SEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm1 header.b=BZYaycmg; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=gN+p4WnW; 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 e9-20020aa798c9000000b0058e16d0b827si1217970pfm.32.2023.01.26.05.53.20; Thu, 26 Jan 2023 05:53:34 -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=fm1 header.b=BZYaycmg; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=gN+p4WnW; 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 S230045AbjAZNtN (ORCPT + 99 others); Thu, 26 Jan 2023 08:49:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231912AbjAZNsk (ORCPT ); Thu, 26 Jan 2023 08:48:40 -0500 Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E238C6E425 for ; Thu, 26 Jan 2023 05:48:18 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id DE0665C049F; Thu, 26 Jan 2023 08:48:17 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Thu, 26 Jan 2023 08:48:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding: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=fm1; t=1674740897; x= 1674827297; bh=EFCszt7mMoi4GmfPSY0XcTDr+E65T3khWEeN25Yggv4=; b=B ZYaycmgbMfTX1BRGlPtMLro/KjywPCJlUY9hdsiNJqRGsNgC63Vh+FcCty0Zo7+v gaIz3YU/njcSZIP0vB7rPSElAYrwOHMAPgErZUbBYLiQ+ABN2Jcl+BEbNkV8UhpO LDtl9RPW0PSqvkilJx4wGmI92AQDSBdhA3hUotGUqpzv0xC5iL1kcqsmwJS6d9Fc x/j/mPxYMrriGvenkBXJeHsoKBH1McIMKp5tekFkvYkqLZxmAaNYZHooxR1DOtJP KZiOMpH5nnV25QYr5BbeBLKa7So5SrmsIfq0zxDjS12ma+suBAZ8mYmu3Yw+V9P8 wQaSPoWmUAt3O15o5VtiQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :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=fm3; t=1674740897; x= 1674827297; bh=EFCszt7mMoi4GmfPSY0XcTDr+E65T3khWEeN25Yggv4=; b=g N+p4WnWIggwn1/qGmQdLcGhNvQaKDzxeGGEbN2uicLairbQRP33QRpChJHrZ3ACN EGdg9C0bI4982jR6g57bAw/z9UZ6muqBaxDy9ZWUOXTbShQWJYNPiQtRMNqvjqVF XURPv5AGr0xxIxsBtPlLY4s+JdnrcMCPbISNPPor+eZc+nAMs6qe1xojovq/B/pI frrpnRo1CFLx2Ve0OwCgu+5jrNRTSoOz1p59UdyQo2uJHxVTw53Pi49bbUfxxJSh uXFHFOKpbGY0mYXEJ0YOKiMytxcpdlO8LFspOMSescv86+TVFYx3cKYXUoJNH0Be AphIrggfPnxfk/72vjYIA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedruddvgedgheeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpeforgig ihhmvgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrf grthhtvghrnhepvedvleeijeegvdekffehkeehieelhfeggfffheetkeeuledvtdeuffeh teeltdffnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomh epmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 26 Jan 2023 08:48:17 -0500 (EST) From: Maxime Ripard Date: Thu, 26 Jan 2023 14:46:43 +0100 Subject: [PATCH v2 9/9] drm/vc4: hdmi: Add BT.2020 Support MIME-Version: 1.0 Message-Id: <20221207-rpi-hdmi-improvements-v2-9-8ace2d8221ad@cerno.tech> References: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> In-Reply-To: <20221207-rpi-hdmi-improvements-v2-0-8ace2d8221ad@cerno.tech> To: Emma Anholt , Maxime Ripard , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dave Stevenson , Maxime Ripard , Thomas Zimmermann X-Mailer: b4 0.11.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2176; i=maxime@cerno.tech; h=from:subject:message-id; bh=Y/Qg484RrEzTOyvcWs4U+TlZS8r2m4kTGgXaUZsHHeY=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmXWlyC9pyY61uX+rNOqdB8y9ElS/P5vRx8997asuPyowmb 8u/4dZSyMIhxMciKKbLECJsviTs163UnG988mDmsTCBDGLg4BWAifYGMDCcq3F3+vHq/wO9rem3u3x 07hK1bo90OfTonuy68/Iq/8SdGhulcz66Vz627Wree1cXofuczrUkzyz++uvH35J/vR2Y4ePEAAA== 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, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?1756093443014468196?= X-GMAIL-MSGID: =?utf-8?q?1756093443014468196?= 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 5d37952d620b..523b55a18409 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1300,6 +1300,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]) { @@ -1345,6 +1376,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]; } }