aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c6
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h9
-rw-r--r--drivers/gpu/drm/i915/intel_display.h1
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c6
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c22
6 files changed, 45 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 8b5c1a839655..d29f95d8999a 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1255,6 +1255,7 @@ enum modeset_restore {
1255#define DP_AUX_B 0x10 1255#define DP_AUX_B 0x10
1256#define DP_AUX_C 0x20 1256#define DP_AUX_C 0x20
1257#define DP_AUX_D 0x30 1257#define DP_AUX_D 0x30
1258#define DP_AUX_F 0x60
1258 1259
1259#define DDC_PIN_B 0x05 1260#define DDC_PIN_B 0x05
1260#define DDC_PIN_C 0x04 1261#define DDC_PIN_C 0x04
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 85c46a25265d..79fadb50ab69 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2585,6 +2585,9 @@ gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 master_ctl)
2585 GEN9_AUX_CHANNEL_C | 2585 GEN9_AUX_CHANNEL_C |
2586 GEN9_AUX_CHANNEL_D; 2586 GEN9_AUX_CHANNEL_D;
2587 2587
2588 if (IS_CNL_WITH_PORT_F(dev_priv))
2589 tmp_mask |= CNL_AUX_CHANNEL_F;
2590
2588 if (iir & tmp_mask) { 2591 if (iir & tmp_mask) {
2589 dp_aux_irq_handler(dev_priv); 2592 dp_aux_irq_handler(dev_priv);
2590 found = true; 2593 found = true;
@@ -3617,6 +3620,9 @@ static void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
3617 de_pipe_masked |= GEN8_DE_PIPE_IRQ_FAULT_ERRORS; 3620 de_pipe_masked |= GEN8_DE_PIPE_IRQ_FAULT_ERRORS;
3618 } 3621 }
3619 3622
3623 if (IS_CNL_WITH_PORT_F(dev_priv))
3624 de_port_masked |= CNL_AUX_CHANNEL_F;
3625
3620 de_pipe_enables = de_pipe_masked | GEN8_PIPE_VBLANK | 3626 de_pipe_enables = de_pipe_masked | GEN8_PIPE_VBLANK |
3621 GEN8_PIPE_FIFO_UNDERRUN; 3627 GEN8_PIPE_FIFO_UNDERRUN;
3622 3628
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b06db954c79f..98b4d8357a4c 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1312,6 +1312,7 @@ enum i915_power_well_id {
1312 CNL_DISP_PW_AUX_B = GLK_DISP_PW_AUX_B, 1312 CNL_DISP_PW_AUX_B = GLK_DISP_PW_AUX_B,
1313 CNL_DISP_PW_AUX_C = GLK_DISP_PW_AUX_C, 1313 CNL_DISP_PW_AUX_C = GLK_DISP_PW_AUX_C,
1314 CNL_DISP_PW_AUX_D, 1314 CNL_DISP_PW_AUX_D,
1315 CNL_DISP_PW_AUX_F,
1315 1316
1316 SKL_DISP_PW_1 = 14, 1317 SKL_DISP_PW_1 = 14,
1317 SKL_DISP_PW_2, 1318 SKL_DISP_PW_2,
@@ -5283,6 +5284,13 @@ enum {
5283#define _DPD_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64320) 5284#define _DPD_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64320)
5284#define _DPD_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64324) 5285#define _DPD_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64324)
5285 5286
5287#define _DPF_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64510)
5288#define _DPF_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64514)
5289#define _DPF_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64518)
5290#define _DPF_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6451c)
5291#define _DPF_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64520)
5292#define _DPF_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64524)
5293
5286#define DP_AUX_CH_CTL(port) _MMIO_PORT(port, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL) 5294#define DP_AUX_CH_CTL(port) _MMIO_PORT(port, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL)
5287#define DP_AUX_CH_DATA(port, i) _MMIO(_PORT(port, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4) /* 5 registers */ 5295#define DP_AUX_CH_DATA(port, i) _MMIO(_PORT(port, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4) /* 5 registers */
5288 5296
@@ -6938,6 +6946,7 @@ enum {
6938#define GEN8_DE_PORT_IMR _MMIO(0x44444) 6946#define GEN8_DE_PORT_IMR _MMIO(0x44444)
6939#define GEN8_DE_PORT_IIR _MMIO(0x44448) 6947#define GEN8_DE_PORT_IIR _MMIO(0x44448)
6940#define GEN8_DE_PORT_IER _MMIO(0x4444c) 6948#define GEN8_DE_PORT_IER _MMIO(0x4444c)
6949#define CNL_AUX_CHANNEL_F (1 << 28)
6941#define GEN9_AUX_CHANNEL_D (1 << 27) 6950#define GEN9_AUX_CHANNEL_D (1 << 27)
6942#define GEN9_AUX_CHANNEL_C (1 << 26) 6951#define GEN9_AUX_CHANNEL_C (1 << 26)
6943#define GEN9_AUX_CHANNEL_B (1 << 25) 6952#define GEN9_AUX_CHANNEL_B (1 << 25)
diff --git a/drivers/gpu/drm/i915/intel_display.h b/drivers/gpu/drm/i915/intel_display.h
index e47638931b51..30fa2041a45f 100644
--- a/drivers/gpu/drm/i915/intel_display.h
+++ b/drivers/gpu/drm/i915/intel_display.h
@@ -172,6 +172,7 @@ enum intel_display_power_domain {
172 POWER_DOMAIN_AUX_B, 172 POWER_DOMAIN_AUX_B,
173 POWER_DOMAIN_AUX_C, 173 POWER_DOMAIN_AUX_C,
174 POWER_DOMAIN_AUX_D, 174 POWER_DOMAIN_AUX_D,
175 POWER_DOMAIN_AUX_F,
175 POWER_DOMAIN_GMBUS, 176 POWER_DOMAIN_GMBUS,
176 POWER_DOMAIN_MODESET, 177 POWER_DOMAIN_MODESET,
177 POWER_DOMAIN_GT_IRQ, 178 POWER_DOMAIN_GT_IRQ,
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 48342a85e500..ba0bbce742a5 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1299,6 +1299,9 @@ static enum port intel_aux_port(struct drm_i915_private *dev_priv,
1299 case DP_AUX_D: 1299 case DP_AUX_D:
1300 aux_port = PORT_D; 1300 aux_port = PORT_D;
1301 break; 1301 break;
1302 case DP_AUX_F:
1303 aux_port = PORT_F;
1304 break;
1302 default: 1305 default:
1303 MISSING_CASE(info->alternate_aux_channel); 1306 MISSING_CASE(info->alternate_aux_channel);
1304 aux_port = PORT_A; 1307 aux_port = PORT_A;
@@ -5998,6 +6001,9 @@ intel_dp_init_connector_port_info(struct intel_digital_port *intel_dig_port)
5998 /* FIXME: Check VBT for actual wiring of PORT E */ 6001 /* FIXME: Check VBT for actual wiring of PORT E */
5999 intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D; 6002 intel_dp->aux_power_domain = POWER_DOMAIN_AUX_D;
6000 break; 6003 break;
6004 case PORT_F:
6005 intel_dp->aux_power_domain = POWER_DOMAIN_AUX_F;
6006 break;
6001 default: 6007 default:
6002 MISSING_CASE(encoder->port); 6008 MISSING_CASE(encoder->port);
6003 } 6009 }
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 5b1aa4b9c72c..a274e930f045 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -124,6 +124,8 @@ intel_display_power_domain_str(enum intel_display_power_domain domain)
124 return "AUX_C"; 124 return "AUX_C";
125 case POWER_DOMAIN_AUX_D: 125 case POWER_DOMAIN_AUX_D:
126 return "AUX_D"; 126 return "AUX_D";
127 case POWER_DOMAIN_AUX_F:
128 return "AUX_F";
127 case POWER_DOMAIN_GMBUS: 129 case POWER_DOMAIN_GMBUS:
128 return "GMBUS"; 130 return "GMBUS";
129 case POWER_DOMAIN_INIT: 131 case POWER_DOMAIN_INIT:
@@ -1828,6 +1830,7 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
1828 BIT_ULL(POWER_DOMAIN_AUX_B) | \ 1830 BIT_ULL(POWER_DOMAIN_AUX_B) | \
1829 BIT_ULL(POWER_DOMAIN_AUX_C) | \ 1831 BIT_ULL(POWER_DOMAIN_AUX_C) | \
1830 BIT_ULL(POWER_DOMAIN_AUX_D) | \ 1832 BIT_ULL(POWER_DOMAIN_AUX_D) | \
1833 BIT_ULL(POWER_DOMAIN_AUX_F) | \
1831 BIT_ULL(POWER_DOMAIN_AUDIO) | \ 1834 BIT_ULL(POWER_DOMAIN_AUDIO) | \
1832 BIT_ULL(POWER_DOMAIN_VGA) | \ 1835 BIT_ULL(POWER_DOMAIN_VGA) | \
1833 BIT_ULL(POWER_DOMAIN_INIT)) 1836 BIT_ULL(POWER_DOMAIN_INIT))
@@ -1855,6 +1858,9 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
1855#define CNL_DISPLAY_AUX_D_POWER_DOMAINS ( \ 1858#define CNL_DISPLAY_AUX_D_POWER_DOMAINS ( \
1856 BIT_ULL(POWER_DOMAIN_AUX_D) | \ 1859 BIT_ULL(POWER_DOMAIN_AUX_D) | \
1857 BIT_ULL(POWER_DOMAIN_INIT)) 1860 BIT_ULL(POWER_DOMAIN_INIT))
1861#define CNL_DISPLAY_AUX_F_POWER_DOMAINS ( \
1862 BIT_ULL(POWER_DOMAIN_AUX_F) | \
1863 BIT_ULL(POWER_DOMAIN_INIT))
1858#define CNL_DISPLAY_DC_OFF_POWER_DOMAINS ( \ 1864#define CNL_DISPLAY_DC_OFF_POWER_DOMAINS ( \
1859 CNL_DISPLAY_POWERWELL_2_POWER_DOMAINS | \ 1865 CNL_DISPLAY_POWERWELL_2_POWER_DOMAINS | \
1860 BIT_ULL(POWER_DOMAIN_GT_IRQ) | \ 1866 BIT_ULL(POWER_DOMAIN_GT_IRQ) | \
@@ -2405,6 +2411,12 @@ static struct i915_power_well cnl_power_wells[] = {
2405 .ops = &hsw_power_well_ops, 2411 .ops = &hsw_power_well_ops,
2406 .id = SKL_DISP_PW_DDI_D, 2412 .id = SKL_DISP_PW_DDI_D,
2407 }, 2413 },
2414 {
2415 .name = "AUX F",
2416 .domains = CNL_DISPLAY_AUX_F_POWER_DOMAINS,
2417 .ops = &hsw_power_well_ops,
2418 .id = CNL_DISP_PW_AUX_F,
2419 },
2408}; 2420};
2409 2421
2410static int 2422static int
@@ -2520,6 +2532,16 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
2520 set_power_wells(power_domains, skl_power_wells); 2532 set_power_wells(power_domains, skl_power_wells);
2521 } else if (IS_CANNONLAKE(dev_priv)) { 2533 } else if (IS_CANNONLAKE(dev_priv)) {
2522 set_power_wells(power_domains, cnl_power_wells); 2534 set_power_wells(power_domains, cnl_power_wells);
2535
2536 /*
2537 * Aux IO is getting enabled for all ports
2538 * regardless the presence or use. So, in order to avoid
2539 * timeouts, lets remove it from the list
2540 * for the SKUs without port F.
2541 */
2542 if (!IS_CNL_WITH_PORT_F(dev_priv))
2543 power_domains->power_well_count -= 1;
2544
2523 } else if (IS_BROXTON(dev_priv)) { 2545 } else if (IS_BROXTON(dev_priv)) {
2524 set_power_wells(power_domains, bxt_power_wells); 2546 set_power_wells(power_domains, bxt_power_wells);
2525 } else if (IS_GEMINILAKE(dev_priv)) { 2547 } else if (IS_GEMINILAKE(dev_priv)) {