* [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports
@ 2018-10-31 16:26 Imre Deak
2018-10-31 16:26 ` [PATCH v3 1/8] drm/i915: Move intel_aux_ch() to intel_bios.c Imre Deak
` (11 more replies)
0 siblings, 12 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Lucas De Marchi, Paulo Zanoni
v3 of https://patchwork.freedesktop.org/series/51765/ addressing
Jose's and Lucas' review comments.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Imre Deak (8):
drm/i915: Move intel_aux_ch() to intel_bios.c
drm/i915: Move aux_ch to intel_digital_port
drm/i915: Init aux_ch for HDMI ports too
drm/i915: Use a helper to get the aux power domain
drm/i915: Enable AUX power earlier
drm/i915: Enable AUX power for HDMI DDI/TypeC main link too
drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain
drm/i915/icl+: Sanitize port to PLL mapping
drivers/gpu/drm/i915/i915_drv.h | 6 ++
drivers/gpu/drm/i915/intel_bios.c | 45 ++++++++++
drivers/gpu/drm/i915/intel_ddi.c | 95 ++++++++++++++------
drivers/gpu/drm/i915/intel_display.c | 28 ++++++
drivers/gpu/drm/i915/intel_dp.c | 148 +++++++++++---------------------
drivers/gpu/drm/i915/intel_drv.h | 7 +-
drivers/gpu/drm/i915/intel_hdmi.c | 1 +
drivers/gpu/drm/i915/intel_runtime_pm.c | 50 +++++++++--
8 files changed, 246 insertions(+), 134 deletions(-)
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v3 1/8] drm/i915: Move intel_aux_ch() to intel_bios.c
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 16:26 ` [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port Imre Deak
` (10 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
From ICL onwards all the DDI/TypeC ports - even working in HDMI mode -
need to know their corresponding AUX channel, so move the corresponding
helper to a common place.
No functional change.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/intel_bios.c | 45 +++++++++++++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_dp.c | 50 +--------------------------------------
3 files changed, 47 insertions(+), 49 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c9e5bab6861b..c57b701f72a7 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3445,6 +3445,7 @@ bool intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv,
enum port port);
bool intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv,
enum port port);
+enum aux_ch intel_aux_ch(struct drm_i915_private *dev_priv, enum port port);
/* intel_acpi.c */
#ifdef CONFIG_ACPI
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 1faa494e2bc9..c7682a470c6a 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -2159,3 +2159,48 @@ intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv,
return false;
}
+
+enum aux_ch intel_aux_ch(struct drm_i915_private *dev_priv, enum port port)
+{
+ const struct ddi_vbt_port_info *info =
+ &dev_priv->vbt.ddi_port_info[port];
+ enum aux_ch aux_ch;
+
+ if (!info->alternate_aux_channel) {
+ aux_ch = (enum aux_ch) port;
+
+ DRM_DEBUG_KMS("using AUX %c for port %c (platform default)\n",
+ aux_ch_name(aux_ch), port_name(port));
+ return aux_ch;
+ }
+
+ switch (info->alternate_aux_channel) {
+ case DP_AUX_A:
+ aux_ch = AUX_CH_A;
+ break;
+ case DP_AUX_B:
+ aux_ch = AUX_CH_B;
+ break;
+ case DP_AUX_C:
+ aux_ch = AUX_CH_C;
+ break;
+ case DP_AUX_D:
+ aux_ch = AUX_CH_D;
+ break;
+ case DP_AUX_E:
+ aux_ch = AUX_CH_E;
+ break;
+ case DP_AUX_F:
+ aux_ch = AUX_CH_F;
+ break;
+ default:
+ MISSING_CASE(info->alternate_aux_channel);
+ aux_ch = AUX_CH_A;
+ break;
+ }
+
+ DRM_DEBUG_KMS("using AUX %c for port %c (VBT)\n",
+ aux_ch_name(aux_ch), port_name(port));
+
+ return aux_ch;
+}
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 6b37d66194a3..2445897b8f6c 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1503,54 +1503,6 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
return ret;
}
-static enum aux_ch intel_aux_ch(struct intel_dp *intel_dp)
-{
- struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
- struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
- enum port port = encoder->port;
- const struct ddi_vbt_port_info *info =
- &dev_priv->vbt.ddi_port_info[port];
- enum aux_ch aux_ch;
-
- if (!info->alternate_aux_channel) {
- aux_ch = (enum aux_ch) port;
-
- DRM_DEBUG_KMS("using AUX %c for port %c (platform default)\n",
- aux_ch_name(aux_ch), port_name(port));
- return aux_ch;
- }
-
- switch (info->alternate_aux_channel) {
- case DP_AUX_A:
- aux_ch = AUX_CH_A;
- break;
- case DP_AUX_B:
- aux_ch = AUX_CH_B;
- break;
- case DP_AUX_C:
- aux_ch = AUX_CH_C;
- break;
- case DP_AUX_D:
- aux_ch = AUX_CH_D;
- break;
- case DP_AUX_E:
- aux_ch = AUX_CH_E;
- break;
- case DP_AUX_F:
- aux_ch = AUX_CH_F;
- break;
- default:
- MISSING_CASE(info->alternate_aux_channel);
- aux_ch = AUX_CH_A;
- break;
- }
-
- DRM_DEBUG_KMS("using AUX %c for port %c (VBT)\n",
- aux_ch_name(aux_ch), port_name(port));
-
- return aux_ch;
-}
-
static enum intel_display_power_domain
intel_aux_power_domain(struct intel_dp *intel_dp)
{
@@ -1691,7 +1643,7 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
- intel_dp->aux_ch = intel_aux_ch(intel_dp);
+ intel_dp->aux_ch = intel_aux_ch(dev_priv, encoder->port);
intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
if (INTEL_GEN(dev_priv) >= 9) {
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
2018-10-31 16:26 ` [PATCH v3 1/8] drm/i915: Move intel_aux_ch() to intel_bios.c Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 17:11 ` Souza, Jose
2018-10-31 16:26 ` [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too Imre Deak
` (9 subsequent siblings)
11 siblings, 1 reply; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
From ICL onwards all DDI/TypeC ports - even working in HDMI mode - need
to know their corresponding AUX CH, so move the field to a common
struct.
No functional change.
v3:
- Add code comment about which ports aux_ch is used for. (Jose)
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 4 +++-
drivers/gpu/drm/i915/intel_dp.c | 35 +++++++++++++++++++++++------------
drivers/gpu/drm/i915/intel_drv.h | 3 ++-
3 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index e40a8c97d34b..32a080265d03 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2084,6 +2084,8 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
static inline enum intel_display_power_domain
intel_ddi_main_link_aux_domain(struct intel_dp *intel_dp)
{
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+
/* CNL+ HW requires corresponding AUX IOs to be powered up for PSR with
* DC states enabled at the same time, while for driver initiated AUX
* transfers we need the same AUX IOs to be powered but with DC states
@@ -2096,7 +2098,7 @@ intel_ddi_main_link_aux_domain(struct intel_dp *intel_dp)
* Note that PSR is enabled only on Port A even though this function
* returns the correct domain for other ports too.
*/
- return intel_dp->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
+ return dig_port->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
intel_dp->aux_power_domain;
}
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 2445897b8f6c..5530c604c694 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1156,6 +1156,7 @@ static uint32_t g4x_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
if (index)
return 0;
@@ -1165,7 +1166,7 @@ static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
* like to run at 2MHz. So, take the cdclk or PCH rawclk value and
* divide by 2000 and use that
*/
- if (intel_dp->aux_ch == AUX_CH_A)
+ if (dig_port->aux_ch == AUX_CH_A)
return DIV_ROUND_CLOSEST(dev_priv->cdclk.hw.cdclk, 2000);
else
return DIV_ROUND_CLOSEST(dev_priv->rawclk_freq, 2000);
@@ -1174,8 +1175,9 @@ static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
- if (intel_dp->aux_ch != AUX_CH_A && HAS_PCH_LPT_H(dev_priv)) {
+ if (dig_port->aux_ch != AUX_CH_A && HAS_PCH_LPT_H(dev_priv)) {
/* Workaround for non-ULT HSW */
switch (index) {
case 0: return 63;
@@ -1506,7 +1508,9 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
static enum intel_display_power_domain
intel_aux_power_domain(struct intel_dp *intel_dp)
{
- switch (intel_dp->aux_ch) {
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+
+ switch (dig_port->aux_ch) {
case AUX_CH_A:
return POWER_DOMAIN_AUX_A;
case AUX_CH_B:
@@ -1520,7 +1524,7 @@ intel_aux_power_domain(struct intel_dp *intel_dp)
case AUX_CH_F:
return POWER_DOMAIN_AUX_F;
default:
- MISSING_CASE(intel_dp->aux_ch);
+ MISSING_CASE(dig_port->aux_ch);
return POWER_DOMAIN_AUX_A;
}
}
@@ -1528,7 +1532,8 @@ intel_aux_power_domain(struct intel_dp *intel_dp)
static i915_reg_t g4x_aux_ctl_reg(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_B:
@@ -1544,7 +1549,8 @@ static i915_reg_t g4x_aux_ctl_reg(struct intel_dp *intel_dp)
static i915_reg_t g4x_aux_data_reg(struct intel_dp *intel_dp, int index)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_B:
@@ -1560,7 +1566,8 @@ static i915_reg_t g4x_aux_data_reg(struct intel_dp *intel_dp, int index)
static i915_reg_t ilk_aux_ctl_reg(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_A:
@@ -1578,7 +1585,8 @@ static i915_reg_t ilk_aux_ctl_reg(struct intel_dp *intel_dp)
static i915_reg_t ilk_aux_data_reg(struct intel_dp *intel_dp, int index)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_A:
@@ -1596,7 +1604,8 @@ static i915_reg_t ilk_aux_data_reg(struct intel_dp *intel_dp, int index)
static i915_reg_t skl_aux_ctl_reg(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_A:
@@ -1615,7 +1624,8 @@ static i915_reg_t skl_aux_ctl_reg(struct intel_dp *intel_dp)
static i915_reg_t skl_aux_data_reg(struct intel_dp *intel_dp, int index)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- enum aux_ch aux_ch = intel_dp->aux_ch;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
case AUX_CH_A:
@@ -1641,9 +1651,10 @@ static void
intel_dp_aux_init(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
- struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct intel_encoder *encoder = &dig_port->base;
- intel_dp->aux_ch = intel_aux_ch(dev_priv, encoder->port);
+ dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
if (INTEL_GEN(dev_priv) >= 9) {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index e4eaa40bd5f1..5bc7ba326111 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1109,7 +1109,6 @@ struct intel_dp {
bool link_trained;
bool has_audio;
bool reset_link_params;
- enum aux_ch aux_ch;
uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
@@ -1213,6 +1212,8 @@ struct intel_digital_port {
enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
bool release_cl2_override;
uint8_t max_lanes;
+ /* Used for DP and ICL+ TypeC/DP and TypeC/HDMI ports. */
+ enum aux_ch aux_ch;
enum intel_display_power_domain ddi_io_power_domain;
enum tc_port_type tc_type;
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
2018-10-31 16:26 ` [PATCH v3 1/8] drm/i915: Move intel_aux_ch() to intel_bios.c Imre Deak
2018-10-31 16:26 ` [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 17:14 ` Souza, Jose
2018-10-31 16:26 ` [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain Imre Deak
` (8 subsequent siblings)
11 siblings, 1 reply; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
From ICL onwards DDI/TypeC ports - even in HDMI static mode - need to know
which AUX CH belongs to them, so initialize aux_ch for those ports too.
For consistency do this for all HDMI ports, not only for DDI/TypeC ones.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 1 +
drivers/gpu/drm/i915/intel_dp.c | 2 +-
drivers/gpu/drm/i915/intel_hdmi.c | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 32a080265d03..3739ef003819 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -3852,6 +3852,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
(DDI_BUF_PORT_REVERSAL | DDI_A_4_LANES);
intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
intel_dig_port->max_lanes = intel_ddi_max_lanes(intel_dig_port);
+ intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
switch (port) {
case PORT_A:
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 5530c604c694..6645c9faca9a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1654,7 +1654,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
struct intel_encoder *encoder = &dig_port->base;
- dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
if (INTEL_GEN(dev_priv) >= 9) {
@@ -6706,6 +6705,7 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
if (port != PORT_A)
intel_infoframe_init(intel_dig_port);
+ intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
if (!intel_dp_init_connector(intel_dig_port, intel_connector))
goto err_init_connector;
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 129b880bce64..b50c5497048a 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2506,5 +2506,6 @@ void intel_hdmi_init(struct drm_i915_private *dev_priv,
intel_infoframe_init(intel_dig_port);
+ intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
intel_hdmi_init_connector(intel_dig_port, intel_connector);
}
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (2 preceding siblings ...)
2018-10-31 16:26 ` [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 17:12 ` Souza, Jose
2018-10-31 16:26 ` [PATCH v3 5/8] drm/i915: Enable AUX power earlier Imre Deak
` (7 subsequent siblings)
11 siblings, 1 reply; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Lucas De Marchi, Paulo Zanoni
From ICL onwards the AUX power domain may change dynamically based on
whether a DDI/TypeC port is in thunderbolt or non-thunderbolt mode, so
use a helper function instead of a static field to get the current
domain.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/intel_display.c | 22 +++++++++++
drivers/gpu/drm/i915/intel_dp.c | 73 +++++++++++++++---------------------
drivers/gpu/drm/i915/intel_drv.h | 3 +-
4 files changed, 56 insertions(+), 44 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 3739ef003819..5bb459011a49 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2099,7 +2099,7 @@ intel_ddi_main_link_aux_domain(struct intel_dp *intel_dp)
* returns the correct domain for other ports too.
*/
return dig_port->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
- intel_dp->aux_power_domain;
+ intel_aux_power_domain(dig_port);
}
static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder,
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c3cadc09f859..36710a30fb37 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5949,6 +5949,28 @@ enum intel_display_power_domain intel_port_to_power_domain(enum port port)
}
}
+enum intel_display_power_domain
+intel_aux_power_domain(struct intel_digital_port *dig_port)
+{
+ switch (dig_port->aux_ch) {
+ case AUX_CH_A:
+ return POWER_DOMAIN_AUX_A;
+ case AUX_CH_B:
+ return POWER_DOMAIN_AUX_B;
+ case AUX_CH_C:
+ return POWER_DOMAIN_AUX_C;
+ case AUX_CH_D:
+ return POWER_DOMAIN_AUX_D;
+ case AUX_CH_E:
+ return POWER_DOMAIN_AUX_E;
+ case AUX_CH_F:
+ return POWER_DOMAIN_AUX_F;
+ default:
+ MISSING_CASE(dig_port->aux_ch);
+ return POWER_DOMAIN_AUX_A;
+ }
+}
+
static u64 get_crtc_power_domains(struct drm_crtc *crtc,
struct intel_crtc_state *crtc_state)
{
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 6645c9faca9a..e6f59ef59be6 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -690,7 +690,8 @@ static void pps_lock(struct intel_dp *intel_dp)
* See intel_power_sequencer_reset() why we need
* a power domain reference here.
*/
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv,
+ intel_aux_power_domain(dp_to_dig_port(intel_dp)));
mutex_lock(&dev_priv->pps_mutex);
}
@@ -701,7 +702,8 @@ static void pps_unlock(struct intel_dp *intel_dp)
mutex_unlock(&dev_priv->pps_mutex);
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv,
+ intel_aux_power_domain(dp_to_dig_port(intel_dp)));
}
static void
@@ -1505,29 +1507,6 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
return ret;
}
-static enum intel_display_power_domain
-intel_aux_power_domain(struct intel_dp *intel_dp)
-{
- struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
-
- switch (dig_port->aux_ch) {
- case AUX_CH_A:
- return POWER_DOMAIN_AUX_A;
- case AUX_CH_B:
- return POWER_DOMAIN_AUX_B;
- case AUX_CH_C:
- return POWER_DOMAIN_AUX_C;
- case AUX_CH_D:
- return POWER_DOMAIN_AUX_D;
- case AUX_CH_E:
- return POWER_DOMAIN_AUX_E;
- case AUX_CH_F:
- return POWER_DOMAIN_AUX_F;
- default:
- MISSING_CASE(dig_port->aux_ch);
- return POWER_DOMAIN_AUX_A;
- }
-}
static i915_reg_t g4x_aux_ctl_reg(struct intel_dp *intel_dp)
{
@@ -1654,8 +1633,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
struct intel_encoder *encoder = &dig_port->base;
- intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
-
if (INTEL_GEN(dev_priv) >= 9) {
intel_dp->aux_ch_ctl_reg = skl_aux_ctl_reg;
intel_dp->aux_ch_data_reg = skl_aux_data_reg;
@@ -2356,7 +2333,8 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
if (edp_have_panel_vdd(intel_dp))
return need_to_disable;
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv,
+ intel_aux_power_domain(intel_dig_port));
DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",
port_name(intel_dig_port->base.port));
@@ -2442,7 +2420,8 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
if ((pp & PANEL_POWER_ON) == 0)
intel_dp->panel_power_off_time = ktime_get_boottime();
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv,
+ intel_aux_power_domain(intel_dig_port));
}
static void edp_panel_vdd_work(struct work_struct *__work)
@@ -2555,6 +2534,7 @@ void intel_edp_panel_on(struct intel_dp *intel_dp)
static void edp_panel_off(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
u32 pp;
i915_reg_t pp_ctrl_reg;
@@ -2564,10 +2544,10 @@ static void edp_panel_off(struct intel_dp *intel_dp)
return;
DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",
- port_name(dp_to_dig_port(intel_dp)->base.port));
+ port_name(dig_port->base.port));
WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn off panel\n",
- port_name(dp_to_dig_port(intel_dp)->base.port));
+ port_name(dig_port->base.port));
pp = ironlake_get_pp_control(intel_dp);
/* We need to switch off panel power _and_ force vdd, for otherwise some
@@ -2586,7 +2566,7 @@ static void edp_panel_off(struct intel_dp *intel_dp)
intel_dp->panel_power_off_time = ktime_get_boottime();
/* We got a reference when we enabled the VDD. */
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv, intel_aux_power_domain(dig_port));
}
void intel_edp_panel_off(struct intel_dp *intel_dp)
@@ -5069,14 +5049,17 @@ intel_dp_detect(struct drm_connector *connector,
{
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_dp *intel_dp = intel_attached_dp(connector);
- struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct intel_encoder *encoder = &dig_port->base;
enum drm_connector_status status;
+ enum intel_display_power_domain aux_domain =
+ intel_aux_power_domain(dig_port);
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
connector->base.id, connector->name);
WARN_ON(!drm_modeset_is_locked(&dev_priv->drm.mode_config.connection_mutex));
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv, aux_domain);
/* Can't disconnect eDP */
if (intel_dp_is_edp(intel_dp))
@@ -5138,7 +5121,7 @@ intel_dp_detect(struct drm_connector *connector,
ret = intel_dp_retrain_link(encoder, ctx);
if (ret) {
intel_display_power_put(dev_priv,
- intel_dp->aux_power_domain);
+ intel_aux_power_domain(dig_port));
return ret;
}
}
@@ -5162,7 +5145,7 @@ intel_dp_detect(struct drm_connector *connector,
if (status != connector_status_connected && !intel_dp->is_mst)
intel_dp_unset_edid(intel_dp);
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv, aux_domain);
return status;
}
@@ -5170,8 +5153,11 @@ static void
intel_dp_force(struct drm_connector *connector)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
- struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct intel_encoder *intel_encoder = &dig_port->base;
struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
+ enum intel_display_power_domain aux_domain =
+ intel_aux_power_domain(dig_port);
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
connector->base.id, connector->name);
@@ -5180,11 +5166,11 @@ intel_dp_force(struct drm_connector *connector)
if (connector->status != connector_status_connected)
return;
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv, aux_domain);
intel_dp_set_edid(intel_dp);
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv, aux_domain);
}
static int intel_dp_get_modes(struct drm_connector *connector)
@@ -5530,6 +5516,7 @@ static const struct intel_hdcp_shim intel_dp_hdcp_shim = {
static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
{
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+ struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
lockdep_assert_held(&dev_priv->pps_mutex);
@@ -5543,7 +5530,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
* indefinitely.
*/
DRM_DEBUG_KMS("VDD left on by BIOS, adjusting state tracking\n");
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv, intel_aux_power_domain(dig_port));
edp_panel_vdd_schedule_off(intel_dp);
}
@@ -5641,7 +5628,8 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
return IRQ_NONE;
}
- intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_get(dev_priv,
+ intel_aux_power_domain(intel_dig_port));
if (intel_dp->is_mst) {
if (intel_dp_check_mst_status(intel_dp) == -EINVAL) {
@@ -5670,7 +5658,8 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
ret = IRQ_HANDLED;
put_power:
- intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
+ intel_display_power_put(dev_priv,
+ intel_aux_power_domain(intel_dig_port));
return ret;
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 5bc7ba326111..4e16cda9d94a 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1130,7 +1130,6 @@ struct intel_dp {
/* sink or branch descriptor */
struct drm_dp_desc desc;
struct drm_dp_aux aux;
- enum intel_display_power_domain aux_power_domain;
uint8_t train_set[4];
int panel_power_up_delay;
int panel_power_down_delay;
@@ -1711,6 +1710,8 @@ bool hsw_crtc_state_ips_capable(const struct intel_crtc_state *crtc_state);
void hsw_enable_ips(const struct intel_crtc_state *crtc_state);
void hsw_disable_ips(const struct intel_crtc_state *crtc_state);
enum intel_display_power_domain intel_port_to_power_domain(enum port port);
+enum intel_display_power_domain
+intel_aux_power_domain(struct intel_digital_port *dig_port);
void intel_mode_from_pipe_config(struct drm_display_mode *mode,
struct intel_crtc_state *pipe_config);
void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc,
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 5/8] drm/i915: Enable AUX power earlier
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (3 preceding siblings ...)
2018-10-31 16:26 ` [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 16:26 ` [PATCH v3 6/8] drm/i915: Enable AUX power for HDMI DDI/TypeC main link too Imre Deak
` (6 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
For DDI/TypeC ports the AUX power domain needs to be enabled before the
port's PLL is enabled, so move the enabling earlier accordingly.
v2:
- Preserve the pre_pll hook for GEN9_LP. (Ville)
v3:
- Add related BSpec entries to commit log. (Jose)
BSpec: 21750, 22243
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 60 +++++++++++++++++++++---------------
drivers/gpu/drm/i915/intel_display.c | 2 ++
2 files changed, 37 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 5bb459011a49..54699f0daf9d 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2082,10 +2082,8 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
}
static inline enum intel_display_power_domain
-intel_ddi_main_link_aux_domain(struct intel_dp *intel_dp)
+intel_ddi_main_link_aux_domain(struct intel_digital_port *dig_port)
{
- struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
-
/* CNL+ HW requires corresponding AUX IOs to be powered up for PSR with
* DC states enabled at the same time, while for driver initiated AUX
* transfers we need the same AUX IOs to be powered but with DC states
@@ -2120,11 +2118,8 @@ static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder,
domains = BIT_ULL(dig_port->ddi_io_power_domain);
/* AUX power is only needed for (e)DP mode, not for HDMI. */
- if (intel_crtc_has_dp_encoder(crtc_state)) {
- struct intel_dp *intel_dp = &dig_port->dp;
-
- domains |= BIT_ULL(intel_ddi_main_link_aux_domain(intel_dp));
- }
+ if (intel_crtc_has_dp_encoder(crtc_state))
+ domains |= BIT_ULL(intel_ddi_main_link_aux_domain(dig_port));
return domains;
}
@@ -2891,6 +2886,36 @@ static void intel_ddi_clk_disable(struct intel_encoder *encoder)
}
}
+static void
+intel_ddi_pre_pll_enable(struct intel_encoder *encoder,
+ const struct intel_crtc_state *crtc_state,
+ const struct drm_connector_state *conn_state)
+{
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+ struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
+
+ if (intel_crtc_has_dp_encoder(crtc_state))
+ intel_display_power_get(dev_priv,
+ intel_ddi_main_link_aux_domain(dig_port));
+
+ if (IS_GEN9_LP(dev_priv))
+ bxt_ddi_phy_set_lane_optim_mask(encoder,
+ crtc_state->lane_lat_optim_mask);
+}
+
+static void
+intel_ddi_post_pll_disable(struct intel_encoder *encoder,
+ const struct intel_crtc_state *crtc_state,
+ const struct drm_connector_state *conn_state)
+{
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+ struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
+
+ if (intel_crtc_has_dp_encoder(crtc_state))
+ intel_display_power_put(dev_priv,
+ intel_ddi_main_link_aux_domain(dig_port));
+}
+
static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state)
@@ -2904,9 +2929,6 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
WARN_ON(is_mst && (port == PORT_A || port == PORT_E));
- intel_display_power_get(dev_priv,
- intel_ddi_main_link_aux_domain(intel_dp));
-
intel_dp_set_link_params(intel_dp, crtc_state->port_clock,
crtc_state->lane_count, is_mst);
@@ -3071,9 +3093,6 @@ static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
intel_display_power_put(dev_priv, dig_port->ddi_io_power_domain);
intel_ddi_clk_disable(encoder);
-
- intel_display_power_put(dev_priv,
- intel_ddi_main_link_aux_domain(intel_dp));
}
static void intel_ddi_post_disable_hdmi(struct intel_encoder *encoder,
@@ -3304,15 +3323,6 @@ static void intel_disable_ddi(struct intel_encoder *encoder,
intel_disable_ddi_dp(encoder, old_crtc_state, old_conn_state);
}
-static void bxt_ddi_pre_pll_enable(struct intel_encoder *encoder,
- const struct intel_crtc_state *pipe_config,
- const struct drm_connector_state *conn_state)
-{
- uint8_t mask = pipe_config->lane_lat_optim_mask;
-
- bxt_ddi_phy_set_lane_optim_mask(encoder, mask);
-}
-
void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
{
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
@@ -3828,8 +3838,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
intel_encoder->compute_output_type = intel_ddi_compute_output_type;
intel_encoder->compute_config = intel_ddi_compute_config;
intel_encoder->enable = intel_enable_ddi;
- if (IS_GEN9_LP(dev_priv))
- intel_encoder->pre_pll_enable = bxt_ddi_pre_pll_enable;
+ intel_encoder->pre_pll_enable = intel_ddi_pre_pll_enable;
+ intel_encoder->post_pll_disable = intel_ddi_post_pll_disable;
intel_encoder->pre_enable = intel_ddi_pre_enable;
intel_encoder->disable = intel_disable_ddi;
intel_encoder->post_disable = intel_ddi_post_disable;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 36710a30fb37..12ba2b923e6b 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5876,6 +5876,8 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state,
if (INTEL_GEN(dev_priv) >= 11)
icl_unmap_plls_to_ports(crtc, old_crtc_state, old_state);
+
+ intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state);
}
static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state)
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 6/8] drm/i915: Enable AUX power for HDMI DDI/TypeC main link too
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (4 preceding siblings ...)
2018-10-31 16:26 ` [PATCH v3 5/8] drm/i915: Enable AUX power earlier Imre Deak
@ 2018-10-31 16:26 ` Imre Deak
2018-10-31 16:27 ` [PATCH v3 7/8] drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain Imre Deak
` (5 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
DDI/TypeC ports need the AUX power domain for main link functionality
even when they operate in HDMI static mode, so enable the power domain
for these ports too.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 54699f0daf9d..4b6f25113c39 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2103,6 +2103,7 @@ intel_ddi_main_link_aux_domain(struct intel_digital_port *dig_port)
static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder,
struct intel_crtc_state *crtc_state)
{
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_digital_port *dig_port;
u64 domains;
@@ -2117,8 +2118,12 @@ static u64 intel_ddi_get_power_domains(struct intel_encoder *encoder,
dig_port = enc_to_dig_port(&encoder->base);
domains = BIT_ULL(dig_port->ddi_io_power_domain);
- /* AUX power is only needed for (e)DP mode, not for HDMI. */
- if (intel_crtc_has_dp_encoder(crtc_state))
+ /*
+ * AUX power is only needed for (e)DP mode, and for HDMI mode on TC
+ * ports.
+ */
+ if (intel_crtc_has_dp_encoder(crtc_state) ||
+ intel_port_is_tc(dev_priv, encoder->port))
domains |= BIT_ULL(intel_ddi_main_link_aux_domain(dig_port));
return domains;
@@ -2894,7 +2899,8 @@ intel_ddi_pre_pll_enable(struct intel_encoder *encoder,
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
- if (intel_crtc_has_dp_encoder(crtc_state))
+ if (intel_crtc_has_dp_encoder(crtc_state) ||
+ intel_port_is_tc(dev_priv, encoder->port))
intel_display_power_get(dev_priv,
intel_ddi_main_link_aux_domain(dig_port));
@@ -2911,7 +2917,8 @@ intel_ddi_post_pll_disable(struct intel_encoder *encoder,
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
- if (intel_crtc_has_dp_encoder(crtc_state))
+ if (intel_crtc_has_dp_encoder(crtc_state) ||
+ intel_port_is_tc(dev_priv, encoder->port))
intel_display_power_put(dev_priv,
intel_ddi_main_link_aux_domain(dig_port));
}
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 7/8] drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (5 preceding siblings ...)
2018-10-31 16:26 ` [PATCH v3 6/8] drm/i915: Enable AUX power for HDMI DDI/TypeC main link too Imre Deak
@ 2018-10-31 16:27 ` Imre Deak
2018-10-31 16:27 ` [PATCH v3 8/8] drm/i915/icl+: Sanitize port to PLL mapping Imre Deak
` (4 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:27 UTC (permalink / raw)
To: intel-gfx; +Cc: Lucas De Marchi, Paulo Zanoni
Most of the AUX_CH_CTL flags are concerned with DP AUX transfer
parameters. As opposed to this the flag specifying the thunderbolt vs.
non-thunderbolt mode of the port is not related to AUX transfers at all
(rather it's repurposed to enable either TBT or non-TBT PHY HW blocks).
The programming has to be done before enabling the corresponding AUX
power well, so make it part of the power well code.
v3:
- Use existing enable/disable helpers instead of opencoding. (Jose)
- Fix type of is_tc_tbt to remain a bitfield. (Lucas)
- Add comment describing the is_tc_tbt power well flag. (Lucas)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108548
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 5 ++++
drivers/gpu/drm/i915/intel_runtime_pm.c | 50 +++++++++++++++++++++++++++------
2 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c57b701f72a7..6157f8128cc5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -921,6 +921,11 @@ struct i915_power_well_desc {
/* The pw is backing the VGA functionality */
bool has_vga:1;
bool has_fuses:1;
+ /*
+ * The pw is for an ICL+ TypeC PHY port in
+ * Thunderbolt mode.
+ */
+ bool is_tc_tbt:1;
} hsw;
};
const struct i915_power_well_ops *ops;
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index b1901a6c17be..6c453366cd24 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -465,6 +465,25 @@ icl_combo_phy_aux_power_well_disable(struct drm_i915_private *dev_priv,
hsw_wait_for_power_well_disable(dev_priv, power_well);
}
+#define ICL_AUX_PW_TO_CH(pw_idx) \
+ ((pw_idx) - ICL_PW_CTL_IDX_AUX_A + AUX_CH_A)
+
+static void
+icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv,
+ struct i915_power_well *power_well)
+{
+ enum aux_ch aux_ch = ICL_AUX_PW_TO_CH(power_well->desc->hsw.idx);
+ u32 val;
+
+ val = I915_READ(DP_AUX_CH_CTL(aux_ch));
+ val &= ~DP_AUX_CH_CTL_TBT_IO;
+ if (power_well->desc->hsw.is_tc_tbt)
+ val |= DP_AUX_CH_CTL_TBT_IO;
+ I915_WRITE(DP_AUX_CH_CTL(aux_ch), val);
+
+ hsw_power_well_enable(dev_priv, power_well);
+}
+
/*
* We should only use the power well if we explicitly asked the hardware to
* enable it, so check if it's enabled and also check if we've requested it to
@@ -2732,6 +2751,13 @@ static const struct i915_power_well_ops icl_combo_phy_aux_power_well_ops = {
.is_enabled = hsw_power_well_enabled,
};
+static const struct i915_power_well_ops icl_tc_phy_aux_power_well_ops = {
+ .sync_hw = hsw_power_well_sync_hw,
+ .enable = icl_tc_phy_aux_power_well_enable,
+ .disable = hsw_power_well_disable,
+ .is_enabled = hsw_power_well_enabled,
+};
+
static const struct i915_power_well_regs icl_aux_power_well_regs = {
.bios = ICL_PWR_WELL_CTL_AUX1,
.driver = ICL_PWR_WELL_CTL_AUX2,
@@ -2877,81 +2903,89 @@ static const struct i915_power_well_desc icl_power_wells[] = {
{
.name = "AUX C",
.domains = ICL_AUX_C_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_C,
+ .hsw.is_tc_tbt = false,
},
},
{
.name = "AUX D",
.domains = ICL_AUX_D_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_D,
+ .hsw.is_tc_tbt = false,
},
},
{
.name = "AUX E",
.domains = ICL_AUX_E_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_E,
+ .hsw.is_tc_tbt = false,
},
},
{
.name = "AUX F",
.domains = ICL_AUX_F_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_F,
+ .hsw.is_tc_tbt = false,
},
},
{
.name = "AUX TBT1",
.domains = ICL_AUX_TBT1_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_TBT1,
+ .hsw.is_tc_tbt = true,
},
},
{
.name = "AUX TBT2",
.domains = ICL_AUX_TBT2_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_TBT2,
+ .hsw.is_tc_tbt = true,
},
},
{
.name = "AUX TBT3",
.domains = ICL_AUX_TBT3_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_TBT3,
+ .hsw.is_tc_tbt = true,
},
},
{
.name = "AUX TBT4",
.domains = ICL_AUX_TBT4_IO_POWER_DOMAINS,
- .ops = &hsw_power_well_ops,
+ .ops = &icl_tc_phy_aux_power_well_ops,
.id = DISP_PW_ID_NONE,
{
.hsw.regs = &icl_aux_power_well_regs,
.hsw.idx = ICL_PW_CTL_IDX_AUX_TBT4,
+ .hsw.is_tc_tbt = true,
},
},
{
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v3 8/8] drm/i915/icl+: Sanitize port to PLL mapping
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (6 preceding siblings ...)
2018-10-31 16:27 ` [PATCH v3 7/8] drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain Imre Deak
@ 2018-10-31 16:27 ` Imre Deak
2018-10-31 16:42 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: Fix HDMI on TypeC static ports (rev3) Patchwork
` (3 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Imre Deak @ 2018-10-31 16:27 UTC (permalink / raw)
To: intel-gfx; +Cc: Paulo Zanoni
BIOS can leave the PLL to port mapping enabled, even if the
corresponding encoder is disabled. Disable the port mapping in this
case.
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 23 +++++++++++++++++++++++
drivers/gpu/drm/i915/intel_display.c | 4 ++++
drivers/gpu/drm/i915/intel_drv.h | 1 +
3 files changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 4b6f25113c39..0575817ac821 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2822,6 +2822,29 @@ void icl_unmap_plls_to_ports(struct drm_crtc *crtc,
}
}
+void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder)
+{
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+ u32 val = I915_READ(DPCLKA_CFGCR0_ICL);
+ enum port port = encoder->port;
+ bool clk_enabled = !(val & icl_dpclka_cfgcr0_clk_off(dev_priv, port));
+
+ if (clk_enabled == !!encoder->base.crtc)
+ return;
+
+ /*
+ * Punt on the case now where clock is disabled, but the encoder is
+ * enabled, something else is really broken then.
+ */
+ if (WARN_ON(!clk_enabled))
+ return;
+
+ DRM_NOTE("Port %c is disabled but it has a mapped PLL, unmap it\n",
+ port_name(port));
+ val |= icl_dpclka_cfgcr0_clk_off(dev_priv, port);
+ I915_WRITE(DPCLKA_CFGCR0_ICL, val);
+}
+
static void intel_ddi_clk_select(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state)
{
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 12ba2b923e6b..2534263ebb41 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -15368,6 +15368,7 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc,
static void intel_sanitize_encoder(struct intel_encoder *encoder)
{
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_connector *connector;
/* We need to check both for a crtc link (meaning that the
@@ -15409,6 +15410,9 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
/* notify opregion of the sanitized encoder state */
intel_opregion_notify_encoder(encoder, connector && has_active_crtc);
+
+ if (INTEL_GEN(dev_priv) >= 11)
+ icl_sanitize_encoder_pll_mapping(encoder);
}
void i915_redisable_vga_power_on(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 4e16cda9d94a..2f1a3258e120 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1520,6 +1520,7 @@ void icl_map_plls_to_ports(struct drm_crtc *crtc,
void icl_unmap_plls_to_ports(struct drm_crtc *crtc,
struct intel_crtc_state *crtc_state,
struct drm_atomic_state *old_state);
+void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder);
unsigned int intel_fb_align_height(const struct drm_framebuffer *fb,
int color_plane, unsigned int height);
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (7 preceding siblings ...)
2018-10-31 16:27 ` [PATCH v3 8/8] drm/i915/icl+: Sanitize port to PLL mapping Imre Deak
@ 2018-10-31 16:42 ` Patchwork
2018-10-31 16:46 ` ✗ Fi.CI.SPARSE: " Patchwork
` (2 subsequent siblings)
11 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-10-31 16:42 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
URL : https://patchwork.freedesktop.org/series/51765/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
700413b4d745 drm/i915: Move intel_aux_ch() to intel_bios.c
-:49: CHECK:SPACING: No space is necessary after a cast
#49: FILE: drivers/gpu/drm/i915/intel_bios.c:2170:
+ aux_ch = (enum aux_ch) port;
total: 0 errors, 0 warnings, 1 checks, 117 lines checked
b6f44bbdc454 drm/i915: Move aux_ch to intel_digital_port
fc764bcd6aa7 drm/i915: Init aux_ch for HDMI ports too
84fa5ef1a470 drm/i915: Use a helper to get the aux power domain
f2192fbc6a67 drm/i915: Enable AUX power earlier
0c704c7a83d1 drm/i915: Enable AUX power for HDMI DDI/TypeC main link too
c0a2121c9b44 drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain
-:42: WARNING:BOOL_BITFIELD: Avoid using bool as bitfield. Prefer bool bitfields as unsigned int or u<8|16|32>
#42: FILE: drivers/gpu/drm/i915/i915_drv.h:928:
+ bool is_tc_tbt:1;
total: 0 errors, 1 warnings, 0 checks, 146 lines checked
d5042a0d6ff8 drm/i915/icl+: Sanitize port to PLL mapping
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (8 preceding siblings ...)
2018-10-31 16:42 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: Fix HDMI on TypeC static ports (rev3) Patchwork
@ 2018-10-31 16:46 ` Patchwork
2018-10-31 17:00 ` ✓ Fi.CI.BAT: success " Patchwork
2018-11-01 0:02 ` ✓ Fi.CI.IGT: " Patchwork
11 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-10-31 16:46 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
URL : https://patchwork.freedesktop.org/series/51765/
State : warning
== Summary ==
$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm/i915: Move intel_aux_ch() to intel_bios.c
-drivers/gpu/drm/i915/selftests/../i915_drv.h:3699:16: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/selftests/../i915_drv.h:3700:16: warning: expression using sizeof(void)
Commit: drm/i915: Move aux_ch to intel_digital_port
Okay!
Commit: drm/i915: Init aux_ch for HDMI ports too
Okay!
Commit: drm/i915: Use a helper to get the aux power domain
Okay!
Commit: drm/i915: Enable AUX power earlier
Okay!
Commit: drm/i915: Enable AUX power for HDMI DDI/TypeC main link too
Okay!
Commit: drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain
-drivers/gpu/drm/i915/selftests/../i915_drv.h:3700:16: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/selftests/../i915_drv.h:3705:16: warning: expression using sizeof(void)
Commit: drm/i915/icl+: Sanitize port to PLL mapping
Okay!
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (9 preceding siblings ...)
2018-10-31 16:46 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2018-10-31 17:00 ` Patchwork
2018-11-01 0:02 ` ✓ Fi.CI.IGT: " Patchwork
11 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-10-31 17:00 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
URL : https://patchwork.freedesktop.org/series/51765/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_5062 -> Patchwork_10672 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/51765/revisions/3/mbox/
== Known issues ==
Here are the changes found in Patchwork_10672 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_selftest@live_hangcheck:
fi-kbl-7560u: PASS -> INCOMPLETE (fdo#108044)
igt@kms_flip@basic-flip-vs-modeset:
fi-skl-6700hq: PASS -> DMESG-WARN (fdo#105998)
igt@kms_frontbuffer_tracking@basic:
fi-byt-clapper: PASS -> FAIL (fdo#103167)
==== Possible fixes ====
igt@kms_chamelium@common-hpd-after-suspend:
fi-skl-6700k2: INCOMPLETE (fdo#104108, fdo#105524, k.org#199541) -> PASS
igt@kms_flip@basic-flip-vs-dpms:
fi-skl-6700hq: DMESG-WARN (fdo#105998) -> PASS
igt@kms_pipe_crc_basic@read-crc-pipe-b:
fi-byt-clapper: FAIL (fdo#107362) -> PASS
==== Warnings ====
igt@drv_selftest@live_contexts:
fi-icl-u: DMESG-FAIL (fdo#108569) -> INCOMPLETE (fdo#108315, fdo#108535)
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
fdo#105524 https://bugs.freedesktop.org/show_bug.cgi?id=105524
fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
fdo#108044 https://bugs.freedesktop.org/show_bug.cgi?id=108044
fdo#108315 https://bugs.freedesktop.org/show_bug.cgi?id=108315
fdo#108535 https://bugs.freedesktop.org/show_bug.cgi?id=108535
fdo#108569 https://bugs.freedesktop.org/show_bug.cgi?id=108569
k.org#199541 https://bugzilla.kernel.org/show_bug.cgi?id=199541
== Participating hosts (49 -> 43) ==
Missing (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-cfl-8109u
== Build changes ==
* Linux: CI_DRM_5062 -> Patchwork_10672
CI_DRM_5062: 3aa71a0d803ee01605f9a3026ddd989a591a73c6 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4703: f882a542a3eb24e78e51aa6410a3a67c0efb4e97 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_10672: d5042a0d6ff8b636a3d17097ccae13e1de079ab0 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
d5042a0d6ff8 drm/i915/icl+: Sanitize port to PLL mapping
c0a2121c9b44 drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain
0c704c7a83d1 drm/i915: Enable AUX power for HDMI DDI/TypeC main link too
f2192fbc6a67 drm/i915: Enable AUX power earlier
84fa5ef1a470 drm/i915: Use a helper to get the aux power domain
fc764bcd6aa7 drm/i915: Init aux_ch for HDMI ports too
b6f44bbdc454 drm/i915: Move aux_ch to intel_digital_port
700413b4d745 drm/i915: Move intel_aux_ch() to intel_bios.c
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10672/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port
2018-10-31 16:26 ` [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port Imre Deak
@ 2018-10-31 17:11 ` Souza, Jose
0 siblings, 0 replies; 19+ messages in thread
From: Souza, Jose @ 2018-10-31 17:11 UTC (permalink / raw)
To: intel-gfx, Deak, Imre; +Cc: Zanoni, Paulo R
On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> From ICL onwards all DDI/TypeC ports - even working in HDMI mode -
> need
> to know their corresponding AUX CH, so move the field to a common
> struct.
>
> No functional change.
>
> v3:
> - Add code comment about which ports aux_ch is used for. (Jose)
>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/i915/intel_ddi.c | 4 +++-
> drivers/gpu/drm/i915/intel_dp.c | 35 +++++++++++++++++++++++-------
> -----
> drivers/gpu/drm/i915/intel_drv.h | 3 ++-
> 3 files changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index e40a8c97d34b..32a080265d03 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2084,6 +2084,8 @@ bool intel_ddi_get_hw_state(struct
> intel_encoder *encoder,
> static inline enum intel_display_power_domain
> intel_ddi_main_link_aux_domain(struct intel_dp *intel_dp)
> {
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> +
> /* CNL+ HW requires corresponding AUX IOs to be powered up for
> PSR with
> * DC states enabled at the same time, while for driver
> initiated AUX
> * transfers we need the same AUX IOs to be powered but with DC
> states
> @@ -2096,7 +2098,7 @@ intel_ddi_main_link_aux_domain(struct intel_dp
> *intel_dp)
> * Note that PSR is enabled only on Port A even though this
> function
> * returns the correct domain for other ports too.
> */
> - return intel_dp->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
> + return dig_port->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
> intel_dp-
> >aux_power_domain;
> }
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index 2445897b8f6c..5530c604c694 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1156,6 +1156,7 @@ static uint32_t
> g4x_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
> static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp,
> int index)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>
> if (index)
> return 0;
> @@ -1165,7 +1166,7 @@ static uint32_t
> ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
> * like to run at 2MHz. So, take the cdclk or PCH rawclk value
> and
> * divide by 2000 and use that
> */
> - if (intel_dp->aux_ch == AUX_CH_A)
> + if (dig_port->aux_ch == AUX_CH_A)
> return DIV_ROUND_CLOSEST(dev_priv->cdclk.hw.cdclk,
> 2000);
> else
> return DIV_ROUND_CLOSEST(dev_priv->rawclk_freq, 2000);
> @@ -1174,8 +1175,9 @@ static uint32_t
> ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
> static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp,
> int index)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>
> - if (intel_dp->aux_ch != AUX_CH_A && HAS_PCH_LPT_H(dev_priv)) {
> + if (dig_port->aux_ch != AUX_CH_A && HAS_PCH_LPT_H(dev_priv)) {
> /* Workaround for non-ULT HSW */
> switch (index) {
> case 0: return 63;
> @@ -1506,7 +1508,9 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux,
> struct drm_dp_aux_msg *msg)
> static enum intel_display_power_domain
> intel_aux_power_domain(struct intel_dp *intel_dp)
> {
> - switch (intel_dp->aux_ch) {
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> +
> + switch (dig_port->aux_ch) {
> case AUX_CH_A:
> return POWER_DOMAIN_AUX_A;
> case AUX_CH_B:
> @@ -1520,7 +1524,7 @@ intel_aux_power_domain(struct intel_dp
> *intel_dp)
> case AUX_CH_F:
> return POWER_DOMAIN_AUX_F;
> default:
> - MISSING_CASE(intel_dp->aux_ch);
> + MISSING_CASE(dig_port->aux_ch);
> return POWER_DOMAIN_AUX_A;
> }
> }
> @@ -1528,7 +1532,8 @@ intel_aux_power_domain(struct intel_dp
> *intel_dp)
> static i915_reg_t g4x_aux_ctl_reg(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_B:
> @@ -1544,7 +1549,8 @@ static i915_reg_t g4x_aux_ctl_reg(struct
> intel_dp *intel_dp)
> static i915_reg_t g4x_aux_data_reg(struct intel_dp *intel_dp, int
> index)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_B:
> @@ -1560,7 +1566,8 @@ static i915_reg_t g4x_aux_data_reg(struct
> intel_dp *intel_dp, int index)
> static i915_reg_t ilk_aux_ctl_reg(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_A:
> @@ -1578,7 +1585,8 @@ static i915_reg_t ilk_aux_ctl_reg(struct
> intel_dp *intel_dp)
> static i915_reg_t ilk_aux_data_reg(struct intel_dp *intel_dp, int
> index)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_A:
> @@ -1596,7 +1604,8 @@ static i915_reg_t ilk_aux_data_reg(struct
> intel_dp *intel_dp, int index)
> static i915_reg_t skl_aux_ctl_reg(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_A:
> @@ -1615,7 +1624,8 @@ static i915_reg_t skl_aux_ctl_reg(struct
> intel_dp *intel_dp)
> static i915_reg_t skl_aux_data_reg(struct intel_dp *intel_dp, int
> index)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - enum aux_ch aux_ch = intel_dp->aux_ch;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + enum aux_ch aux_ch = dig_port->aux_ch;
>
> switch (aux_ch) {
> case AUX_CH_A:
> @@ -1641,9 +1651,10 @@ static void
> intel_dp_aux_init(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> - struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)-
> >base;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + struct intel_encoder *encoder = &dig_port->base;
>
> - intel_dp->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> + dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
>
> if (INTEL_GEN(dev_priv) >= 9) {
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index e4eaa40bd5f1..5bc7ba326111 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1109,7 +1109,6 @@ struct intel_dp {
> bool link_trained;
> bool has_audio;
> bool reset_link_params;
> - enum aux_ch aux_ch;
> uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
> uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
> uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
> @@ -1213,6 +1212,8 @@ struct intel_digital_port {
> enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
> bool release_cl2_override;
> uint8_t max_lanes;
> + /* Used for DP and ICL+ TypeC/DP and TypeC/HDMI ports. */
> + enum aux_ch aux_ch;
> enum intel_display_power_domain ddi_io_power_domain;
> enum tc_port_type tc_type;
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain
2018-10-31 16:26 ` [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain Imre Deak
@ 2018-10-31 17:12 ` Souza, Jose
0 siblings, 0 replies; 19+ messages in thread
From: Souza, Jose @ 2018-10-31 17:12 UTC (permalink / raw)
To: intel-gfx, Deak, Imre; +Cc: De Marchi, Lucas, Zanoni, Paulo R
On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> From ICL onwards the AUX power domain may change dynamically based on
> whether a DDI/TypeC port is in thunderbolt or non-thunderbolt mode,
> so
> use a helper function instead of a static field to get the current
> domain.
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/i915/intel_ddi.c | 2 +-
> drivers/gpu/drm/i915/intel_display.c | 22 +++++++++++
> drivers/gpu/drm/i915/intel_dp.c | 73 +++++++++++++++-----------
> ----------
> drivers/gpu/drm/i915/intel_drv.h | 3 +-
> 4 files changed, 56 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index 3739ef003819..5bb459011a49 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2099,7 +2099,7 @@ intel_ddi_main_link_aux_domain(struct intel_dp
> *intel_dp)
> * returns the correct domain for other ports too.
> */
> return dig_port->aux_ch == AUX_CH_A ? POWER_DOMAIN_AUX_IO_A :
> - intel_dp-
> >aux_power_domain;
> + intel_aux_power_domain(di
> g_port);
> }
>
> static u64 intel_ddi_get_power_domains(struct intel_encoder
> *encoder,
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index c3cadc09f859..36710a30fb37 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -5949,6 +5949,28 @@ enum intel_display_power_domain
> intel_port_to_power_domain(enum port port)
> }
> }
>
> +enum intel_display_power_domain
> +intel_aux_power_domain(struct intel_digital_port *dig_port)
> +{
> + switch (dig_port->aux_ch) {
> + case AUX_CH_A:
> + return POWER_DOMAIN_AUX_A;
> + case AUX_CH_B:
> + return POWER_DOMAIN_AUX_B;
> + case AUX_CH_C:
> + return POWER_DOMAIN_AUX_C;
> + case AUX_CH_D:
> + return POWER_DOMAIN_AUX_D;
> + case AUX_CH_E:
> + return POWER_DOMAIN_AUX_E;
> + case AUX_CH_F:
> + return POWER_DOMAIN_AUX_F;
> + default:
> + MISSING_CASE(dig_port->aux_ch);
> + return POWER_DOMAIN_AUX_A;
> + }
> +}
> +
> static u64 get_crtc_power_domains(struct drm_crtc *crtc,
> struct intel_crtc_state *crtc_state)
> {
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index 6645c9faca9a..e6f59ef59be6 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -690,7 +690,8 @@ static void pps_lock(struct intel_dp *intel_dp)
> * See intel_power_sequencer_reset() why we need
> * a power domain reference here.
> */
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv,
> + intel_aux_power_domain(dp_to_dig_port(i
> ntel_dp)));
>
> mutex_lock(&dev_priv->pps_mutex);
> }
> @@ -701,7 +702,8 @@ static void pps_unlock(struct intel_dp *intel_dp)
>
> mutex_unlock(&dev_priv->pps_mutex);
>
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv,
> + intel_aux_power_domain(dp_to_dig_port(i
> ntel_dp)));
> }
>
> static void
> @@ -1505,29 +1507,6 @@ intel_dp_aux_transfer(struct drm_dp_aux *aux,
> struct drm_dp_aux_msg *msg)
> return ret;
> }
>
> -static enum intel_display_power_domain
> -intel_aux_power_domain(struct intel_dp *intel_dp)
> -{
> - struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> -
> - switch (dig_port->aux_ch) {
> - case AUX_CH_A:
> - return POWER_DOMAIN_AUX_A;
> - case AUX_CH_B:
> - return POWER_DOMAIN_AUX_B;
> - case AUX_CH_C:
> - return POWER_DOMAIN_AUX_C;
> - case AUX_CH_D:
> - return POWER_DOMAIN_AUX_D;
> - case AUX_CH_E:
> - return POWER_DOMAIN_AUX_E;
> - case AUX_CH_F:
> - return POWER_DOMAIN_AUX_F;
> - default:
> - MISSING_CASE(dig_port->aux_ch);
> - return POWER_DOMAIN_AUX_A;
> - }
> -}
>
> static i915_reg_t g4x_aux_ctl_reg(struct intel_dp *intel_dp)
> {
> @@ -1654,8 +1633,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
> struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> struct intel_encoder *encoder = &dig_port->base;
>
> - intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
> -
> if (INTEL_GEN(dev_priv) >= 9) {
> intel_dp->aux_ch_ctl_reg = skl_aux_ctl_reg;
> intel_dp->aux_ch_data_reg = skl_aux_data_reg;
> @@ -2356,7 +2333,8 @@ static bool edp_panel_vdd_on(struct intel_dp
> *intel_dp)
> if (edp_have_panel_vdd(intel_dp))
> return need_to_disable;
>
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv,
> + intel_aux_power_domain(intel_dig_port))
> ;
>
> DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",
> port_name(intel_dig_port->base.port));
> @@ -2442,7 +2420,8 @@ static void edp_panel_vdd_off_sync(struct
> intel_dp *intel_dp)
> if ((pp & PANEL_POWER_ON) == 0)
> intel_dp->panel_power_off_time = ktime_get_boottime();
>
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv,
> + intel_aux_power_domain(intel_dig_port))
> ;
> }
>
> static void edp_panel_vdd_work(struct work_struct *__work)
> @@ -2555,6 +2534,7 @@ void intel_edp_panel_on(struct intel_dp
> *intel_dp)
> static void edp_panel_off(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> u32 pp;
> i915_reg_t pp_ctrl_reg;
>
> @@ -2564,10 +2544,10 @@ static void edp_panel_off(struct intel_dp
> *intel_dp)
> return;
>
> DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",
> - port_name(dp_to_dig_port(intel_dp)->base.port));
> + port_name(dig_port->base.port));
>
> WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn
> off panel\n",
> - port_name(dp_to_dig_port(intel_dp)->base.port));
> + port_name(dig_port->base.port));
>
> pp = ironlake_get_pp_control(intel_dp);
> /* We need to switch off panel power _and_ force vdd, for
> otherwise some
> @@ -2586,7 +2566,7 @@ static void edp_panel_off(struct intel_dp
> *intel_dp)
> intel_dp->panel_power_off_time = ktime_get_boottime();
>
> /* We got a reference when we enabled the VDD. */
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv,
> intel_aux_power_domain(dig_port));
> }
>
> void intel_edp_panel_off(struct intel_dp *intel_dp)
> @@ -5069,14 +5049,17 @@ intel_dp_detect(struct drm_connector
> *connector,
> {
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> - struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)-
> >base;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + struct intel_encoder *encoder = &dig_port->base;
> enum drm_connector_status status;
> + enum intel_display_power_domain aux_domain =
> + intel_aux_power_domain(dig_port);
>
> DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> connector->base.id, connector->name);
> WARN_ON(!drm_modeset_is_locked(&dev_priv-
> >drm.mode_config.connection_mutex));
>
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv, aux_domain);
>
> /* Can't disconnect eDP */
> if (intel_dp_is_edp(intel_dp))
> @@ -5138,7 +5121,7 @@ intel_dp_detect(struct drm_connector
> *connector,
> ret = intel_dp_retrain_link(encoder, ctx);
> if (ret) {
> intel_display_power_put(dev_priv,
> - intel_dp-
> >aux_power_domain);
> + intel_aux_power_domain(
> dig_port));
> return ret;
> }
> }
> @@ -5162,7 +5145,7 @@ intel_dp_detect(struct drm_connector
> *connector,
> if (status != connector_status_connected && !intel_dp->is_mst)
> intel_dp_unset_edid(intel_dp);
>
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv, aux_domain);
> return status;
> }
>
> @@ -5170,8 +5153,11 @@ static void
> intel_dp_force(struct drm_connector *connector)
> {
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> - struct intel_encoder *intel_encoder =
> &dp_to_dig_port(intel_dp)->base;
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> + struct intel_encoder *intel_encoder = &dig_port->base;
> struct drm_i915_private *dev_priv = to_i915(intel_encoder-
> >base.dev);
> + enum intel_display_power_domain aux_domain =
> + intel_aux_power_domain(dig_port);
>
> DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> connector->base.id, connector->name);
> @@ -5180,11 +5166,11 @@ intel_dp_force(struct drm_connector
> *connector)
> if (connector->status != connector_status_connected)
> return;
>
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv, aux_domain);
>
> intel_dp_set_edid(intel_dp);
>
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv, aux_domain);
> }
>
> static int intel_dp_get_modes(struct drm_connector *connector)
> @@ -5530,6 +5516,7 @@ static const struct intel_hdcp_shim
> intel_dp_hdcp_shim = {
> static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
> {
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> + struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>
> lockdep_assert_held(&dev_priv->pps_mutex);
>
> @@ -5543,7 +5530,7 @@ static void intel_edp_panel_vdd_sanitize(struct
> intel_dp *intel_dp)
> * indefinitely.
> */
> DRM_DEBUG_KMS("VDD left on by BIOS, adjusting state
> tracking\n");
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv,
> intel_aux_power_domain(dig_port));
>
> edp_panel_vdd_schedule_off(intel_dp);
> }
> @@ -5641,7 +5628,8 @@ intel_dp_hpd_pulse(struct intel_digital_port
> *intel_dig_port, bool long_hpd)
> return IRQ_NONE;
> }
>
> - intel_display_power_get(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_get(dev_priv,
> + intel_aux_power_domain(intel_dig_port))
> ;
>
> if (intel_dp->is_mst) {
> if (intel_dp_check_mst_status(intel_dp) == -EINVAL) {
> @@ -5670,7 +5658,8 @@ intel_dp_hpd_pulse(struct intel_digital_port
> *intel_dig_port, bool long_hpd)
> ret = IRQ_HANDLED;
>
> put_power:
> - intel_display_power_put(dev_priv, intel_dp->aux_power_domain);
> + intel_display_power_put(dev_priv,
> + intel_aux_power_domain(intel_dig_port))
> ;
>
> return ret;
> }
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 5bc7ba326111..4e16cda9d94a 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1130,7 +1130,6 @@ struct intel_dp {
> /* sink or branch descriptor */
> struct drm_dp_desc desc;
> struct drm_dp_aux aux;
> - enum intel_display_power_domain aux_power_domain;
> uint8_t train_set[4];
> int panel_power_up_delay;
> int panel_power_down_delay;
> @@ -1711,6 +1710,8 @@ bool hsw_crtc_state_ips_capable(const struct
> intel_crtc_state *crtc_state);
> void hsw_enable_ips(const struct intel_crtc_state *crtc_state);
> void hsw_disable_ips(const struct intel_crtc_state *crtc_state);
> enum intel_display_power_domain intel_port_to_power_domain(enum port
> port);
> +enum intel_display_power_domain
> +intel_aux_power_domain(struct intel_digital_port *dig_port);
> void intel_mode_from_pipe_config(struct drm_display_mode *mode,
> struct intel_crtc_state *pipe_config);
> void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc,
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too
2018-10-31 16:26 ` [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too Imre Deak
@ 2018-10-31 17:14 ` Souza, Jose
2018-10-31 17:29 ` Rodrigo Vivi
0 siblings, 1 reply; 19+ messages in thread
From: Souza, Jose @ 2018-10-31 17:14 UTC (permalink / raw)
To: intel-gfx, Deak, Imre; +Cc: Zanoni, Paulo R
On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> From ICL onwards DDI/TypeC ports - even in HDMI static mode - need to
> know
> which AUX CH belongs to them, so initialize aux_ch for those ports
> too.
> For consistency do this for all HDMI ports, not only for DDI/TypeC
> ones.
>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/i915/intel_ddi.c | 1 +
> drivers/gpu/drm/i915/intel_dp.c | 2 +-
> drivers/gpu/drm/i915/intel_hdmi.c | 1 +
> 3 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> b/drivers/gpu/drm/i915/intel_ddi.c
> index 32a080265d03..3739ef003819 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -3852,6 +3852,7 @@ void intel_ddi_init(struct drm_i915_private
> *dev_priv, enum port port)
> (DDI_BUF_PORT_REVERSAL | DDI_A_4_LANES);
> intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
> intel_dig_port->max_lanes =
> intel_ddi_max_lanes(intel_dig_port);
> + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
>
> switch (port) {
> case PORT_A:
> diff --git a/drivers/gpu/drm/i915/intel_dp.c
> b/drivers/gpu/drm/i915/intel_dp.c
> index 5530c604c694..6645c9faca9a 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1654,7 +1654,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
> struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> struct intel_encoder *encoder = &dig_port->base;
>
> - dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -6706,6 +6705,7 @@ bool intel_dp_init(struct drm_i915_private
> *dev_priv,
> if (port != PORT_A)
> intel_infoframe_init(intel_dig_port);
>
> + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> if (!intel_dp_init_connector(intel_dig_port, intel_connector))
> goto err_init_connector;
>
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> b/drivers/gpu/drm/i915/intel_hdmi.c
> index 129b880bce64..b50c5497048a 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -2506,5 +2506,6 @@ void intel_hdmi_init(struct drm_i915_private
> *dev_priv,
>
> intel_infoframe_init(intel_dig_port);
>
> + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
Everything else looks good, I'm not just 100% confortable in
initializing it here just for consistency, can someone else comment
here?
> intel_hdmi_init_connector(intel_dig_port, intel_connector);
> }
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too
2018-10-31 17:14 ` Souza, Jose
@ 2018-10-31 17:29 ` Rodrigo Vivi
2018-10-31 17:36 ` Imre Deak
0 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2018-10-31 17:29 UTC (permalink / raw)
To: Souza, Jose; +Cc: intel-gfx, Zanoni, Paulo R
On Wed, Oct 31, 2018 at 05:14:52PM +0000, Souza, Jose wrote:
> On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> > From ICL onwards DDI/TypeC ports - even in HDMI static mode - need to
> > know
> > which AUX CH belongs to them, so initialize aux_ch for those ports
> > too.
> > For consistency do this for all HDMI ports, not only for DDI/TypeC
> > ones.
> >
> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: José Roberto de Souza <jose.souza@intel.com>
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_ddi.c | 1 +
> > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > drivers/gpu/drm/i915/intel_hdmi.c | 1 +
> > 3 files changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> > b/drivers/gpu/drm/i915/intel_ddi.c
> > index 32a080265d03..3739ef003819 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -3852,6 +3852,7 @@ void intel_ddi_init(struct drm_i915_private
> > *dev_priv, enum port port)
> > (DDI_BUF_PORT_REVERSAL | DDI_A_4_LANES);
> > intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
> > intel_dig_port->max_lanes =
> > intel_ddi_max_lanes(intel_dig_port);
> > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> >
> > switch (port) {
> > case PORT_A:
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > b/drivers/gpu/drm/i915/intel_dp.c
> > index 5530c604c694..6645c9faca9a 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -1654,7 +1654,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
> > struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> > struct intel_encoder *encoder = &dig_port->base;
> >
> > - dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> > intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
> >
> > if (INTEL_GEN(dev_priv) >= 9) {
> > @@ -6706,6 +6705,7 @@ bool intel_dp_init(struct drm_i915_private
> > *dev_priv,
> > if (port != PORT_A)
> > intel_infoframe_init(intel_dig_port);
> >
> > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > if (!intel_dp_init_connector(intel_dig_port, intel_connector))
> > goto err_init_connector;
> >
> > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > b/drivers/gpu/drm/i915/intel_hdmi.c
> > index 129b880bce64..b50c5497048a 100644
> > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > @@ -2506,5 +2506,6 @@ void intel_hdmi_init(struct drm_i915_private
> > *dev_priv,
> >
> > intel_infoframe_init(intel_dig_port);
> >
> > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
>
> Everything else looks good, I'm not just 100% confortable in
> initializing it here just for consistency, can someone else comment
> here?
The place is fine. My concern with this approach is the impact
on some legacy platforms that could be using this aux for something else.
Like... That SKL with edp-to-vga converter plugged on port-E which
uses aux from port B because this was unused because it was an HDMI plugged
on port B.
What could be the impact in a case like this?
So to avoid regressions in some old frankensteins maybe it is better
to add some check for type c no?!
>
> > intel_hdmi_init_connector(intel_dig_port, intel_connector);
> > }
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too
2018-10-31 17:29 ` Rodrigo Vivi
@ 2018-10-31 17:36 ` Imre Deak
2018-10-31 17:56 ` Rodrigo Vivi
0 siblings, 1 reply; 19+ messages in thread
From: Imre Deak @ 2018-10-31 17:36 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-gfx, Zanoni, Paulo R
On Wed, Oct 31, 2018 at 10:29:51AM -0700, Rodrigo Vivi wrote:
> On Wed, Oct 31, 2018 at 05:14:52PM +0000, Souza, Jose wrote:
> > On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> > > From ICL onwards DDI/TypeC ports - even in HDMI static mode - need to
> > > know
> > > which AUX CH belongs to them, so initialize aux_ch for those ports
> > > too.
> > > For consistency do this for all HDMI ports, not only for DDI/TypeC
> > > ones.
> > >
> > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Cc: José Roberto de Souza <jose.souza@intel.com>
> > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/intel_ddi.c | 1 +
> > > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > > drivers/gpu/drm/i915/intel_hdmi.c | 1 +
> > > 3 files changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> > > b/drivers/gpu/drm/i915/intel_ddi.c
> > > index 32a080265d03..3739ef003819 100644
> > > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > > @@ -3852,6 +3852,7 @@ void intel_ddi_init(struct drm_i915_private
> > > *dev_priv, enum port port)
> > > (DDI_BUF_PORT_REVERSAL | DDI_A_4_LANES);
> > > intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
> > > intel_dig_port->max_lanes =
> > > intel_ddi_max_lanes(intel_dig_port);
> > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > >
> > > switch (port) {
> > > case PORT_A:
> > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > b/drivers/gpu/drm/i915/intel_dp.c
> > > index 5530c604c694..6645c9faca9a 100644
> > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > @@ -1654,7 +1654,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
> > > struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> > > struct intel_encoder *encoder = &dig_port->base;
> > >
> > > - dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> > > intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
> > >
> > > if (INTEL_GEN(dev_priv) >= 9) {
> > > @@ -6706,6 +6705,7 @@ bool intel_dp_init(struct drm_i915_private
> > > *dev_priv,
> > > if (port != PORT_A)
> > > intel_infoframe_init(intel_dig_port);
> > >
> > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > > if (!intel_dp_init_connector(intel_dig_port, intel_connector))
> > > goto err_init_connector;
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > > b/drivers/gpu/drm/i915/intel_hdmi.c
> > > index 129b880bce64..b50c5497048a 100644
> > > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > > @@ -2506,5 +2506,6 @@ void intel_hdmi_init(struct drm_i915_private
> > > *dev_priv,
> > >
> > > intel_infoframe_init(intel_dig_port);
> > >
> > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> >
> > Everything else looks good, I'm not just 100% confortable in
> > initializing it here just for consistency, can someone else comment
> > here?
>
> The place is fine. My concern with this approach is the impact
> on some legacy platforms that could be using this aux for something else.
>
> Like... That SKL with edp-to-vga converter plugged on port-E which
> uses aux from port B because this was unused because it was an HDMI plugged
> on port B.
>
> What could be the impact in a case like this?
>
> So to avoid regressions in some old frankensteins maybe it is better
> to add some check for type c no?!
We would have a check for type C after this patchset, we would enable
AUX on HDMI ports only if that port is a typeC port (which is always
false on SKL). I guess that's the config you mean. See the
intel_ddi_pre_pll_enable hook I added.
>
> >
> > > intel_hdmi_init_connector(intel_dig_port, intel_connector);
> > > }
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too
2018-10-31 17:36 ` Imre Deak
@ 2018-10-31 17:56 ` Rodrigo Vivi
0 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2018-10-31 17:56 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx, Zanoni, Paulo R
On Wed, Oct 31, 2018 at 07:36:58PM +0200, Imre Deak wrote:
> On Wed, Oct 31, 2018 at 10:29:51AM -0700, Rodrigo Vivi wrote:
> > On Wed, Oct 31, 2018 at 05:14:52PM +0000, Souza, Jose wrote:
> > > On Wed, 2018-10-31 at 18:26 +0200, Imre Deak wrote:
> > > > From ICL onwards DDI/TypeC ports - even in HDMI static mode - need to
> > > > know
> > > > which AUX CH belongs to them, so initialize aux_ch for those ports
> > > > too.
> > > > For consistency do this for all HDMI ports, not only for DDI/TypeC
> > > > ones.
> > > >
> > > > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > Cc: José Roberto de Souza <jose.souza@intel.com>
> > > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > > > ---
> > > > drivers/gpu/drm/i915/intel_ddi.c | 1 +
> > > > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_hdmi.c | 1 +
> > > > 3 files changed, 3 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c
> > > > b/drivers/gpu/drm/i915/intel_ddi.c
> > > > index 32a080265d03..3739ef003819 100644
> > > > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > > > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > > > @@ -3852,6 +3852,7 @@ void intel_ddi_init(struct drm_i915_private
> > > > *dev_priv, enum port port)
> > > > (DDI_BUF_PORT_REVERSAL | DDI_A_4_LANES);
> > > > intel_dig_port->dp.output_reg = INVALID_MMIO_REG;
> > > > intel_dig_port->max_lanes =
> > > > intel_ddi_max_lanes(intel_dig_port);
> > > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > > >
> > > > switch (port) {
> > > > case PORT_A:
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > > > b/drivers/gpu/drm/i915/intel_dp.c
> > > > index 5530c604c694..6645c9faca9a 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -1654,7 +1654,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
> > > > struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> > > > struct intel_encoder *encoder = &dig_port->base;
> > > >
> > > > - dig_port->aux_ch = intel_aux_ch(dev_priv, encoder->port);
> > > > intel_dp->aux_power_domain = intel_aux_power_domain(intel_dp);
> > > >
> > > > if (INTEL_GEN(dev_priv) >= 9) {
> > > > @@ -6706,6 +6705,7 @@ bool intel_dp_init(struct drm_i915_private
> > > > *dev_priv,
> > > > if (port != PORT_A)
> > > > intel_infoframe_init(intel_dig_port);
> > > >
> > > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > > > if (!intel_dp_init_connector(intel_dig_port, intel_connector))
> > > > goto err_init_connector;
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c
> > > > b/drivers/gpu/drm/i915/intel_hdmi.c
> > > > index 129b880bce64..b50c5497048a 100644
> > > > --- a/drivers/gpu/drm/i915/intel_hdmi.c
> > > > +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> > > > @@ -2506,5 +2506,6 @@ void intel_hdmi_init(struct drm_i915_private
> > > > *dev_priv,
> > > >
> > > > intel_infoframe_init(intel_dig_port);
> > > >
> > > > + intel_dig_port->aux_ch = intel_aux_ch(dev_priv, port);
> > >
> > > Everything else looks good, I'm not just 100% confortable in
> > > initializing it here just for consistency, can someone else comment
> > > here?
> >
> > The place is fine. My concern with this approach is the impact
> > on some legacy platforms that could be using this aux for something else.
> >
> > Like... That SKL with edp-to-vga converter plugged on port-E which
> > uses aux from port B because this was unused because it was an HDMI plugged
> > on port B.
> >
> > What could be the impact in a case like this?
> >
> > So to avoid regressions in some old frankensteins maybe it is better
> > to add some check for type c no?!
>
> We would have a check for type C after this patchset, we would enable
> AUX on HDMI ports only if that port is a typeC port (which is always
> false on SKL). I guess that's the config you mean. See the
> intel_ddi_pre_pll_enable hook I added.
cool, it makes sense.
Also I was looking to the series as a whole thinking about this
case that came to my mind and I don't see any possible regression.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
for the series.
>
> >
> > >
> > > > intel_hdmi_init_connector(intel_dig_port, intel_connector);
> > > > }
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* ✓ Fi.CI.IGT: success for drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
` (10 preceding siblings ...)
2018-10-31 17:00 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-11-01 0:02 ` Patchwork
11 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2018-11-01 0:02 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/icl: Fix HDMI on TypeC static ports (rev3)
URL : https://patchwork.freedesktop.org/series/51765/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_5062_full -> Patchwork_10672_full =
== Summary - SUCCESS ==
No regressions found.
== Known issues ==
Here are the changes found in Patchwork_10672_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_exec_schedule@in-order-bsd:
shard-snb: NOTRUN -> INCOMPLETE (fdo#105411)
igt@gem_exec_schedule@pi-ringfull-bsd:
shard-skl: NOTRUN -> FAIL (fdo#103158)
igt@gem_exec_whisper@normal:
shard-skl: NOTRUN -> TIMEOUT (fdo#108592)
igt@kms_atomic_transition@1x-modeset-transitions-nonblocking:
shard-skl: PASS -> FAIL (fdo#108470, fdo#108228, fdo#107815)
igt@kms_available_modes_crc@available_mode_test_crc:
shard-apl: PASS -> FAIL (fdo#106641)
igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
shard-glk: PASS -> FAIL (fdo#108145)
igt@kms_chv_cursor_fail@pipe-a-128x128-top-edge:
shard-skl: NOTRUN -> FAIL (fdo#104671) +1
igt@kms_chv_cursor_fail@pipe-c-128x128-bottom-edge:
shard-apl: PASS -> DMESG-WARN (fdo#103558, fdo#105602) +9
igt@kms_cursor_crc@cursor-256x85-random:
shard-apl: PASS -> FAIL (fdo#103232) +2
igt@kms_cursor_crc@cursor-size-change:
shard-skl: NOTRUN -> FAIL (fdo#103232) +1
igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
shard-glk: NOTRUN -> FAIL (fdo#106509, fdo#105454)
igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled:
shard-skl: NOTRUN -> FAIL (fdo#103184)
igt@kms_flip@basic-plain-flip:
shard-apl: PASS -> DMESG-FAIL (fdo#103558, fdo#105602)
igt@kms_flip@flip-vs-expired-vblank:
shard-glk: PASS -> FAIL (fdo#102887, fdo#105363)
igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
shard-skl: NOTRUN -> FAIL (fdo#103167) +6
igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
shard-glk: PASS -> FAIL (fdo#103167)
igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
shard-apl: PASS -> FAIL (fdo#103167) +1
igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc:
shard-skl: NOTRUN -> FAIL (fdo#105682)
igt@kms_pipe_crc_basic@read-crc-pipe-c:
shard-skl: NOTRUN -> FAIL (fdo#107362)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
shard-skl: PASS -> FAIL (fdo#107362, fdo#103191)
igt@kms_plane_alpha_blend@pipe-a-alpha-transparant-fb:
shard-apl: NOTRUN -> FAIL (fdo#108145)
igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
shard-skl: NOTRUN -> FAIL (fdo#107815, fdo#108145)
igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
shard-skl: PASS -> FAIL (fdo#107815)
igt@kms_plane_alpha_blend@pipe-c-alpha-basic:
shard-glk: NOTRUN -> FAIL (fdo#108145)
igt@kms_plane_alpha_blend@pipe-c-constant-alpha-min:
shard-skl: NOTRUN -> FAIL (fdo#108145) +1
igt@pm_rpm@basic-pci-d3-state:
shard-skl: PASS -> INCOMPLETE (fdo#107807)
==== Possible fixes ====
igt@gem_ppgtt@blt-vs-render-ctxn:
shard-kbl: INCOMPLETE (fdo#106023, fdo#106887, fdo#103665) -> PASS
igt@kms_busy@extended-modeset-hang-newfb-render-a:
shard-snb: DMESG-WARN (fdo#107956) -> PASS
igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-b:
shard-kbl: DMESG-WARN (fdo#107956) -> PASS
igt@kms_color@pipe-b-degamma:
shard-apl: FAIL (fdo#104782) -> PASS
igt@kms_cursor_crc@cursor-256x85-random:
shard-glk: FAIL (fdo#103232) -> PASS
igt@kms_cursor_crc@cursor-64x21-random:
shard-apl: FAIL (fdo#103232) -> PASS +3
igt@kms_cursor_crc@cursor-64x64-suspend:
shard-snb: DMESG-WARN (fdo#102365) -> PASS
igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
shard-glk: DMESG-WARN (fdo#105763, fdo#106538) -> PASS
igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite:
shard-glk: FAIL (fdo#103167) -> PASS
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
shard-kbl: INCOMPLETE (fdo#103665) -> PASS
igt@kms_plane_multiple@atomic-pipe-c-tiling-x:
shard-glk: FAIL (fdo#103166) -> PASS
shard-apl: FAIL (fdo#103166) -> PASS
igt@kms_setmode@basic:
shard-apl: FAIL (fdo#99912) -> PASS
shard-kbl: FAIL (fdo#99912) -> PASS
==== Warnings ====
igt@kms_cursor_crc@cursor-256x256-onscreen:
shard-snb: INCOMPLETE (fdo#105411) -> DMESG-WARN (fdo#107469)
igt@kms_plane_alpha_blend@pipe-c-alpha-7efc:
shard-apl: FAIL (fdo#108145) -> DMESG-WARN (fdo#103558, fdo#105602)
fdo#102365 https://bugs.freedesktop.org/show_bug.cgi?id=102365
fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
fdo#103158 https://bugs.freedesktop.org/show_bug.cgi?id=103158
fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
fdo#104671 https://bugs.freedesktop.org/show_bug.cgi?id=104671
fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
fdo#105454 https://bugs.freedesktop.org/show_bug.cgi?id=105454
fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
fdo#106509 https://bugs.freedesktop.org/show_bug.cgi?id=106509
fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
fdo#106887 https://bugs.freedesktop.org/show_bug.cgi?id=106887
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
fdo#107469 https://bugs.freedesktop.org/show_bug.cgi?id=107469
fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807
fdo#107815 https://bugs.freedesktop.org/show_bug.cgi?id=107815
fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
fdo#108228 https://bugs.freedesktop.org/show_bug.cgi?id=108228
fdo#108470 https://bugs.freedesktop.org/show_bug.cgi?id=108470
fdo#108592 https://bugs.freedesktop.org/show_bug.cgi?id=108592
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
== Participating hosts (6 -> 6) ==
No changes in participating hosts
== Build changes ==
* Linux: CI_DRM_5062 -> Patchwork_10672
CI_DRM_5062: 3aa71a0d803ee01605f9a3026ddd989a591a73c6 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4703: f882a542a3eb24e78e51aa6410a3a67c0efb4e97 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_10672: d5042a0d6ff8b636a3d17097ccae13e1de079ab0 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10672/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2018-11-01 0:02 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-31 16:26 [PATCH v3 0/8] drm/i915/icl: Fix HDMI on TypeC static ports Imre Deak
2018-10-31 16:26 ` [PATCH v3 1/8] drm/i915: Move intel_aux_ch() to intel_bios.c Imre Deak
2018-10-31 16:26 ` [PATCH v3 2/8] drm/i915: Move aux_ch to intel_digital_port Imre Deak
2018-10-31 17:11 ` Souza, Jose
2018-10-31 16:26 ` [PATCH v3 3/8] drm/i915: Init aux_ch for HDMI ports too Imre Deak
2018-10-31 17:14 ` Souza, Jose
2018-10-31 17:29 ` Rodrigo Vivi
2018-10-31 17:36 ` Imre Deak
2018-10-31 17:56 ` Rodrigo Vivi
2018-10-31 16:26 ` [PATCH v3 4/8] drm/i915: Use a helper to get the aux power domain Imre Deak
2018-10-31 17:12 ` Souza, Jose
2018-10-31 16:26 ` [PATCH v3 5/8] drm/i915: Enable AUX power earlier Imre Deak
2018-10-31 16:26 ` [PATCH v3 6/8] drm/i915: Enable AUX power for HDMI DDI/TypeC main link too Imre Deak
2018-10-31 16:27 ` [PATCH v3 7/8] drm/i915: Configure AUX_CH_CTL when enabling the AUX power domain Imre Deak
2018-10-31 16:27 ` [PATCH v3 8/8] drm/i915/icl+: Sanitize port to PLL mapping Imre Deak
2018-10-31 16:42 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: Fix HDMI on TypeC static ports (rev3) Patchwork
2018-10-31 16:46 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-10-31 17:00 ` ✓ Fi.CI.BAT: success " Patchwork
2018-11-01 0:02 ` ✓ Fi.CI.IGT: " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.