diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-11-02 17:27:30 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-11-02 17:27:30 -0500 |
| commit | 12267166c582f43a41829ffa77be2e7e72d5d4dd (patch) | |
| tree | d1bc7ae54f9c594d7cb49e9cc9b4648adc876587 | |
| parent | 3c43de0ffd58f1d2ada3e6804fe66fdf85ccb2e5 (diff) | |
| parent | 66338feee458cb2b04e8f2b515b8d660e49ba29a (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"Nothing too astounding or major: radeon, i915, vmwgfx, armada and
exynos.
Biggest ones:
- vmwgfx has one big locking regression fix
- i915 has come displayport fixes
- radeon has some stability and a memory alloc failure
- armada and exynos have some vblank fixes"
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (24 commits)
drm/exynos: correct connector->dpms field before resuming
drm/exynos: enable vblank after DPMS on
drm/exynos: init kms poll at the end of initialization
drm/exynos: propagate plane initialization errors
drm/exynos: vidi: fix build warning
drm/exynos: remove explicit encoder/connector de-initialization
drm/exynos: init vblank with real number of crtcs
drm/vmwgfx: Filter out modes those cannot be supported by the current VRAM size.
drm/vmwgfx: Fix hash key computation
drm/vmwgfx: fix lock breakage
drm/i915/dp: only use training pattern 3 on platforms that support it
drm/radeon: remove some buggy dead code
drm/i915: Ignore VBT backlight check on Macbook 2, 1
drm/radeon: remove invalid pci id
drm/radeon: dpm fixes for asrock systems
radeon: clean up coding style differences in radeon_get_bios()
drm/radeon: Use drm_malloc_ab instead of kmalloc_array
drm/radeon/dpm: disable ulv support on SI
drm/i915: Fix GMBUSFREQ on vlv/chv
drm/i915: Ignore long hpds on eDP ports
...
22 files changed, 116 insertions, 83 deletions
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c index 9a0cc09e6653..e4a1490b42c2 100644 --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c | |||
| @@ -260,7 +260,7 @@ static void armada_drm_vblank_off(struct armada_crtc *dcrtc) | |||
| 260 | * Tell the DRM core that vblank IRQs aren't going to happen for | 260 | * Tell the DRM core that vblank IRQs aren't going to happen for |
| 261 | * a while. This cleans up any pending vblank events for us. | 261 | * a while. This cleans up any pending vblank events for us. |
| 262 | */ | 262 | */ |
| 263 | drm_vblank_off(dev, dcrtc->num); | 263 | drm_crtc_vblank_off(&dcrtc->crtc); |
| 264 | 264 | ||
| 265 | /* Handle any pending flip event. */ | 265 | /* Handle any pending flip event. */ |
| 266 | spin_lock_irq(&dev->event_lock); | 266 | spin_lock_irq(&dev->event_lock); |
| @@ -289,6 +289,8 @@ static void armada_drm_crtc_dpms(struct drm_crtc *crtc, int dpms) | |||
| 289 | armada_drm_crtc_update(dcrtc); | 289 | armada_drm_crtc_update(dcrtc); |
| 290 | if (dpms_blanked(dpms)) | 290 | if (dpms_blanked(dpms)) |
| 291 | armada_drm_vblank_off(dcrtc); | 291 | armada_drm_vblank_off(dcrtc); |
| 292 | else | ||
| 293 | drm_crtc_vblank_on(&dcrtc->crtc); | ||
| 292 | } | 294 | } |
| 293 | } | 295 | } |
| 294 | 296 | ||
| @@ -526,7 +528,7 @@ static int armada_drm_crtc_mode_set(struct drm_crtc *crtc, | |||
| 526 | /* Wait for pending flips to complete */ | 528 | /* Wait for pending flips to complete */ |
| 527 | wait_event(dcrtc->frame_wait, !dcrtc->frame_work); | 529 | wait_event(dcrtc->frame_wait, !dcrtc->frame_work); |
| 528 | 530 | ||
| 529 | drm_vblank_pre_modeset(crtc->dev, dcrtc->num); | 531 | drm_crtc_vblank_off(crtc); |
| 530 | 532 | ||
| 531 | crtc->mode = *adj; | 533 | crtc->mode = *adj; |
| 532 | 534 | ||
| @@ -617,7 +619,7 @@ static int armada_drm_crtc_mode_set(struct drm_crtc *crtc, | |||
| 617 | 619 | ||
| 618 | armada_drm_crtc_update(dcrtc); | 620 | armada_drm_crtc_update(dcrtc); |
| 619 | 621 | ||
| 620 | drm_vblank_post_modeset(crtc->dev, dcrtc->num); | 622 | drm_crtc_vblank_on(crtc); |
| 621 | armada_drm_crtc_finish_fb(dcrtc, old_fb, dpms_blanked(dcrtc->dpms)); | 623 | armada_drm_crtc_finish_fb(dcrtc, old_fb, dpms_blanked(dcrtc->dpms)); |
| 622 | 624 | ||
| 623 | return 0; | 625 | return 0; |
| @@ -945,18 +947,15 @@ static int armada_drm_crtc_page_flip(struct drm_crtc *crtc, | |||
| 945 | armada_reg_queue_end(work->regs, i); | 947 | armada_reg_queue_end(work->regs, i); |
| 946 | 948 | ||
| 947 | /* | 949 | /* |
| 948 | * Hold the old framebuffer for the work - DRM appears to drop our | 950 | * Ensure that we hold a reference on the new framebuffer. |
| 949 | * reference to the old framebuffer in drm_mode_page_flip_ioctl(). | 951 | * This has to match the behaviour in mode_set. |
| 950 | */ | 952 | */ |
| 951 | drm_framebuffer_reference(work->old_fb); | 953 | drm_framebuffer_reference(fb); |
| 952 | 954 | ||
| 953 | ret = armada_drm_crtc_queue_frame_work(dcrtc, work); | 955 | ret = armada_drm_crtc_queue_frame_work(dcrtc, work); |
| 954 | if (ret) { | 956 | if (ret) { |
| 955 | /* | 957 | /* Undo our reference above */ |
| 956 | * Undo our reference above; DRM does not drop the reference | 958 | drm_framebuffer_unreference(fb); |
| 957 | * to this object on error, so that's okay. | ||
| 958 | */ | ||
| 959 | drm_framebuffer_unreference(work->old_fb); | ||
| 960 | kfree(work); | 959 | kfree(work); |
| 961 | return ret; | 960 | return ret; |
| 962 | } | 961 | } |
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c index f672e6ad8afa..908e5316eac4 100644 --- a/drivers/gpu/drm/armada/armada_drv.c +++ b/drivers/gpu/drm/armada/armada_drv.c | |||
| @@ -190,6 +190,7 @@ static int armada_drm_load(struct drm_device *dev, unsigned long flags) | |||
| 190 | if (ret) | 190 | if (ret) |
| 191 | goto err_comp; | 191 | goto err_comp; |
| 192 | 192 | ||
| 193 | dev->irq_enabled = true; | ||
| 193 | dev->vblank_disable_allowed = 1; | 194 | dev->vblank_disable_allowed = 1; |
| 194 | 195 | ||
| 195 | ret = armada_fbdev_init(dev); | 196 | ret = armada_fbdev_init(dev); |
| @@ -331,7 +332,7 @@ static struct drm_driver armada_drm_driver = { | |||
| 331 | .desc = "Armada SoC DRM", | 332 | .desc = "Armada SoC DRM", |
| 332 | .date = "20120730", | 333 | .date = "20120730", |
| 333 | .driver_features = DRIVER_GEM | DRIVER_MODESET | | 334 | .driver_features = DRIVER_GEM | DRIVER_MODESET | |
| 334 | DRIVER_PRIME, | 335 | DRIVER_HAVE_IRQ | DRIVER_PRIME, |
| 335 | .ioctls = armada_ioctls, | 336 | .ioctls = armada_ioctls, |
| 336 | .fops = &armada_drm_fops, | 337 | .fops = &armada_drm_fops, |
| 337 | }; | 338 | }; |
diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c index cd50ece31601..6adb1e5cfb08 100644 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c | |||
| @@ -1355,13 +1355,8 @@ static void exynos_dp_unbind(struct device *dev, struct device *master, | |||
| 1355 | void *data) | 1355 | void *data) |
| 1356 | { | 1356 | { |
| 1357 | struct exynos_drm_display *display = dev_get_drvdata(dev); | 1357 | struct exynos_drm_display *display = dev_get_drvdata(dev); |
| 1358 | struct exynos_dp_device *dp = display->ctx; | ||
| 1359 | struct drm_encoder *encoder = dp->encoder; | ||
| 1360 | 1358 | ||
| 1361 | exynos_dp_dpms(display, DRM_MODE_DPMS_OFF); | 1359 | exynos_dp_dpms(display, DRM_MODE_DPMS_OFF); |
| 1362 | |||
| 1363 | exynos_dp_connector_destroy(&dp->connector); | ||
| 1364 | encoder->funcs->destroy(encoder); | ||
| 1365 | } | 1360 | } |
| 1366 | 1361 | ||
| 1367 | static const struct component_ops exynos_dp_ops = { | 1362 | static const struct component_ops exynos_dp_ops = { |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c index 8e38e9f8e542..45026e693225 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c | |||
| @@ -71,13 +71,16 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) | |||
| 71 | !atomic_read(&exynos_crtc->pending_flip), | 71 | !atomic_read(&exynos_crtc->pending_flip), |
| 72 | HZ/20)) | 72 | HZ/20)) |
| 73 | atomic_set(&exynos_crtc->pending_flip, 0); | 73 | atomic_set(&exynos_crtc->pending_flip, 0); |
| 74 | drm_vblank_off(crtc->dev, exynos_crtc->pipe); | 74 | drm_crtc_vblank_off(crtc); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | if (manager->ops->dpms) | 77 | if (manager->ops->dpms) |
| 78 | manager->ops->dpms(manager, mode); | 78 | manager->ops->dpms(manager, mode); |
| 79 | 79 | ||
| 80 | exynos_crtc->dpms = mode; | 80 | exynos_crtc->dpms = mode; |
| 81 | |||
| 82 | if (mode == DRM_MODE_DPMS_ON) | ||
| 83 | drm_crtc_vblank_on(crtc); | ||
| 81 | } | 84 | } |
| 82 | 85 | ||
| 83 | static void exynos_drm_crtc_prepare(struct drm_crtc *crtc) | 86 | static void exynos_drm_crtc_prepare(struct drm_crtc *crtc) |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c index 96c87db388fb..3dc678ed9949 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c | |||
| @@ -338,14 +338,10 @@ err_del_component: | |||
| 338 | 338 | ||
| 339 | int exynos_dpi_remove(struct device *dev) | 339 | int exynos_dpi_remove(struct device *dev) |
| 340 | { | 340 | { |
| 341 | struct drm_encoder *encoder = exynos_dpi_display.encoder; | ||
| 342 | struct exynos_dpi *ctx = exynos_dpi_display.ctx; | 341 | struct exynos_dpi *ctx = exynos_dpi_display.ctx; |
| 343 | 342 | ||
| 344 | exynos_dpi_dpms(&exynos_dpi_display, DRM_MODE_DPMS_OFF); | 343 | exynos_dpi_dpms(&exynos_dpi_display, DRM_MODE_DPMS_OFF); |
| 345 | 344 | ||
| 346 | exynos_dpi_connector_destroy(&ctx->connector); | ||
| 347 | encoder->funcs->destroy(encoder); | ||
| 348 | |||
| 349 | if (ctx->panel) | 345 | if (ctx->panel) |
| 350 | drm_panel_detach(ctx->panel); | 346 | drm_panel_detach(ctx->panel); |
| 351 | 347 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 443a2069858a..c57466edf45b 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
| @@ -87,16 +87,12 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags) | |||
| 87 | 87 | ||
| 88 | plane = exynos_plane_init(dev, possible_crtcs, | 88 | plane = exynos_plane_init(dev, possible_crtcs, |
| 89 | DRM_PLANE_TYPE_OVERLAY); | 89 | DRM_PLANE_TYPE_OVERLAY); |
| 90 | if (IS_ERR(plane)) | 90 | if (!IS_ERR(plane)) |
| 91 | goto err_mode_config_cleanup; | 91 | continue; |
| 92 | } | ||
| 93 | |||
| 94 | /* init kms poll for handling hpd */ | ||
| 95 | drm_kms_helper_poll_init(dev); | ||
| 96 | 92 | ||
| 97 | ret = drm_vblank_init(dev, MAX_CRTC); | 93 | ret = PTR_ERR(plane); |
| 98 | if (ret) | ||
| 99 | goto err_mode_config_cleanup; | 94 | goto err_mode_config_cleanup; |
| 95 | } | ||
| 100 | 96 | ||
| 101 | /* setup possible_clones. */ | 97 | /* setup possible_clones. */ |
| 102 | exynos_drm_encoder_setup(dev); | 98 | exynos_drm_encoder_setup(dev); |
| @@ -106,15 +102,16 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags) | |||
| 106 | /* Try to bind all sub drivers. */ | 102 | /* Try to bind all sub drivers. */ |
| 107 | ret = component_bind_all(dev->dev, dev); | 103 | ret = component_bind_all(dev->dev, dev); |
| 108 | if (ret) | 104 | if (ret) |
| 109 | goto err_cleanup_vblank; | 105 | goto err_mode_config_cleanup; |
| 110 | 106 | ||
| 111 | /* Probe non kms sub drivers and virtual display driver. */ | 107 | ret = drm_vblank_init(dev, dev->mode_config.num_crtc); |
| 112 | ret = exynos_drm_device_subdrv_probe(dev); | ||
| 113 | if (ret) | 108 | if (ret) |
| 114 | goto err_unbind_all; | 109 | goto err_unbind_all; |
| 115 | 110 | ||
| 116 | /* force connectors detection */ | 111 | /* Probe non kms sub drivers and virtual display driver. */ |
| 117 | drm_helper_hpd_irq_event(dev); | 112 | ret = exynos_drm_device_subdrv_probe(dev); |
| 113 | if (ret) | ||
| 114 | goto err_cleanup_vblank; | ||
| 118 | 115 | ||
| 119 | /* | 116 | /* |
| 120 | * enable drm irq mode. | 117 | * enable drm irq mode. |
| @@ -133,12 +130,18 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags) | |||
| 133 | */ | 130 | */ |
| 134 | dev->vblank_disable_allowed = true; | 131 | dev->vblank_disable_allowed = true; |
| 135 | 132 | ||
| 133 | /* init kms poll for handling hpd */ | ||
| 134 | drm_kms_helper_poll_init(dev); | ||
| 135 | |||
| 136 | /* force connectors detection */ | ||
| 137 | drm_helper_hpd_irq_event(dev); | ||
| 138 | |||
| 136 | return 0; | 139 | return 0; |
| 137 | 140 | ||
| 138 | err_unbind_all: | ||
| 139 | component_unbind_all(dev->dev, dev); | ||
| 140 | err_cleanup_vblank: | 141 | err_cleanup_vblank: |
| 141 | drm_vblank_cleanup(dev); | 142 | drm_vblank_cleanup(dev); |
| 143 | err_unbind_all: | ||
| 144 | component_unbind_all(dev->dev, dev); | ||
| 142 | err_mode_config_cleanup: | 145 | err_mode_config_cleanup: |
| 143 | drm_mode_config_cleanup(dev); | 146 | drm_mode_config_cleanup(dev); |
| 144 | drm_release_iommu_mapping(dev); | 147 | drm_release_iommu_mapping(dev); |
| @@ -155,8 +158,8 @@ static int exynos_drm_unload(struct drm_device *dev) | |||
| 155 | exynos_drm_fbdev_fini(dev); | 158 | exynos_drm_fbdev_fini(dev); |
| 156 | drm_kms_helper_poll_fini(dev); | 159 | drm_kms_helper_poll_fini(dev); |
| 157 | 160 | ||
| 158 | component_unbind_all(dev->dev, dev); | ||
| 159 | drm_vblank_cleanup(dev); | 161 | drm_vblank_cleanup(dev); |
| 162 | component_unbind_all(dev->dev, dev); | ||
| 160 | drm_mode_config_cleanup(dev); | 163 | drm_mode_config_cleanup(dev); |
| 161 | drm_release_iommu_mapping(dev); | 164 | drm_release_iommu_mapping(dev); |
| 162 | 165 | ||
| @@ -191,8 +194,12 @@ static int exynos_drm_resume(struct drm_device *dev) | |||
| 191 | 194 | ||
| 192 | drm_modeset_lock_all(dev); | 195 | drm_modeset_lock_all(dev); |
| 193 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 196 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
| 194 | if (connector->funcs->dpms) | 197 | if (connector->funcs->dpms) { |
| 195 | connector->funcs->dpms(connector, connector->dpms); | 198 | int dpms = connector->dpms; |
| 199 | |||
| 200 | connector->dpms = DRM_MODE_DPMS_OFF; | ||
| 201 | connector->funcs->dpms(connector, dpms); | ||
| 202 | } | ||
| 196 | } | 203 | } |
| 197 | drm_modeset_unlock_all(dev); | 204 | drm_modeset_unlock_all(dev); |
| 198 | 205 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index 24741d8758e8..acf7e9e39dcd 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c | |||
| @@ -1660,13 +1660,9 @@ static void exynos_dsi_unbind(struct device *dev, struct device *master, | |||
| 1660 | void *data) | 1660 | void *data) |
| 1661 | { | 1661 | { |
| 1662 | struct exynos_dsi *dsi = exynos_dsi_display.ctx; | 1662 | struct exynos_dsi *dsi = exynos_dsi_display.ctx; |
| 1663 | struct drm_encoder *encoder = dsi->encoder; | ||
| 1664 | 1663 | ||
| 1665 | exynos_dsi_dpms(&exynos_dsi_display, DRM_MODE_DPMS_OFF); | 1664 | exynos_dsi_dpms(&exynos_dsi_display, DRM_MODE_DPMS_OFF); |
| 1666 | 1665 | ||
| 1667 | exynos_dsi_connector_destroy(&dsi->connector); | ||
| 1668 | encoder->funcs->destroy(encoder); | ||
| 1669 | |||
| 1670 | mipi_dsi_host_unregister(&dsi->dsi_host); | 1666 | mipi_dsi_host_unregister(&dsi->dsi_host); |
| 1671 | } | 1667 | } |
| 1672 | 1668 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index d565207040a2..50faf913e574 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c | |||
| @@ -630,7 +630,6 @@ static int vidi_remove(struct platform_device *pdev) | |||
| 630 | { | 630 | { |
| 631 | struct exynos_drm_manager *mgr = platform_get_drvdata(pdev); | 631 | struct exynos_drm_manager *mgr = platform_get_drvdata(pdev); |
| 632 | struct vidi_context *ctx = mgr->ctx; | 632 | struct vidi_context *ctx = mgr->ctx; |
| 633 | struct drm_encoder *encoder = ctx->encoder; | ||
| 634 | 633 | ||
| 635 | if (ctx->raw_edid != (struct edid *)fake_edid_info) { | 634 | if (ctx->raw_edid != (struct edid *)fake_edid_info) { |
| 636 | kfree(ctx->raw_edid); | 635 | kfree(ctx->raw_edid); |
| @@ -639,9 +638,6 @@ static int vidi_remove(struct platform_device *pdev) | |||
| 639 | return -EINVAL; | 638 | return -EINVAL; |
| 640 | } | 639 | } |
| 641 | 640 | ||
| 642 | encoder->funcs->destroy(encoder); | ||
| 643 | drm_connector_cleanup(&ctx->connector); | ||
| 644 | |||
| 645 | return 0; | 641 | return 0; |
| 646 | } | 642 | } |
| 647 | 643 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 7910fb37d9bb..563a19e62eb2 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c | |||
| @@ -2312,12 +2312,6 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data) | |||
| 2312 | 2312 | ||
| 2313 | static void hdmi_unbind(struct device *dev, struct device *master, void *data) | 2313 | static void hdmi_unbind(struct device *dev, struct device *master, void *data) |
| 2314 | { | 2314 | { |
| 2315 | struct exynos_drm_display *display = get_hdmi_display(dev); | ||
| 2316 | struct drm_encoder *encoder = display->encoder; | ||
| 2317 | struct hdmi_context *hdata = display->ctx; | ||
| 2318 | |||
| 2319 | hdmi_connector_destroy(&hdata->connector); | ||
| 2320 | encoder->funcs->destroy(encoder); | ||
| 2321 | } | 2315 | } |
| 2322 | 2316 | ||
| 2323 | static const struct component_ops hdmi_component_ops = { | 2317 | static const struct component_ops hdmi_component_ops = { |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index c9e220963a78..f0a1a56406eb 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -4585,7 +4585,7 @@ static void vlv_update_cdclk(struct drm_device *dev) | |||
| 4585 | * BSpec erroneously claims we should aim for 4MHz, but | 4585 | * BSpec erroneously claims we should aim for 4MHz, but |
| 4586 | * in fact 1MHz is the correct frequency. | 4586 | * in fact 1MHz is the correct frequency. |
| 4587 | */ | 4587 | */ |
| 4588 | I915_WRITE(GMBUSFREQ_VLV, dev_priv->vlv_cdclk_freq); | 4588 | I915_WRITE(GMBUSFREQ_VLV, DIV_ROUND_UP(dev_priv->vlv_cdclk_freq, 1000)); |
| 4589 | } | 4589 | } |
| 4590 | 4590 | ||
| 4591 | /* Adjust CDclk dividers to allow high res or save power if possible */ | 4591 | /* Adjust CDclk dividers to allow high res or save power if possible */ |
| @@ -12885,6 +12885,9 @@ static struct intel_quirk intel_quirks[] = { | |||
| 12885 | /* Acer C720 Chromebook (Core i3 4005U) */ | 12885 | /* Acer C720 Chromebook (Core i3 4005U) */ |
| 12886 | { 0x0a16, 0x1025, 0x0a11, quirk_backlight_present }, | 12886 | { 0x0a16, 0x1025, 0x0a11, quirk_backlight_present }, |
| 12887 | 12887 | ||
| 12888 | /* Apple Macbook 2,1 (Core 2 T7400) */ | ||
| 12889 | { 0x27a2, 0x8086, 0x7270, quirk_backlight_present }, | ||
| 12890 | |||
| 12888 | /* Toshiba CB35 Chromebook (Celeron 2955U) */ | 12891 | /* Toshiba CB35 Chromebook (Celeron 2955U) */ |
| 12889 | { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present }, | 12892 | { 0x0a06, 0x1179, 0x0a88, quirk_backlight_present }, |
| 12890 | 12893 | ||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index f6a3fdd5589e..5ad45bfff3fe 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -2806,6 +2806,13 @@ intel_dp_dpcd_read_wake(struct drm_dp_aux *aux, unsigned int offset, | |||
| 2806 | ssize_t ret; | 2806 | ssize_t ret; |
| 2807 | int i; | 2807 | int i; |
| 2808 | 2808 | ||
| 2809 | /* | ||
| 2810 | * Sometime we just get the same incorrect byte repeated | ||
| 2811 | * over the entire buffer. Doing just one throw away read | ||
| 2812 | * initially seems to "solve" it. | ||
| 2813 | */ | ||
| 2814 | drm_dp_dpcd_read(aux, DP_DPCD_REV, buffer, 1); | ||
| 2815 | |||
| 2809 | for (i = 0; i < 3; i++) { | 2816 | for (i = 0; i < 3; i++) { |
| 2810 | ret = drm_dp_dpcd_read(aux, offset, buffer, size); | 2817 | ret = drm_dp_dpcd_read(aux, offset, buffer, size); |
| 2811 | if (ret == size) | 2818 | if (ret == size) |
| @@ -3724,9 +3731,10 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) | |||
| 3724 | } | 3731 | } |
| 3725 | } | 3732 | } |
| 3726 | 3733 | ||
| 3727 | /* Training Pattern 3 support */ | 3734 | /* Training Pattern 3 support, both source and sink */ |
| 3728 | if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 && | 3735 | if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 && |
| 3729 | intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED) { | 3736 | intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED && |
| 3737 | (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)) { | ||
| 3730 | intel_dp->use_tps3 = true; | 3738 | intel_dp->use_tps3 = true; |
| 3731 | DRM_DEBUG_KMS("Displayport TPS3 supported\n"); | 3739 | DRM_DEBUG_KMS("Displayport TPS3 supported\n"); |
| 3732 | } else | 3740 | } else |
| @@ -4491,6 +4499,18 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd) | |||
| 4491 | if (intel_dig_port->base.type != INTEL_OUTPUT_EDP) | 4499 | if (intel_dig_port->base.type != INTEL_OUTPUT_EDP) |
| 4492 | intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT; | 4500 | intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT; |
| 4493 | 4501 | ||
| 4502 | if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) { | ||
| 4503 | /* | ||
| 4504 | * vdd off can generate a long pulse on eDP which | ||
| 4505 | * would require vdd on to handle it, and thus we | ||
| 4506 | * would end up in an endless cycle of | ||
| 4507 | * "vdd off -> long hpd -> vdd on -> detect -> vdd off -> ..." | ||
| 4508 | */ | ||
| 4509 | DRM_DEBUG_KMS("ignoring long hpd on eDP port %c\n", | ||
| 4510 | port_name(intel_dig_port->port)); | ||
| 4511 | return false; | ||
| 4512 | } | ||
| 4513 | |||
| 4494 | DRM_DEBUG_KMS("got hpd irq on port %c - %s\n", | 4514 | DRM_DEBUG_KMS("got hpd irq on port %c - %s\n", |
| 4495 | port_name(intel_dig_port->port), | 4515 | port_name(intel_dig_port->port), |
| 4496 | long_hpd ? "long" : "short"); | 4516 | long_hpd ? "long" : "short"); |
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index a31f1ca40c6a..f37d39d2bbbc 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
| @@ -3005,7 +3005,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
| 3005 | u32 vgt_cache_invalidation; | 3005 | u32 vgt_cache_invalidation; |
| 3006 | u32 hdp_host_path_cntl, tmp; | 3006 | u32 hdp_host_path_cntl, tmp; |
| 3007 | u32 disabled_rb_mask; | 3007 | u32 disabled_rb_mask; |
| 3008 | int i, j, num_shader_engines, ps_thread_count; | 3008 | int i, j, ps_thread_count; |
| 3009 | 3009 | ||
| 3010 | switch (rdev->family) { | 3010 | switch (rdev->family) { |
| 3011 | case CHIP_CYPRESS: | 3011 | case CHIP_CYPRESS: |
| @@ -3303,8 +3303,6 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
| 3303 | rdev->config.evergreen.tile_config |= | 3303 | rdev->config.evergreen.tile_config |= |
| 3304 | ((gb_addr_config & 0x30000000) >> 28) << 12; | 3304 | ((gb_addr_config & 0x30000000) >> 28) << 12; |
| 3305 | 3305 | ||
| 3306 | num_shader_engines = (gb_addr_config & NUM_SHADER_ENGINES(3) >> 12) + 1; | ||
| 3307 | |||
| 3308 | if ((rdev->family >= CHIP_CEDAR) && (rdev->family <= CHIP_HEMLOCK)) { | 3306 | if ((rdev->family >= CHIP_CEDAR) && (rdev->family <= CHIP_HEMLOCK)) { |
| 3309 | u32 efuse_straps_4; | 3307 | u32 efuse_straps_4; |
| 3310 | u32 efuse_straps_3; | 3308 | u32 efuse_straps_3; |
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c index 1dd976f447fa..9b42001295ba 100644 --- a/drivers/gpu/drm/radeon/kv_dpm.c +++ b/drivers/gpu/drm/radeon/kv_dpm.c | |||
| @@ -2725,7 +2725,11 @@ int kv_dpm_init(struct radeon_device *rdev) | |||
| 2725 | 2725 | ||
| 2726 | pi->sram_end = SMC_RAM_END; | 2726 | pi->sram_end = SMC_RAM_END; |
| 2727 | 2727 | ||
| 2728 | pi->enable_nb_dpm = true; | 2728 | /* Enabling nb dpm on an asrock system prevents dpm from working */ |
| 2729 | if (rdev->pdev->subsystem_vendor == 0x1849) | ||
| 2730 | pi->enable_nb_dpm = false; | ||
| 2731 | else | ||
| 2732 | pi->enable_nb_dpm = true; | ||
| 2729 | 2733 | ||
| 2730 | pi->caps_power_containment = true; | 2734 | pi->caps_power_containment = true; |
| 2731 | pi->caps_cac = true; | 2735 | pi->caps_cac = true; |
| @@ -2740,10 +2744,19 @@ int kv_dpm_init(struct radeon_device *rdev) | |||
| 2740 | pi->caps_sclk_ds = true; | 2744 | pi->caps_sclk_ds = true; |
| 2741 | pi->enable_auto_thermal_throttling = true; | 2745 | pi->enable_auto_thermal_throttling = true; |
| 2742 | pi->disable_nb_ps3_in_battery = false; | 2746 | pi->disable_nb_ps3_in_battery = false; |
| 2743 | if (radeon_bapm == 0) | 2747 | if (radeon_bapm == -1) { |
| 2748 | /* There are stability issues reported on with | ||
| 2749 | * bapm enabled on an asrock system. | ||
| 2750 | */ | ||
| 2751 | if (rdev->pdev->subsystem_vendor == 0x1849) | ||
| 2752 | pi->bapm_enable = false; | ||
| 2753 | else | ||
| 2754 | pi->bapm_enable = true; | ||
| 2755 | } else if (radeon_bapm == 0) { | ||
| 2744 | pi->bapm_enable = false; | 2756 | pi->bapm_enable = false; |
| 2745 | else | 2757 | } else { |
| 2746 | pi->bapm_enable = true; | 2758 | pi->bapm_enable = true; |
| 2759 | } | ||
| 2747 | pi->voltage_drop_t = 0; | 2760 | pi->voltage_drop_t = 0; |
| 2748 | pi->caps_sclk_throttle_low_notification = false; | 2761 | pi->caps_sclk_throttle_low_notification = false; |
| 2749 | pi->caps_fps = false; /* true? */ | 2762 | pi->caps_fps = false; /* true? */ |
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index 6a03624fadaa..63ccb8fa799c 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c | |||
| @@ -658,12 +658,10 @@ bool radeon_get_bios(struct radeon_device *rdev) | |||
| 658 | r = igp_read_bios_from_vram(rdev); | 658 | r = igp_read_bios_from_vram(rdev); |
| 659 | if (r == false) | 659 | if (r == false) |
| 660 | r = radeon_read_bios(rdev); | 660 | r = radeon_read_bios(rdev); |
| 661 | if (r == false) { | 661 | if (r == false) |
| 662 | r = radeon_read_disabled_bios(rdev); | 662 | r = radeon_read_disabled_bios(rdev); |
| 663 | } | 663 | if (r == false) |
| 664 | if (r == false) { | ||
| 665 | r = radeon_read_platform_bios(rdev); | 664 | r = radeon_read_platform_bios(rdev); |
| 666 | } | ||
| 667 | if (r == false || rdev->bios == NULL) { | 665 | if (r == false || rdev->bios == NULL) { |
| 668 | DRM_ERROR("Unable to locate a BIOS ROM\n"); | 666 | DRM_ERROR("Unable to locate a BIOS ROM\n"); |
| 669 | rdev->bios = NULL; | 667 | rdev->bios = NULL; |
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index 1c893447d7cd..a3e7aed7e680 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
| @@ -450,7 +450,7 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error, bo | |||
| 450 | kfree(parser->track); | 450 | kfree(parser->track); |
| 451 | kfree(parser->relocs); | 451 | kfree(parser->relocs); |
| 452 | kfree(parser->relocs_ptr); | 452 | kfree(parser->relocs_ptr); |
| 453 | kfree(parser->vm_bos); | 453 | drm_free_large(parser->vm_bos); |
| 454 | for (i = 0; i < parser->nchunks; i++) | 454 | for (i = 0; i < parser->nchunks; i++) |
| 455 | drm_free_large(parser->chunks[i].kdata); | 455 | drm_free_large(parser->chunks[i].kdata); |
| 456 | kfree(parser->chunks); | 456 | kfree(parser->chunks); |
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c index 3d17af34afa7..2456f69efd23 100644 --- a/drivers/gpu/drm/radeon/radeon_ring.c +++ b/drivers/gpu/drm/radeon/radeon_ring.c | |||
| @@ -314,7 +314,7 @@ unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring | |||
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | /* and then save the content of the ring */ | 316 | /* and then save the content of the ring */ |
| 317 | *data = kmalloc_array(size, sizeof(uint32_t), GFP_KERNEL); | 317 | *data = drm_malloc_ab(size, sizeof(uint32_t)); |
| 318 | if (!*data) { | 318 | if (!*data) { |
| 319 | mutex_unlock(&rdev->ring_lock); | 319 | mutex_unlock(&rdev->ring_lock); |
| 320 | return 0; | 320 | return 0; |
| @@ -356,7 +356,7 @@ int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring, | |||
| 356 | } | 356 | } |
| 357 | 357 | ||
| 358 | radeon_ring_unlock_commit(rdev, ring, false); | 358 | radeon_ring_unlock_commit(rdev, ring, false); |
| 359 | kfree(data); | 359 | drm_free_large(data); |
| 360 | return 0; | 360 | return 0; |
| 361 | } | 361 | } |
| 362 | 362 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index 4532cc76a0a6..dfde266529e2 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c | |||
| @@ -132,8 +132,8 @@ struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev, | |||
| 132 | struct radeon_cs_reloc *list; | 132 | struct radeon_cs_reloc *list; |
| 133 | unsigned i, idx; | 133 | unsigned i, idx; |
| 134 | 134 | ||
| 135 | list = kmalloc_array(vm->max_pde_used + 2, | 135 | list = drm_malloc_ab(vm->max_pde_used + 2, |
| 136 | sizeof(struct radeon_cs_reloc), GFP_KERNEL); | 136 | sizeof(struct radeon_cs_reloc)); |
| 137 | if (!list) | 137 | if (!list) |
| 138 | return NULL; | 138 | return NULL; |
| 139 | 139 | ||
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c index a53c2e79d9cb..676e6c2ba90a 100644 --- a/drivers/gpu/drm/radeon/si_dpm.c +++ b/drivers/gpu/drm/radeon/si_dpm.c | |||
| @@ -6256,7 +6256,7 @@ static void si_parse_pplib_clock_info(struct radeon_device *rdev, | |||
| 6256 | if ((rps->class2 & ATOM_PPLIB_CLASSIFICATION2_ULV) && | 6256 | if ((rps->class2 & ATOM_PPLIB_CLASSIFICATION2_ULV) && |
| 6257 | index == 0) { | 6257 | index == 0) { |
| 6258 | /* XXX disable for A0 tahiti */ | 6258 | /* XXX disable for A0 tahiti */ |
| 6259 | si_pi->ulv.supported = true; | 6259 | si_pi->ulv.supported = false; |
| 6260 | si_pi->ulv.pl = *pl; | 6260 | si_pi->ulv.pl = *pl; |
| 6261 | si_pi->ulv.one_pcie_lane_in_ulv = false; | 6261 | si_pi->ulv.one_pcie_lane_in_ulv = false; |
| 6262 | si_pi->ulv.volt_change_delay = SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT; | 6262 | si_pi->ulv.volt_change_delay = SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT; |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c index bfeb4b1f2acf..21e9b7f8dad0 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c | |||
| @@ -246,7 +246,8 @@ int vmw_cmdbuf_res_remove(struct vmw_cmdbuf_res_manager *man, | |||
| 246 | struct drm_hash_item *hash; | 246 | struct drm_hash_item *hash; |
| 247 | int ret; | 247 | int ret; |
| 248 | 248 | ||
| 249 | ret = drm_ht_find_item(&man->resources, user_key, &hash); | 249 | ret = drm_ht_find_item(&man->resources, user_key | (res_type << 24), |
| 250 | &hash); | ||
| 250 | if (likely(ret != 0)) | 251 | if (likely(ret != 0)) |
| 251 | return -EINVAL; | 252 | return -EINVAL; |
| 252 | 253 | ||
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 7197af157313..25f3c250fd98 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
| @@ -688,7 +688,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) | |||
| 688 | goto out_err0; | 688 | goto out_err0; |
| 689 | } | 689 | } |
| 690 | 690 | ||
| 691 | if (unlikely(dev_priv->prim_bb_mem < dev_priv->vram_size)) | 691 | /* |
| 692 | * Limit back buffer size to VRAM size. Remove this once | ||
| 693 | * screen targets are implemented. | ||
| 694 | */ | ||
| 695 | if (dev_priv->prim_bb_mem > dev_priv->vram_size) | ||
| 692 | dev_priv->prim_bb_mem = dev_priv->vram_size; | 696 | dev_priv->prim_bb_mem = dev_priv->vram_size; |
| 693 | 697 | ||
| 694 | mutex_unlock(&dev_priv->hw_mutex); | 698 | mutex_unlock(&dev_priv->hw_mutex); |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index d2bc2b03d4c6..941a7bc0b791 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | |||
| @@ -187,7 +187,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, | |||
| 187 | * can do this since the caller in the drm core doesn't check anything | 187 | * can do this since the caller in the drm core doesn't check anything |
| 188 | * which is protected by any looks. | 188 | * which is protected by any looks. |
| 189 | */ | 189 | */ |
| 190 | drm_modeset_unlock(&crtc->mutex); | 190 | drm_modeset_unlock_crtc(crtc); |
| 191 | drm_modeset_lock_all(dev_priv->dev); | 191 | drm_modeset_lock_all(dev_priv->dev); |
| 192 | 192 | ||
| 193 | /* A lot of the code assumes this */ | 193 | /* A lot of the code assumes this */ |
| @@ -252,7 +252,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, | |||
| 252 | ret = 0; | 252 | ret = 0; |
| 253 | out: | 253 | out: |
| 254 | drm_modeset_unlock_all(dev_priv->dev); | 254 | drm_modeset_unlock_all(dev_priv->dev); |
| 255 | drm_modeset_lock(&crtc->mutex, NULL); | 255 | drm_modeset_lock_crtc(crtc); |
| 256 | 256 | ||
| 257 | return ret; | 257 | return ret; |
| 258 | } | 258 | } |
| @@ -273,7 +273,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) | |||
| 273 | * can do this since the caller in the drm core doesn't check anything | 273 | * can do this since the caller in the drm core doesn't check anything |
| 274 | * which is protected by any looks. | 274 | * which is protected by any looks. |
| 275 | */ | 275 | */ |
| 276 | drm_modeset_unlock(&crtc->mutex); | 276 | drm_modeset_unlock_crtc(crtc); |
| 277 | drm_modeset_lock_all(dev_priv->dev); | 277 | drm_modeset_lock_all(dev_priv->dev); |
| 278 | 278 | ||
| 279 | vmw_cursor_update_position(dev_priv, shown, | 279 | vmw_cursor_update_position(dev_priv, shown, |
| @@ -281,7 +281,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) | |||
| 281 | du->cursor_y + du->hotspot_y); | 281 | du->cursor_y + du->hotspot_y); |
| 282 | 282 | ||
| 283 | drm_modeset_unlock_all(dev_priv->dev); | 283 | drm_modeset_unlock_all(dev_priv->dev); |
| 284 | drm_modeset_lock(&crtc->mutex, NULL); | 284 | drm_modeset_lock_crtc(crtc); |
| 285 | 285 | ||
| 286 | return 0; | 286 | return 0; |
| 287 | } | 287 | } |
| @@ -1950,6 +1950,14 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, | |||
| 1950 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) | 1950 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) |
| 1951 | }; | 1951 | }; |
| 1952 | int i; | 1952 | int i; |
| 1953 | u32 assumed_bpp = 2; | ||
| 1954 | |||
| 1955 | /* | ||
| 1956 | * If using screen objects, then assume 32-bpp because that's what the | ||
| 1957 | * SVGA device is assuming | ||
| 1958 | */ | ||
| 1959 | if (dev_priv->sou_priv) | ||
| 1960 | assumed_bpp = 4; | ||
| 1953 | 1961 | ||
| 1954 | /* Add preferred mode */ | 1962 | /* Add preferred mode */ |
| 1955 | { | 1963 | { |
| @@ -1960,8 +1968,9 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, | |||
| 1960 | mode->vdisplay = du->pref_height; | 1968 | mode->vdisplay = du->pref_height; |
| 1961 | vmw_guess_mode_timing(mode); | 1969 | vmw_guess_mode_timing(mode); |
| 1962 | 1970 | ||
| 1963 | if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2, | 1971 | if (vmw_kms_validate_mode_vram(dev_priv, |
| 1964 | mode->vdisplay)) { | 1972 | mode->hdisplay * assumed_bpp, |
| 1973 | mode->vdisplay)) { | ||
| 1965 | drm_mode_probed_add(connector, mode); | 1974 | drm_mode_probed_add(connector, mode); |
| 1966 | } else { | 1975 | } else { |
| 1967 | drm_mode_destroy(dev, mode); | 1976 | drm_mode_destroy(dev, mode); |
| @@ -1983,7 +1992,8 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, | |||
| 1983 | bmode->vdisplay > max_height) | 1992 | bmode->vdisplay > max_height) |
| 1984 | continue; | 1993 | continue; |
| 1985 | 1994 | ||
| 1986 | if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2, | 1995 | if (!vmw_kms_validate_mode_vram(dev_priv, |
| 1996 | bmode->hdisplay * assumed_bpp, | ||
| 1987 | bmode->vdisplay)) | 1997 | bmode->vdisplay)) |
| 1988 | continue; | 1998 | continue; |
| 1989 | 1999 | ||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index e973540cd15b..2dd405c9be78 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -74,7 +74,6 @@ | |||
| 74 | {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | 74 | {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ |
| 75 | {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | 75 | {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ |
| 76 | {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ | 76 | {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ |
| 77 | {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \ | ||
| 78 | {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | 77 | {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ |
| 79 | {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | 78 | {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ |
| 80 | {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ | 79 | {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ |
