diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 35 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_hotplug.c | 19 |
5 files changed, 42 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index d29f95d8999a..2d855faac708 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -2958,8 +2958,10 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 2958 | void intel_hpd_init(struct drm_i915_private *dev_priv); | 2958 | void intel_hpd_init(struct drm_i915_private *dev_priv); |
| 2959 | void intel_hpd_init_work(struct drm_i915_private *dev_priv); | 2959 | void intel_hpd_init_work(struct drm_i915_private *dev_priv); |
| 2960 | void intel_hpd_cancel_work(struct drm_i915_private *dev_priv); | 2960 | void intel_hpd_cancel_work(struct drm_i915_private *dev_priv); |
| 2961 | enum port intel_hpd_pin_to_port(enum hpd_pin pin); | 2961 | enum port intel_hpd_pin_to_port(struct drm_i915_private *dev_priv, |
| 2962 | enum hpd_pin intel_hpd_pin(enum port port); | 2962 | enum hpd_pin pin); |
| 2963 | enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv, | ||
| 2964 | enum port port); | ||
| 2963 | bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin); | 2965 | bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin); |
| 2964 | void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin); | 2966 | void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin); |
| 2965 | 2967 | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 79fadb50ab69..252feff2892d 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -1574,10 +1574,11 @@ static bool i9xx_port_hotplug_long_detect(enum port port, u32 val) | |||
| 1574 | * | 1574 | * |
| 1575 | * Note that the caller is expected to zero out the masks initially. | 1575 | * Note that the caller is expected to zero out the masks initially. |
| 1576 | */ | 1576 | */ |
| 1577 | static void intel_get_hpd_pins(u32 *pin_mask, u32 *long_mask, | 1577 | static void intel_get_hpd_pins(struct drm_i915_private *dev_priv, |
| 1578 | u32 hotplug_trigger, u32 dig_hotplug_reg, | 1578 | u32 *pin_mask, u32 *long_mask, |
| 1579 | const u32 hpd[HPD_NUM_PINS], | 1579 | u32 hotplug_trigger, u32 dig_hotplug_reg, |
| 1580 | bool long_pulse_detect(enum port port, u32 val)) | 1580 | const u32 hpd[HPD_NUM_PINS], |
| 1581 | bool long_pulse_detect(enum port port, u32 val)) | ||
| 1581 | { | 1582 | { |
| 1582 | enum port port; | 1583 | enum port port; |
| 1583 | int i; | 1584 | int i; |
| @@ -1588,7 +1589,7 @@ static void intel_get_hpd_pins(u32 *pin_mask, u32 *long_mask, | |||
| 1588 | 1589 | ||
| 1589 | *pin_mask |= BIT(i); | 1590 | *pin_mask |= BIT(i); |
| 1590 | 1591 | ||
| 1591 | port = intel_hpd_pin_to_port(i); | 1592 | port = intel_hpd_pin_to_port(dev_priv, i); |
| 1592 | if (port == PORT_NONE) | 1593 | if (port == PORT_NONE) |
| 1593 | continue; | 1594 | continue; |
| 1594 | 1595 | ||
| @@ -1976,8 +1977,9 @@ static void i9xx_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 1976 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X; | 1977 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_G4X; |
| 1977 | 1978 | ||
| 1978 | if (hotplug_trigger) { | 1979 | if (hotplug_trigger) { |
| 1979 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 1980 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, |
| 1980 | hotplug_trigger, hpd_status_g4x, | 1981 | hotplug_trigger, hotplug_trigger, |
| 1982 | hpd_status_g4x, | ||
| 1981 | i9xx_port_hotplug_long_detect); | 1983 | i9xx_port_hotplug_long_detect); |
| 1982 | 1984 | ||
| 1983 | intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); | 1985 | intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); |
| @@ -1989,8 +1991,9 @@ static void i9xx_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 1989 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_I915; | 1991 | u32 hotplug_trigger = hotplug_status & HOTPLUG_INT_STATUS_I915; |
| 1990 | 1992 | ||
| 1991 | if (hotplug_trigger) { | 1993 | if (hotplug_trigger) { |
| 1992 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 1994 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, |
| 1993 | hotplug_trigger, hpd_status_i915, | 1995 | hotplug_trigger, hotplug_trigger, |
| 1996 | hpd_status_i915, | ||
| 1994 | i9xx_port_hotplug_long_detect); | 1997 | i9xx_port_hotplug_long_detect); |
| 1995 | intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); | 1998 | intel_hpd_irq_handler(dev_priv, pin_mask, long_mask); |
| 1996 | } | 1999 | } |
| @@ -2191,7 +2194,7 @@ static void ibx_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 2191 | if (!hotplug_trigger) | 2194 | if (!hotplug_trigger) |
| 2192 | return; | 2195 | return; |
| 2193 | 2196 | ||
| 2194 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 2197 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, hotplug_trigger, |
| 2195 | dig_hotplug_reg, hpd, | 2198 | dig_hotplug_reg, hpd, |
| 2196 | pch_port_hotplug_long_detect); | 2199 | pch_port_hotplug_long_detect); |
| 2197 | 2200 | ||
| @@ -2333,8 +2336,8 @@ static void spt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir) | |||
| 2333 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); | 2336 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); |
| 2334 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); | 2337 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); |
| 2335 | 2338 | ||
| 2336 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 2339 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, |
| 2337 | dig_hotplug_reg, hpd_spt, | 2340 | hotplug_trigger, dig_hotplug_reg, hpd_spt, |
| 2338 | spt_port_hotplug_long_detect); | 2341 | spt_port_hotplug_long_detect); |
| 2339 | } | 2342 | } |
| 2340 | 2343 | ||
| @@ -2344,8 +2347,8 @@ static void spt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir) | |||
| 2344 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG2); | 2347 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG2); |
| 2345 | I915_WRITE(PCH_PORT_HOTPLUG2, dig_hotplug_reg); | 2348 | I915_WRITE(PCH_PORT_HOTPLUG2, dig_hotplug_reg); |
| 2346 | 2349 | ||
| 2347 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug2_trigger, | 2350 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, |
| 2348 | dig_hotplug_reg, hpd_spt, | 2351 | hotplug2_trigger, dig_hotplug_reg, hpd_spt, |
| 2349 | spt_port_hotplug2_long_detect); | 2352 | spt_port_hotplug2_long_detect); |
| 2350 | } | 2353 | } |
| 2351 | 2354 | ||
| @@ -2365,7 +2368,7 @@ static void ilk_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 2365 | dig_hotplug_reg = I915_READ(DIGITAL_PORT_HOTPLUG_CNTRL); | 2368 | dig_hotplug_reg = I915_READ(DIGITAL_PORT_HOTPLUG_CNTRL); |
| 2366 | I915_WRITE(DIGITAL_PORT_HOTPLUG_CNTRL, dig_hotplug_reg); | 2369 | I915_WRITE(DIGITAL_PORT_HOTPLUG_CNTRL, dig_hotplug_reg); |
| 2367 | 2370 | ||
| 2368 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 2371 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, hotplug_trigger, |
| 2369 | dig_hotplug_reg, hpd, | 2372 | dig_hotplug_reg, hpd, |
| 2370 | ilk_port_hotplug_long_detect); | 2373 | ilk_port_hotplug_long_detect); |
| 2371 | 2374 | ||
| @@ -2542,7 +2545,7 @@ static void bxt_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 2542 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); | 2545 | dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); |
| 2543 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); | 2546 | I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); |
| 2544 | 2547 | ||
| 2545 | intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, | 2548 | intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask, hotplug_trigger, |
| 2546 | dig_hotplug_reg, hpd, | 2549 | dig_hotplug_reg, hpd, |
| 2547 | bxt_port_hotplug_long_detect); | 2550 | bxt_port_hotplug_long_detect); |
| 2548 | 2551 | ||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index f00a00a703e5..1b37a40d2686 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -5981,8 +5981,10 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port) | |||
| 5981 | { | 5981 | { |
| 5982 | struct intel_encoder *encoder = &intel_dig_port->base; | 5982 | struct intel_encoder *encoder = &intel_dig_port->base; |
| 5983 | struct intel_dp *intel_dp = &intel_dig_port->dp; | 5983 | struct intel_dp *intel_dp = &intel_dig_port->dp; |
| 5984 | struct intel_encoder *intel_encoder = &intel_dig_port->base; | ||
| 5985 | struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); | ||
| 5984 | 5986 | ||
| 5985 | encoder->hpd_pin = intel_hpd_pin(encoder->port); | 5987 | encoder->hpd_pin = intel_hpd_pin_default(dev_priv, encoder->port); |
| 5986 | 5988 | ||
| 5987 | switch (encoder->port) { | 5989 | switch (encoder->port) { |
| 5988 | case PORT_A: | 5990 | case PORT_A: |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index a8f05f7d9226..2df18a85c3b4 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
| @@ -2091,7 +2091,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, | |||
| 2091 | 2091 | ||
| 2092 | if (WARN_ON(port == PORT_A)) | 2092 | if (WARN_ON(port == PORT_A)) |
| 2093 | return; | 2093 | return; |
| 2094 | intel_encoder->hpd_pin = intel_hpd_pin(port); | 2094 | intel_encoder->hpd_pin = intel_hpd_pin_default(dev_priv, port); |
| 2095 | 2095 | ||
| 2096 | if (HAS_DDI(dev_priv)) | 2096 | if (HAS_DDI(dev_priv)) |
| 2097 | intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; | 2097 | intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; |
diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c index 875d5d218d5c..fe28c1ea84a5 100644 --- a/drivers/gpu/drm/i915/intel_hotplug.c +++ b/drivers/gpu/drm/i915/intel_hotplug.c | |||
| @@ -78,12 +78,14 @@ | |||
| 78 | 78 | ||
| 79 | /** | 79 | /** |
| 80 | * intel_hpd_port - return port hard associated with certain pin. | 80 | * intel_hpd_port - return port hard associated with certain pin. |
| 81 | * @dev_priv: private driver data pointer | ||
| 81 | * @pin: the hpd pin to get associated port | 82 | * @pin: the hpd pin to get associated port |
| 82 | * | 83 | * |
| 83 | * Return port that is associatade with @pin and PORT_NONE if no port is | 84 | * Return port that is associatade with @pin and PORT_NONE if no port is |
| 84 | * hard associated with that @pin. | 85 | * hard associated with that @pin. |
| 85 | */ | 86 | */ |
| 86 | enum port intel_hpd_pin_to_port(enum hpd_pin pin) | 87 | enum port intel_hpd_pin_to_port(struct drm_i915_private *dev_priv, |
| 88 | enum hpd_pin pin) | ||
| 87 | { | 89 | { |
| 88 | switch (pin) { | 90 | switch (pin) { |
| 89 | case HPD_PORT_A: | 91 | case HPD_PORT_A: |
| @@ -95,6 +97,8 @@ enum port intel_hpd_pin_to_port(enum hpd_pin pin) | |||
| 95 | case HPD_PORT_D: | 97 | case HPD_PORT_D: |
| 96 | return PORT_D; | 98 | return PORT_D; |
| 97 | case HPD_PORT_E: | 99 | case HPD_PORT_E: |
| 100 | if (IS_CNL_WITH_PORT_F(dev_priv)) | ||
| 101 | return PORT_F; | ||
| 98 | return PORT_E; | 102 | return PORT_E; |
| 99 | default: | 103 | default: |
| 100 | return PORT_NONE; /* no port for this pin */ | 104 | return PORT_NONE; /* no port for this pin */ |
| @@ -102,13 +106,17 @@ enum port intel_hpd_pin_to_port(enum hpd_pin pin) | |||
| 102 | } | 106 | } |
| 103 | 107 | ||
| 104 | /** | 108 | /** |
| 105 | * intel_hpd_pin - return pin hard associated with certain port. | 109 | * intel_hpd_pin_default - return default pin associated with certain port. |
| 110 | * @dev_priv: private driver data pointer | ||
| 106 | * @port: the hpd port to get associated pin | 111 | * @port: the hpd port to get associated pin |
| 107 | * | 112 | * |
| 113 | * It is only valid and used by digital port encoder. | ||
| 114 | * | ||
| 108 | * Return pin that is associatade with @port and HDP_NONE if no pin is | 115 | * Return pin that is associatade with @port and HDP_NONE if no pin is |
| 109 | * hard associated with that @port. | 116 | * hard associated with that @port. |
| 110 | */ | 117 | */ |
| 111 | enum hpd_pin intel_hpd_pin(enum port port) | 118 | enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv, |
| 119 | enum port port) | ||
| 112 | { | 120 | { |
| 113 | switch (port) { | 121 | switch (port) { |
| 114 | case PORT_A: | 122 | case PORT_A: |
| @@ -121,6 +129,9 @@ enum hpd_pin intel_hpd_pin(enum port port) | |||
| 121 | return HPD_PORT_D; | 129 | return HPD_PORT_D; |
| 122 | case PORT_E: | 130 | case PORT_E: |
| 123 | return HPD_PORT_E; | 131 | return HPD_PORT_E; |
| 132 | case PORT_F: | ||
| 133 | if (IS_CNL_WITH_PORT_F(dev_priv)) | ||
| 134 | return HPD_PORT_E; | ||
| 124 | default: | 135 | default: |
| 125 | MISSING_CASE(port); | 136 | MISSING_CASE(port); |
| 126 | return HPD_NONE; | 137 | return HPD_NONE; |
| @@ -417,7 +428,7 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, | |||
| 417 | if (!(BIT(i) & pin_mask)) | 428 | if (!(BIT(i) & pin_mask)) |
| 418 | continue; | 429 | continue; |
| 419 | 430 | ||
| 420 | port = intel_hpd_pin_to_port(i); | 431 | port = intel_hpd_pin_to_port(dev_priv, i); |
| 421 | is_dig_port = port != PORT_NONE && | 432 | is_dig_port = port != PORT_NONE && |
| 422 | dev_priv->hotplug.irq_port[port]; | 433 | dev_priv->hotplug.irq_port[port]; |
| 423 | 434 | ||
