* [PATCH] drm/i915: Per-DDI I_boost override
@ 2015-06-18 11:23 Antti Koskipaa
2015-06-18 11:25 ` Antti Koskipää
2015-06-25 6:14 ` David Weinehall
0 siblings, 2 replies; 8+ messages in thread
From: Antti Koskipaa @ 2015-06-18 11:23 UTC (permalink / raw)
To: intel-gfx
An OEM may request increased I_boost beyond the recommended values
by specifying an I_boost value to be applied to all swing entries for
a port. These override values are specified in VBT.
Issue: VIZ-5676
Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 3 +++
drivers/gpu/drm/i915/intel_bios.c | 21 +++++++++++++++++++++
drivers/gpu/drm/i915/intel_bios.h | 9 +++++++++
drivers/gpu/drm/i915/intel_ddi.c | 39 +++++++++++++++++++++++++++++++--------
4 files changed, 64 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 09a57a5..e17fd56 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1402,6 +1402,9 @@ struct ddi_vbt_port_info {
uint8_t supports_dvi:1;
uint8_t supports_hdmi:1;
uint8_t supports_dp:1;
+
+ uint8_t dp_boost_level;
+ uint8_t hdmi_boost_level;
};
enum psr_lines_to_wait {
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 198fc3c..06b5dc3 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -946,6 +946,17 @@ err:
memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence));
}
+static u8 translate_iboost(u8 val)
+{
+ static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
+
+ if (val >= ARRAY_SIZE(mapping)) {
+ DRM_DEBUG_KMS("Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
+ return 0;
+ }
+ return mapping[val];
+}
+
static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
const struct bdb_header *bdb)
{
@@ -1046,6 +1057,16 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
hdmi_level_shift);
info->hdmi_level_shift = hdmi_level_shift;
}
+
+ /* Parse the I_boost config for SKL and above */
+ if (bdb->version >= 196 && (child->common.flags_1 & IBOOST_ENABLE)) {
+ info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF);
+ DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
+ port_name(port), info->dp_boost_level);
+ info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4);
+ DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n",
+ port_name(port), info->hdmi_boost_level);
+ }
}
static void parse_ddi_ports(struct drm_i915_private *dev_priv,
diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
index af0b476..8edd75c 100644
--- a/drivers/gpu/drm/i915/intel_bios.h
+++ b/drivers/gpu/drm/i915/intel_bios.h
@@ -231,6 +231,10 @@ struct old_child_dev_config {
/* This one contains field offsets that are known to be common for all BDB
* versions. Notice that the meaning of the contents contents may still change,
* but at least the offsets are consistent. */
+
+/* Definitions for flags_1 */
+#define IBOOST_ENABLE (1<<3)
+
struct common_child_dev_config {
u16 handle;
u16 device_type;
@@ -239,8 +243,13 @@ struct common_child_dev_config {
u8 not_common2[2];
u8 ddc_pin;
u16 edid_ptr;
+ u8 obsolete;
+ u8 flags_1;
+ u8 not_common3[13];
+ u8 iboost_level;
} __packed;
+
/* This field changes depending on the BDB version, so the most reliable way to
* read it is by checking the BDB version and reading the raw pointer. */
union child_device_config {
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 3abcb43..8e5e94c 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -434,6 +434,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
{
struct drm_i915_private *dev_priv = dev->dev_private;
u32 reg;
+ u32 iboost_bit = 0;
int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
size;
int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
@@ -459,6 +460,10 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
ddi_translations_hdmi =
skl_get_buf_trans_hdmi(dev, &n_hdmi_entries);
hdmi_default_entry = 8;
+ /* If we're boosting the current, set bit 31 of trans1 */
+ if (dev_priv->vbt.ddi_port_info[port].hdmi_boost_level ||
+ dev_priv->vbt.ddi_port_info[port].dp_boost_level)
+ iboost_bit = 1<<31;
} else if (IS_BROADWELL(dev)) {
ddi_translations_fdi = bdw_ddi_translations_fdi;
ddi_translations_dp = bdw_ddi_translations_dp;
@@ -519,7 +524,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
}
for (i = 0, reg = DDI_BUF_TRANS(port); i < size; i++) {
- I915_WRITE(reg, ddi_translations[i].trans1);
+ I915_WRITE(reg, ddi_translations[i].trans1 | iboost_bit);
reg += 4;
I915_WRITE(reg, ddi_translations[i].trans2);
reg += 4;
@@ -534,7 +539,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
hdmi_level = hdmi_default_entry;
/* Entry 9 is for HDMI: */
- I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1);
+ I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1 | iboost_bit);
reg += 4;
I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans2);
reg += 4;
@@ -1978,18 +1983,36 @@ void skl_ddi_set_iboost(struct drm_device *dev, u32 level,
struct drm_i915_private *dev_priv = dev->dev_private;
const struct ddi_buf_trans *ddi_translations;
uint8_t iboost;
+ uint8_t dp_iboost, hdmi_iboost;
int n_entries;
u32 reg;
+ u32 iboost_bit = 0;
+
+ /* VBT may override standard boost values */
+ dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
+ hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
if (type == INTEL_OUTPUT_DISPLAYPORT) {
- ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
- iboost = ddi_translations[port].i_boost;
+ if (dp_iboost) {
+ iboost = dp_iboost;
+ } else {
+ ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
+ iboost = ddi_translations[port].i_boost;
+ }
} else if (type == INTEL_OUTPUT_EDP) {
- ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
- iboost = ddi_translations[port].i_boost;
+ if (dp_iboost) {
+ iboost = dp_iboost;
+ } else {
+ ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
+ iboost = ddi_translations[port].i_boost;
+ }
} else if (type == INTEL_OUTPUT_HDMI) {
- ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
- iboost = ddi_translations[port].i_boost;
+ if (hdmi_iboost) {
+ iboost = hdmi_iboost;
+ } else {
+ ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
+ iboost = ddi_translations[port].i_boost;
+ }
} else {
return;
}
--
1.8.3.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-18 11:23 [PATCH] drm/i915: Per-DDI I_boost override Antti Koskipaa
@ 2015-06-18 11:25 ` Antti Koskipää
2015-06-25 6:14 ` David Weinehall
1 sibling, 0 replies; 8+ messages in thread
From: Antti Koskipää @ 2015-06-18 11:25 UTC (permalink / raw)
To: intel-gfx
Just FYI, this patch depends on David Weinehall's Buffer translation
improvements patch from earlier today.
--
- Antti
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-18 11:23 [PATCH] drm/i915: Per-DDI I_boost override Antti Koskipaa
2015-06-18 11:25 ` Antti Koskipää
@ 2015-06-25 6:14 ` David Weinehall
2015-06-25 7:37 ` Daniel Vetter
1 sibling, 1 reply; 8+ messages in thread
From: David Weinehall @ 2015-06-25 6:14 UTC (permalink / raw)
To: Antti Koskipaa; +Cc: intel-gfx
Looks good.
Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
> An OEM may request increased I_boost beyond the recommended values
> by specifying an I_boost value to be applied to all swing entries for
> a port. These override values are specified in VBT.
>
> Issue: VIZ-5676
> Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 3 +++
> drivers/gpu/drm/i915/intel_bios.c | 21 +++++++++++++++++++++
> drivers/gpu/drm/i915/intel_bios.h | 9 +++++++++
> drivers/gpu/drm/i915/intel_ddi.c | 39 +++++++++++++++++++++++++++++++--------
> 4 files changed, 64 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 09a57a5..e17fd56 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1402,6 +1402,9 @@ struct ddi_vbt_port_info {
> uint8_t supports_dvi:1;
> uint8_t supports_hdmi:1;
> uint8_t supports_dp:1;
> +
> + uint8_t dp_boost_level;
> + uint8_t hdmi_boost_level;
> };
>
> enum psr_lines_to_wait {
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 198fc3c..06b5dc3 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -946,6 +946,17 @@ err:
> memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence));
> }
>
> +static u8 translate_iboost(u8 val)
> +{
> + static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
> +
> + if (val >= ARRAY_SIZE(mapping)) {
> + DRM_DEBUG_KMS("Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
> + return 0;
> + }
> + return mapping[val];
> +}
> +
> static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
> const struct bdb_header *bdb)
> {
> @@ -1046,6 +1057,16 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
> hdmi_level_shift);
> info->hdmi_level_shift = hdmi_level_shift;
> }
> +
> + /* Parse the I_boost config for SKL and above */
> + if (bdb->version >= 196 && (child->common.flags_1 & IBOOST_ENABLE)) {
> + info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF);
> + DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
> + port_name(port), info->dp_boost_level);
> + info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4);
> + DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n",
> + port_name(port), info->hdmi_boost_level);
> + }
> }
>
> static void parse_ddi_ports(struct drm_i915_private *dev_priv,
> diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> index af0b476..8edd75c 100644
> --- a/drivers/gpu/drm/i915/intel_bios.h
> +++ b/drivers/gpu/drm/i915/intel_bios.h
> @@ -231,6 +231,10 @@ struct old_child_dev_config {
> /* This one contains field offsets that are known to be common for all BDB
> * versions. Notice that the meaning of the contents contents may still change,
> * but at least the offsets are consistent. */
> +
> +/* Definitions for flags_1 */
> +#define IBOOST_ENABLE (1<<3)
> +
> struct common_child_dev_config {
> u16 handle;
> u16 device_type;
> @@ -239,8 +243,13 @@ struct common_child_dev_config {
> u8 not_common2[2];
> u8 ddc_pin;
> u16 edid_ptr;
> + u8 obsolete;
> + u8 flags_1;
> + u8 not_common3[13];
> + u8 iboost_level;
> } __packed;
>
> +
> /* This field changes depending on the BDB version, so the most reliable way to
> * read it is by checking the BDB version and reading the raw pointer. */
> union child_device_config {
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 3abcb43..8e5e94c 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -434,6 +434,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
> u32 reg;
> + u32 iboost_bit = 0;
> int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
> size;
> int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
> @@ -459,6 +460,10 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> ddi_translations_hdmi =
> skl_get_buf_trans_hdmi(dev, &n_hdmi_entries);
> hdmi_default_entry = 8;
> + /* If we're boosting the current, set bit 31 of trans1 */
> + if (dev_priv->vbt.ddi_port_info[port].hdmi_boost_level ||
> + dev_priv->vbt.ddi_port_info[port].dp_boost_level)
> + iboost_bit = 1<<31;
> } else if (IS_BROADWELL(dev)) {
> ddi_translations_fdi = bdw_ddi_translations_fdi;
> ddi_translations_dp = bdw_ddi_translations_dp;
> @@ -519,7 +524,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> }
>
> for (i = 0, reg = DDI_BUF_TRANS(port); i < size; i++) {
> - I915_WRITE(reg, ddi_translations[i].trans1);
> + I915_WRITE(reg, ddi_translations[i].trans1 | iboost_bit);
> reg += 4;
> I915_WRITE(reg, ddi_translations[i].trans2);
> reg += 4;
> @@ -534,7 +539,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> hdmi_level = hdmi_default_entry;
>
> /* Entry 9 is for HDMI: */
> - I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1);
> + I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1 | iboost_bit);
> reg += 4;
> I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans2);
> reg += 4;
> @@ -1978,18 +1983,36 @@ void skl_ddi_set_iboost(struct drm_device *dev, u32 level,
> struct drm_i915_private *dev_priv = dev->dev_private;
> const struct ddi_buf_trans *ddi_translations;
> uint8_t iboost;
> + uint8_t dp_iboost, hdmi_iboost;
> int n_entries;
> u32 reg;
> + u32 iboost_bit = 0;
> +
> + /* VBT may override standard boost values */
> + dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
> + hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
>
> if (type == INTEL_OUTPUT_DISPLAYPORT) {
> - ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
> - iboost = ddi_translations[port].i_boost;
> + if (dp_iboost) {
> + iboost = dp_iboost;
> + } else {
> + ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
> + iboost = ddi_translations[port].i_boost;
> + }
> } else if (type == INTEL_OUTPUT_EDP) {
> - ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
> - iboost = ddi_translations[port].i_boost;
> + if (dp_iboost) {
> + iboost = dp_iboost;
> + } else {
> + ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
> + iboost = ddi_translations[port].i_boost;
> + }
> } else if (type == INTEL_OUTPUT_HDMI) {
> - ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
> - iboost = ddi_translations[port].i_boost;
> + if (hdmi_iboost) {
> + iboost = hdmi_iboost;
> + } else {
> + ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
> + iboost = ddi_translations[port].i_boost;
> + }
> } else {
> return;
> }
> --
> 1.8.3.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-25 6:14 ` David Weinehall
@ 2015-06-25 7:37 ` Daniel Vetter
2015-06-25 11:18 ` David Weinehall
0 siblings, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2015-06-25 7:37 UTC (permalink / raw)
To: Antti Koskipaa, intel-gfx
On Thu, Jun 25, 2015 at 09:14:09AM +0300, David Weinehall wrote:
> Looks good.
>
> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
>
> On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
> > An OEM may request increased I_boost beyond the recommended values
> > by specifying an I_boost value to be applied to all swing entries for
> > a port. These override values are specified in VBT.
> >
> > Issue: VIZ-5676
> > Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
What depencies has this patch? Please either mention that or include this
patch in whatever other patch series it needs, since I can't apply this.
Maybe it also simply needs a rebase, but conflicts don't look like that.
-Daniel
> > ---
> > drivers/gpu/drm/i915/i915_drv.h | 3 +++
> > drivers/gpu/drm/i915/intel_bios.c | 21 +++++++++++++++++++++
> > drivers/gpu/drm/i915/intel_bios.h | 9 +++++++++
> > drivers/gpu/drm/i915/intel_ddi.c | 39 +++++++++++++++++++++++++++++++--------
> > 4 files changed, 64 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 09a57a5..e17fd56 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -1402,6 +1402,9 @@ struct ddi_vbt_port_info {
> > uint8_t supports_dvi:1;
> > uint8_t supports_hdmi:1;
> > uint8_t supports_dp:1;
> > +
> > + uint8_t dp_boost_level;
> > + uint8_t hdmi_boost_level;
> > };
> >
> > enum psr_lines_to_wait {
> > diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> > index 198fc3c..06b5dc3 100644
> > --- a/drivers/gpu/drm/i915/intel_bios.c
> > +++ b/drivers/gpu/drm/i915/intel_bios.c
> > @@ -946,6 +946,17 @@ err:
> > memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence));
> > }
> >
> > +static u8 translate_iboost(u8 val)
> > +{
> > + static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
> > +
> > + if (val >= ARRAY_SIZE(mapping)) {
> > + DRM_DEBUG_KMS("Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
> > + return 0;
> > + }
> > + return mapping[val];
> > +}
> > +
> > static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
> > const struct bdb_header *bdb)
> > {
> > @@ -1046,6 +1057,16 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
> > hdmi_level_shift);
> > info->hdmi_level_shift = hdmi_level_shift;
> > }
> > +
> > + /* Parse the I_boost config for SKL and above */
> > + if (bdb->version >= 196 && (child->common.flags_1 & IBOOST_ENABLE)) {
> > + info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF);
> > + DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
> > + port_name(port), info->dp_boost_level);
> > + info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4);
> > + DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n",
> > + port_name(port), info->hdmi_boost_level);
> > + }
> > }
> >
> > static void parse_ddi_ports(struct drm_i915_private *dev_priv,
> > diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> > index af0b476..8edd75c 100644
> > --- a/drivers/gpu/drm/i915/intel_bios.h
> > +++ b/drivers/gpu/drm/i915/intel_bios.h
> > @@ -231,6 +231,10 @@ struct old_child_dev_config {
> > /* This one contains field offsets that are known to be common for all BDB
> > * versions. Notice that the meaning of the contents contents may still change,
> > * but at least the offsets are consistent. */
> > +
> > +/* Definitions for flags_1 */
> > +#define IBOOST_ENABLE (1<<3)
> > +
> > struct common_child_dev_config {
> > u16 handle;
> > u16 device_type;
> > @@ -239,8 +243,13 @@ struct common_child_dev_config {
> > u8 not_common2[2];
> > u8 ddc_pin;
> > u16 edid_ptr;
> > + u8 obsolete;
> > + u8 flags_1;
> > + u8 not_common3[13];
> > + u8 iboost_level;
> > } __packed;
> >
> > +
> > /* This field changes depending on the BDB version, so the most reliable way to
> > * read it is by checking the BDB version and reading the raw pointer. */
> > union child_device_config {
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index 3abcb43..8e5e94c 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -434,6 +434,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> > {
> > struct drm_i915_private *dev_priv = dev->dev_private;
> > u32 reg;
> > + u32 iboost_bit = 0;
> > int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
> > size;
> > int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
> > @@ -459,6 +460,10 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> > ddi_translations_hdmi =
> > skl_get_buf_trans_hdmi(dev, &n_hdmi_entries);
> > hdmi_default_entry = 8;
> > + /* If we're boosting the current, set bit 31 of trans1 */
> > + if (dev_priv->vbt.ddi_port_info[port].hdmi_boost_level ||
> > + dev_priv->vbt.ddi_port_info[port].dp_boost_level)
> > + iboost_bit = 1<<31;
> > } else if (IS_BROADWELL(dev)) {
> > ddi_translations_fdi = bdw_ddi_translations_fdi;
> > ddi_translations_dp = bdw_ddi_translations_dp;
> > @@ -519,7 +524,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> > }
> >
> > for (i = 0, reg = DDI_BUF_TRANS(port); i < size; i++) {
> > - I915_WRITE(reg, ddi_translations[i].trans1);
> > + I915_WRITE(reg, ddi_translations[i].trans1 | iboost_bit);
> > reg += 4;
> > I915_WRITE(reg, ddi_translations[i].trans2);
> > reg += 4;
> > @@ -534,7 +539,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> > hdmi_level = hdmi_default_entry;
> >
> > /* Entry 9 is for HDMI: */
> > - I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1);
> > + I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1 | iboost_bit);
> > reg += 4;
> > I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans2);
> > reg += 4;
> > @@ -1978,18 +1983,36 @@ void skl_ddi_set_iboost(struct drm_device *dev, u32 level,
> > struct drm_i915_private *dev_priv = dev->dev_private;
> > const struct ddi_buf_trans *ddi_translations;
> > uint8_t iboost;
> > + uint8_t dp_iboost, hdmi_iboost;
> > int n_entries;
> > u32 reg;
> > + u32 iboost_bit = 0;
> > +
> > + /* VBT may override standard boost values */
> > + dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
> > + hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
> >
> > if (type == INTEL_OUTPUT_DISPLAYPORT) {
> > - ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
> > - iboost = ddi_translations[port].i_boost;
> > + if (dp_iboost) {
> > + iboost = dp_iboost;
> > + } else {
> > + ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
> > + iboost = ddi_translations[port].i_boost;
> > + }
> > } else if (type == INTEL_OUTPUT_EDP) {
> > - ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
> > - iboost = ddi_translations[port].i_boost;
> > + if (dp_iboost) {
> > + iboost = dp_iboost;
> > + } else {
> > + ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
> > + iboost = ddi_translations[port].i_boost;
> > + }
> > } else if (type == INTEL_OUTPUT_HDMI) {
> > - ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
> > - iboost = ddi_translations[port].i_boost;
> > + if (hdmi_iboost) {
> > + iboost = hdmi_iboost;
> > + } else {
> > + ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
> > + iboost = ddi_translations[port].i_boost;
> > + }
> > } else {
> > return;
> > }
> > --
> > 1.8.3.2
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-25 7:37 ` Daniel Vetter
@ 2015-06-25 11:18 ` David Weinehall
2015-06-25 13:16 ` Daniel Vetter
0 siblings, 1 reply; 8+ messages in thread
From: David Weinehall @ 2015-06-25 11:18 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
On Thu, Jun 25, 2015 at 09:37:22AM +0200, Daniel Vetter wrote:
> On Thu, Jun 25, 2015 at 09:14:09AM +0300, David Weinehall wrote:
> > Looks good.
> >
> > Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
> >
> > On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
> > > An OEM may request increased I_boost beyond the recommended values
> > > by specifying an I_boost value to be applied to all swing entries for
> > > a port. These override values are specified in VBT.
> > >
> > > Issue: VIZ-5676
> > > Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
>
> What depencies has this patch? Please either mention that or include this
> patch in whatever other patch series it needs, since I can't apply this.
> Maybe it also simply needs a rebase, but conflicts don't look like that.
As mentioned in Antti's reply to the patch, it depends on
"drm/i915/skl: Buffer translation improvements".
Antti's patch still applies against v2 of my patch, but with some slight
fuzz.
Kind regards, David
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-25 11:18 ` David Weinehall
@ 2015-06-25 13:16 ` Daniel Vetter
2015-07-01 12:19 ` Daniel Vetter
0 siblings, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2015-06-25 13:16 UTC (permalink / raw)
To: Daniel Vetter, Antti Koskipaa, intel-gfx
On Thu, Jun 25, 2015 at 02:18:06PM +0300, David Weinehall wrote:
> On Thu, Jun 25, 2015 at 09:37:22AM +0200, Daniel Vetter wrote:
> > On Thu, Jun 25, 2015 at 09:14:09AM +0300, David Weinehall wrote:
> > > Looks good.
> > >
> > > Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
> > >
> > > On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
> > > > An OEM may request increased I_boost beyond the recommended values
> > > > by specifying an I_boost value to be applied to all swing entries for
> > > > a port. These override values are specified in VBT.
> > > >
> > > > Issue: VIZ-5676
> > > > Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
> >
> > What depencies has this patch? Please either mention that or include this
> > patch in whatever other patch series it needs, since I can't apply this.
> > Maybe it also simply needs a rebase, but conflicts don't look like that.
>
> As mentioned in Antti's reply to the patch, it depends on
> "drm/i915/skl: Buffer translation improvements".
>
> Antti's patch still applies against v2 of my patch, but with some slight
> fuzz.
Light fuzz I can handle. In the future can you pls just include Antti's
patch when submitting yours in the same series? That way I won't miss it.
Thanks, Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-06-25 13:16 ` Daniel Vetter
@ 2015-07-01 12:19 ` Daniel Vetter
2015-07-01 19:14 ` Paulo Zanoni
0 siblings, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2015-07-01 12:19 UTC (permalink / raw)
To: Daniel Vetter, Antti Koskipaa, intel-gfx
On Thu, Jun 25, 2015 at 03:16:37PM +0200, Daniel Vetter wrote:
> On Thu, Jun 25, 2015 at 02:18:06PM +0300, David Weinehall wrote:
> > On Thu, Jun 25, 2015 at 09:37:22AM +0200, Daniel Vetter wrote:
> > > On Thu, Jun 25, 2015 at 09:14:09AM +0300, David Weinehall wrote:
> > > > Looks good.
> > > >
> > > > Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
> > > >
> > > > On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
> > > > > An OEM may request increased I_boost beyond the recommended values
> > > > > by specifying an I_boost value to be applied to all swing entries for
> > > > > a port. These override values are specified in VBT.
> > > > >
> > > > > Issue: VIZ-5676
> > > > > Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
> > >
> > > What depencies has this patch? Please either mention that or include this
> > > patch in whatever other patch series it needs, since I can't apply this.
> > > Maybe it also simply needs a rebase, but conflicts don't look like that.
> >
> > As mentioned in Antti's reply to the patch, it depends on
> > "drm/i915/skl: Buffer translation improvements".
> >
> > Antti's patch still applies against v2 of my patch, but with some slight
> > fuzz.
>
> Light fuzz I can handle. In the future can you pls just include Antti's
> patch when submitting yours in the same series? That way I won't miss it.
Queued for -next, thanks for the patch.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/i915: Per-DDI I_boost override
2015-07-01 12:19 ` Daniel Vetter
@ 2015-07-01 19:14 ` Paulo Zanoni
0 siblings, 0 replies; 8+ messages in thread
From: Paulo Zanoni @ 2015-07-01 19:14 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Intel Graphics Development
2015-07-01 9:19 GMT-03:00 Daniel Vetter <daniel@ffwll.ch>:
> On Thu, Jun 25, 2015 at 03:16:37PM +0200, Daniel Vetter wrote:
>> On Thu, Jun 25, 2015 at 02:18:06PM +0300, David Weinehall wrote:
>> > On Thu, Jun 25, 2015 at 09:37:22AM +0200, Daniel Vetter wrote:
>> > > On Thu, Jun 25, 2015 at 09:14:09AM +0300, David Weinehall wrote:
>> > > > Looks good.
>> > > >
>> > > > Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
>> > > >
>> > > > On Thu, Jun 18, 2015 at 02:23:37PM +0300, Antti Koskipaa wrote:
>> > > > > An OEM may request increased I_boost beyond the recommended values
>> > > > > by specifying an I_boost value to be applied to all swing entries for
>> > > > > a port. These override values are specified in VBT.
>> > > > >
>> > > > > Issue: VIZ-5676
>> > > > > Signed-off-by: Antti Koskipaa <antti.koskipaa@linux.intel.com>
>> > >
>> > > What depencies has this patch? Please either mention that or include this
>> > > patch in whatever other patch series it needs, since I can't apply this.
>> > > Maybe it also simply needs a rebase, but conflicts don't look like that.
>> >
>> > As mentioned in Antti's reply to the patch, it depends on
>> > "drm/i915/skl: Buffer translation improvements".
>> >
>> > Antti's patch still applies against v2 of my patch, but with some slight
>> > fuzz.
>>
>> Light fuzz I can handle. In the future can you pls just include Antti's
>> patch when submitting yours in the same series? That way I won't miss it.
>
> Queued for -next, thanks for the patch.
Git bisect tells me this commit introduced the following message when
I boot BDW:
[drm:intel_parse_bios [i915]] *ERROR* General definiton block child
device size is too small.
These are the lines around it:
[ 8.607616] [drm] Driver supports precise vblank timestamp query.
[ 8.607623] [drm:init_vbt_defaults] Set default to SSC at 120000 kHz
[ 8.607630] [drm:validate_vbt] Using VBT from OpRegion: $VBT HASWELL d
[ 8.607638] [drm:parse_general_features] BDB_GENERAL_FEATURES
int_tv_support 0 int_crt_support 0 lvds_use_ssc 0 lvds_ssc_freq 120000
display_clock_mode 0 fdi_rx_polarity_inverted 0
[ 8.607651] [drm:parse_general_definitions] crt_ddc_bus_pin: 2
[ 8.607658] [drm:parse_lfp_panel_data] DRRS supported mode is static
[ 8.607674] [drm:parse_lfp_panel_data] Found panel mode in BIOS VBT tables:
[ 8.607682] [drm:drm_mode_debug_printmodeline] Modeline
0:"1920x1080" 0 138780 1920 1966 1996 2080 1080 1082 1086 1112 0x8 0xa
[ 8.607692] [drm:parse_lfp_panel_data] VBT initial LVDS value 30033c
[ 8.607699] [drm:parse_lfp_backlight] VBT backlight PWM modulation
frequency 200 Hz, active high, min brightness 0, level 255
[ 8.607719] [drm:parse_sdvo_panel_data] Found SDVO panel mode in
BIOS VBT tables:
[ 8.607728] [drm:drm_mode_debug_printmodeline] Modeline
0:"1600x1200" 0 162000 1600 1664 1856 2160 1200 1201 1204 1250 0x8 0xa
[ 8.607738] [drm:parse_sdvo_device_mapping] different child size is
found. Invalid.
[ 8.607773] [drm:intel_parse_bios [i915]] *ERROR* General definiton
block child device size is too small.
[ 8.607782] [drm:parse_driver_features] DRRS State Enabled:1
[ 8.609574] [drm:intel_dsm_pci_probe] no _DSM method for intel device
[ 8.609604] [drm:i915_gem_init_stolen] found 33554432 bytes of
stolen memory at ae000000
> -Daniel
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Paulo Zanoni
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-07-01 19:14 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-18 11:23 [PATCH] drm/i915: Per-DDI I_boost override Antti Koskipaa
2015-06-18 11:25 ` Antti Koskipää
2015-06-25 6:14 ` David Weinehall
2015-06-25 7:37 ` Daniel Vetter
2015-06-25 11:18 ` David Weinehall
2015-06-25 13:16 ` Daniel Vetter
2015-07-01 12:19 ` Daniel Vetter
2015-07-01 19:14 ` Paulo Zanoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox