diff mbox

[6/8] drm/nouveau: Use drm_for_each_connector_encoder_ids()

Message ID 20180626174714.32012-7-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä June 26, 2018, 5:47 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Use drm_for_each_connector_encoder_ids() for iterating
connector->encoder_ids[]. A bit more convenient not having
to deal with the implementation details.

Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: nouveau@lists.freedesktop.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/nouveau/nouveau_connector.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

Comments

kernel test robot June 26, 2018, 8:55 p.m. UTC | #1
Hi Ville,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on v4.18-rc2 next-20180626]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Ville-Syrjala/drm-Second-attempt-at-fixing-the-fb-helper-best_encoder-mess/20180627-024018
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
config: x86_64-randconfig-x012-201825 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/gpu//drm/nouveau/nouveau_connector.c: In function 'nouveau_connector_detect':
>> drivers/gpu//drm/nouveau/nouveau_connector.c:606:33: warning: 'nv_encoder' may be used uninitialized in this function [-Wmaybe-uninitialized]
      if (nv_partner && ((nv_encoder->dcb->type == DCB_OUTPUT_ANALOG &&
                          ~~~~~~~~~~^~~~~

vim +/nv_encoder +606 drivers/gpu//drm/nouveau/nouveau_connector.c

6ee73861 Ben Skeggs        2009-12-11  546  
6ee73861 Ben Skeggs        2009-12-11  547  static enum drm_connector_status
930a9e28 Chris Wilson      2010-09-14  548  nouveau_connector_detect(struct drm_connector *connector, bool force)
6ee73861 Ben Skeggs        2009-12-11  549  {
6ee73861 Ben Skeggs        2009-12-11  550  	struct drm_device *dev = connector->dev;
77145f1c Ben Skeggs        2012-07-31  551  	struct nouveau_drm *drm = nouveau_drm(dev);
6ee73861 Ben Skeggs        2009-12-11  552  	struct nouveau_connector *nv_connector = nouveau_connector(connector);
6ee73861 Ben Skeggs        2009-12-11  553  	struct nouveau_encoder *nv_encoder = NULL;
e19b20bb Ben Skeggs        2011-07-12  554  	struct nouveau_encoder *nv_partner;
2aa5eac5 Ben Skeggs        2015-08-20  555  	struct i2c_adapter *i2c;
03cd06ca Francisco Jerez   2010-07-20  556  	int type;
5addcf0a Dave Airlie       2012-09-10  557  	int ret;
5addcf0a Dave Airlie       2012-09-10  558  	enum drm_connector_status conn_status = connector_status_disconnected;
6ee73861 Ben Skeggs        2009-12-11  559  
b8780e2a Francisco Jerez   2010-01-14  560  	/* Cleanup the previous EDID block. */
b8780e2a Francisco Jerez   2010-01-14  561  	if (nv_connector->edid) {
b8780e2a Francisco Jerez   2010-01-14  562  		drm_mode_connector_update_edid_property(connector, NULL);
c8ebe275 Xavier Chantry    2010-01-11  563  		kfree(nv_connector->edid);
c8ebe275 Xavier Chantry    2010-01-11  564  		nv_connector->edid = NULL;
b8780e2a Francisco Jerez   2010-01-14  565  	}
c8ebe275 Xavier Chantry    2010-01-11  566  
d61a5c10 Lukas Wunner      2018-02-11  567  	/* Outputs are only polled while runtime active, so acquiring a
d61a5c10 Lukas Wunner      2018-02-11  568  	 * runtime PM ref here is unnecessary (and would deadlock upon
d61a5c10 Lukas Wunner      2018-02-11  569  	 * runtime suspend because it waits for polling to finish).
d61a5c10 Lukas Wunner      2018-02-11  570  	 */
d61a5c10 Lukas Wunner      2018-02-11  571  	if (!drm_kms_helper_is_poll_worker()) {
5addcf0a Dave Airlie       2012-09-10  572  		ret = pm_runtime_get_sync(connector->dev->dev);
b6c4285a Alexandre Courbot 2014-02-12  573  		if (ret < 0 && ret != -EACCES)
5addcf0a Dave Airlie       2012-09-10  574  			return conn_status;
d61a5c10 Lukas Wunner      2018-02-11  575  	}
5addcf0a Dave Airlie       2012-09-10  576  
8777c5c1 Ben Skeggs        2014-06-06  577  	nv_encoder = nouveau_connector_ddc_detect(connector);
8777c5c1 Ben Skeggs        2014-06-06  578  	if (nv_encoder && (i2c = nv_encoder->i2c) != NULL) {
39c1c901 Lukas Wunner      2016-01-11  579  		if ((vga_switcheroo_handler_flags() &
39c1c901 Lukas Wunner      2016-01-11  580  		     VGA_SWITCHEROO_CAN_SWITCH_DDC) &&
39c1c901 Lukas Wunner      2016-01-11  581  		    nv_connector->type == DCB_CONNECTOR_LVDS)
39c1c901 Lukas Wunner      2016-01-11  582  			nv_connector->edid = drm_get_edid_switcheroo(connector,
39c1c901 Lukas Wunner      2016-01-11  583  								     i2c);
39c1c901 Lukas Wunner      2016-01-11  584  		else
2aa5eac5 Ben Skeggs        2015-08-20  585  			nv_connector->edid = drm_get_edid(connector, i2c);
39c1c901 Lukas Wunner      2016-01-11  586  
6ee73861 Ben Skeggs        2009-12-11  587  		drm_mode_connector_update_edid_property(connector,
6ee73861 Ben Skeggs        2009-12-11  588  							nv_connector->edid);
6ee73861 Ben Skeggs        2009-12-11  589  		if (!nv_connector->edid) {
77145f1c Ben Skeggs        2012-07-31  590  			NV_ERROR(drm, "DDC responded, but no EDID for %s\n",
8c6c361a Jani Nikula       2014-06-03  591  				 connector->name);
0ed3165e Francisco Jerez   2010-01-14  592  			goto detect_analog;
6ee73861 Ben Skeggs        2009-12-11  593  		}
6ee73861 Ben Skeggs        2009-12-11  594  
6ee73861 Ben Skeggs        2009-12-11  595  		/* Override encoder type for DVI-I based on whether EDID
6ee73861 Ben Skeggs        2009-12-11  596  		 * says the display is digital or analog, both use the
6ee73861 Ben Skeggs        2009-12-11  597  		 * same i2c channel so the value returned from ddc_detect
6ee73861 Ben Skeggs        2009-12-11  598  		 * isn't necessarily correct.
6ee73861 Ben Skeggs        2009-12-11  599  		 */
e19b20bb Ben Skeggs        2011-07-12  600  		nv_partner = NULL;
cb75d97e Ben Skeggs        2012-07-11  601  		if (nv_encoder->dcb->type == DCB_OUTPUT_TMDS)
cb75d97e Ben Skeggs        2012-07-11  602  			nv_partner = find_encoder(connector, DCB_OUTPUT_ANALOG);
cb75d97e Ben Skeggs        2012-07-11  603  		if (nv_encoder->dcb->type == DCB_OUTPUT_ANALOG)
cb75d97e Ben Skeggs        2012-07-11  604  			nv_partner = find_encoder(connector, DCB_OUTPUT_TMDS);
cb75d97e Ben Skeggs        2012-07-11  605  
cb75d97e Ben Skeggs        2012-07-11 @606  		if (nv_partner && ((nv_encoder->dcb->type == DCB_OUTPUT_ANALOG &&
cb75d97e Ben Skeggs        2012-07-11  607  				    nv_partner->dcb->type == DCB_OUTPUT_TMDS) ||
cb75d97e Ben Skeggs        2012-07-11  608  				   (nv_encoder->dcb->type == DCB_OUTPUT_TMDS &&
cb75d97e Ben Skeggs        2012-07-11  609  				    nv_partner->dcb->type == DCB_OUTPUT_ANALOG))) {
6ee73861 Ben Skeggs        2009-12-11  610  			if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL)
cb75d97e Ben Skeggs        2012-07-11  611  				type = DCB_OUTPUT_TMDS;
6ee73861 Ben Skeggs        2009-12-11  612  			else
cb75d97e Ben Skeggs        2012-07-11  613  				type = DCB_OUTPUT_ANALOG;
6ee73861 Ben Skeggs        2009-12-11  614  
e19b20bb Ben Skeggs        2011-07-12  615  			nv_encoder = find_encoder(connector, type);
6ee73861 Ben Skeggs        2009-12-11  616  		}
6ee73861 Ben Skeggs        2009-12-11  617  
6ee73861 Ben Skeggs        2009-12-11  618  		nouveau_connector_set_encoder(connector, nv_encoder);
5addcf0a Dave Airlie       2012-09-10  619  		conn_status = connector_status_connected;
5addcf0a Dave Airlie       2012-09-10  620  		goto out;
6ee73861 Ben Skeggs        2009-12-11  621  	}
6ee73861 Ben Skeggs        2009-12-11  622  
c16c5707 Francisco Jerez   2010-09-09  623  	nv_encoder = nouveau_connector_of_detect(connector);
c16c5707 Francisco Jerez   2010-09-09  624  	if (nv_encoder) {
c16c5707 Francisco Jerez   2010-09-09  625  		nouveau_connector_set_encoder(connector, nv_encoder);
5addcf0a Dave Airlie       2012-09-10  626  		conn_status = connector_status_connected;
5addcf0a Dave Airlie       2012-09-10  627  		goto out;
c16c5707 Francisco Jerez   2010-09-09  628  	}
c16c5707 Francisco Jerez   2010-09-09  629  
0ed3165e Francisco Jerez   2010-01-14  630  detect_analog:
cb75d97e Ben Skeggs        2012-07-11  631  	nv_encoder = find_encoder(connector, DCB_OUTPUT_ANALOG);
f4053509 Ben Skeggs        2010-03-15  632  	if (!nv_encoder && !nouveau_tv_disable)
cb75d97e Ben Skeggs        2012-07-11  633  		nv_encoder = find_encoder(connector, DCB_OUTPUT_TV);
84b8081c Francisco Jerez   2010-10-26  634  	if (nv_encoder && force) {
6ee73861 Ben Skeggs        2009-12-11  635  		struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
d58ded76 Jani Nikula       2015-03-11  636  		const struct drm_encoder_helper_funcs *helper =
6ee73861 Ben Skeggs        2009-12-11  637  						encoder->helper_private;
6ee73861 Ben Skeggs        2009-12-11  638  
6ee73861 Ben Skeggs        2009-12-11  639  		if (helper->detect(encoder, connector) ==
6ee73861 Ben Skeggs        2009-12-11  640  						connector_status_connected) {
6ee73861 Ben Skeggs        2009-12-11  641  			nouveau_connector_set_encoder(connector, nv_encoder);
5addcf0a Dave Airlie       2012-09-10  642  			conn_status = connector_status_connected;
5addcf0a Dave Airlie       2012-09-10  643  			goto out;
6ee73861 Ben Skeggs        2009-12-11  644  		}
6ee73861 Ben Skeggs        2009-12-11  645  
6ee73861 Ben Skeggs        2009-12-11  646  	}
6ee73861 Ben Skeggs        2009-12-11  647  
5addcf0a Dave Airlie       2012-09-10  648   out:
5addcf0a Dave Airlie       2012-09-10  649  
d61a5c10 Lukas Wunner      2018-02-11  650  	if (!drm_kms_helper_is_poll_worker()) {
5addcf0a Dave Airlie       2012-09-10  651  		pm_runtime_mark_last_busy(connector->dev->dev);
5addcf0a Dave Airlie       2012-09-10  652  		pm_runtime_put_autosuspend(connector->dev->dev);
d61a5c10 Lukas Wunner      2018-02-11  653  	}
5addcf0a Dave Airlie       2012-09-10  654  
5addcf0a Dave Airlie       2012-09-10  655  	return conn_status;
6ee73861 Ben Skeggs        2009-12-11  656  }
6ee73861 Ben Skeggs        2009-12-11  657  

:::::: The code at line 606 was first introduced by commit
:::::: cb75d97e9c77743ecfcc43375be135a55a4d9b25 drm/nouveau: implement devinit subdev, and new init table parser

:::::: TO: Ben Skeggs <bskeggs@redhat.com>
:::::: CC: Ben Skeggs <bskeggs@redhat.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 7b557c354307..ea12fbbea92e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -366,14 +366,11 @@  find_encoder(struct drm_connector *connector, int type)
 	struct drm_device *dev = connector->dev;
 	struct nouveau_encoder *nv_encoder;
 	struct drm_encoder *enc;
-	int i, id;
+	u32 encoder_id;
+	int i;
 
-	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-		id = connector->encoder_ids[i];
-		if (!id)
-			break;
-
-		enc = drm_encoder_find(dev, NULL, id);
+	drm_for_each_connector_encoder_ids(connector, encoder_id, i) {
+		enc = drm_encoder_find(dev, NULL, encoder_id);
 		if (!enc)
 			continue;
 		nv_encoder = nouveau_encoder(enc);
@@ -423,6 +420,7 @@  nouveau_connector_ddc_detect(struct drm_connector *connector)
 	struct nouveau_encoder *nv_encoder;
 	struct drm_encoder *encoder;
 	int i, panel = -ENODEV;
+	u32 encoder_id;
 
 	/* eDP panels need powering on by us (if the VBIOS doesn't default it
 	 * to on) before doing any AUX channel transactions.  LVDS panel power
@@ -436,12 +434,8 @@  nouveau_connector_ddc_detect(struct drm_connector *connector)
 		}
 	}
 
-	for (i = 0; nv_encoder = NULL, i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-		int id = connector->encoder_ids[i];
-		if (id == 0)
-			break;
-
-		encoder = drm_encoder_find(dev, NULL, id);
+	drm_for_each_connector_encoder_ids(connector, encoder_id, i) {
+		encoder = drm_encoder_find(dev, NULL, encoder_id);
 		if (!encoder)
 			continue;
 		nv_encoder = nouveau_encoder(encoder);