Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −7
Original line number Original line Diff line number Diff line
@@ -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)
+7 −7
Original line number Original line Diff line number Diff line
@@ -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,
		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);
}
}