History

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm: Remove duplicate "return" statement drm/nv04/crtc: Bail out if FB is not bound to crtc drm/nouveau: fix nv04_sgdma_bind on non-"4kB pages" archs drm/nouveau: properly handle allocation failure in nouveau_sgdma_populate drm/nouveau: fix oops on pre-semaphore hardware drm/nv50/crtc: Bail out if FB is not bound to crtc drm/radeon/kms: fix DP detect and EDID fetch for DP bridges

Linus Torvalds committed 15 years ago

Commit 8cb3ed12 parents 4c75278 55a01f67 files · +66 −28Browse files

Unified · Split

7 files
  1. drivers/gpu/drm/drm_fb_helper.c +0 −1
  2. drivers/gpu/drm/nouveau/nouveau_fence.c +2 −1
  3. drivers/gpu/drm/nouveau/nouveau_sgdma.c +5 −2
  4. drivers/gpu/drm/nouveau/nv04_crtc.c +13 −2
  5. drivers/gpu/drm/nouveau/nv50_crtc.c +10 −2
  6. drivers/gpu/drm/radeon/radeon_connectors.c +24 −13
  7. drivers/gpu/drm/radeon/radeon_display.c +12 −7
drivers/gpu/drm/drm_fb_helper.c+0−1
@@ -256,7 +256,6 @@ int drm_fb_helper_panic(struct notifier_block *n, unsigned long ununsed, · 255 unmodified lines
256{256{
257 printk(KERN_ERR "panic occurred, switching back to text console\n");257 printk(KERN_ERR "panic occurred, switching back to text console\n");
258 return drm_fb_helper_force_kernel_mode();258 return drm_fb_helper_force_kernel_mode();
259 return 0;
260}259}
261EXPORT_SYMBOL(drm_fb_helper_panic);260EXPORT_SYMBOL(drm_fb_helper_panic);
262 261
drivers/gpu/drm/nouveau/nouveau_fence.c+2−1
@@ -530,7 +530,8 @@ nouveau_fence_channel_init(struct nouveau_channel *chan) · 529 unmodified lines
530 nouveau_gpuobj_ref(NULL, &obj);530 nouveau_gpuobj_ref(NULL, &obj);
531 if (ret)531 if (ret)
532 return ret;532 return ret;
533 } else {533 } else
534 if (USE_SEMA(dev)) {
534 /* map fence bo into channel's vm */535 /* map fence bo into channel's vm */
535 ret = nouveau_bo_vma_add(dev_priv->fence.bo, chan->vm,536 ret = nouveau_bo_vma_add(dev_priv->fence.bo, chan->vm,
536 &chan->fence.vma);537 &chan->fence.vma);
drivers/gpu/drm/nouveau/nouveau_sgdma.c+5−2
@@ -37,8 +37,11 @@ nouveau_sgdma_populate(struct ttm_backend *be, unsigned long num_pages, · 36 unmodified lines
37 return -ENOMEM;37 return -ENOMEM;
38 38
39 nvbe->ttm_alloced = kmalloc(sizeof(bool) * num_pages, GFP_KERNEL);39 nvbe->ttm_alloced = kmalloc(sizeof(bool) * num_pages, GFP_KERNEL);
40 if (!nvbe->ttm_alloced)40 if (!nvbe->ttm_alloced) {
41 kfree(nvbe->pages);
42 nvbe->pages = NULL;
41 return -ENOMEM;43 return -ENOMEM;
44 }
42 45
43 nvbe->nr_pages = 0;46 nvbe->nr_pages = 0;
44 while (num_pages--) {47 while (num_pages--) {
@@ -126,7 +129,7 @@ nv04_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem) · 81 unmodified lines
126 129
127 for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++, pte++) {130 for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++, pte++) {
128 nv_wo32(gpuobj, (pte * 4) + 0, offset_l | 3);131 nv_wo32(gpuobj, (pte * 4) + 0, offset_l | 3);
129 dma_offset += NV_CTXDMA_PAGE_SIZE;132 offset_l += NV_CTXDMA_PAGE_SIZE;
130 }133 }
131 }134 }
132 135
drivers/gpu/drm/nouveau/nv04_crtc.c+13−2
@@ -781,11 +781,20 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc, · 780 unmodified lines
781 struct drm_device *dev = crtc->dev;781 struct drm_device *dev = crtc->dev;
782 struct drm_nouveau_private *dev_priv = dev->dev_private;782 struct drm_nouveau_private *dev_priv = dev->dev_private;
783 struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index];783 struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index];
784 struct drm_framebuffer *drm_fb = nv_crtc->base.fb;784 struct drm_framebuffer *drm_fb;
785 struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb);785 struct nouveau_framebuffer *fb;
786 int arb_burst, arb_lwm;786 int arb_burst, arb_lwm;
787 int ret;787 int ret;
788 788
789 NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index);
790
791 /* no fb bound */
792 if (!atomic && !crtc->fb) {
793 NV_DEBUG_KMS(dev, "No FB bound\n");
794 return 0;
795 }
796
797
789 /* If atomic, we want to switch to the fb we were passed, so798 /* If atomic, we want to switch to the fb we were passed, so
790 * now we update pointers to do that. (We don't pin; just799 * now we update pointers to do that. (We don't pin; just
791 * assume we're already pinned and update the base address.)800 * assume we're already pinned and update the base address.)
@@ -794,6 +803,8 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc, · 2 unmodified lines
794 drm_fb = passed_fb;803 drm_fb = passed_fb;
795 fb = nouveau_framebuffer(passed_fb);804 fb = nouveau_framebuffer(passed_fb);
796 } else {805 } else {
806 drm_fb = crtc->fb;
807 fb = nouveau_framebuffer(crtc->fb);
797 /* If not atomic, we can go ahead and pin, and unpin the808 /* If not atomic, we can go ahead and pin, and unpin the
798 * old fb we were passed.809 * old fb we were passed.
799 */810 */
drivers/gpu/drm/nouveau/nv50_crtc.c+10−2
@@ -519,12 +519,18 @@ nv50_crtc_do_mode_set_base(struct drm_crtc *crtc, · 518 unmodified lines
519 struct drm_device *dev = nv_crtc->base.dev;519 struct drm_device *dev = nv_crtc->base.dev;
520 struct drm_nouveau_private *dev_priv = dev->dev_private;520 struct drm_nouveau_private *dev_priv = dev->dev_private;
521 struct nouveau_channel *evo = nv50_display(dev)->master;521 struct nouveau_channel *evo = nv50_display(dev)->master;
522 struct drm_framebuffer *drm_fb = nv_crtc->base.fb;522 struct drm_framebuffer *drm_fb;
523 struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb);523 struct nouveau_framebuffer *fb;
524 int ret;524 int ret;
525 525
526 NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index);526 NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index);
527 527
528 /* no fb bound */
529 if (!atomic && !crtc->fb) {
530 NV_DEBUG_KMS(dev, "No FB bound\n");
531 return 0;
532 }
533
528 /* If atomic, we want to switch to the fb we were passed, so534 /* If atomic, we want to switch to the fb we were passed, so
529 * now we update pointers to do that. (We don't pin; just535 * now we update pointers to do that. (We don't pin; just
530 * assume we're already pinned and update the base address.)536 * assume we're already pinned and update the base address.)
@@ -533,6 +539,8 @@ nv50_crtc_do_mode_set_base(struct drm_crtc *crtc, · 2 unmodified lines
533 drm_fb = passed_fb;539 drm_fb = passed_fb;
534 fb = nouveau_framebuffer(passed_fb);540 fb = nouveau_framebuffer(passed_fb);
535 } else {541 } else {
542 drm_fb = crtc->fb;
543 fb = nouveau_framebuffer(crtc->fb);
536 /* If not atomic, we can go ahead and pin, and unpin the544 /* If not atomic, we can go ahead and pin, and unpin the
537 * old fb we were passed.545 * old fb we were passed.
538 */546 */
drivers/gpu/drm/radeon/radeon_connectors.c+24−13
@@ -1297,12 +1297,33 @@ radeon_dp_detect(struct drm_connector *connector, bool force) · 1296 unmodified lines
1297 if (!radeon_dig_connector->edp_on)1297 if (!radeon_dig_connector->edp_on)
1298 atombios_set_edp_panel_power(connector,1298 atombios_set_edp_panel_power(connector,
1299 ATOM_TRANSMITTER_ACTION_POWER_OFF);1299 ATOM_TRANSMITTER_ACTION_POWER_OFF);
1300 } else {1300 } else if (radeon_connector_encoder_is_dp_bridge(connector)) {
1301 /* need to setup ddc on the bridge */1301 /* DP bridges are always DP */
1302 if (radeon_connector_encoder_is_dp_bridge(connector)) {1302 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1303 /* get the DPCD from the bridge */
1304 radeon_dp_getdpcd(radeon_connector);
1305
1306 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
1307 ret = connector_status_connected;
1308 else {
1309 /* need to setup ddc on the bridge */
1303 if (encoder)1310 if (encoder)
1304 radeon_atom_ext_encoder_setup_ddc(encoder);1311 radeon_atom_ext_encoder_setup_ddc(encoder);
1312 if (radeon_ddc_probe(radeon_connector,
1313 radeon_connector->requires_extended_probe))
1314 ret = connector_status_connected;
1315 }
1316
1317 if ((ret == connector_status_disconnected) &&
1318 radeon_connector->dac_load_detect) {
1319 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1320 struct drm_encoder_helper_funcs *encoder_funcs;
1321 if (encoder) {
1322 encoder_funcs = encoder->helper_private;
1323 ret = encoder_funcs->detect(encoder, connector);
1324 }
1305 }1325 }
1326 } else {
1306 radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);1327 radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1307 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {1328 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1308 ret = connector_status_connected;1329 ret = connector_status_connected;
@@ -1318,16 +1339,6 @@ radeon_dp_detect(struct drm_connector *connector, bool force) · 9 unmodified lines
1318 ret = connector_status_connected;1339 ret = connector_status_connected;
1319 }1340 }
1320 }1341 }
1321
1322 if ((ret == connector_status_disconnected) &&
1323 radeon_connector->dac_load_detect) {
1324 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1325 struct drm_encoder_helper_funcs *encoder_funcs;
1326 if (encoder) {
1327 encoder_funcs = encoder->helper_private;
1328 ret = encoder_funcs->detect(encoder, connector);
1329 }
1330 }
1331 }1342 }
1332 1343
1333 radeon_connector_update_scratch_regs(connector, ret);1344 radeon_connector_update_scratch_regs(connector, ret);
drivers/gpu/drm/radeon/radeon_display.c+12−7
@@ -707,16 +707,21 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector) · 706 unmodified lines
707 radeon_router_select_ddc_port(radeon_connector);707 radeon_router_select_ddc_port(radeon_connector);
708 708
709 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||709 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
710 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) {710 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) ||
711 radeon_connector_encoder_is_dp_bridge(&radeon_connector->base)) {
711 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;712 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
713
712 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||714 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
713 dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus)715 dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus)
714 radeon_connector->edid = drm_get_edid(&radeon_connector->base, &dig->dp_i2c_bus->adapter);716 radeon_connector->edid = drm_get_edid(&radeon_connector->base,
715 }717 &dig->dp_i2c_bus->adapter);
716 if (!radeon_connector->ddc_bus)718 else if (radeon_connector->ddc_bus && !radeon_connector->edid)
717 return -1;719 radeon_connector->edid = drm_get_edid(&radeon_connector->base,
718 if (!radeon_connector->edid) {720 &radeon_connector->ddc_bus->adapter);
719 radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);721 } else {
722 if (radeon_connector->ddc_bus && !radeon_connector->edid)
723 radeon_connector->edid = drm_get_edid(&radeon_connector->base,
724 &radeon_connector->ddc_bus->adapter);
720 }725 }
721 726
722 if (!radeon_connector->edid) {727 if (!radeon_connector->edid) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t