Lines Matching +full:post +full:-

33  * amdgpu_pll_reduce_ratio - fractional number reduction
70 * amdgpu_pll_get_fb_ref_div - feedback and ref divider calculation
74 * @post_div: post divider
80 * Calculate feedback and reference divider for a given post divider. Makes
87 /* limit reference * post divider to a maximum */ in amdgpu_pll_get_fb_ref_div()
102 * amdgpu_pll_compute - compute PLL paramaters
122 unsigned target_clock = pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV ? in amdgpu_pll_compute()
132 fb_div_min = pll->min_feedback_div; in amdgpu_pll_compute()
133 fb_div_max = pll->max_feedback_div; in amdgpu_pll_compute()
135 if (pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV) { in amdgpu_pll_compute()
141 if (pll->flags & AMDGPU_PLL_USE_REF_DIV) in amdgpu_pll_compute()
142 ref_div_min = pll->reference_div; in amdgpu_pll_compute()
144 ref_div_min = pll->min_ref_div; in amdgpu_pll_compute()
146 if (pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV && in amdgpu_pll_compute()
147 pll->flags & AMDGPU_PLL_USE_REF_DIV) in amdgpu_pll_compute()
148 ref_div_max = pll->reference_div; in amdgpu_pll_compute()
150 ref_div_max = pll->max_ref_div; in amdgpu_pll_compute()
152 /* determine allowed post divider range */ in amdgpu_pll_compute()
153 if (pll->flags & AMDGPU_PLL_USE_POST_DIV) { in amdgpu_pll_compute()
154 post_div_min = pll->post_div; in amdgpu_pll_compute()
155 post_div_max = pll->post_div; in amdgpu_pll_compute()
159 if (pll->flags & AMDGPU_PLL_IS_LCD) { in amdgpu_pll_compute()
160 vco_min = pll->lcd_pll_out_min; in amdgpu_pll_compute()
161 vco_max = pll->lcd_pll_out_max; in amdgpu_pll_compute()
163 vco_min = pll->pll_out_min; in amdgpu_pll_compute()
164 vco_max = pll->pll_out_max; in amdgpu_pll_compute()
167 if (pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV) { in amdgpu_pll_compute()
175 if (post_div_min < pll->min_post_div) in amdgpu_pll_compute()
176 post_div_min = pll->min_post_div; in amdgpu_pll_compute()
180 --post_div_max; in amdgpu_pll_compute()
181 if (post_div_max > pll->max_post_div) in amdgpu_pll_compute()
182 post_div_max = pll->max_post_div; in amdgpu_pll_compute()
187 den = pll->reference_freq; in amdgpu_pll_compute()
192 /* now search for a post divider */ in amdgpu_pll_compute()
193 if (pll->flags & AMDGPU_PLL_PREFER_MINM_OVER_MAXP) in amdgpu_pll_compute()
203 diff = abs(target_clock - (pll->reference_freq * fb_div) / in amdgpu_pll_compute()
207 !(pll->flags & AMDGPU_PLL_PREFER_MINM_OVER_MAXP))) { in amdgpu_pll_compute()
224 if (pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV && (fb_div % 10)) { in amdgpu_pll_compute()
225 fb_div_min = max(fb_div_min, (9 - (fb_div % 10)) * 20 + 60); in amdgpu_pll_compute()
234 if (pll->flags & AMDGPU_PLL_USE_FRAC_FB_DIV) { in amdgpu_pll_compute()
242 *dot_clock_p = ((pll->reference_freq * *fb_div_p * 10) + in amdgpu_pll_compute()
243 (pll->reference_freq * *frac_fb_div_p)) / in amdgpu_pll_compute()
248 DRM_DEBUG_KMS("%d - %d, pll dividers - fb: %d.%d ref: %d, post %d\n", in amdgpu_pll_compute()
254 * amdgpu_pll_get_use_mask - look up a mask of which pplls are in use
262 struct drm_device *dev = crtc->dev; in amdgpu_pll_get_use_mask()
267 list_for_each_entry(test_crtc, &dev->mode_config.crtc_list, head) { in amdgpu_pll_get_use_mask()
272 if (test_amdgpu_crtc->pll_id != ATOM_PPLL_INVALID) in amdgpu_pll_get_use_mask()
273 pll_in_use |= (1 << test_amdgpu_crtc->pll_id); in amdgpu_pll_get_use_mask()
279 * amdgpu_pll_get_shared_dp_ppll - return the PPLL used by another crtc for DP
289 struct drm_device *dev = crtc->dev; in amdgpu_pll_get_shared_dp_ppll()
293 list_for_each_entry(test_crtc, &dev->mode_config.crtc_list, head) { in amdgpu_pll_get_shared_dp_ppll()
297 if (test_amdgpu_crtc->encoder && in amdgpu_pll_get_shared_dp_ppll()
298 ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(test_amdgpu_crtc->encoder))) { in amdgpu_pll_get_shared_dp_ppll()
300 if (test_amdgpu_crtc->pll_id != ATOM_PPLL_INVALID) in amdgpu_pll_get_shared_dp_ppll()
301 return test_amdgpu_crtc->pll_id; in amdgpu_pll_get_shared_dp_ppll()
308 * amdgpu_pll_get_shared_nondp_ppll - return the PPLL used by another non-DP crtc
313 * Returns the PPLL (Pixel PLL) used by another non-DP crtc/encoder which can
319 struct drm_device *dev = crtc->dev; in amdgpu_pll_get_shared_nondp_ppll()
324 adjusted_clock = amdgpu_crtc->adjusted_clock; in amdgpu_pll_get_shared_nondp_ppll()
329 list_for_each_entry(test_crtc, &dev->mode_config.crtc_list, head) { in amdgpu_pll_get_shared_nondp_ppll()
333 if (test_amdgpu_crtc->encoder && in amdgpu_pll_get_shared_nondp_ppll()
334 !ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(test_amdgpu_crtc->encoder))) { in amdgpu_pll_get_shared_nondp_ppll()
336 if (test_amdgpu_crtc->connector == amdgpu_crtc->connector) { in amdgpu_pll_get_shared_nondp_ppll()
338 if (test_amdgpu_crtc->pll_id != ATOM_PPLL_INVALID) in amdgpu_pll_get_shared_nondp_ppll()
339 return test_amdgpu_crtc->pll_id; in amdgpu_pll_get_shared_nondp_ppll()
341 /* for non-DP check the clock */ in amdgpu_pll_get_shared_nondp_ppll()
342 test_adjusted_clock = test_amdgpu_crtc->adjusted_clock; in amdgpu_pll_get_shared_nondp_ppll()
343 if ((crtc->mode.clock == test_crtc->mode.clock) && in amdgpu_pll_get_shared_nondp_ppll()
345 (amdgpu_crtc->ss_enabled == test_amdgpu_crtc->ss_enabled) && in amdgpu_pll_get_shared_nondp_ppll()
346 (test_amdgpu_crtc->pll_id != ATOM_PPLL_INVALID)) in amdgpu_pll_get_shared_nondp_ppll()
347 return test_amdgpu_crtc->pll_id; in amdgpu_pll_get_shared_nondp_ppll()