Merge tag 'drm-intel-fixes-2017-08-24' of git://anongit.freedesktop.org/git/drm-intel into drm-fixes
drm/i915 fixes for v4.13-rc7 * tag 'drm-intel-fixes-2017-08-24' of git://anongit.freedesktop.org/git/drm-intel: drm/i915/gvt: Fix the kernel null pointer error drm/i915: Clear lost context-switch interrupts across reset drm/i915/bxt: use NULL for GPIO connection ID drm/i915/cnl: Fix LSPCON support. drm/i915/vbt: ignore extraneous child devices for a port drm/i915: Initialize 'data' in intel_dsi_dcs_backlight.c
This commit is contained in:
commit
4b5587c8c3
@ -2714,7 +2714,7 @@ static int shadow_indirect_ctx(struct intel_shadow_wa_ctx *wa_ctx)
|
|||||||
unmap_src:
|
unmap_src:
|
||||||
i915_gem_object_unpin_map(obj);
|
i915_gem_object_unpin_map(obj);
|
||||||
put_obj:
|
put_obj:
|
||||||
i915_gem_object_put(wa_ctx->indirect_ctx.obj);
|
i915_gem_object_put(obj);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1120,8 +1120,8 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
|
|||||||
bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
|
bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
|
||||||
uint8_t aux_channel, ddc_pin;
|
uint8_t aux_channel, ddc_pin;
|
||||||
/* Each DDI port can have more than one value on the "DVO Port" field,
|
/* Each DDI port can have more than one value on the "DVO Port" field,
|
||||||
* so look for all the possible values for each port and abort if more
|
* so look for all the possible values for each port.
|
||||||
* than one is found. */
|
*/
|
||||||
int dvo_ports[][3] = {
|
int dvo_ports[][3] = {
|
||||||
{DVO_PORT_HDMIA, DVO_PORT_DPA, -1},
|
{DVO_PORT_HDMIA, DVO_PORT_DPA, -1},
|
||||||
{DVO_PORT_HDMIB, DVO_PORT_DPB, -1},
|
{DVO_PORT_HDMIB, DVO_PORT_DPB, -1},
|
||||||
@ -1130,7 +1130,10 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
|
|||||||
{DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE},
|
{DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Find the child device to use, abort if more than one found. */
|
/*
|
||||||
|
* Find the first child device to reference the port, report if more
|
||||||
|
* than one found.
|
||||||
|
*/
|
||||||
for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
|
for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
|
||||||
it = dev_priv->vbt.child_dev + i;
|
it = dev_priv->vbt.child_dev + i;
|
||||||
|
|
||||||
@ -1140,14 +1143,14 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
|
|||||||
|
|
||||||
if (it->common.dvo_port == dvo_ports[port][j]) {
|
if (it->common.dvo_port == dvo_ports[port][j]) {
|
||||||
if (child) {
|
if (child) {
|
||||||
DRM_DEBUG_KMS("More than one child device for port %c in VBT.\n",
|
DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n",
|
||||||
port_name(port));
|
port_name(port));
|
||||||
return;
|
} else {
|
||||||
}
|
|
||||||
child = it;
|
child = it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!child)
|
if (!child)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ static u32 dcs_get_backlight(struct intel_connector *connector)
|
|||||||
struct intel_encoder *encoder = connector->encoder;
|
struct intel_encoder *encoder = connector->encoder;
|
||||||
struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
|
struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
|
||||||
struct mipi_dsi_device *dsi_device;
|
struct mipi_dsi_device *dsi_device;
|
||||||
u8 data;
|
u8 data = 0;
|
||||||
enum port port;
|
enum port port;
|
||||||
|
|
||||||
/* FIXME: Need to take care of 16 bit brightness level */
|
/* FIXME: Need to take care of 16 bit brightness level */
|
||||||
|
@ -306,7 +306,7 @@ static void bxt_exec_gpio(struct drm_i915_private *dev_priv,
|
|||||||
|
|
||||||
if (!gpio_desc) {
|
if (!gpio_desc) {
|
||||||
gpio_desc = devm_gpiod_get_index(dev_priv->drm.dev,
|
gpio_desc = devm_gpiod_get_index(dev_priv->drm.dev,
|
||||||
"panel", gpio_index,
|
NULL, gpio_index,
|
||||||
value ? GPIOD_OUT_LOW :
|
value ? GPIOD_OUT_LOW :
|
||||||
GPIOD_OUT_HIGH);
|
GPIOD_OUT_HIGH);
|
||||||
|
|
||||||
|
@ -1221,6 +1221,14 @@ static int intel_init_workaround_bb(struct intel_engine_cs *engine)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u8 gtiir[] = {
|
||||||
|
[RCS] = 0,
|
||||||
|
[BCS] = 0,
|
||||||
|
[VCS] = 1,
|
||||||
|
[VCS2] = 1,
|
||||||
|
[VECS] = 3,
|
||||||
|
};
|
||||||
|
|
||||||
static int gen8_init_common_ring(struct intel_engine_cs *engine)
|
static int gen8_init_common_ring(struct intel_engine_cs *engine)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = engine->i915;
|
struct drm_i915_private *dev_priv = engine->i915;
|
||||||
@ -1245,9 +1253,22 @@ static int gen8_init_common_ring(struct intel_engine_cs *engine)
|
|||||||
|
|
||||||
DRM_DEBUG_DRIVER("Execlists enabled for %s\n", engine->name);
|
DRM_DEBUG_DRIVER("Execlists enabled for %s\n", engine->name);
|
||||||
|
|
||||||
/* After a GPU reset, we may have requests to replay */
|
GEM_BUG_ON(engine->id >= ARRAY_SIZE(gtiir));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear any pending interrupt state.
|
||||||
|
*
|
||||||
|
* We do it twice out of paranoia that some of the IIR are double
|
||||||
|
* buffered, and if we only reset it once there may still be
|
||||||
|
* an interrupt pending.
|
||||||
|
*/
|
||||||
|
I915_WRITE(GEN8_GT_IIR(gtiir[engine->id]),
|
||||||
|
GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift);
|
||||||
|
I915_WRITE(GEN8_GT_IIR(gtiir[engine->id]),
|
||||||
|
GT_CONTEXT_SWITCH_INTERRUPT << engine->irq_shift);
|
||||||
clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted);
|
clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted);
|
||||||
|
|
||||||
|
/* After a GPU reset, we may have requests to replay */
|
||||||
submit = false;
|
submit = false;
|
||||||
for (n = 0; n < ARRAY_SIZE(engine->execlist_port); n++) {
|
for (n = 0; n < ARRAY_SIZE(engine->execlist_port); n++) {
|
||||||
if (!port_isset(&port[n]))
|
if (!port_isset(&port[n]))
|
||||||
|
@ -210,8 +210,8 @@ bool lspcon_init(struct intel_digital_port *intel_dig_port)
|
|||||||
struct drm_device *dev = intel_dig_port->base.base.dev;
|
struct drm_device *dev = intel_dig_port->base.base.dev;
|
||||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||||
|
|
||||||
if (!IS_GEN9(dev_priv)) {
|
if (!HAS_LSPCON(dev_priv)) {
|
||||||
DRM_ERROR("LSPCON is supported on GEN9 only\n");
|
DRM_ERROR("LSPCON is not supported on this platform\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user