diff options
Diffstat (limited to 'drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c')
| -rw-r--r-- | drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 22 | 
1 files changed, 13 insertions, 9 deletions
| diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c index 768b97f9e74a..289304500ab0 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c @@ -32,7 +32,7 @@  DEFINE_DRM_GEM_FOPS(hibmc_fops); -static const char *g_irqs_names_map[HIBMC_MAX_VECTORS] = { "vblank", "hpd" }; +static const char *g_irqs_names_map[HIBMC_MAX_VECTORS] = { "hibmc-vblank", "hibmc-hpd" };  static irqreturn_t hibmc_interrupt(int irq, void *arg)  { @@ -115,6 +115,8 @@ static const struct drm_mode_config_funcs hibmc_mode_funcs = {  static int hibmc_kms_init(struct hibmc_drm_private *priv)  {  	struct drm_device *dev = &priv->dev; +	struct drm_encoder *encoder; +	u32 clone_mask = 0;  	int ret;  	ret = drmm_mode_config_init(dev); @@ -154,6 +156,12 @@ static int hibmc_kms_init(struct hibmc_drm_private *priv)  		return ret;  	} +	drm_for_each_encoder(encoder, dev) +		clone_mask |= drm_encoder_mask(encoder); + +	drm_for_each_encoder(encoder, dev) +		encoder->possible_clones = clone_mask; +  	return 0;  } @@ -277,7 +285,6 @@ static void hibmc_unload(struct drm_device *dev)  static int hibmc_msi_init(struct drm_device *dev)  {  	struct pci_dev *pdev = to_pci_dev(dev->dev); -	char name[32] = {0};  	int valid_irq_num;  	int irq;  	int ret; @@ -292,9 +299,6 @@ static int hibmc_msi_init(struct drm_device *dev)  	valid_irq_num = ret;  	for (int i = 0; i < valid_irq_num; i++) { -		snprintf(name, ARRAY_SIZE(name) - 1, "%s-%s-%s", -			 dev->driver->name, pci_name(pdev), g_irqs_names_map[i]); -  		irq = pci_irq_vector(pdev, i);  		if (i) @@ -302,10 +306,10 @@ static int hibmc_msi_init(struct drm_device *dev)  			ret = devm_request_threaded_irq(&pdev->dev, irq,  							hibmc_dp_interrupt,  							hibmc_dp_hpd_isr, -							IRQF_SHARED, name, dev); +							IRQF_SHARED, g_irqs_names_map[i], dev);  		else  			ret = devm_request_irq(&pdev->dev, irq, hibmc_interrupt, -					       IRQF_SHARED, name, dev); +					       IRQF_SHARED, g_irqs_names_map[i], dev);  		if (ret) {  			drm_err(dev, "install irq failed: %d\n", ret);  			return ret; @@ -323,13 +327,13 @@ static int hibmc_load(struct drm_device *dev)  	ret = hibmc_hw_init(priv);  	if (ret) -		goto err; +		return ret;  	ret = drmm_vram_helper_init(dev, pci_resource_start(pdev, 0),  				    pci_resource_len(pdev, 0));  	if (ret) {  		drm_err(dev, "Error initializing VRAM MM; %d\n", ret); -		goto err; +		return ret;  	}  	ret = hibmc_kms_init(priv); | 
