mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	drm/client: Add hotplug_failed flag
Signal failed hotplugging with a flag in struct drm_client_dev. If set, the client helpers will not further try to set up the fbdev display. This used to be signalled with a combination of cleared pointers in struct drm_fb_helper, which prevents us from initializing these pointers early after allocation. The change also harmonizes behavior among DRM clients. Additional DRM clients will now handle failed hotplugging like fbdev does. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230125200415.14123-3-tzimmermann@suse.de
This commit is contained in:
		
							parent
							
								
									c2bb3be64e
								
							
						
					
					
						commit
						6a9d5ad3af
					
				
					 3 changed files with 13 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -208,8 +208,13 @@ void drm_client_dev_hotplug(struct drm_device *dev)
 | 
			
		|||
		if (!client->funcs || !client->funcs->hotplug)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (client->hotplug_failed)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		ret = client->funcs->hotplug(client);
 | 
			
		||||
		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			client->hotplug_failed = true;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&dev->clientlist_mutex);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -382,10 +382,6 @@ static int drm_fbdev_client_hotplug(struct drm_client_dev *client)
 | 
			
		|||
	struct drm_device *dev = client->dev;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	/* Setup is not retried if it has failed */
 | 
			
		||||
	if (!fb_helper->dev && fb_helper->funcs)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (dev->fb_helper)
 | 
			
		||||
		return drm_fb_helper_hotplug_event(dev->fb_helper);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,6 +106,14 @@ struct drm_client_dev {
 | 
			
		|||
	 * @modesets: CRTC configurations
 | 
			
		||||
	 */
 | 
			
		||||
	struct drm_mode_set *modesets;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @hotplug failed:
 | 
			
		||||
	 *
 | 
			
		||||
	 * Set by client hotplug helpers if the hotplugging failed
 | 
			
		||||
	 * before. It is usually not tried again.
 | 
			
		||||
	 */
 | 
			
		||||
	bool hotplug_failed;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int drm_client_init(struct drm_device *dev, struct drm_client_dev *client,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue