Merge tag 'drm-intel-fixes-2015-02-26' of git://anongit.freedesktop.org/drm-intel into drm-fixes
First batch of fixes for v4.0-rc, plenty of cc: stable material. * tag 'drm-intel-fixes-2015-02-26' of git://anongit.freedesktop.org/drm-intel: drm/i915: Fix frontbuffer false positve. drm/i915: Align initial plane backing objects correctly drm/i915: avoid processing spurious/shared interrupts in low-power states drm/i915: Check obj->vma_list under the struct_mutex drm/i915: Fix a use after free, and unbalanced refcounting drm/i915: Dell Chromebook 11 has PWM backlight drm/i915/skl: handle all pixel formats in skylake_update_primary_plane() drm/i915/bdw: PCI IDs ending in 0xb are ULT.
This commit is contained in:
commit
d1e488fda8
8 changed files with 73 additions and 25 deletions
|
@ -2114,6 +2114,9 @@ void i915_gem_track_fb(struct drm_i915_gem_object *old,
|
||||||
* number comparisons on buffer last_read|write_seqno. It also allows an
|
* number comparisons on buffer last_read|write_seqno. It also allows an
|
||||||
* emission time to be associated with the request for tracking how far ahead
|
* emission time to be associated with the request for tracking how far ahead
|
||||||
* of the GPU the submission is.
|
* of the GPU the submission is.
|
||||||
|
*
|
||||||
|
* The requests are reference counted, so upon creation they should have an
|
||||||
|
* initial reference taken using kref_init
|
||||||
*/
|
*/
|
||||||
struct drm_i915_gem_request {
|
struct drm_i915_gem_request {
|
||||||
struct kref ref;
|
struct kref ref;
|
||||||
|
@ -2137,7 +2140,16 @@ struct drm_i915_gem_request {
|
||||||
/** Position in the ringbuffer of the end of the whole request */
|
/** Position in the ringbuffer of the end of the whole request */
|
||||||
u32 tail;
|
u32 tail;
|
||||||
|
|
||||||
/** Context related to this request */
|
/**
|
||||||
|
* Context related to this request
|
||||||
|
* Contexts are refcounted, so when this request is associated with a
|
||||||
|
* context, we must increment the context's refcount, to guarantee that
|
||||||
|
* it persists while any request is linked to it. Requests themselves
|
||||||
|
* are also refcounted, so the request will only be freed when the last
|
||||||
|
* reference to it is dismissed, and the code in
|
||||||
|
* i915_gem_request_free() will then decrement the refcount on the
|
||||||
|
* context.
|
||||||
|
*/
|
||||||
struct intel_context *ctx;
|
struct intel_context *ctx;
|
||||||
|
|
||||||
/** Batch buffer related to this request if any */
|
/** Batch buffer related to this request if any */
|
||||||
|
@ -2374,6 +2386,7 @@ struct drm_i915_cmd_table {
|
||||||
(INTEL_DEVID(dev) & 0xFF00) == 0x0C00)
|
(INTEL_DEVID(dev) & 0xFF00) == 0x0C00)
|
||||||
#define IS_BDW_ULT(dev) (IS_BROADWELL(dev) && \
|
#define IS_BDW_ULT(dev) (IS_BROADWELL(dev) && \
|
||||||
((INTEL_DEVID(dev) & 0xf) == 0x6 || \
|
((INTEL_DEVID(dev) & 0xf) == 0x6 || \
|
||||||
|
(INTEL_DEVID(dev) & 0xf) == 0xb || \
|
||||||
(INTEL_DEVID(dev) & 0xf) == 0xe))
|
(INTEL_DEVID(dev) & 0xf) == 0xe))
|
||||||
#define IS_BDW_GT3(dev) (IS_BROADWELL(dev) && \
|
#define IS_BDW_GT3(dev) (IS_BROADWELL(dev) && \
|
||||||
(INTEL_DEVID(dev) & 0x00F0) == 0x0020)
|
(INTEL_DEVID(dev) & 0x00F0) == 0x0020)
|
||||||
|
|
|
@ -2659,8 +2659,7 @@ static void i915_gem_reset_ring_cleanup(struct drm_i915_private *dev_priv,
|
||||||
if (submit_req->ctx != ring->default_context)
|
if (submit_req->ctx != ring->default_context)
|
||||||
intel_lr_context_unpin(ring, submit_req->ctx);
|
intel_lr_context_unpin(ring, submit_req->ctx);
|
||||||
|
|
||||||
i915_gem_context_unreference(submit_req->ctx);
|
i915_gem_request_unreference(submit_req);
|
||||||
kfree(submit_req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -485,10 +485,8 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
|
||||||
stolen_offset, gtt_offset, size);
|
stolen_offset, gtt_offset, size);
|
||||||
|
|
||||||
/* KISS and expect everything to be page-aligned */
|
/* KISS and expect everything to be page-aligned */
|
||||||
BUG_ON(stolen_offset & 4095);
|
if (WARN_ON(size == 0) || WARN_ON(size & 4095) ||
|
||||||
BUG_ON(size & 4095);
|
WARN_ON(stolen_offset & 4095))
|
||||||
|
|
||||||
if (WARN_ON(size == 0))
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
stolen = kzalloc(sizeof(*stolen), GFP_KERNEL);
|
stolen = kzalloc(sizeof(*stolen), GFP_KERNEL);
|
||||||
|
|
|
@ -335,9 +335,10 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_lock(&dev->struct_mutex);
|
||||||
if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) {
|
if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) {
|
||||||
drm_gem_object_unreference_unlocked(&obj->base);
|
ret = -EBUSY;
|
||||||
return -EBUSY;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args->tiling_mode == I915_TILING_NONE) {
|
if (args->tiling_mode == I915_TILING_NONE) {
|
||||||
|
@ -369,7 +370,6 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
|
||||||
if (args->tiling_mode != obj->tiling_mode ||
|
if (args->tiling_mode != obj->tiling_mode ||
|
||||||
args->stride != obj->stride) {
|
args->stride != obj->stride) {
|
||||||
/* We need to rebind the object if its current allocation
|
/* We need to rebind the object if its current allocation
|
||||||
|
@ -424,6 +424,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
|
||||||
obj->bit_17 = NULL;
|
obj->bit_17 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err:
|
||||||
drm_gem_object_unreference(&obj->base);
|
drm_gem_object_unreference(&obj->base);
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
||||||
|
|
|
@ -1892,6 +1892,9 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
||||||
u32 iir, gt_iir, pm_iir;
|
u32 iir, gt_iir, pm_iir;
|
||||||
irqreturn_t ret = IRQ_NONE;
|
irqreturn_t ret = IRQ_NONE;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
/* Find, clear, then process each source of interrupt */
|
/* Find, clear, then process each source of interrupt */
|
||||||
|
|
||||||
|
@ -1936,6 +1939,9 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
||||||
u32 master_ctl, iir;
|
u32 master_ctl, iir;
|
||||||
irqreturn_t ret = IRQ_NONE;
|
irqreturn_t ret = IRQ_NONE;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
|
master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
|
||||||
iir = I915_READ(VLV_IIR);
|
iir = I915_READ(VLV_IIR);
|
||||||
|
@ -2208,6 +2214,9 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
|
||||||
u32 de_iir, gt_iir, de_ier, sde_ier = 0;
|
u32 de_iir, gt_iir, de_ier, sde_ier = 0;
|
||||||
irqreturn_t ret = IRQ_NONE;
|
irqreturn_t ret = IRQ_NONE;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
/* We get interrupts on unclaimed registers, so check for this before we
|
/* We get interrupts on unclaimed registers, so check for this before we
|
||||||
* do any I915_{READ,WRITE}. */
|
* do any I915_{READ,WRITE}. */
|
||||||
intel_uncore_check_errors(dev);
|
intel_uncore_check_errors(dev);
|
||||||
|
@ -2279,6 +2288,9 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
|
||||||
enum pipe pipe;
|
enum pipe pipe;
|
||||||
u32 aux_mask = GEN8_AUX_CHANNEL_A;
|
u32 aux_mask = GEN8_AUX_CHANNEL_A;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
if (IS_GEN9(dev))
|
if (IS_GEN9(dev))
|
||||||
aux_mask |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
|
aux_mask |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
|
||||||
GEN9_AUX_CHANNEL_D;
|
GEN9_AUX_CHANNEL_D;
|
||||||
|
@ -3771,6 +3783,9 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
|
||||||
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
||||||
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
iir = I915_READ16(IIR);
|
iir = I915_READ16(IIR);
|
||||||
if (iir == 0)
|
if (iir == 0)
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
@ -3951,6 +3966,9 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
||||||
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
||||||
int pipe, ret = IRQ_NONE;
|
int pipe, ret = IRQ_NONE;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
iir = I915_READ(IIR);
|
iir = I915_READ(IIR);
|
||||||
do {
|
do {
|
||||||
bool irq_received = (iir & ~flip_mask) != 0;
|
bool irq_received = (iir & ~flip_mask) != 0;
|
||||||
|
@ -4171,6 +4189,9 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
||||||
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
||||||
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
||||||
|
|
||||||
|
if (!intel_irqs_enabled(dev_priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
iir = I915_READ(IIR);
|
iir = I915_READ(IIR);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -4520,6 +4541,7 @@ void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
dev_priv->dev->driver->irq_uninstall(dev_priv->dev);
|
dev_priv->dev->driver->irq_uninstall(dev_priv->dev);
|
||||||
dev_priv->pm.irqs_enabled = false;
|
dev_priv->pm.irqs_enabled = false;
|
||||||
|
synchronize_irq(dev_priv->dev->irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2371,13 +2371,19 @@ intel_alloc_plane_obj(struct intel_crtc *crtc,
|
||||||
struct drm_device *dev = crtc->base.dev;
|
struct drm_device *dev = crtc->base.dev;
|
||||||
struct drm_i915_gem_object *obj = NULL;
|
struct drm_i915_gem_object *obj = NULL;
|
||||||
struct drm_mode_fb_cmd2 mode_cmd = { 0 };
|
struct drm_mode_fb_cmd2 mode_cmd = { 0 };
|
||||||
u32 base = plane_config->base;
|
u32 base_aligned = round_down(plane_config->base, PAGE_SIZE);
|
||||||
|
u32 size_aligned = round_up(plane_config->base + plane_config->size,
|
||||||
|
PAGE_SIZE);
|
||||||
|
|
||||||
|
size_aligned -= base_aligned;
|
||||||
|
|
||||||
if (plane_config->size == 0)
|
if (plane_config->size == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base,
|
obj = i915_gem_object_create_stolen_for_preallocated(dev,
|
||||||
plane_config->size);
|
base_aligned,
|
||||||
|
base_aligned,
|
||||||
|
size_aligned);
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -2725,10 +2731,19 @@ static void skylake_update_primary_plane(struct drm_crtc *crtc,
|
||||||
case DRM_FORMAT_XRGB8888:
|
case DRM_FORMAT_XRGB8888:
|
||||||
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
||||||
break;
|
break;
|
||||||
|
case DRM_FORMAT_ARGB8888:
|
||||||
|
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
||||||
|
plane_ctl |= PLANE_CTL_ALPHA_SW_PREMULTIPLY;
|
||||||
|
break;
|
||||||
case DRM_FORMAT_XBGR8888:
|
case DRM_FORMAT_XBGR8888:
|
||||||
plane_ctl |= PLANE_CTL_ORDER_RGBX;
|
plane_ctl |= PLANE_CTL_ORDER_RGBX;
|
||||||
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
||||||
break;
|
break;
|
||||||
|
case DRM_FORMAT_ABGR8888:
|
||||||
|
plane_ctl |= PLANE_CTL_ORDER_RGBX;
|
||||||
|
plane_ctl |= PLANE_CTL_FORMAT_XRGB_8888;
|
||||||
|
plane_ctl |= PLANE_CTL_ALPHA_SW_PREMULTIPLY;
|
||||||
|
break;
|
||||||
case DRM_FORMAT_XRGB2101010:
|
case DRM_FORMAT_XRGB2101010:
|
||||||
plane_ctl |= PLANE_CTL_FORMAT_XRGB_2101010;
|
plane_ctl |= PLANE_CTL_FORMAT_XRGB_2101010;
|
||||||
break;
|
break;
|
||||||
|
@ -6627,7 +6642,7 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
||||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||||
plane_config->tiling);
|
plane_config->tiling);
|
||||||
|
|
||||||
plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height);
|
plane_config->size = fb->pitches[0] * aligned_height;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
DRM_DEBUG_KMS("pipe/plane %c/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
||||||
pipe_name(pipe), plane, fb->width, fb->height,
|
pipe_name(pipe), plane, fb->width, fb->height,
|
||||||
|
@ -7664,7 +7679,7 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||||
plane_config->tiling);
|
plane_config->tiling);
|
||||||
|
|
||||||
plane_config->size = ALIGN(fb->pitches[0] * aligned_height, PAGE_SIZE);
|
plane_config->size = fb->pitches[0] * aligned_height;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
||||||
pipe_name(pipe), fb->width, fb->height,
|
pipe_name(pipe), fb->width, fb->height,
|
||||||
|
@ -7755,7 +7770,7 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
|
||||||
aligned_height = intel_fb_align_height(dev, fb->height,
|
aligned_height = intel_fb_align_height(dev, fb->height,
|
||||||
plane_config->tiling);
|
plane_config->tiling);
|
||||||
|
|
||||||
plane_config->size = PAGE_ALIGN(fb->pitches[0] * aligned_height);
|
plane_config->size = fb->pitches[0] * aligned_height;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
DRM_DEBUG_KMS("pipe %c with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
|
||||||
pipe_name(pipe), fb->width, fb->height,
|
pipe_name(pipe), fb->width, fb->height,
|
||||||
|
@ -12182,9 +12197,6 @@ intel_check_cursor_plane(struct drm_plane *plane,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fb == crtc->cursor->fb)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* we only need to pin inside GTT if cursor is non-phy */
|
/* we only need to pin inside GTT if cursor is non-phy */
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
if (!INTEL_INFO(dev)->cursor_needs_physical && obj->tiling_mode) {
|
if (!INTEL_INFO(dev)->cursor_needs_physical && obj->tiling_mode) {
|
||||||
|
@ -13096,6 +13108,9 @@ static struct intel_quirk intel_quirks[] = {
|
||||||
|
|
||||||
/* HP Chromebook 14 (Celeron 2955U) */
|
/* HP Chromebook 14 (Celeron 2955U) */
|
||||||
{ 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
|
{ 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
|
||||||
|
|
||||||
|
/* Dell Chromebook 11 */
|
||||||
|
{ 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void intel_init_quirks(struct drm_device *dev)
|
static void intel_init_quirks(struct drm_device *dev)
|
||||||
|
|
|
@ -503,18 +503,19 @@ static int execlists_context_queue(struct intel_engine_cs *ring,
|
||||||
* If there isn't a request associated with this submission,
|
* If there isn't a request associated with this submission,
|
||||||
* create one as a temporary holder.
|
* create one as a temporary holder.
|
||||||
*/
|
*/
|
||||||
WARN(1, "execlist context submission without request");
|
|
||||||
request = kzalloc(sizeof(*request), GFP_KERNEL);
|
request = kzalloc(sizeof(*request), GFP_KERNEL);
|
||||||
if (request == NULL)
|
if (request == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
request->ring = ring;
|
request->ring = ring;
|
||||||
request->ctx = to;
|
request->ctx = to;
|
||||||
|
kref_init(&request->ref);
|
||||||
|
request->uniq = dev_priv->request_uniq++;
|
||||||
|
i915_gem_context_reference(request->ctx);
|
||||||
} else {
|
} else {
|
||||||
|
i915_gem_request_reference(request);
|
||||||
WARN_ON(to != request->ctx);
|
WARN_ON(to != request->ctx);
|
||||||
}
|
}
|
||||||
request->tail = tail;
|
request->tail = tail;
|
||||||
i915_gem_request_reference(request);
|
|
||||||
i915_gem_context_reference(request->ctx);
|
|
||||||
|
|
||||||
intel_runtime_pm_get(dev_priv);
|
intel_runtime_pm_get(dev_priv);
|
||||||
|
|
||||||
|
@ -731,7 +732,6 @@ void intel_execlists_retire_requests(struct intel_engine_cs *ring)
|
||||||
if (ctx_obj && (ctx != ring->default_context))
|
if (ctx_obj && (ctx != ring->default_context))
|
||||||
intel_lr_context_unpin(ring, ctx);
|
intel_lr_context_unpin(ring, ctx);
|
||||||
intel_runtime_pm_put(dev_priv);
|
intel_runtime_pm_put(dev_priv);
|
||||||
i915_gem_context_unreference(ctx);
|
|
||||||
list_del(&req->execlist_link);
|
list_del(&req->execlist_link);
|
||||||
i915_gem_request_unreference(req);
|
i915_gem_request_unreference(req);
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,9 +214,9 @@
|
||||||
INTEL_VGA_DEVICE((((gt) - 1) << 4) | (id), info)
|
INTEL_VGA_DEVICE((((gt) - 1) << 4) | (id), info)
|
||||||
|
|
||||||
#define _INTEL_BDW_M_IDS(gt, info) \
|
#define _INTEL_BDW_M_IDS(gt, info) \
|
||||||
_INTEL_BDW_M(gt, 0x1602, info), /* ULT */ \
|
_INTEL_BDW_M(gt, 0x1602, info), /* Halo */ \
|
||||||
_INTEL_BDW_M(gt, 0x1606, info), /* ULT */ \
|
_INTEL_BDW_M(gt, 0x1606, info), /* ULT */ \
|
||||||
_INTEL_BDW_M(gt, 0x160B, info), /* Iris */ \
|
_INTEL_BDW_M(gt, 0x160B, info), /* ULT */ \
|
||||||
_INTEL_BDW_M(gt, 0x160E, info) /* ULX */
|
_INTEL_BDW_M(gt, 0x160E, info) /* ULX */
|
||||||
|
|
||||||
#define _INTEL_BDW_D_IDS(gt, info) \
|
#define _INTEL_BDW_D_IDS(gt, info) \
|
||||||
|
|
Loading…
Add table
Reference in a new issue