diff options
author | Dave Airlie <airlied@redhat.com> | 2017-05-18 20:21:41 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-05-18 20:21:41 -0400 |
commit | e62961262141bd94341ae0dcb75d16a38542cc99 (patch) | |
tree | d7157e901bf6c51f7b68dfbcb0836f5f55043968 | |
parent | 6de92ab875c201553a7c48e131d99fc78406a197 (diff) | |
parent | 2579b8b0ece53248b815042f8662a4531acf120d (diff) |
Merge branch 'linux-4.12' of git://github.com/skeggsb/linux into drm-fixes
misc nouveau fixes.
* 'linux-4.12' of git://github.com/skeggsb/linux:
drm/nouveau/fifo/gk104-: Silence a locking warning
drm/nouveau/secboot: plug memory leak in ls_ucode_img_load_gr() error path
drm/nouveau: Fix drm poll_helper handling
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drm.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_gr.c | 4 |
4 files changed, 10 insertions, 9 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 21b10f9840c9..549763f5e17d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
@@ -360,6 +360,8 @@ nouveau_display_hpd_work(struct work_struct *work) | |||
360 | pm_runtime_get_sync(drm->dev->dev); | 360 | pm_runtime_get_sync(drm->dev->dev); |
361 | 361 | ||
362 | drm_helper_hpd_irq_event(drm->dev); | 362 | drm_helper_hpd_irq_event(drm->dev); |
363 | /* enable polling for external displays */ | ||
364 | drm_kms_helper_poll_enable(drm->dev); | ||
363 | 365 | ||
364 | pm_runtime_mark_last_busy(drm->dev->dev); | 366 | pm_runtime_mark_last_busy(drm->dev->dev); |
365 | pm_runtime_put_sync(drm->dev->dev); | 367 | pm_runtime_put_sync(drm->dev->dev); |
@@ -413,10 +415,6 @@ nouveau_display_init(struct drm_device *dev) | |||
413 | if (ret) | 415 | if (ret) |
414 | return ret; | 416 | return ret; |
415 | 417 | ||
416 | /* enable polling for external displays */ | ||
417 | if (!dev->mode_config.poll_enabled) | ||
418 | drm_kms_helper_poll_enable(dev); | ||
419 | |||
420 | /* enable hotplug interrupts */ | 418 | /* enable hotplug interrupts */ |
421 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 419 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
422 | struct nouveau_connector *conn = nouveau_connector(connector); | 420 | struct nouveau_connector *conn = nouveau_connector(connector); |
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 2b6ac24ce690..36268e1802b5 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c | |||
@@ -502,6 +502,9 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) | |||
502 | pm_runtime_allow(dev->dev); | 502 | pm_runtime_allow(dev->dev); |
503 | pm_runtime_mark_last_busy(dev->dev); | 503 | pm_runtime_mark_last_busy(dev->dev); |
504 | pm_runtime_put(dev->dev); | 504 | pm_runtime_put(dev->dev); |
505 | } else { | ||
506 | /* enable polling for external displays */ | ||
507 | drm_kms_helper_poll_enable(dev); | ||
505 | } | 508 | } |
506 | return 0; | 509 | return 0; |
507 | 510 | ||
@@ -774,9 +777,6 @@ nouveau_pmops_runtime_resume(struct device *dev) | |||
774 | 777 | ||
775 | ret = nouveau_do_resume(drm_dev, true); | 778 | ret = nouveau_do_resume(drm_dev, true); |
776 | 779 | ||
777 | if (!drm_dev->mode_config.poll_enabled) | ||
778 | drm_kms_helper_poll_enable(drm_dev); | ||
779 | |||
780 | /* do magic */ | 780 | /* do magic */ |
781 | nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25)); | 781 | nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25)); |
782 | vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON); | 782 | vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 3a24788c3185..a7e55c422501 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | |||
@@ -148,7 +148,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl) | |||
148 | case NVKM_MEM_TARGET_NCOH: target = 3; break; | 148 | case NVKM_MEM_TARGET_NCOH: target = 3; break; |
149 | default: | 149 | default: |
150 | WARN_ON(1); | 150 | WARN_ON(1); |
151 | return; | 151 | goto unlock; |
152 | } | 152 | } |
153 | 153 | ||
154 | nvkm_wr32(device, 0x002270, (nvkm_memory_addr(mem) >> 12) | | 154 | nvkm_wr32(device, 0x002270, (nvkm_memory_addr(mem) >> 12) | |
@@ -160,6 +160,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl) | |||
160 | & 0x00100000), | 160 | & 0x00100000), |
161 | msecs_to_jiffies(2000)) == 0) | 161 | msecs_to_jiffies(2000)) == 0) |
162 | nvkm_error(subdev, "runlist %d update timeout\n", runl); | 162 | nvkm_error(subdev, "runlist %d update timeout\n", runl); |
163 | unlock: | ||
163 | mutex_unlock(&subdev->mutex); | 164 | mutex_unlock(&subdev->mutex); |
164 | } | 165 | } |
165 | 166 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_gr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_gr.c index d1cf02d22db1..1b0c793c0192 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_gr.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_gr.c | |||
@@ -116,6 +116,7 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img, | |||
116 | ret = nvkm_firmware_get(subdev->device, f, &sig); | 116 | ret = nvkm_firmware_get(subdev->device, f, &sig); |
117 | if (ret) | 117 | if (ret) |
118 | goto free_data; | 118 | goto free_data; |
119 | |||
119 | img->sig = kmemdup(sig->data, sig->size, GFP_KERNEL); | 120 | img->sig = kmemdup(sig->data, sig->size, GFP_KERNEL); |
120 | if (!img->sig) { | 121 | if (!img->sig) { |
121 | ret = -ENOMEM; | 122 | ret = -ENOMEM; |
@@ -126,8 +127,9 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img, | |||
126 | img->ucode_data = ls_ucode_img_build(bl, code, data, | 127 | img->ucode_data = ls_ucode_img_build(bl, code, data, |
127 | &img->ucode_desc); | 128 | &img->ucode_desc); |
128 | if (IS_ERR(img->ucode_data)) { | 129 | if (IS_ERR(img->ucode_data)) { |
130 | kfree(img->sig); | ||
129 | ret = PTR_ERR(img->ucode_data); | 131 | ret = PTR_ERR(img->ucode_data); |
130 | goto free_data; | 132 | goto free_sig; |
131 | } | 133 | } |
132 | img->ucode_size = img->ucode_desc.image_size; | 134 | img->ucode_size = img->ucode_desc.image_size; |
133 | 135 | ||