Re: [PATCH] drm/radeon/kms: remove useless radeon_ddc_dump()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Alex, 

your reply confuses me:

> On Sat, Oct 29, 2011 at 8:55 AM, Thomas Reim <reimth@xxxxxxxxxxxxxx> wrote:
> > Dear Alex,
> >
> > but we use DDC probing e. g. to identify connectors with improperly
> > terminated i2c bus. Instead of flooding logs and terminals with EDID dumps,
> > we decided some months ago to use this function during module loading to
> > inform the user once (and only once!), which connector has a monitor
> > connected with valid EDID and which connector has not.
> 
> There's nothing in that function that actually prevents the printing
> of bad EDIDs.  

That's true. 

> All it does is call drm_get_edid() and report whether
> it found an EDID or not.  radeon_dvi_detect() already takes into
> account the requires_extended_probe flag. 

The extended probe flag will prevent the radeon driver from further
useless printing of bad EDIDs every ten seconds:

in radeon_connectors.c:
if (radeon_connector->ddc_bus)
                dret = radeon_ddc_probe(radeon_connector,
                                        radeon_connector->requires_extended_probe);
        if (dret) {
                if (radeon_connector->edid) {
                        kfree(radeon_connector->edid);
                        radeon_connector->edid = NULL;
                }
                radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);




But the now to be removed function radeon_ddc_dump() took care during
connector setup that at least one (!) dump was in the logs, accompagnied
by the info, that no monitor is connected, or there is a wrong/buggy
EDID. 

in radeon_display.c:
radeon_print_display_setup(dev);
                list_for_each_entry(drm_connector, &dev->mode_config.connector_list, head)
                        radeon_ddc_dump(drm_connector);


I cannot imagine why this should confuse users. Having retrieved and
configured connectors plus info plus EDID dump in case of problems
logged next to each other was perfect.

> The connectors are probed by
> the fb code for the console as well so it just adds to the module load
> time.  If we want to print what connectors are connected, it should be
> done from the fb code so we only have to do it once.
> 

I briefly checked the code, but couldn't find a promising connector
probing function in the fb code. Did you mean function
drm_fb_helper_probe_connector_modes?


> > Graphic solutions in general have several connectors integrated, and it's
> > sometimes really difficult to identify, which one of the does not work as
> > expected, based on the logs. From above log we see, that a monitor is
> > connected to DVI connector, nothing is connected to the VGA connector, and
> > we have a problem with the HDMI connector. Without this fuinction, nothing
> > helpful from radeon module would be in the logs.
> 
> We should print the connector name in the generic drm error code then
> if we want to print this info at boot time.

Is there a place that is not called every ten seconds?

> 
> >
> > Maybe we can keep this function, but call it only for connectors, for which
> > it works, i. e. not for DP, eDP and DP bridge connectors.
> 
> That's just as bad.  Users won't understand why only certain
> connectors are probed.
> 
> >
> > Best regards
> >
> > Thomas Reim
> >
> > Am Dienstag, den 25.10.2011, 19:24 -0400 schrieb alexdeucher@xxxxxxxxx:
> >
> > From: Alex Deucher <alexander.deucher@xxxxxxx>
> >
> > The function didn't work with DP, eDP, or DP bridge
> > connectors and thus confused users as it lead them to
> > believe nothing was connected or the EDID was invalid
> > when in fact is was, just on the aux bus rather an i2c.
> >
> > It should also speed up module loading as it avoids a
> > bunch of extra DDC probing.
> >
> > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
> > ---
> >  drivers/gpu/drm/radeon/radeon_display.c |   33
> > -------------------------------
> >  1 files changed, 0 insertions(+), 33 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/radeon/radeon_display.c
> > b/drivers/gpu/drm/radeon/radeon_display.c
> > index 6adb3e5..4998736 100644
> > --- a/drivers/gpu/drm/radeon/radeon_display.c
> > +++ b/drivers/gpu/drm/radeon/radeon_display.c
> > @@ -33,8 +33,6 @@
> >  #include "drm_crtc_helper.h"
> >  #include "drm_edid.h"
> >
> > -static int radeon_ddc_dump(struct drm_connector *connector);
> > -
> >  static void avivo_crtc_load_lut(struct drm_crtc *crtc)
> >  {
> >  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
> > @@ -669,7 +667,6 @@ static void radeon_print_display_setup(struct drm_device
> > *dev)
> >  static bool radeon_setup_enc_conn(struct drm_device *dev)
> >  {
> >  	struct radeon_device *rdev = dev->dev_private;
> > -	struct drm_connector *drm_connector;
> >  	bool ret = false;
> >
> >  	if (rdev->bios) {
> > @@ -689,8 +686,6 @@ static bool radeon_setup_enc_conn(struct drm_device
> > *dev)
> >  	if (ret) {
> >  		radeon_setup_encoder_clones(dev);
> >  		radeon_print_display_setup(dev);
> > -		list_for_each_entry(drm_connector, &dev->mode_config.connector_list,
> > head)
> > -			radeon_ddc_dump(drm_connector);
> >  	}
> >
> >  	return ret;
> > @@ -743,34 +738,6 @@ int radeon_ddc_get_modes(struct radeon_connector
> > *radeon_connector)
> >  	return 0;
> >  }
> >
> > -static int radeon_ddc_dump(struct drm_connector *connector)
> > -{
> > -	struct edid *edid;
> > -	struct radeon_connector *radeon_connector =
> > to_radeon_connector(connector);
> > -	int ret = 0;
> > -
> > -	/* on hw with routers, select right port */
> > -	if (radeon_connector->router.ddc_valid)
> > -		radeon_router_select_ddc_port(radeon_connector);
> > -
> > -	if (!radeon_connector->ddc_bus)
> > -		return -1;
> > -	edid = drm_get_edid(connector, &radeon_connector->ddc_bus->adapter);
> > -	/* Log EDID retrieval status here. In particular with regard to
> > -	 * connectors with requires_extended_probe flag set, that will prevent
> > -	 * function radeon_dvi_detect() to fetch EDID on this connector,
> > -	 * as long as there is no valid EDID header found */
> > -	if (edid) {
> > -		DRM_INFO("Radeon display connector %s: Found valid EDID",
> > -				drm_get_connector_name(connector));
> > -		kfree(edid);
> > -	} else {
> > -		DRM_INFO("Radeon display connector %s: No monitor connected or invalid
> > EDID",
> > -				drm_get_connector_name(connector));
> > -	}
> > -	return ret;
> > -}
> > -
> >  /* avivo */
> >  static void avivo_get_fb_div(struct radeon_pll *pll,
> >  			     u32 target_clock,
> >
> >

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux