[Intel-gfx] [PATCH] drm/i915/display: Remove check for low voltage sku for max dp source rate
Jani Nikula
jani.nikula at intel.com
Tue Oct 5 10:34:21 UTC 2021
Cc: Imre, I think you were involved in adding the checks.
BR,
Jani.
On Tue, 05 Oct 2021, "Nautiyal, Ankit K" <ankit.k.nautiyal at intel.com> wrote:
> On 10/5/2021 1:34 PM, Jani Nikula wrote:
>> On Tue, 05 Oct 2021, Ankit Nautiyal <ankit.k.nautiyal at intel.com> wrote:
>>> The low voltage sku check can be ignored as OEMs need to consider that
>>> when designing the board and then put any limits in VBT.
>> "can" or "must"?
>>
>> VBT has been notoriously buggy over the years, and we need to safeguard
>> against that. Are there any cases where having these checks are wrong?
>
> Hi Jani,
>
> Bspec page for Combo PHY PLL frequencies now says "OEM must use VBT to
> specify a maximum that is tolerated by the board design" for the rates
> above 5.4G.
>
> Earlier it was mentioned that rates > 5.4G were supported on SKUs with
> Higher I/O Voltage.
>
> There was an instance where on an ADL-S board, where VBT was showing as
> HBR3 supporting for a combo phy port, but we were reading the IO
> voltage as 0.85V in is_low_voltage_sku()
>
> (Specifically, we were reading Register_PORT_COMP_DW3 bits 24-25 as 0)
> for a combo PHY port, and therefore we were limiting the BW to 5.4Gbps
>
> Due to this, 8k at 60 mode was getting pruned on the board for that combo
> phy port. On removing the low_voltage_sku( ) the mode was able to be set
> properly.
>
> Incidentally, with Windows 8k at 60 was also coming up on the same board on
> same port.
>
> So I had checked with HW team and GOP/VBT team if driver should consider
> the low voltage sku check. As per their response we 'can' ignore the
> check and rely on the VBT, as OEM should limit the rate as per board
> design. The Bspec was also updated to reflect the same.
>
> So IMHO we need not limit the rate as per is_low_voltage_sku check, as
> this limiting of the rate through VBT is a must for the OEMs.
>
> I should perhaps change the wording of the commit message to convey the
> same.
>
>
> Thanks & Regards,
>
> Ankit
>
>
>>
>> BR,
>> Jani.
>>
>>> Same is now changed in Bspec (53720).
>>>
>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
>>> ---
>>> drivers/gpu/drm/i915/display/intel_dp.c | 32 +++----------------------
>>> 1 file changed, 3 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
>>> index 74a657ae131a..75c364c3c88e 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>>> @@ -297,23 +297,13 @@ static int dg2_max_source_rate(struct intel_dp *intel_dp)
>>> return intel_dp_is_edp(intel_dp) ? 810000 : 1350000;
>>> }
>>>
>>> -static bool is_low_voltage_sku(struct drm_i915_private *i915, enum phy phy)
>>> -{
>>> - u32 voltage;
>>> -
>>> - voltage = intel_de_read(i915, ICL_PORT_COMP_DW3(phy)) & VOLTAGE_INFO_MASK;
>>> -
>>> - return voltage == VOLTAGE_INFO_0_85V;
>>> -}
>>> -
>>> static int icl_max_source_rate(struct intel_dp *intel_dp)
>>> {
>>> struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>>> struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
>>> enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
>>>
>>> - if (intel_phy_is_combo(dev_priv, phy) &&
>>> - (is_low_voltage_sku(dev_priv, phy) || !intel_dp_is_edp(intel_dp)))
>>> + if (intel_phy_is_combo(dev_priv, phy) && !intel_dp_is_edp(intel_dp))
>>> return 540000;
>>>
>>> return 810000;
>>> @@ -321,23 +311,7 @@ static int icl_max_source_rate(struct intel_dp *intel_dp)
>>>
>>> static int ehl_max_source_rate(struct intel_dp *intel_dp)
>>> {
>>> - struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>>> - struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
>>> - enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
>>> -
>>> - if (intel_dp_is_edp(intel_dp) || is_low_voltage_sku(dev_priv, phy))
>>> - return 540000;
>>> -
>>> - return 810000;
>>> -}
>>> -
>>> -static int dg1_max_source_rate(struct intel_dp *intel_dp)
>>> -{
>>> - struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>>> - struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
>>> - enum phy phy = intel_port_to_phy(i915, dig_port->base.port);
>>> -
>>> - if (intel_phy_is_combo(i915, phy) && is_low_voltage_sku(i915, phy))
>>> + if (intel_dp_is_edp(intel_dp))
>>> return 540000;
>>>
>>> return 810000;
>>> @@ -380,7 +354,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
>>> max_rate = dg2_max_source_rate(intel_dp);
>>> else if (IS_ALDERLAKE_P(dev_priv) || IS_ALDERLAKE_S(dev_priv) ||
>>> IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
>>> - max_rate = dg1_max_source_rate(intel_dp);
>>> + max_rate = 810000;
>>> else if (IS_JSL_EHL(dev_priv))
>>> max_rate = ehl_max_source_rate(intel_dp);
>>> else
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list