[Intel-gfx] [PATCH] drm/i915: Select DPLL's via mask

Lucas De Marchi lucas.demarchi at intel.com
Tue Oct 8 16:37:57 UTC 2019


On Tue, Oct 08, 2019 at 07:28:45PM +0300, Ville Syrjälä wrote:
>On Tue, Oct 08, 2019 at 09:12:52AM -0700, Matt Roper wrote:
>> This slightly simplifies the EHL DPLL4 handling and also gives us more
>> flexibility in the future in case we need to skip the use of specific
>> PLL's (e.g., due to hardware workarounds and such).
>>
>> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 42 +++++++++----------
>>  1 file changed, 20 insertions(+), 22 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
>> index 5e9e84c94a15..14e040658b12 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
>> @@ -247,8 +247,7 @@ static struct intel_shared_dpll *
>>  intel_find_shared_dpll(struct intel_atomic_state *state,
>>  		       const struct intel_crtc *crtc,
>>  		       const struct intel_dpll_hw_state *pll_state,
>> -		       enum intel_dpll_id range_min,
>> -		       enum intel_dpll_id range_max)
>> +		       unsigned long dpll_mask)
>
>I don't like seeing lone longs hanging around since they
>change meaning between 32bit and 64bit builds. Always makes
>me suspicious.
>
>>  {
>>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>>  	struct intel_shared_dpll *pll, *unused_pll = NULL;
>> @@ -257,7 +256,9 @@ intel_find_shared_dpll(struct intel_atomic_state *state,
>>
>>  	shared_dpll = intel_atomic_get_shared_dpll_state(&state->base);
>>
>> -	for (i = range_min; i <= range_max; i++) {
>> +	WARN_ON(dpll_mask & ~(BIT(I915_NUM_PLLS) - 1));
>> +
>> +	for_each_set_bit(i, &dpll_mask, I915_NUM_PLLS) {
>
>But I guess this guy demands one :(

We are generally safe when the limit is much lower than the word sizes
we care about. I915_NUM_PLLS is currently 9 and I don't think it will go
near 32.

>> @@ -2975,7 +2975,7 @@ static bool icl_get_combo_phy_dpll(struct intel_atomic_state *state,
>>  		&crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
>>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>>  	enum port port = encoder->port;
>> -	bool has_dpll4 = false;
>> +	unsigned dpll_mask;

for consistency this should be unsigned long too.

Lucas De Marchi

>>
>>  	if (!icl_calc_dpll_state(crtc_state, encoder, &port_dpll->hw_state)) {
>>  		DRM_DEBUG_KMS("Could not calculate combo PHY PLL state.\n");
>> @@ -2984,13 +2984,13 @@ static bool icl_get_combo_phy_dpll(struct intel_atomic_state *state,
>>  	}
>>
>>  	if (IS_ELKHARTLAKE(dev_priv) && port != PORT_A)
>> -		has_dpll4 = true;
>> +		dpll_mask = GENMASK(DPLL_ID_EHL_DPLL4, DPLL_ID_ICL_DPLL0);
>> +	else
>> +		dpll_mask = GENMASK(DPLL_ID_ICL_DPLL1, DPLL_ID_ICL_DPLL0);
>>
>>  	port_dpll->pll = intel_find_shared_dpll(state, crtc,
>>  						&port_dpll->hw_state,
>> -						DPLL_ID_ICL_DPLL0,
>> -						has_dpll4 ? DPLL_ID_EHL_DPLL4
>> -							  : DPLL_ID_ICL_DPLL1);
>> +						dpll_mask);
>>  	if (!port_dpll->pll) {
>>  		DRM_DEBUG_KMS("No combo PHY PLL found for [ENCODER:%d:%s]\n",
>>  			      encoder->base.base.id, encoder->base.name);
>> @@ -3023,8 +3023,7 @@ static bool icl_get_tc_phy_dplls(struct intel_atomic_state *state,
>>
>>  	port_dpll->pll = intel_find_shared_dpll(state, crtc,
>>  						&port_dpll->hw_state,
>> -						DPLL_ID_ICL_TBTPLL,
>> -						DPLL_ID_ICL_TBTPLL);
>> +						BIT(DPLL_ID_ICL_TBTPLL));
>>  	if (!port_dpll->pll) {
>>  		DRM_DEBUG_KMS("No TBT-ALT PLL found\n");
>>  		return false;
>> @@ -3043,8 +3042,7 @@ static bool icl_get_tc_phy_dplls(struct intel_atomic_state *state,
>>  							 encoder->port));
>>  	port_dpll->pll = intel_find_shared_dpll(state, crtc,
>>  						&port_dpll->hw_state,
>> -						dpll_id,
>> -						dpll_id);
>> +						BIT(dpll_id));
>>  	if (!port_dpll->pll) {
>>  		DRM_DEBUG_KMS("No MG PHY PLL found\n");
>>  		goto err_unreference_tbt_pll;
>> --
>> 2.21.0
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>-- 
>Ville Syrjälä
>Intel


More information about the Intel-gfx mailing list