Skip to content

Commit a4780b7

Browse files
author
Ander Conselvan de Oliveira
committed
drm/i915: Split intel_get_shared_dpll() into smaller functions
Make the code neater by splitting the code for platforms with fixed PLL to their own functions and splitting the logic for finding a shareable or unused pll from the logic for setting it up. Signed-off-by: Ander Conselvan de Oliveira <[email protected]> Reviewed-by: Maarten Lankhorst <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/1457451987-17466-4-git-send-email-ander.conselvan.de.oliveira@intel.com
1 parent 55be2f0 commit a4780b7

File tree

1 file changed

+74
-35
lines changed

1 file changed

+74
-35
lines changed

drivers/gpu/drm/i915/intel_dpll_mgr.c

Lines changed: 74 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -145,52 +145,65 @@ void intel_disable_shared_dpll(struct intel_crtc *crtc)
145145
intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS);
146146
}
147147

148-
struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc,
149-
struct intel_crtc_state *crtc_state)
148+
static enum intel_dpll_id
149+
ibx_get_fixed_dpll(struct intel_crtc *crtc,
150+
struct intel_crtc_state *crtc_state)
150151
{
151-
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
152+
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
152153
struct intel_shared_dpll *pll;
153-
struct intel_shared_dpll_config *shared_dpll;
154154
enum intel_dpll_id i;
155-
int max = dev_priv->num_shared_dpll;
156155

157-
shared_dpll = intel_atomic_get_shared_dpll_state(crtc_state->base.state);
156+
/* Ironlake PCH has a fixed PLL->PCH pipe mapping. */
157+
i = (enum intel_dpll_id) crtc->pipe;
158+
pll = &dev_priv->shared_dplls[i];
158159

159-
if (HAS_PCH_IBX(dev_priv->dev)) {
160-
/* Ironlake PCH has a fixed PLL->PCH pipe mapping. */
161-
i = (enum intel_dpll_id) crtc->pipe;
162-
pll = &dev_priv->shared_dplls[i];
160+
DRM_DEBUG_KMS("CRTC:%d using pre-allocated %s\n",
161+
crtc->base.base.id, pll->name);
163162

164-
DRM_DEBUG_KMS("CRTC:%d using pre-allocated %s\n",
165-
crtc->base.base.id, pll->name);
163+
return i;
164+
}
166165

167-
WARN_ON(shared_dpll[i].crtc_mask);
166+
static enum intel_dpll_id
167+
bxt_get_fixed_dpll(struct intel_crtc *crtc,
168+
struct intel_crtc_state *crtc_state)
169+
{
170+
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
171+
struct intel_encoder *encoder;
172+
struct intel_digital_port *intel_dig_port;
173+
struct intel_shared_dpll *pll;
174+
enum intel_dpll_id i;
168175

169-
goto found;
170-
}
176+
/* PLL is attached to port in bxt */
177+
encoder = intel_ddi_get_crtc_new_encoder(crtc_state);
178+
if (WARN_ON(!encoder))
179+
return DPLL_ID_PRIVATE;
171180

172-
if (IS_BROXTON(dev_priv->dev)) {
173-
/* PLL is attached to port in bxt */
174-
struct intel_encoder *encoder;
175-
struct intel_digital_port *intel_dig_port;
181+
intel_dig_port = enc_to_dig_port(&encoder->base);
182+
/* 1:1 mapping between ports and PLLs */
183+
i = (enum intel_dpll_id)intel_dig_port->port;
184+
pll = &dev_priv->shared_dplls[i];
185+
DRM_DEBUG_KMS("CRTC:%d using pre-allocated %s\n",
186+
crtc->base.base.id, pll->name);
176187

177-
encoder = intel_ddi_get_crtc_new_encoder(crtc_state);
178-
if (WARN_ON(!encoder))
179-
return NULL;
188+
return i;
189+
}
180190

181-
intel_dig_port = enc_to_dig_port(&encoder->base);
182-
/* 1:1 mapping between ports and PLLs */
183-
i = (enum intel_dpll_id)intel_dig_port->port;
184-
pll = &dev_priv->shared_dplls[i];
185-
DRM_DEBUG_KMS("CRTC:%d using pre-allocated %s\n",
186-
crtc->base.base.id, pll->name);
187-
WARN_ON(shared_dpll[i].crtc_mask);
191+
static enum intel_dpll_id
192+
intel_find_shared_dpll(struct intel_crtc *crtc,
193+
struct intel_crtc_state *crtc_state)
194+
{
195+
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
196+
struct intel_shared_dpll *pll;
197+
struct intel_shared_dpll_config *shared_dpll;
198+
enum intel_dpll_id i;
199+
int max = dev_priv->num_shared_dpll;
188200

189-
goto found;
190-
} else if (INTEL_INFO(dev_priv)->gen < 9 && HAS_DDI(dev_priv))
201+
if (INTEL_INFO(dev_priv)->gen < 9 && HAS_DDI(dev_priv))
191202
/* Do not consider SPLL */
192203
max = 2;
193204

205+
shared_dpll = intel_atomic_get_shared_dpll_state(crtc_state->base.state);
206+
194207
for (i = 0; i < max; i++) {
195208
pll = &dev_priv->shared_dplls[i];
196209

@@ -205,7 +218,7 @@ struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc,
205218
crtc->base.base.id, pll->name,
206219
shared_dpll[i].crtc_mask,
207220
pll->active);
208-
goto found;
221+
return i;
209222
}
210223
}
211224

@@ -215,13 +228,39 @@ struct intel_shared_dpll *intel_get_shared_dpll(struct intel_crtc *crtc,
215228
if (shared_dpll[i].crtc_mask == 0) {
216229
DRM_DEBUG_KMS("CRTC:%d allocated %s\n",
217230
crtc->base.base.id, pll->name);
218-
goto found;
231+
return i;
219232
}
220233
}
221234

222-
return NULL;
235+
return DPLL_ID_PRIVATE;
236+
}
237+
238+
struct intel_shared_dpll *
239+
intel_get_shared_dpll(struct intel_crtc *crtc,
240+
struct intel_crtc_state *crtc_state)
241+
{
242+
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
243+
struct intel_shared_dpll *pll;
244+
struct intel_shared_dpll_config *shared_dpll;
245+
enum intel_dpll_id i;
246+
247+
shared_dpll = intel_atomic_get_shared_dpll_state(crtc_state->base.state);
248+
249+
if (HAS_PCH_IBX(dev_priv->dev)) {
250+
i = ibx_get_fixed_dpll(crtc, crtc_state);
251+
WARN_ON(shared_dpll[i].crtc_mask);
252+
} else if (IS_BROXTON(dev_priv->dev)) {
253+
i = bxt_get_fixed_dpll(crtc, crtc_state);
254+
WARN_ON(shared_dpll[i].crtc_mask);
255+
} else {
256+
i = intel_find_shared_dpll(crtc, crtc_state);
257+
}
258+
259+
if (i < 0)
260+
return NULL;
261+
262+
pll = &dev_priv->shared_dplls[i];
223263

224-
found:
225264
if (shared_dpll[i].crtc_mask == 0)
226265
shared_dpll[i].hw_state =
227266
crtc_state->dpll_hw_state;

0 commit comments

Comments
 (0)