From: Johan Jonker <jbx6244@gmail.com>
To: "Maxime Ripard" <mripard@kernel.org>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Emma Anholt" <emma@anholt.net>,
"Jonathan Corbet" <corbet@lwn.net>,
"Sandy Huang" <hjc@rock-chips.com>,
"Heiko Stübner" <heiko@sntech.de>, "Chen-Yu Tsai" <wens@csie.org>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Samuel Holland" <samuel@sholland.org>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-rockchip@lists.infradead.org, linux-sunxi@lists.linux.dev
Subject: Re: [PATCH v4 38/45] drm/rockchip: inno_hdmi: Switch to infoframe type
Date: Tue, 28 Nov 2023 12:45:02 +0100 [thread overview]
Message-ID: <c34a6eb0-d436-931b-d08d-f3449be84a4c@gmail.com> (raw)
In-Reply-To: <20231128-kms-hdmi-connector-state-v4-38-c7602158306e@kernel.org>
Hi,
Maximum for inno_hdmi is: 1920x1080.
Do we still need INFOFRAME_VSI?
From Rockchip RK3036 TRM V1.0 20150907-Part2 Peripheral and Interface.pdf:
- HDMI 1.4a/b/1.3/1.2/1.1, HDCP 1.2 and DVI 1.0 standard compliant transmitter
- Supports all DTV resolutions including 480p/576p/720p/1080p
https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_edid.c#L7015
* HDMI spec says if a mode is found in HDMI 1.4b 4K modes
* we should send its VIC in vendor infoframes, else send the
* VIC in AVI infoframes. Lets check if this mode is present in
* HDMI 1.4b 4K modes https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_edid.c#L7212 * Note that there's is a need to send HDMI vendor infoframes only when using a
* 4k or stereoscopic 3D mode. So when giving any other mode as input this
* function will return -EINVAL, error that can be safely ignored.
On 11/28/23 11:24, Maxime Ripard wrote:
> The inno_hdmi driver relies on its own internal infoframe type matching
> the hardware.
>
> This works fine, but in order to make further reworks easier, let's
> switch to the HDMI spec definition of those types.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> drivers/gpu/drm/rockchip/inno_hdmi.c | 71 +++++++++++++++++++++++-------------
> 1 file changed, 45 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
> index bc7fb1278cb2..ed1d10efbef4 100644
> --- a/drivers/gpu/drm/rockchip/inno_hdmi.c
> +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
> @@ -156,61 +156,80 @@ static void inno_hdmi_reset(struct inno_hdmi *hdmi)
> inno_hdmi_set_pwr_mode(hdmi, NORMAL);
> }
>
> +static u32 inno_hdmi_get_frame_index(struct inno_hdmi *hdmi,
> + enum hdmi_infoframe_type type)
> +{
> + struct drm_device *drm = hdmi->connector.dev;
> +
> + switch (type) {
> + case HDMI_INFOFRAME_TYPE_VENDOR:
> + return INFOFRAME_VSI;
> + case HDMI_INFOFRAME_TYPE_AVI:
> + return INFOFRAME_AVI;
> + default:
> + drm_err(drm, "Unknown infoframe type: %u\n", type);
> + }
> +
> + return 0;
> +}
> +
> static u32 inno_hdmi_get_frame_mask(struct inno_hdmi *hdmi,
> - u32 frame_index)
> + enum hdmi_infoframe_type type)
> {
> struct drm_device *drm = hdmi->connector.dev;
>
> - switch (frame_index) {
> - case INFOFRAME_VSI:
> + switch (type) {
> + case HDMI_INFOFRAME_TYPE_VENDOR:
> return m_PACKET_VSI_EN;
> - case INFOFRAME_AVI:
> + case HDMI_INFOFRAME_TYPE_AVI:
> return 0;
> default:
> - drm_err(drm, "Unknown infoframe type: %u\n", frame_index);
> + drm_err(drm, "Unknown infoframe type: %u\n", type);
> }
>
> return 0;
> }
>
> static u32 inno_hdmi_get_frame_disable(struct inno_hdmi *hdmi,
> - u32 frame_index)
> + enum hdmi_infoframe_type type)
> {
> struct drm_device *drm = hdmi->connector.dev;
>
> - switch (frame_index) {
> - case INFOFRAME_VSI:
> + switch (type) {
> + case HDMI_INFOFRAME_TYPE_VENDOR:
> return v_PACKET_VSI_EN(0);
> - case INFOFRAME_AVI:
> + case HDMI_INFOFRAME_TYPE_AVI:
> return 0;
> default:
> - drm_err(drm, "Unknown infoframe type: %u\n", frame_index);
> + drm_err(drm, "Unknown infoframe type: %u\n", type);
> }
>
> return 0;
> }
>
> static u32 inno_hdmi_get_frame_enable(struct inno_hdmi *hdmi,
> - u32 frame_index)
> + enum hdmi_infoframe_type type)
> {
> struct drm_device *drm = hdmi->connector.dev;
>
> - switch (frame_index) {
> - case INFOFRAME_VSI:
> + switch (type) {
> + case HDMI_INFOFRAME_TYPE_VENDOR:
> return v_PACKET_VSI_EN(1);
> - case INFOFRAME_AVI:
> + case HDMI_INFOFRAME_TYPE_AVI:
> return 0;
> default:
> - drm_err(drm, "Unknown infoframe type: %u\n", frame_index);
> + drm_err(drm, "Unknown infoframe type: %u\n", type);
> }
>
> return 0;
> }
>
> -static void inno_hdmi_disable_frame(struct inno_hdmi *hdmi, u32 frame_index)
> +static void inno_hdmi_disable_frame(struct inno_hdmi *hdmi,
> + enum hdmi_infoframe_type type)
> {
> - u32 disable = inno_hdmi_get_frame_disable(hdmi, frame_index);
> - u32 mask = inno_hdmi_get_frame_mask(hdmi, frame_index);
> + u32 frame_index = inno_hdmi_get_frame_index(hdmi, type);
> + u32 disable = inno_hdmi_get_frame_disable(hdmi, type);
> + u32 mask = inno_hdmi_get_frame_mask(hdmi, type);
>
> if (mask)
> hdmi_modb(hdmi, HDMI_PACKET_SEND_AUTO, mask, disable);
> @@ -219,14 +238,14 @@ static void inno_hdmi_disable_frame(struct inno_hdmi *hdmi, u32 frame_index)
> }
>
> static int inno_hdmi_upload_frame(struct inno_hdmi *hdmi,
> - union hdmi_infoframe *frame, u32 frame_index)
> + union hdmi_infoframe *frame, enum hdmi_infoframe_type type)
> {
> - u32 enable = inno_hdmi_get_frame_enable(hdmi, frame_index);
> - u32 mask = inno_hdmi_get_frame_mask(hdmi, frame_index);
> + u32 enable = inno_hdmi_get_frame_enable(hdmi, type);
> + u32 mask = inno_hdmi_get_frame_mask(hdmi, type);
> u8 packed_frame[HDMI_MAXIMUM_INFO_FRAME_SIZE];
> ssize_t rc, i;
>
> - inno_hdmi_disable_frame(hdmi, frame_index);
> + inno_hdmi_disable_frame(hdmi, type);
>
> rc = hdmi_infoframe_pack(frame, packed_frame,
> sizeof(packed_frame));
> @@ -253,11 +272,11 @@ static int inno_hdmi_config_video_vsi(struct inno_hdmi *hdmi,
> &hdmi->connector,
> mode);
> if (rc) {
> - inno_hdmi_disable_frame(hdmi, INFOFRAME_VSI);
> + inno_hdmi_disable_frame(hdmi, HDMI_INFOFRAME_TYPE_VENDOR);
> return rc;
> }
>
> - return inno_hdmi_upload_frame(hdmi, &frame, INFOFRAME_VSI);
> + return inno_hdmi_upload_frame(hdmi, &frame, HDMI_INFOFRAME_TYPE_VENDOR);
> }
>
> static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
> @@ -270,13 +289,13 @@ static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
> &hdmi->connector,
> mode);
> if (rc) {
> - inno_hdmi_disable_frame(hdmi, INFOFRAME_AVI);
> + inno_hdmi_disable_frame(hdmi, HDMI_INFOFRAME_TYPE_AVI);
> return rc;
> }
>
> frame.avi.colorspace = HDMI_COLORSPACE_RGB;
>
> - return inno_hdmi_upload_frame(hdmi, &frame, INFOFRAME_AVI);
> + return inno_hdmi_upload_frame(hdmi, &frame, HDMI_INFOFRAME_TYPE_AVI);
> }
>
> static int inno_hdmi_config_video_csc(struct inno_hdmi *hdmi)
>
next prev parent reply other threads:[~2023-11-28 11:45 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-28 10:24 [PATCH v4 00/45] drm/connector: Create HDMI Connector infrastructure Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 01/45] drm/tests: helpers: Include missing drm_drv header Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 02/45] drm/tests: helpers: Add atomic helpers Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 03/45] drm/tests: Add helper to create mock plane Maxime Ripard
2023-11-28 14:57 ` kernel test robot
2023-11-28 10:24 ` [PATCH v4 04/45] drm/tests: Add helper to create mock crtc Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 05/45] drm/connector: Check drm_connector_init pointers arguments Maxime Ripard
2023-11-28 12:54 ` Jani Nikula
2023-11-28 13:29 ` Maxime Ripard
2023-11-28 13:49 ` Ville Syrjälä
2023-11-29 9:11 ` Maxime Ripard
2023-11-29 9:18 ` Ville Syrjälä
2023-12-01 9:01 ` Maxime Ripard
2023-12-01 15:15 ` Ville Syrjälä
2023-11-29 9:38 ` Jani Nikula
2023-11-29 11:10 ` Maxime Ripard
2023-11-29 11:40 ` Jani Nikula
2023-11-29 13:26 ` Maxime Ripard
2023-11-29 10:12 ` Pekka Paalanen
2023-11-29 10:25 ` Ville Syrjälä
2023-12-01 15:17 ` Ville Syrjälä
2023-11-28 10:24 ` [PATCH v4 06/45] drm/tests: connector: Add tests for drmm_connector_init Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 07/45] drm/connector: Introduce an HDMI connector initialization function Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 08/45] drm/connector: hdmi: Create an HDMI sub-state Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 09/45] drm/connector: hdmi: Add Broadcast RGB property Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 10/45] drm/connector: hdmi: Add RGB Quantization Range to the connector state Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 11/45] drm/connector: hdmi: Add output BPC " Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 12/45] drm/connector: hdmi: Add support for output format Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 13/45] drm/connector: hdmi: Add HDMI compute clock helper Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 14/45] drm/connector: hdmi: Calculate TMDS character rate Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 15/45] drm/connector: hdmi: Add custom hook to filter " Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 16/45] drm/connector: hdmi: Compute bpc and format automatically Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 17/45] drm/connector: hdmi: Add Infoframes generation Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 18/45] drm/connector: hdmi: Create Infoframe DebugFS entries Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 19/45] drm/vc4: hdmi: Create destroy state implementation Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 20/45] drm/vc4: hdmi: Switch to HDMI connector Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 21/45] drm/vc4: tests: Remove vc4_dummy_plane structure Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 22/45] drm/vc4: tests: Convert to plane creation helper Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 23/45] drm/rockchip: inno_hdmi: Remove useless mode_fixup Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 24/45] drm/rockchip: inno_hdmi: Remove useless copy of drm_display_mode Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 25/45] drm/rockchip: inno_hdmi: Switch encoder hooks to atomic Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 26/45] drm/rockchip: inno_hdmi: Get rid of mode_set Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 27/45] drm/rockchip: inno_hdmi: no need to store vic Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 28/45] drm/rockchip: inno_hdmi: Remove unneeded has audio flag Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 29/45] drm/rockchip: inno_hdmi: Remove useless input format Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 30/45] drm/rockchip: inno_hdmi: Remove useless output format Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 31/45] drm/rockchip: inno_hdmi: Remove useless colorimetry Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 32/45] drm/rockchip: inno_hdmi: Remove useless enum Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 33/45] drm/rockchip: inno_hdmi: Remove tmds rate from structure Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 34/45] drm/rockchip: inno_hdmi: Remove useless coeff_csc matrix Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 35/45] drm/rockchip: inno_hdmi: Remove useless mode_valid Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 36/45] drm/rockchip: inno_hdmi: Move infoframe disable to separate function Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 37/45] drm/rockchip: inno_hdmi: Create mask retrieval functions Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 38/45] drm/rockchip: inno_hdmi: Switch to infoframe type Maxime Ripard
2023-11-28 11:45 ` Johan Jonker [this message]
2023-11-28 10:24 ` [PATCH v4 39/45] drm/rockchip: inno_hdmi: Remove unused drm device pointer Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 40/45] drm/rockchip: inno_hdmi: Switch to HDMI connector Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 41/45] drm/sun4i: hdmi: Convert encoder to atomic Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 42/45] drm/sun4i: hdmi: Move mode_set into enable Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 43/45] drm/sun4i: hdmi: Switch to container_of_const Maxime Ripard
2023-11-28 14:11 ` [v4,43/45] " Sui Jingfeng
2023-11-28 10:24 ` [PATCH v4 44/45] drm/sun4i: hdmi: Consolidate atomic_check and mode_valid Maxime Ripard
2023-11-28 10:24 ` [PATCH v4 45/45] drm/sun4i: hdmi: Switch to HDMI connector Maxime Ripard
2023-11-28 10:45 ` [PATCH v4 00/45] drm/connector: Create HDMI Connector infrastructure Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c34a6eb0-d436-931b-d08d-f3449be84a4c@gmail.com \
--to=jbx6244@gmail.com \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=emma@anholt.net \
--cc=heiko@sntech.de \
--cc=hjc@rock-chips.com \
--cc=hverkuil@xs4all.nl \
--cc=jernej.skrabec@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=samuel@sholland.org \
--cc=tzimmermann@suse.de \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®