diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_stolen.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_tiling.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 33 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 8 | ||||
| -rw-r--r-- | include/drm/i915_pciids.h | 4 |
8 files changed, 73 insertions, 25 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f2a825e39646..8727086cf48c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -2114,6 +2114,9 @@ void i915_gem_track_fb(struct drm_i915_gem_object *old, | |||
| 2114 | * number comparisons on buffer last_read|write_seqno. It also allows an | 2114 | * number comparisons on buffer last_read|write_seqno. It also allows an |
| 2115 | * emission time to be associated with the request for tracking how far ahead | 2115 | * emission time to be associated with the request for tracking how far ahead |
| 2116 | * of the GPU the submission is. | 2116 | * of the GPU the submission is. |
| 2117 | * | ||
| 2118 | * The requests are reference counted, so upon creation they should have an | ||
| 2119 | * initial reference taken using kref_init | ||
| 2117 | */ | 2120 | */ |
| 2118 | struct drm_i915_gem_request { | 2121 | struct drm_i915_gem_request { |
| 2119 | struct kref ref; | 2122 | struct kref ref; |
| @@ -2137,7 +2140,16 @@ struct drm_i915_gem_request { | |||
| 2137 | /** Position in the ringbuffer of the end of the whole request */ | 2140 | /** Position in the ringbuffer of the end of the whole request */ |
| 2138 | u32 tail; | 2141 | u32 tail; |
| 2139 | 2142 | ||
| 2140 | /** Context related to this request */ | 2143 | /** |
| 2144 | * Context related to this request | ||
| 2145 | * Contexts are refcounted, so when this request is associated with a | ||
| 2146 | * context, we must increment the context's refcount, to guarantee that | ||
| 2147 | * it persists while any request is linked to it. Requests themselves | ||
| 2148 | * are also refcounted, so the request will only be freed when the last | ||
| 2149 | * reference to it is dismissed, and the code in | ||
| 2150 | * i915_gem_request_free() will then decrement the refcount on the | ||
| 2151 | * context. | ||
| 2152 | */ | ||
| 2141 | struct intel_context *ctx; | 2153 | struct intel_context *ctx; |
| 2142 | 2154 | ||
| 2143 | /** Batch buffer related to this request if any */ | 2155 | /** Batch buffer related to this request if any */ |
| @@ -2374,6 +2386,7 @@ struct drm_i915_cmd_table { | |||
| 2374 | (INTEL_DEVID(dev) & 0xFF00) == 0x0C00) | 2386 | (INTEL_DEVID(dev) & 0xFF00) == 0x0C00) |
| 2375 | #define IS_BDW_ULT(dev) (IS_BROADWELL(dev) && \ | 2387 | #define IS_BDW_ULT(dev) (IS_BROADWELL(dev) && \ |
| 2376 | ((INTEL_DEVID(dev) & 0xf) == 0x6 || \ | 2388 | ((INTEL_DEVID(dev) & 0xf) == 0x6 || \ |
| 2389 | (INTEL_DEVID(dev) & 0xf) == 0xb || \ | ||
| 2377 | (INTEL_DEVID(dev) & 0xf) == 0xe)) | 2390 | (INTEL_DEVID(dev) & 0xf) == 0xe)) |
| 2378 | #define IS_BDW_GT3(dev) (IS_BROADWELL(dev) && \ | 2391 | #define IS_BDW_GT3(dev) (IS_BROADWELL(dev) && \ |
| 2379 | (INTEL_DEVID(dev) & 0x00F0) == 0x0020) | 2392 | (INTEL_DEVID(dev) & 0x00F0) == 0x0020) |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c26d36cc4b31..e5daad5f75fb 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -2659,8 +2659,7 @@ static void i915_gem_reset_ring_cleanup(struct drm_i915_private *dev_priv, | |||
| 2659 | if (submit_req->ctx != ring->default_context) | 2659 | if (submit_req->ctx != ring->default_context) |
| 2660 | intel_lr_context_unpin(ring, submit_req->ctx); | 2660 | intel_lr_context_unpin(ring, submit_req->ctx); |
| 2661 | 2661 | ||
| 2662 | i915_gem_context_unreference(submit_req->ctx); | 2662 | i915_gem_request_unreference(submit_req); |
| 2663 | kfree(submit_req); | ||
| 2664 | } | 2663 | } |
| 2665 | 2664 | ||
| 2666 | /* | 2665 | /* |
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c index a2045848bd1a..9c6f93ec886b 100644 --- a/drivers/gpu/drm/i915/i915_gem_stolen.c +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c | |||
| @@ -485,10 +485,8 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev, | |||
| 485 | stolen_offset, gtt_offset, size); | 485 | stolen_offset, gtt_offset, size); |
| 486 | 486 | ||
| 487 | /* KISS and expect everything to be page-aligned */ | 487 | /* KISS and expect everything to be page-aligned */ |
| 488 | BUG_ON(stolen_offset & 4095); | 488 | if (WARN_ON(size == 0) || WARN_ON(size & 4095) || |
| 489 | BUG_ON(size & 4095); | 489 | WARN_ON(stolen_offset & 4095)) |
| 490 | |||
| 491 | if (WARN_ON(size == 0)) | ||
| 492 | return NULL; | 490 | return NULL; |
| 493 | 491 | ||
| 494 | stolen = kzalloc(sizeof(*stolen), GFP_KERNEL); | 492 | stolen = kzalloc(sizeof(*stolen), GFP_KERNEL); |
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index 7a24bd1a51f6..6377b22269ad 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c | |||
| @@ -335,9 +335,10 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 335 | return -EINVAL; | 335 | return -EINVAL; |
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | mutex_lock(&dev->struct_mutex); | ||
| 338 | if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) { | 339 | if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) { |
| 339 | drm_gem_object_unreference_unlocked(&obj->base); | 340 | ret = -EBUSY; |
| 340 | return -EBUSY; | 341 | goto err; |
| 341 | } | 342 | } |
| 342 | 343 | ||
| 343 | if (args->tiling_mode == I915_TILING_NONE) { | 344 | if (args->tiling_mode == I915_TILING_NONE) { |
| @@ -369,7 +370,6 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 369 | } | 370 | } |
| 370 | } | 371 | } |
| 371 | 372 | ||
| 372 | mutex_lock(&dev->struct_mutex); | ||
| 373 | if (args->tiling_mode != obj->tiling_mode || | 373 | if (args->tiling_mode != obj->tiling_mode || |
| 374 | args->stride != obj->stride) { | 374 | args->stride != obj->stride) { |
| 375 | /* We need to rebind the object if its current allocation | 375 | /* We need to rebind the object if its current allocation |
| @@ -424,6 +424,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 424 | obj->bit_17 = NULL; | 424 | obj->bit_17 = NULL; |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | err: | ||
| 427 | drm_gem_object_unreference(&obj->base); | 428 | drm_gem_object_unreference(&obj->base); |
| 428 | mutex_unlock(&dev->struct_mutex); | 429 | mutex_unlock(&dev->struct_mutex); |
| 429 | 430 | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 4145d95902f5..ede5bbbd8a08 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -1892,6 +1892,9 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg) | |||
| 1892 | u32 iir, gt_iir, pm_iir; | 1892 | u32 iir, gt_iir, pm_iir; |
| 1893 | irqreturn_t ret = IRQ_NONE; | 1893 | irqreturn_t ret = IRQ_NONE; |
| 1894 | 1894 | ||
| 1895 | if (!intel_irqs_enabled(dev_priv)) | ||
| 1896 | return IRQ_NONE; | ||
| 1897 | |||
| 1895 | while (true) { | 1898 | while (true) { |
| 1896 | /* Find, clear, then process each source of interrupt */ | 1899 | /* Find, clear, then process each source of interrupt */ |
| 1897 | 1900 | ||
| @@ -1936,6 +1939,9 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg) | |||
| 1936 | u32 master_ctl, iir; | 1939 | u32 master_ctl, iir; |
| 1937 | irqreturn_t ret = IRQ_NONE; | 1940 | irqreturn_t ret = IRQ_NONE; |
| 1938 | 1941 | ||
| 1942 | if (!intel_irqs_enabled(dev_priv)) | ||
| 1943 | return IRQ_NONE; | ||
| 1944 | |||
| 1939 | for (;;) { | 1945 | for (;;) { |
| 1940 | master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL; | 1946 | master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL; |
| 1941 | iir = I915_READ(VLV_IIR); | 1947 | iir = I915_READ(VLV_IIR); |
| @@ -2208,6 +2214,9 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg) | |||
| 2208 | u32 de_iir, gt_iir, de_ier, sde_ier = 0; | 2214 | u32 de_iir, gt_iir, de_ier, sde_ier = 0; |
| 2209 | irqreturn_t ret = IRQ_NONE; | 2215 | irqreturn_t ret = IRQ_NONE; |
| 2210 | 2216 | ||
| 2217 | if (!intel_irqs_enabled(dev_priv)) | ||
| 2218 | return IRQ_NONE; | ||
| 2219 | |||
| 2211 | /* We get interrupts on unclaimed registers, so check for this before we | 2220 | /* We get interrupts on unclaimed registers, so check for this before we |
| 2212 | * do any I915_{READ,WRITE}. */ | 2221 | * do any I915_{READ,WRITE}. */ |
| 2213 | intel_uncore_check_errors(dev); | 2222 | intel_uncore_check_errors(dev); |
| @@ -2279,6 +2288,9 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg) | |||
| 2279 | enum pipe pipe; | 2288 | enum pipe pipe; |
| 2280 | u32 aux_mask = GEN8_AUX_CHANNEL_A; | 2289 | u32 aux_mask = GEN8_AUX_CHANNEL_A; |
| 2281 | 2290 | ||
| 2291 | if (!intel_irqs_enabled(dev_priv)) | ||
| 2292 | return IRQ_NONE; | ||
| 2293 | |||
| 2282 | if (IS_GEN9(dev)) | 2294 | if (IS_GEN9(dev)) |
| 2283 | aux_mask |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C | | 2295 | aux_mask |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C | |
| 2284 | GEN9_AUX_CHANNEL_D; | 2296 | GEN9_AUX_CHANNEL_D; |
| @@ -3771,6 +3783,9 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg) | |||
| 3771 | I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | | 3783 | I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | |
| 3772 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; | 3784 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; |
| 3773 | 3785 | ||
| 3786 | if (!intel_irqs_enabled(dev_priv)) | ||
| 3787 | return IRQ_NONE; | ||
| 3788 | |||
| 3774 | iir = I915_READ16(IIR); | 3789 | iir = I915_READ16(IIR); |
| 3775 | if (iir == 0) | 3790 | if (iir == 0) |
| 3776 | return IRQ_NONE; | 3791 | return IRQ_NONE; |
| @@ -3951,6 +3966,9 @@ static irqreturn_t i915_irq_handler(int irq, void *arg) | |||
| 3951 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; | 3966 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; |
| 3952 | int pipe, ret = IRQ_NONE; | 3967 | int pipe, ret = IRQ_NONE; |
| 3953 | 3968 | ||
| 3969 | if (!intel_irqs_enabled(dev_priv)) | ||
| 3970 | return IRQ_NONE; | ||
| 3971 | |||
| 3954 | iir = I915_READ(IIR); | 3972 | iir = I915_READ(IIR); |
| 3955 | do { | 3973 | do { |
| 3956 | bool irq_received = (iir & ~flip_mask) != 0; | 3974 | bool irq_received = (iir & ~flip_mask) != 0; |
| @@ -4171,6 +4189,9 @@ static irqreturn_t i965_irq_handler(int irq, void *arg) | |||
| 4171 | I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | | 4189 | I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | |
| 4172 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; | 4190 | I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; |
| 4173 | 4191 | ||
| 4192 | if (!intel_irqs_enabled(dev_priv)) | ||
| 4193 | return IRQ_NONE; | ||
| 4194 | |||
| 4174 | iir = I915_READ(IIR); | 4195 | iir = I915_READ(IIR); |
| 4175 | 4196 | ||
| 4176 | for (;;) { | 4197 | for (;;) { |
| @@ -4520,6 +4541,7 @@ void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv) | |||
| 4520 | { | 4541 | { |
| 4521 | dev_priv->dev->driver->irq_uninstall(dev_priv->dev); | 4542 | dev_priv->dev->driver->irq_uninstall(dev_priv->dev); |
| 4522 | dev_priv->pm.irqs_enabled = false; | 4543 | dev_priv->pm.irqs_enabled = false; |
| 4544 | synchronize_irq(dev_priv->dev->irq); | ||
| 4523 | } | 4545 | } |
| 4524 | 4546 | ||
| 4525 | /** | 4547 | /** |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 3d220a67f865..3117679299a6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -2371,13 +2371,19 @@ intel_alloc_plane_obj(struct intel_crtc *crtc, | |||
| 2371 | struct drm_device *dev = crtc->base.dev; | 2371 | struct drm_device *dev = crtc->base.dev; |
| 2372 | struct drm_i915_gem_object *obj = NULL; | 2372 | struct drm_i915_gem_object *obj = NULL; |
| 2373 | struct drm_mode_fb_cmd2 mode_cmd = { 0 }; | 2373 | struct drm_mode_fb_cmd2 mode_cmd = { 0 }; |
| 2374 | u32 base = plane_config->base; | 2374 | u32 base_aligned = round_down(plane_config->base, PAGE_SIZE); |
| 2375 | u32 size_aligned = round_up(plane_config->base + plane_config->size, | ||
| 2376 | PAGE_SIZE); | ||
| 2377 | |||
| 2378 | size_aligned -= base_aligned; | ||
| 2375 | 2379 | ||
| 2376 | if (plane_config->size == 0) | 2380 | if (plane_config->size == 0) |
| 2377 | return false; | 2381 | return false; |
| 2378 | 2382 | ||
| 2379 | obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base, | 2383 | obj = i915_gem_object_create_stolen_for_preallocated(dev, |
| 2380 | plane_config->size); | 2384 | base_aligned, |
| 2385 | base_aligned, | ||
| 2386 | size_aligned); | ||
| 2381 | if (!obj) | 2387 | if (!obj) |
| 2382 | return false; | 2388 | return false; |
| 2383 | 2389 | ||
| @@ -2725,10 +2731,19 @@ static void skylake_update_primary_plane(struct drm_crtc *crtc, | |||
| 2725 | case DRM_FORMAT_XRGB8888: | 2731 | case DRM_FORMAT_XRGB8888: |
| 2726 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; | 2732 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; |
| 2727 | break; | 2733 | break; |
| 2734 | case DRM_FORMAT_ARGB8888: | ||
| 2735 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; | ||
| 2736 | plane_ctl |= PLANE_CTL_ALPHA_SW_PREMULTIPLY; | ||
| 2737 | break; | ||
| 2728 | case DRM_FORMAT_XBGR8888: | 2738 | case DRM_FORMAT_XBGR8888: |
| 2729 | plane_ctl |= PLANE_CTL_ORDER_RGBX; | 2739 | plane_ctl |= PLANE_CTL_ORDER_RGBX; |
| 2730 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; | 2740 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; |
| 2731 | break; | 2741 | break; |
| 2742 | case DRM_FORMAT_ABGR8888: | ||
| 2743 | plane_ctl |= PLANE_CTL_ORDER_RGBX; | ||
| 2744 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888; | ||
| 2745 | plane_ctl |= PLANE_CTL_ALPHA_SW_PREMULTIPLY; | ||
| 2746 | break; | ||
| 2732 | case DRM_FORMAT_XRGB2101010: | 2747 | case DRM_FORMAT_XRGB2101010: |
| 2733 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_2101010; | 2748 | plane_ctl |= PLANE_CTL_FORMAT_XRGB_2101010; |
| 2734 | break; | 2749 | break; |
| @@ -6627,7 +6642,7 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc, | |||
| 6627 | aligned_height = intel_fb_align_height(dev, fb->height, | 6642 | aligned_height = intel_fb_align_height(dev, fb->height, |
| 6628 | plane_config->tiling); | 6643 | plane_config->tiling); |
| 6629 | 6644 | ||
| 6630 | plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height); | 6645 | plane_config->size = fb->pitches[0] * aligned_height; |
| 6631 | 6646 | ||
| 6632 | DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", | 6647 | DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", |
| 6633 | pipe_name(pipe), plane, fb->width, fb->height, | 6648 | pipe_name(pipe), plane, fb->width, fb->height, |
| @@ -7664,7 +7679,7 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc, | |||
| 7664 | aligned_height = intel_fb_align_height(dev, fb->height, | 7679 | aligned_height = intel_fb_align_height(dev, fb->height, |
| 7665 | plane_config->tiling); | 7680 | plane_config->tiling); |
| 7666 | 7681 | ||
| 7667 | plane_config->size = ALIGN(fb->pitches[0] * aligned_height, PAGE_SIZE); | 7682 | plane_config->size = fb->pitches[0] * aligned_height; |
| 7668 | 7683 | ||
| 7669 | DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", | 7684 | DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", |
| 7670 | pipe_name(pipe), fb->width, fb->height, | 7685 | pipe_name(pipe), fb->width, fb->height, |
| @@ -7755,7 +7770,7 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc, | |||
| 7755 | aligned_height = intel_fb_align_height(dev, fb->height, | 7770 | aligned_height = intel_fb_align_height(dev, fb->height, |
| 7756 | plane_config->tiling); | 7771 | plane_config->tiling); |
| 7757 | 7772 | ||
| 7758 | plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height); | 7773 | plane_config->size = fb->pitches[0] * aligned_height; |
| 7759 | 7774 | ||
| 7760 | DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", | 7775 | DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n", |
| 7761 | pipe_name(pipe), fb->width, fb->height, | 7776 | pipe_name(pipe), fb->width, fb->height, |
| @@ -12182,9 +12197,6 @@ intel_check_cursor_plane(struct drm_plane *plane, | |||
| 12182 | return -ENOMEM; | 12197 | return -ENOMEM; |
| 12183 | } | 12198 | } |
| 12184 | 12199 | ||
| 12185 | if (fb == crtc->cursor->fb) | ||
| 12186 | return 0; | ||
| 12187 | |||
| 12188 | /* we only need to pin inside GTT if cursor is non-phy */ | 12200 | /* we only need to pin inside GTT if cursor is non-phy */ |
| 12189 | mutex_lock(&dev->struct_mutex); | 12201 | mutex_lock(&dev->struct_mutex); |
| 12190 | if (!INTEL_INFO(dev)->cursor_needs_physical && obj->tiling_mode) { | 12202 | if (!INTEL_INFO(dev)->cursor_needs_physical && obj->tiling_mode) { |
| @@ -13096,6 +13108,9 @@ static struct intel_quirk intel_quirks[] = { | |||
| 13096 | 13108 | ||
| 13097 | /* HP Chromebook 14 (Celeron 2955U) */ | 13109 | /* HP Chromebook 14 (Celeron 2955U) */ |
| 13098 | { 0x0a06, 0x103c, 0x21ed, quirk_backlight_present }, | 13110 | { 0x0a06, 0x103c, 0x21ed, quirk_backlight_present }, |
| 13111 | |||
| 13112 | /* Dell Chromebook 11 */ | ||
| 13113 | { 0x0a06, 0x1028, 0x0a35, quirk_backlight_present }, | ||
| 13099 | }; | 13114 | }; |
| 13100 | 13115 | ||
| 13101 | static void intel_init_quirks(struct drm_device *dev) | 13116 | static void intel_init_quirks(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 0f358c5999ec..e8d3da9f3373 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
| @@ -503,18 +503,19 @@ static int execlists_context_queue(struct intel_engine_cs *ring, | |||
| 503 | * If there isn't a request associated with this submission, | 503 | * If there isn't a request associated with this submission, |
| 504 | * create one as a temporary holder. | 504 | * create one as a temporary holder. |
| 505 | */ | 505 | */ |
| 506 | WARN(1, "execlist context submission without request"); | ||
| 507 | request = kzalloc(sizeof(*request), GFP_KERNEL); | 506 | request = kzalloc(sizeof(*request), GFP_KERNEL); |
| 508 | if (request == NULL) | 507 | if (request == NULL) |
| 509 | return -ENOMEM; | 508 | return -ENOMEM; |
| 510 | request->ring = ring; | 509 | request->ring = ring; |
| 511 | request->ctx = to; | 510 | request->ctx = to; |
| 511 | kref_init(&request->ref); | ||
| 512 | request->uniq = dev_priv->request_uniq++; | ||
| 513 | i915_gem_context_reference(request->ctx); | ||
| 512 | } else { | 514 | } else { |
| 515 | i915_gem_request_reference(request); | ||
| 513 | WARN_ON(to != request->ctx); | 516 | WARN_ON(to != request->ctx); |
| 514 | } | 517 | } |
| 515 | request->tail = tail; | 518 | request->tail = tail; |
| 516 | i915_gem_request_reference(request); | ||
| 517 | i915_gem_context_reference(request->ctx); | ||
| 518 | 519 | ||
| 519 | intel_runtime_pm_get(dev_priv); | 520 | intel_runtime_pm_get(dev_priv); |
| 520 | 521 | ||
| @@ -731,7 +732,6 @@ void intel_execlists_retire_requests(struct intel_engine_cs *ring) | |||
| 731 | if (ctx_obj && (ctx != ring->default_context)) | 732 | if (ctx_obj && (ctx != ring->default_context)) |
| 732 | intel_lr_context_unpin(ring, ctx); | 733 | intel_lr_context_unpin(ring, ctx); |
| 733 | intel_runtime_pm_put(dev_priv); | 734 | intel_runtime_pm_put(dev_priv); |
| 734 | i915_gem_context_unreference(ctx); | ||
| 735 | list_del(&req->execlist_link); | 735 | list_del(&req->execlist_link); |
| 736 | i915_gem_request_unreference(req); | 736 | i915_gem_request_unreference(req); |
| 737 | } | 737 | } |
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h index 180ad0e6de21..d016dc57f007 100644 --- a/include/drm/i915_pciids.h +++ b/include/drm/i915_pciids.h | |||
| @@ -214,9 +214,9 @@ | |||
| 214 | INTEL_VGA_DEVICE((((gt) - 1) << 4) | (id), info) | 214 | INTEL_VGA_DEVICE((((gt) - 1) << 4) | (id), info) |
| 215 | 215 | ||
| 216 | #define _INTEL_BDW_M_IDS(gt, info) \ | 216 | #define _INTEL_BDW_M_IDS(gt, info) \ |
| 217 | _INTEL_BDW_M(gt, 0x1602, info), /* ULT */ \ | 217 | _INTEL_BDW_M(gt, 0x1602, info), /* Halo */ \ |
| 218 | _INTEL_BDW_M(gt, 0x1606, info), /* ULT */ \ | 218 | _INTEL_BDW_M(gt, 0x1606, info), /* ULT */ \ |
| 219 | _INTEL_BDW_M(gt, 0x160B, info), /* Iris */ \ | 219 | _INTEL_BDW_M(gt, 0x160B, info), /* ULT */ \ |
| 220 | _INTEL_BDW_M(gt, 0x160E, info) /* ULX */ | 220 | _INTEL_BDW_M(gt, 0x160E, info) /* ULX */ |
| 221 | 221 | ||
| 222 | #define _INTEL_BDW_D_IDS(gt, info) \ | 222 | #define _INTEL_BDW_D_IDS(gt, info) \ |
