Commit 42412b12 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-intel-fixes-2016-02-18' of git://anongit.freedesktop.org/drm-intel into drm-fixes

single g4x hpd fix.

* tag 'drm-intel-fixes-2016-02-18' of git://anongit.freedesktop.org/drm-intel:
  drm/i915: Fix hpd live status bits for g4x
parents 705d43db 8d409cb3
...@@ -3287,19 +3287,20 @@ enum skl_disp_power_wells { ...@@ -3287,19 +3287,20 @@ enum skl_disp_power_wells {
#define PORT_HOTPLUG_STAT _MMIO(dev_priv->info.display_mmio_offset + 0x61114) #define PORT_HOTPLUG_STAT _MMIO(dev_priv->info.display_mmio_offset + 0x61114)
/* /*
* HDMI/DP bits are gen4+ * HDMI/DP bits are g4x+
* *
* WARNING: Bspec for hpd status bits on gen4 seems to be completely confused. * WARNING: Bspec for hpd status bits on gen4 seems to be completely confused.
* Please check the detailed lore in the commit message for for experimental * Please check the detailed lore in the commit message for for experimental
* evidence. * evidence.
*/ */
#define PORTD_HOTPLUG_LIVE_STATUS_G4X (1 << 29) /* Bspec says GM45 should match G4X/VLV/CHV, but reality disagrees */
#define PORTD_HOTPLUG_LIVE_STATUS_GM45 (1 << 29)
#define PORTC_HOTPLUG_LIVE_STATUS_GM45 (1 << 28)
#define PORTB_HOTPLUG_LIVE_STATUS_GM45 (1 << 27)
/* G4X/VLV/CHV DP/HDMI bits again match Bspec */
#define PORTD_HOTPLUG_LIVE_STATUS_G4X (1 << 27)
#define PORTC_HOTPLUG_LIVE_STATUS_G4X (1 << 28) #define PORTC_HOTPLUG_LIVE_STATUS_G4X (1 << 28)
#define PORTB_HOTPLUG_LIVE_STATUS_G4X (1 << 27) #define PORTB_HOTPLUG_LIVE_STATUS_G4X (1 << 29)
/* VLV DP/HDMI bits again match Bspec */
#define PORTD_HOTPLUG_LIVE_STATUS_VLV (1 << 27)
#define PORTC_HOTPLUG_LIVE_STATUS_VLV (1 << 28)
#define PORTB_HOTPLUG_LIVE_STATUS_VLV (1 << 29)
#define PORTD_HOTPLUG_INT_STATUS (3 << 21) #define PORTD_HOTPLUG_INT_STATUS (3 << 21)
#define PORTD_HOTPLUG_INT_LONG_PULSE (2 << 21) #define PORTD_HOTPLUG_INT_LONG_PULSE (2 << 21)
#define PORTD_HOTPLUG_INT_SHORT_PULSE (1 << 21) #define PORTD_HOTPLUG_INT_SHORT_PULSE (1 << 21)
......
...@@ -4493,20 +4493,20 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv, ...@@ -4493,20 +4493,20 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
return I915_READ(PORT_HOTPLUG_STAT) & bit; return I915_READ(PORT_HOTPLUG_STAT) & bit;
} }
static bool vlv_digital_port_connected(struct drm_i915_private *dev_priv, static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
struct intel_digital_port *port) struct intel_digital_port *port)
{ {
u32 bit; u32 bit;
switch (port->port) { switch (port->port) {
case PORT_B: case PORT_B:
bit = PORTB_HOTPLUG_LIVE_STATUS_VLV; bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
break; break;
case PORT_C: case PORT_C:
bit = PORTC_HOTPLUG_LIVE_STATUS_VLV; bit = PORTC_HOTPLUG_LIVE_STATUS_GM45;
break; break;
case PORT_D: case PORT_D:
bit = PORTD_HOTPLUG_LIVE_STATUS_VLV; bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
break; break;
default: default:
MISSING_CASE(port->port); MISSING_CASE(port->port);
...@@ -4558,8 +4558,8 @@ bool intel_digital_port_connected(struct drm_i915_private *dev_priv, ...@@ -4558,8 +4558,8 @@ bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
return cpt_digital_port_connected(dev_priv, port); return cpt_digital_port_connected(dev_priv, port);
else if (IS_BROXTON(dev_priv)) else if (IS_BROXTON(dev_priv))
return bxt_digital_port_connected(dev_priv, port); return bxt_digital_port_connected(dev_priv, port);
else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) else if (IS_GM45(dev_priv))
return vlv_digital_port_connected(dev_priv, port); return gm45_digital_port_connected(dev_priv, port);
else else
return g4x_digital_port_connected(dev_priv, port); return g4x_digital_port_connected(dev_priv, port);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment