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}, \ |