* [PATCH] drm/i915/hdmi: Fix weak connector detection
@ 2016-03-31 20:55 Ezequiel Garcia
2016-04-01 9:07 ` ✓ Fi.CI.BAT: success for " Patchwork
2016-04-01 14:47 ` [PATCH] " Ville Syrjälä
0 siblings, 2 replies; 8+ messages in thread
From: Ezequiel Garcia @ 2016-03-31 20:55 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: Daniel Vetter, Ezequiel Garcia
Currently, our implementation of drm_connector_funcs.detect is
based on getting a valid EDID.
This requirement makes the driver fail to detect connected
connectors in case of EDID corruption, which prevents from falling
back to modes provided by builtin or user-provided EDIDs.
Let's fix this by improving the detection, with a DDC probe,
if the current EDID-based detection failed.
Note that a better way of dealing with this could calling
drm_probe_ddc in drm_connector_funcs.detect, and do the
EDID full reading and parsing in drm_connector_helper_funcs.get_modes,
when it's actually needed.
However, this would be more invasive and thus more error-prone.
The current commit is an attempt to get some uninvasive fix,
and allow for easier backporting.
Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
---
drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index a0d8daed2470..c079206e6681 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1428,6 +1428,20 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
} else
status = connector_status_disconnected;
+ /*
+ * The above call to intel_hdmi_set_edid() checked for a valid EDID.
+ * However, the EDID can get corrupted for several reasons, resulting
+ * in a disconnected status despite the connector being connected.
+ * Hence, let's try one more time, by only probing the DDC.
+ *
+ * This allows the DRM core to fallback to builtin or user-provided
+ * EDID firmware, e.g. in drm_helper_probe_single_connector_modes.
+ */
+ if (status == connector_status_disconnected)
+ if (drm_probe_ddc(intel_gmbus_get_adapter(dev_priv,
+ intel_hdmi->ddc_bus)))
+ status = connector_status_connected;
+
intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
return status;
--
2.7.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915/hdmi: Fix weak connector detection
2016-03-31 20:55 [PATCH] drm/i915/hdmi: Fix weak connector detection Ezequiel Garcia
@ 2016-04-01 9:07 ` Patchwork
2016-04-01 14:47 ` [PATCH] " Ville Syrjälä
1 sibling, 0 replies; 8+ messages in thread
From: Patchwork @ 2016-04-01 9:07 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/hdmi: Fix weak connector detection
URL : https://patchwork.freedesktop.org/series/5151/
State : success
== Summary ==
Series 5151v1 drm/i915/hdmi: Fix weak connector detection
http://patchwork.freedesktop.org/api/1.0/series/5151/revisions/1/mbox/
Test drv_module_reload_basic:
skip -> PASS (skl-nuci5)
bdw-nuci7 total:196 pass:184 dwarn:0 dfail:0 fail:0 skip:12
bdw-ultra total:196 pass:175 dwarn:0 dfail:0 fail:0 skip:21
bsw-nuc-2 total:196 pass:159 dwarn:0 dfail:0 fail:0 skip:37
byt-nuc total:196 pass:161 dwarn:0 dfail:0 fail:0 skip:35
hsw-brixbox total:196 pass:174 dwarn:0 dfail:0 fail:0 skip:22
skl-i7k-2 total:196 pass:173 dwarn:0 dfail:0 fail:0 skip:23
skl-nuci5 total:196 pass:185 dwarn:0 dfail:0 fail:0 skip:11
snb-dellxps total:40 pass:28 dwarn:0 dfail:0 fail:0 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_1770/
e8d1e8123ef907fc23b53554af9cb99c7f380fb9 drm-intel-nightly: 2016y-04m-01d-07h-26m-00s UTC integration manifest
7e9e86b488dbca2c55fa4844a4b46da4d93e3fa5 drm/i915/hdmi: Fix weak connector detection
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-03-31 20:55 [PATCH] drm/i915/hdmi: Fix weak connector detection Ezequiel Garcia
2016-04-01 9:07 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2016-04-01 14:47 ` Ville Syrjälä
2016-04-01 15:38 ` Ezequiel Garcia
1 sibling, 1 reply; 8+ messages in thread
From: Ville Syrjälä @ 2016-04-01 14:47 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Daniel Vetter, intel-gfx, dri-devel
On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
> Currently, our implementation of drm_connector_funcs.detect is
> based on getting a valid EDID.
>
> This requirement makes the driver fail to detect connected
> connectors in case of EDID corruption, which prevents from falling
> back to modes provided by builtin or user-provided EDIDs.
So why are you getting corrupted EDIDs?
>
> Let's fix this by improving the detection, with a DDC probe,
> if the current EDID-based detection failed.
>
> Note that a better way of dealing with this could calling
> drm_probe_ddc in drm_connector_funcs.detect, and do the
> EDID full reading and parsing in drm_connector_helper_funcs.get_modes,
> when it's actually needed.
>
> However, this would be more invasive and thus more error-prone.
> The current commit is an attempt to get some uninvasive fix,
> and allow for easier backporting.
>
> Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> ---
> drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index a0d8daed2470..c079206e6681 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1428,6 +1428,20 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
> } else
> status = connector_status_disconnected;
>
> + /*
> + * The above call to intel_hdmi_set_edid() checked for a valid EDID.
> + * However, the EDID can get corrupted for several reasons, resulting
> + * in a disconnected status despite the connector being connected.
> + * Hence, let's try one more time, by only probing the DDC.
> + *
> + * This allows the DRM core to fallback to builtin or user-provided
> + * EDID firmware, e.g. in drm_helper_probe_single_connector_modes.
> + */
> + if (status == connector_status_disconnected)
> + if (drm_probe_ddc(intel_gmbus_get_adapter(dev_priv,
> + intel_hdmi->ddc_bus)))
> + status = connector_status_connected;
> +
> intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
>
> return status;
> --
> 2.7.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-04-01 14:47 ` [PATCH] " Ville Syrjälä
@ 2016-04-01 15:38 ` Ezequiel Garcia
2016-04-01 15:46 ` Ville Syrjälä
0 siblings, 1 reply; 8+ messages in thread
From: Ezequiel Garcia @ 2016-04-01 15:38 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx, dri-devel
[-- Attachment #1.1: Type: text/plain, Size: 2785 bytes --]
El abr. 1, 2016 11:47 AM, "Ville Syrjälä" <ville.syrjala@linux.intel.com>
escribió:
>
> On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
> > Currently, our implementation of drm_connector_funcs.detect is
> > based on getting a valid EDID.
> >
> > This requirement makes the driver fail to detect connected
> > connectors in case of EDID corruption, which prevents from falling
> > back to modes provided by builtin or user-provided EDIDs.
>
> So why are you getting corrupted EDIDs?
>
Does it matter?
> >
> > Let's fix this by improving the detection, with a DDC probe,
> > if the current EDID-based detection failed.
> >
> > Note that a better way of dealing with this could calling
> > drm_probe_ddc in drm_connector_funcs.detect, and do the
> > EDID full reading and parsing in drm_connector_helper_funcs.get_modes,
> > when it's actually needed.
> >
> > However, this would be more invasive and thus more error-prone.
> > The current commit is an attempt to get some uninvasive fix,
> > and allow for easier backporting.
> >
> > Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> > ---
> > drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++++++++
> > 1 file changed, 14 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
b/drivers/gpu/drm/i915/intel_hdmi.c
> > index a0d8daed2470..c079206e6681 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -1428,6 +1428,20 @@ intel_hdmi_detect(struct drm_connector
*connector, bool force)
> > } else
> > status = connector_status_disconnected;
> >
> > + /*
> > + * The above call to intel_hdmi_set_edid() checked for a valid
EDID.
> > + * However, the EDID can get corrupted for several reasons,
resulting
> > + * in a disconnected status despite the connector being connected.
> > + * Hence, let's try one more time, by only probing the DDC.
> > + *
> > + * This allows the DRM core to fallback to builtin or
user-provided
> > + * EDID firmware, e.g. in drm_helper_probe_single_connector_modes.
> > + */
> > + if (status == connector_status_disconnected)
> > + if (drm_probe_ddc(intel_gmbus_get_adapter(dev_priv,
> > + intel_hdmi->ddc_bus)))
> > + status = connector_status_connected;
> > +
> > intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
> >
> > return status;
> > --
> > 2.7.0
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Ville Syrjälä
> Intel OTC
[-- Attachment #1.2: Type: text/html, Size: 3813 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-04-01 15:38 ` Ezequiel Garcia
@ 2016-04-01 15:46 ` Ville Syrjälä
2016-04-01 19:50 ` Ezequiel Garcia
0 siblings, 1 reply; 8+ messages in thread
From: Ville Syrjälä @ 2016-04-01 15:46 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Daniel Vetter, intel-gfx, dri-devel
On Fri, Apr 01, 2016 at 12:38:11PM -0300, Ezequiel Garcia wrote:
> El abr. 1, 2016 11:47 AM, "Ville Syrjälä" <ville.syrjala@linux.intel.com>
> escribió:
> >
> > On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
> > > Currently, our implementation of drm_connector_funcs.detect is
> > > based on getting a valid EDID.
> > >
> > > This requirement makes the driver fail to detect connected
> > > connectors in case of EDID corruption, which prevents from falling
> > > back to modes provided by builtin or user-provided EDIDs.
> >
> > So why are you getting corrupted EDIDs?
> >
>
> Does it matter?
Yes. We should fix the real cause (if possible) instead of adding
more duct tape.
>
> > >
> > > Let's fix this by improving the detection, with a DDC probe,
> > > if the current EDID-based detection failed.
> > >
> > > Note that a better way of dealing with this could calling
> > > drm_probe_ddc in drm_connector_funcs.detect, and do the
> > > EDID full reading and parsing in drm_connector_helper_funcs.get_modes,
> > > when it's actually needed.
> > >
> > > However, this would be more invasive and thus more error-prone.
> > > The current commit is an attempt to get some uninvasive fix,
> > > and allow for easier backporting.
> > >
> > > Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> > > ---
> > > drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++++++++
> > > 1 file changed, 14 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> > > index a0d8daed2470..c079206e6681 100644
> > > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > > @@ -1428,6 +1428,20 @@ intel_hdmi_detect(struct drm_connector
> *connector, bool force)
> > > } else
> > > status = connector_status_disconnected;
> > >
> > > + /*
> > > + * The above call to intel_hdmi_set_edid() checked for a valid
> EDID.
> > > + * However, the EDID can get corrupted for several reasons,
> resulting
> > > + * in a disconnected status despite the connector being connected.
> > > + * Hence, let's try one more time, by only probing the DDC.
> > > + *
> > > + * This allows the DRM core to fallback to builtin or
> user-provided
> > > + * EDID firmware, e.g. in drm_helper_probe_single_connector_modes.
> > > + */
> > > + if (status == connector_status_disconnected)
> > > + if (drm_probe_ddc(intel_gmbus_get_adapter(dev_priv,
> > > + intel_hdmi->ddc_bus)))
> > > + status = connector_status_connected;
> > > +
> > > intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
> > >
> > > return status;
> > > --
> > > 2.7.0
> > >
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> > --
> > Ville Syrjälä
> > Intel OTC
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-04-01 15:46 ` Ville Syrjälä
@ 2016-04-01 19:50 ` Ezequiel Garcia
2016-04-05 14:54 ` Ezequiel Garcia
0 siblings, 1 reply; 8+ messages in thread
From: Ezequiel Garcia @ 2016-04-01 19:50 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx, dri-devel
On 01 Apr 06:46 PM, Ville Syrjälä wrote:
> On Fri, Apr 01, 2016 at 12:38:11PM -0300, Ezequiel Garcia wrote:
> > El abr. 1, 2016 11:47 AM, "Ville Syrjälä" <ville.syrjala@linux.intel.com>
> > escribió:
> > >
> > > On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
> > > > Currently, our implementation of drm_connector_funcs.detect is
> > > > based on getting a valid EDID.
> > > >
> > > > This requirement makes the driver fail to detect connected
> > > > connectors in case of EDID corruption, which prevents from falling
> > > > back to modes provided by builtin or user-provided EDIDs.
> > >
> > > So why are you getting corrupted EDIDs?
> > >
> >
> > Does it matter?
>
> Yes. We should fix the real cause (if possible) instead of adding
> more duct tape.
>
So, there are two things involved in this patch:
1.
There are several reasons why EDID can get screwed, this is
documented at length [1], and it's the motivation for
CONFIG_DRM_LOAD_EDID_FIRMWARE to exist.
You can find lots of reports on the internet of people getting
corrupt EDID from their monitors. For instance, here's one [2].
And even if no firmware is provided using CONFIG_DRM_LOAD_EDID_FIRMWARE,
the DRM core will provide a 1024x768 fallback mode:
int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
uint32_t maxX, uint32_t maxY)
{
[..]
if (count == 0 && connector->status == connector_status_connected)
count = drm_add_modes_noedid(connector, 1024, 768);
But, this only works if the connector is detected.
Since I'm interested in backporting this patch to apply it on the kernels
I maintain (which are currently deployed on hundreds of machines), I tried
to find a simple solution. Hence, this patch.
There's no issue to fix here, because broken hardware is a fact of life,
and not something we can fix or ignore [3].
2.
On the other side, the i915 implementation looks suspicious. IMHO,
drm_connector_funcs.detect should not try to read a valid EDID,
and just try to detect if the connector is connected or disconnected.
The EDID can be read in drm_connector_helper_funcs.get_modes, as other
drm/connector drivers are doing (tda998x, tfp410, tegra).
However, I think it's safer to get a simple fix now, and do this
as follow-up patches.
How does it sound?
[1] Documentation/EDID/HOWTO.txt
[2] http://www.blaicher.com/2012/06/howto-fixing-a-broken-edid-eeprom-with-a-bus-pirate-v4/
[3] https://marc.info/?l=linux-kernel&m=112838038415265&w=4
--
Ezequiel Garcia, VanguardiaSur
www.vanguardiasur.com.ar
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-04-01 19:50 ` Ezequiel Garcia
@ 2016-04-05 14:54 ` Ezequiel Garcia
2016-04-14 5:11 ` Ezequiel Garcia
0 siblings, 1 reply; 8+ messages in thread
From: Ezequiel Garcia @ 2016-04-05 14:54 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Daniel Vetter, intel-gfx, dri-devel
(Adding Jani again, who got dropped for some reason)
On 1 April 2016 at 16:50, Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> wrote:
> On 01 Apr 06:46 PM, Ville Syrjälä wrote:
>> On Fri, Apr 01, 2016 at 12:38:11PM -0300, Ezequiel Garcia wrote:
>> > El abr. 1, 2016 11:47 AM, "Ville Syrjälä" <ville.syrjala@linux.intel.com>
>> > escribió:
>> > >
>> > > On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
>> > > > Currently, our implementation of drm_connector_funcs.detect is
>> > > > based on getting a valid EDID.
>> > > >
>> > > > This requirement makes the driver fail to detect connected
>> > > > connectors in case of EDID corruption, which prevents from falling
>> > > > back to modes provided by builtin or user-provided EDIDs.
>> > >
>> > > So why are you getting corrupted EDIDs?
>> > >
>> >
>> > Does it matter?
>>
>> Yes. We should fix the real cause (if possible) instead of adding
>> more duct tape.
>>
>
> So, there are two things involved in this patch:
>
> 1.
> There are several reasons why EDID can get screwed, this is
> documented at length [1], and it's the motivation for
> CONFIG_DRM_LOAD_EDID_FIRMWARE to exist.
>
> You can find lots of reports on the internet of people getting
> corrupt EDID from their monitors. For instance, here's one [2].
>
> And even if no firmware is provided using CONFIG_DRM_LOAD_EDID_FIRMWARE,
> the DRM core will provide a 1024x768 fallback mode:
>
> int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
> uint32_t maxX, uint32_t maxY)
> {
> [..]
> if (count == 0 && connector->status == connector_status_connected)
> count = drm_add_modes_noedid(connector, 1024, 768);
>
> But, this only works if the connector is detected.
>
> Since I'm interested in backporting this patch to apply it on the kernels
> I maintain (which are currently deployed on hundreds of machines), I tried
> to find a simple solution. Hence, this patch.
>
> There's no issue to fix here, because broken hardware is a fact of life,
> and not something we can fix or ignore [3].
>
> 2.
> On the other side, the i915 implementation looks suspicious. IMHO,
> drm_connector_funcs.detect should not try to read a valid EDID,
> and just try to detect if the connector is connected or disconnected.
>
> The EDID can be read in drm_connector_helper_funcs.get_modes, as other
> drm/connector drivers are doing (tda998x, tfp410, tegra).
>
> However, I think it's safer to get a simple fix now, and do this
> as follow-up patches.
>
> How does it sound?
>
> [1] Documentation/EDID/HOWTO.txt
> [2] http://www.blaicher.com/2012/06/howto-fixing-a-broken-edid-eeprom-with-a-bus-pirate-v4/
> [3] https://marc.info/?l=linux-kernel&m=112838038415265&w=4
> --
> Ezequiel Garcia, VanguardiaSur
> www.vanguardiasur.com.ar
--
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915/hdmi: Fix weak connector detection
2016-04-05 14:54 ` Ezequiel Garcia
@ 2016-04-14 5:11 ` Ezequiel Garcia
0 siblings, 0 replies; 8+ messages in thread
From: Ezequiel Garcia @ 2016-04-14 5:11 UTC (permalink / raw)
To: Ville Syrjälä, Jani Nikula, Daniel Vetter; +Cc: intel-gfx, dri-devel
On 5 April 2016 at 11:54, Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> wrote:
> (Adding Jani again, who got dropped for some reason)
>
> On 1 April 2016 at 16:50, Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> wrote:
>> On 01 Apr 06:46 PM, Ville Syrjälä wrote:
>>> On Fri, Apr 01, 2016 at 12:38:11PM -0300, Ezequiel Garcia wrote:
>>> > El abr. 1, 2016 11:47 AM, "Ville Syrjälä" <ville.syrjala@linux.intel.com>
>>> > escribió:
>>> > >
>>> > > On Thu, Mar 31, 2016 at 05:55:03PM -0300, Ezequiel Garcia wrote:
>>> > > > Currently, our implementation of drm_connector_funcs.detect is
>>> > > > based on getting a valid EDID.
>>> > > >
>>> > > > This requirement makes the driver fail to detect connected
>>> > > > connectors in case of EDID corruption, which prevents from falling
>>> > > > back to modes provided by builtin or user-provided EDIDs.
>>> > >
>>> > > So why are you getting corrupted EDIDs?
>>> > >
>>> >
>>> > Does it matter?
>>>
>>> Yes. We should fix the real cause (if possible) instead of adding
>>> more duct tape.
>>>
>>
>> So, there are two things involved in this patch:
>>
>> 1.
>> There are several reasons why EDID can get screwed, this is
>> documented at length [1], and it's the motivation for
>> CONFIG_DRM_LOAD_EDID_FIRMWARE to exist.
>>
>> You can find lots of reports on the internet of people getting
>> corrupt EDID from their monitors. For instance, here's one [2].
>>
>> And even if no firmware is provided using CONFIG_DRM_LOAD_EDID_FIRMWARE,
>> the DRM core will provide a 1024x768 fallback mode:
>>
>> int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
>> uint32_t maxX, uint32_t maxY)
>> {
>> [..]
>> if (count == 0 && connector->status == connector_status_connected)
>> count = drm_add_modes_noedid(connector, 1024, 768);
>>
>> But, this only works if the connector is detected.
>>
>> Since I'm interested in backporting this patch to apply it on the kernels
>> I maintain (which are currently deployed on hundreds of machines), I tried
>> to find a simple solution. Hence, this patch.
>>
>> There's no issue to fix here, because broken hardware is a fact of life,
>> and not something we can fix or ignore [3].
>>
>> 2.
>> On the other side, the i915 implementation looks suspicious. IMHO,
>> drm_connector_funcs.detect should not try to read a valid EDID,
>> and just try to detect if the connector is connected or disconnected.
>>
>> The EDID can be read in drm_connector_helper_funcs.get_modes, as other
>> drm/connector drivers are doing (tda998x, tfp410, tegra).
>>
>> However, I think it's safer to get a simple fix now, and do this
>> as follow-up patches.
>>
>> How does it sound?
>>
Are there any other comments regarding this patch?
If at all possible, I'd like to see this merged, or otherwise
a proposal for an alternative solution.
>> [1] Documentation/EDID/HOWTO.txt
>> [2] http://www.blaicher.com/2012/06/howto-fixing-a-broken-edid-eeprom-with-a-bus-pirate-v4/
>> [3] https://marc.info/?l=linux-kernel&m=112838038415265&w=4
Thanks,
--
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-04-14 5:11 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-31 20:55 [PATCH] drm/i915/hdmi: Fix weak connector detection Ezequiel Garcia
2016-04-01 9:07 ` ✓ Fi.CI.BAT: success for " Patchwork
2016-04-01 14:47 ` [PATCH] " Ville Syrjälä
2016-04-01 15:38 ` Ezequiel Garcia
2016-04-01 15:46 ` Ville Syrjälä
2016-04-01 19:50 ` Ezequiel Garcia
2016-04-05 14:54 ` Ezequiel Garcia
2016-04-14 5:11 ` Ezequiel Garcia
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.