From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"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>,
"Hans Verkuil" <hverkuil@xs4all.nl>,
"Sebastian Wick" <sebastian.wick@redhat.com>,
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 v9 14/27] drm/connector: hdmi: Compute bpc and format automatically
Date: Mon, 18 Mar 2024 15:37:05 +0200 [thread overview]
Message-ID: <ZfhDgRcC6sdGmcmH@intel.com> (raw)
In-Reply-To: <20240318-organic-debonair-beetle-b2817b@houat>
On Mon, Mar 18, 2024 at 01:05:22PM +0100, Maxime Ripard wrote:
> Hi Ville,
>
> Thanks for your review !
>
> On Fri, Mar 15, 2024 at 10:05:16AM +0200, Ville Syrjälä wrote:
> > On Mon, Mar 11, 2024 at 03:49:42PM +0100, Maxime Ripard wrote:
> > > +static bool
> > > +sink_supports_format_bpc(const struct drm_connector *connector,
> > > + const struct drm_display_info *info,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int format, unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + u8 vic = drm_match_cea_mode(mode);
> > > +
> > > + if (vic == 1 && bpc != 8) {
> > > + drm_dbg(dev, "VIC1 requires a bpc of 8, got %u\n", bpc);
> >
> > Use of drm_dbg() for kms stuff is surprising.
> >
> > > + return false;
> > > + }
> >
> > I don't think we have this in i915. My original impression was that you
> > can use higher color depth if you can determine the sink capabilities,
> > but all sinks are required to accept 640x480@8bpc as a fallback.
> >
> > but CTA-861-H says:
> > "5.4 Color Coding & Quantization
> > Component Depth: The coding shall be N-bit, where N = 8, 10, 12, or 16
> > bits/component — except in the case of the default 640x480 Video Timing 1,
> > where the value of N shall be 8."
> >
> > So that does seem to imply that you're supposed to use exactly 8bpc.
> > Though the word "default" in there is confusing. Are they specifically
> > using that to indicate that this is about the fallback behaviour, or
> > is it just indicating that it is a "default mode that always has to
> > be supported". Dunno. I guess no real harm in forcing 8bpc for 640x480
> > since no one is likely to use that for any high fidelity stuff.
>
> My understanding was that CTA-861 mandates that 640x480@60Hz is
> supported, and mentions it being the default timing on a few occurences,
> like in section 4 - Video Formats and Waveform Timings that states "This
> section describes the default IT 640x480 Video Timing as well as all of
> the standard CE Video Timings.", or Section 6.2 - Describing Video
> Formats in EDID "The 640x480@60Hz flag, in the Established Timings area,
> shall always be set, since the 640x480p format is a mandatory default
> timing."
>
> So my understanding is that default here applies to the timing itself,
> and not the bpc, and is thus the second interpretation you suggested.
>
> I'll add a comment to make it clearer.
>
> > > +static int
> > > +hdmi_compute_format(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_RGB)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_RGB;
> > > + return 0;
> > > + }
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_YUV422)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_YUV422;
> > > + return 0;
> > > + }
> >
> > Looks like you're preferring YCbCr 4:2:2 over RGB 8bpc. Not sure
> > if that's a good tradeoff to make.
>
> Yeah, indeed. I guess it's a judgement call on whether we prioritise
> lowering the bpc over selecting YUV422, but I guess I can try all
> available RGB bpc before falling back to YUV422.
>
> > In i915 we don't currently expose 4:2:2 at all because it doesn't
> > help in getting a working display, and we have no uapi for the
> > user to force it if they really want 4:2:2 over RGB.
>
> I guess if the priority is given to lowering bpc, then it indeed doesn't
> make sense to support YUV422, since the limiting factor is likely to be
> the TMDS char rate and YUV422 12 bpc is equivalent to RGB 8bpc there.
>
> dw-hdmi on the other hand will always put YUV422 and YUV444 before RGB
> for a given bpc, which is weird to me:
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c#L2696
>
> What is even weirder to me is that YUV422 is explicitly stated to be
> 12bpc only, so there's some invalid configurations there (8 and 10 bpc).
>
> And given that it's order by decreasing order of preference, I'm pretty
> sure it'll never actually pick any YUV or RGB > 8bpc format since RGB
> 8bpc is super likely to be always available and thus picked first.
8bpc RGB is in fact mandatory.
>
> If we want to converge, I think we should amend this code to support
> YUV420 for YUV420-only modes first, and then the RGB options like i915
> is doing. And then if someone is interested in more, we can always
> expand it to other formats.
>
> > > +
> > > + drm_dbg(dev, "Failed. No Format Supported for that bpc count.\n");
> > > +
> > > + return -EINVAL;
> > > +}
> > > +
> > > +static int
> > > +hdmi_compute_config(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + unsigned int max_bpc = clamp_t(unsigned int,
> > > + state->max_bpc,
> > > + 8, connector->max_bpc);
> > > + unsigned int bpc;
> > > + int ret;
> > > +
> > > + for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> > > + drm_dbg(dev, "Trying with a %d bpc output\n", bpc);
> > > +
> > > + ret = hdmi_compute_format(connector, state, mode, bpc);
> >
> > Hmm. Actually I'm not sure your 4:2:2 stuff even works since you
> > check for bpc==12 in there and only call this based on the max_bpc.
> > I'm not convinced max_bpc would actually be 12 for a sink that
> > supports YCbCr 4:2:2 but not 12bpc RGB.
>
> It's another discussion we had in an earlier version, but yeah we lack
> the infrastructure to support those for now. I still believe it would
> require an increased max_bpc to select YUV422, otherwise things would be
> pretty inconsistent with other YUV formats.
Ideally I'd like to know the actual color depth of the panel
independently of the supported signal color depths. Unfortunately
I don't think EDID gives us that. Can't recall if DisplayID might
have something a bit more sensible.
Given how info->bpc works right now, I suppose it would make sense
to bump it up to 12 when 4:2:2 is supported. But I've not thought
through the actual implications such a change.
> But yeah, we need to provide a hook to report we don't support RGB >
> 8bpc for HDMI 1.4 devices. Which goes back to the previous question
> actually, I believe it would still provide value to support YUV422 on
> those devices, with something like:
>
> for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> if (!connector->hdmi->funcs->validate_config(mode, RGB, bpc))
> continue;
>
> // Select RGB with bpc
> ...
> }
>
> if (connector->hdmi->funcs->validate_config(mode, YUV) &&
> hdmi_try_format_bpc(..., mode, 12, YUV422) {
> // Select YUV422, 12 bpc
> ...
> }
>
> What do you think?
Since 8bpc RGB must always be supported this looks
like dead code to me.
--
Ville Syrjälä
Intel
WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"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>,
"Hans Verkuil" <hverkuil@xs4all.nl>,
"Sebastian Wick" <sebastian.wick@redhat.com>,
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 v9 14/27] drm/connector: hdmi: Compute bpc and format automatically
Date: Mon, 18 Mar 2024 15:37:05 +0200 [thread overview]
Message-ID: <ZfhDgRcC6sdGmcmH@intel.com> (raw)
In-Reply-To: <20240318-organic-debonair-beetle-b2817b@houat>
On Mon, Mar 18, 2024 at 01:05:22PM +0100, Maxime Ripard wrote:
> Hi Ville,
>
> Thanks for your review !
>
> On Fri, Mar 15, 2024 at 10:05:16AM +0200, Ville Syrjälä wrote:
> > On Mon, Mar 11, 2024 at 03:49:42PM +0100, Maxime Ripard wrote:
> > > +static bool
> > > +sink_supports_format_bpc(const struct drm_connector *connector,
> > > + const struct drm_display_info *info,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int format, unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + u8 vic = drm_match_cea_mode(mode);
> > > +
> > > + if (vic == 1 && bpc != 8) {
> > > + drm_dbg(dev, "VIC1 requires a bpc of 8, got %u\n", bpc);
> >
> > Use of drm_dbg() for kms stuff is surprising.
> >
> > > + return false;
> > > + }
> >
> > I don't think we have this in i915. My original impression was that you
> > can use higher color depth if you can determine the sink capabilities,
> > but all sinks are required to accept 640x480@8bpc as a fallback.
> >
> > but CTA-861-H says:
> > "5.4 Color Coding & Quantization
> > Component Depth: The coding shall be N-bit, where N = 8, 10, 12, or 16
> > bits/component — except in the case of the default 640x480 Video Timing 1,
> > where the value of N shall be 8."
> >
> > So that does seem to imply that you're supposed to use exactly 8bpc.
> > Though the word "default" in there is confusing. Are they specifically
> > using that to indicate that this is about the fallback behaviour, or
> > is it just indicating that it is a "default mode that always has to
> > be supported". Dunno. I guess no real harm in forcing 8bpc for 640x480
> > since no one is likely to use that for any high fidelity stuff.
>
> My understanding was that CTA-861 mandates that 640x480@60Hz is
> supported, and mentions it being the default timing on a few occurences,
> like in section 4 - Video Formats and Waveform Timings that states "This
> section describes the default IT 640x480 Video Timing as well as all of
> the standard CE Video Timings.", or Section 6.2 - Describing Video
> Formats in EDID "The 640x480@60Hz flag, in the Established Timings area,
> shall always be set, since the 640x480p format is a mandatory default
> timing."
>
> So my understanding is that default here applies to the timing itself,
> and not the bpc, and is thus the second interpretation you suggested.
>
> I'll add a comment to make it clearer.
>
> > > +static int
> > > +hdmi_compute_format(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_RGB)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_RGB;
> > > + return 0;
> > > + }
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_YUV422)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_YUV422;
> > > + return 0;
> > > + }
> >
> > Looks like you're preferring YCbCr 4:2:2 over RGB 8bpc. Not sure
> > if that's a good tradeoff to make.
>
> Yeah, indeed. I guess it's a judgement call on whether we prioritise
> lowering the bpc over selecting YUV422, but I guess I can try all
> available RGB bpc before falling back to YUV422.
>
> > In i915 we don't currently expose 4:2:2 at all because it doesn't
> > help in getting a working display, and we have no uapi for the
> > user to force it if they really want 4:2:2 over RGB.
>
> I guess if the priority is given to lowering bpc, then it indeed doesn't
> make sense to support YUV422, since the limiting factor is likely to be
> the TMDS char rate and YUV422 12 bpc is equivalent to RGB 8bpc there.
>
> dw-hdmi on the other hand will always put YUV422 and YUV444 before RGB
> for a given bpc, which is weird to me:
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c#L2696
>
> What is even weirder to me is that YUV422 is explicitly stated to be
> 12bpc only, so there's some invalid configurations there (8 and 10 bpc).
>
> And given that it's order by decreasing order of preference, I'm pretty
> sure it'll never actually pick any YUV or RGB > 8bpc format since RGB
> 8bpc is super likely to be always available and thus picked first.
8bpc RGB is in fact mandatory.
>
> If we want to converge, I think we should amend this code to support
> YUV420 for YUV420-only modes first, and then the RGB options like i915
> is doing. And then if someone is interested in more, we can always
> expand it to other formats.
>
> > > +
> > > + drm_dbg(dev, "Failed. No Format Supported for that bpc count.\n");
> > > +
> > > + return -EINVAL;
> > > +}
> > > +
> > > +static int
> > > +hdmi_compute_config(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + unsigned int max_bpc = clamp_t(unsigned int,
> > > + state->max_bpc,
> > > + 8, connector->max_bpc);
> > > + unsigned int bpc;
> > > + int ret;
> > > +
> > > + for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> > > + drm_dbg(dev, "Trying with a %d bpc output\n", bpc);
> > > +
> > > + ret = hdmi_compute_format(connector, state, mode, bpc);
> >
> > Hmm. Actually I'm not sure your 4:2:2 stuff even works since you
> > check for bpc==12 in there and only call this based on the max_bpc.
> > I'm not convinced max_bpc would actually be 12 for a sink that
> > supports YCbCr 4:2:2 but not 12bpc RGB.
>
> It's another discussion we had in an earlier version, but yeah we lack
> the infrastructure to support those for now. I still believe it would
> require an increased max_bpc to select YUV422, otherwise things would be
> pretty inconsistent with other YUV formats.
Ideally I'd like to know the actual color depth of the panel
independently of the supported signal color depths. Unfortunately
I don't think EDID gives us that. Can't recall if DisplayID might
have something a bit more sensible.
Given how info->bpc works right now, I suppose it would make sense
to bump it up to 12 when 4:2:2 is supported. But I've not thought
through the actual implications such a change.
> But yeah, we need to provide a hook to report we don't support RGB >
> 8bpc for HDMI 1.4 devices. Which goes back to the previous question
> actually, I believe it would still provide value to support YUV422 on
> those devices, with something like:
>
> for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> if (!connector->hdmi->funcs->validate_config(mode, RGB, bpc))
> continue;
>
> // Select RGB with bpc
> ...
> }
>
> if (connector->hdmi->funcs->validate_config(mode, YUV) &&
> hdmi_try_format_bpc(..., mode, 12, YUV422) {
> // Select YUV422, 12 bpc
> ...
> }
>
> What do you think?
Since 8bpc RGB must always be supported this looks
like dead code to me.
--
Ville Syrjälä
Intel
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"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>,
"Hans Verkuil" <hverkuil@xs4all.nl>,
"Sebastian Wick" <sebastian.wick@redhat.com>,
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 v9 14/27] drm/connector: hdmi: Compute bpc and format automatically
Date: Mon, 18 Mar 2024 15:37:05 +0200 [thread overview]
Message-ID: <ZfhDgRcC6sdGmcmH@intel.com> (raw)
In-Reply-To: <20240318-organic-debonair-beetle-b2817b@houat>
On Mon, Mar 18, 2024 at 01:05:22PM +0100, Maxime Ripard wrote:
> Hi Ville,
>
> Thanks for your review !
>
> On Fri, Mar 15, 2024 at 10:05:16AM +0200, Ville Syrjälä wrote:
> > On Mon, Mar 11, 2024 at 03:49:42PM +0100, Maxime Ripard wrote:
> > > +static bool
> > > +sink_supports_format_bpc(const struct drm_connector *connector,
> > > + const struct drm_display_info *info,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int format, unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + u8 vic = drm_match_cea_mode(mode);
> > > +
> > > + if (vic == 1 && bpc != 8) {
> > > + drm_dbg(dev, "VIC1 requires a bpc of 8, got %u\n", bpc);
> >
> > Use of drm_dbg() for kms stuff is surprising.
> >
> > > + return false;
> > > + }
> >
> > I don't think we have this in i915. My original impression was that you
> > can use higher color depth if you can determine the sink capabilities,
> > but all sinks are required to accept 640x480@8bpc as a fallback.
> >
> > but CTA-861-H says:
> > "5.4 Color Coding & Quantization
> > Component Depth: The coding shall be N-bit, where N = 8, 10, 12, or 16
> > bits/component — except in the case of the default 640x480 Video Timing 1,
> > where the value of N shall be 8."
> >
> > So that does seem to imply that you're supposed to use exactly 8bpc.
> > Though the word "default" in there is confusing. Are they specifically
> > using that to indicate that this is about the fallback behaviour, or
> > is it just indicating that it is a "default mode that always has to
> > be supported". Dunno. I guess no real harm in forcing 8bpc for 640x480
> > since no one is likely to use that for any high fidelity stuff.
>
> My understanding was that CTA-861 mandates that 640x480@60Hz is
> supported, and mentions it being the default timing on a few occurences,
> like in section 4 - Video Formats and Waveform Timings that states "This
> section describes the default IT 640x480 Video Timing as well as all of
> the standard CE Video Timings.", or Section 6.2 - Describing Video
> Formats in EDID "The 640x480@60Hz flag, in the Established Timings area,
> shall always be set, since the 640x480p format is a mandatory default
> timing."
>
> So my understanding is that default here applies to the timing itself,
> and not the bpc, and is thus the second interpretation you suggested.
>
> I'll add a comment to make it clearer.
>
> > > +static int
> > > +hdmi_compute_format(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode,
> > > + unsigned int bpc)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_RGB)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_RGB;
> > > + return 0;
> > > + }
> > > +
> > > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_YUV422)) {
> > > + state->hdmi.output_format = HDMI_COLORSPACE_YUV422;
> > > + return 0;
> > > + }
> >
> > Looks like you're preferring YCbCr 4:2:2 over RGB 8bpc. Not sure
> > if that's a good tradeoff to make.
>
> Yeah, indeed. I guess it's a judgement call on whether we prioritise
> lowering the bpc over selecting YUV422, but I guess I can try all
> available RGB bpc before falling back to YUV422.
>
> > In i915 we don't currently expose 4:2:2 at all because it doesn't
> > help in getting a working display, and we have no uapi for the
> > user to force it if they really want 4:2:2 over RGB.
>
> I guess if the priority is given to lowering bpc, then it indeed doesn't
> make sense to support YUV422, since the limiting factor is likely to be
> the TMDS char rate and YUV422 12 bpc is equivalent to RGB 8bpc there.
>
> dw-hdmi on the other hand will always put YUV422 and YUV444 before RGB
> for a given bpc, which is weird to me:
> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c#L2696
>
> What is even weirder to me is that YUV422 is explicitly stated to be
> 12bpc only, so there's some invalid configurations there (8 and 10 bpc).
>
> And given that it's order by decreasing order of preference, I'm pretty
> sure it'll never actually pick any YUV or RGB > 8bpc format since RGB
> 8bpc is super likely to be always available and thus picked first.
8bpc RGB is in fact mandatory.
>
> If we want to converge, I think we should amend this code to support
> YUV420 for YUV420-only modes first, and then the RGB options like i915
> is doing. And then if someone is interested in more, we can always
> expand it to other formats.
>
> > > +
> > > + drm_dbg(dev, "Failed. No Format Supported for that bpc count.\n");
> > > +
> > > + return -EINVAL;
> > > +}
> > > +
> > > +static int
> > > +hdmi_compute_config(const struct drm_connector *connector,
> > > + struct drm_connector_state *state,
> > > + const struct drm_display_mode *mode)
> > > +{
> > > + struct drm_device *dev = connector->dev;
> > > + unsigned int max_bpc = clamp_t(unsigned int,
> > > + state->max_bpc,
> > > + 8, connector->max_bpc);
> > > + unsigned int bpc;
> > > + int ret;
> > > +
> > > + for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> > > + drm_dbg(dev, "Trying with a %d bpc output\n", bpc);
> > > +
> > > + ret = hdmi_compute_format(connector, state, mode, bpc);
> >
> > Hmm. Actually I'm not sure your 4:2:2 stuff even works since you
> > check for bpc==12 in there and only call this based on the max_bpc.
> > I'm not convinced max_bpc would actually be 12 for a sink that
> > supports YCbCr 4:2:2 but not 12bpc RGB.
>
> It's another discussion we had in an earlier version, but yeah we lack
> the infrastructure to support those for now. I still believe it would
> require an increased max_bpc to select YUV422, otherwise things would be
> pretty inconsistent with other YUV formats.
Ideally I'd like to know the actual color depth of the panel
independently of the supported signal color depths. Unfortunately
I don't think EDID gives us that. Can't recall if DisplayID might
have something a bit more sensible.
Given how info->bpc works right now, I suppose it would make sense
to bump it up to 12 when 4:2:2 is supported. But I've not thought
through the actual implications such a change.
> But yeah, we need to provide a hook to report we don't support RGB >
> 8bpc for HDMI 1.4 devices. Which goes back to the previous question
> actually, I believe it would still provide value to support YUV422 on
> those devices, with something like:
>
> for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
> if (!connector->hdmi->funcs->validate_config(mode, RGB, bpc))
> continue;
>
> // Select RGB with bpc
> ...
> }
>
> if (connector->hdmi->funcs->validate_config(mode, YUV) &&
> hdmi_try_format_bpc(..., mode, 12, YUV422) {
> // Select YUV422, 12 bpc
> ...
> }
>
> What do you think?
Since 8bpc RGB must always be supported this looks
like dead code to me.
--
Ville Syrjälä
Intel
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-03-18 13:37 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-11 14:49 [PATCH v9 00/27] drm/connector: Create HDMI Connector infrastructure Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 01/27] drm/connector: Introduce an HDMI connector initialization function Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-13 23:34 ` [v9,01/27] " Sui Jingfeng
2024-03-13 23:34 ` Sui Jingfeng
2024-03-13 23:34 ` Sui Jingfeng
2024-03-11 14:49 ` [PATCH v9 02/27] drm/tests: connector: Add tests for drmm_connector_hdmi_init Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 03/27] drm/connector: hdmi: Create an HDMI sub-state Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 04/27] drm/connector: hdmi: Add output BPC to the connector state Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 05/27] drm/tests: Add output bpc tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 06/27] drm/connector: hdmi: Add support for output format Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 07/27] drm/tests: Add output formats tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 08/27] drm/connector: hdmi: Add HDMI compute clock helper Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 09/27] drm/tests: Add HDMI TDMS character rate tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 10/27] drm/connector: hdmi: Calculate TMDS character rate Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 11/27] drm/tests: Add TDMS character rate connector state tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 12/27] drm/connector: hdmi: Add custom hook to filter TMDS character rate Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 13/27] drm/tests: Add HDMI connector rate filter hook tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 14/27] drm/connector: hdmi: Compute bpc and format automatically Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-15 8:05 ` Ville Syrjälä
2024-03-15 8:05 ` Ville Syrjälä
2024-03-15 8:05 ` Ville Syrjälä
2024-03-18 12:05 ` Maxime Ripard
2024-03-18 12:05 ` Maxime Ripard
2024-03-18 12:05 ` Maxime Ripard
2024-03-18 13:37 ` Ville Syrjälä [this message]
2024-03-18 13:37 ` Ville Syrjälä
2024-03-18 13:37 ` Ville Syrjälä
2024-03-11 14:49 ` [PATCH v9 15/27] drm/tests: Add HDMI connector bpc and format tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 16/27] drm/connector: hdmi: Add Broadcast RGB property Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 17/27] drm/tests: Add tests for " Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 18/27] drm/connector: hdmi: Add RGB Quantization Range to the connector state Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 19/27] drm/tests: Add RGB Quantization tests Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 20/27] drm/connector: hdmi: Add Infoframes generation Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-15 8:22 ` Ville Syrjälä
2024-03-15 8:22 ` Ville Syrjälä
2024-03-15 8:22 ` Ville Syrjälä
2024-03-18 13:49 ` Maxime Ripard
2024-03-18 13:49 ` Maxime Ripard
2024-03-18 13:49 ` Maxime Ripard
2024-03-18 16:11 ` Ville Syrjälä
2024-03-18 16:11 ` Ville Syrjälä
2024-03-18 16:11 ` Ville Syrjälä
2024-03-19 10:21 ` Maxime Ripard
2024-03-19 10:21 ` Maxime Ripard
2024-03-19 10:21 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 21/27] drm/tests: Add infoframes test Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 22/27] drm/connector: hdmi: Create Infoframe DebugFS entries Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 23/27] drm/vc4: hdmi: Switch to HDMI connector Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-13 23:54 ` [v9,23/27] " Sui Jingfeng
2024-03-13 23:54 ` Sui Jingfeng
2024-03-13 23:54 ` Sui Jingfeng
2024-03-11 14:49 ` [PATCH v9 24/27] drm/vc4: tests: Remove vc4_dummy_plane structure Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 25/27] drm/vc4: tests: Convert to plane creation helper Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 26/27] drm/rockchip: inno_hdmi: Switch to HDMI connector Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` [PATCH v9 27/27] drm/sun4i: hdmi: " Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
2024-03-11 14:49 ` Maxime Ripard
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=ZfhDgRcC6sdGmcmH@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--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=sebastian.wick@redhat.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.