Skip to content

Commit 8f0cfa4

Browse files
committed
drm/i915: Pass computed vco to bxt_set_cdclk()
Rather than compute the vco inside bxt_set_cdclk() let's precompute it outside and pass it in. A small step towards a fully precomputed cdclk state. Signed-off-by: Ville Syrjälä <[email protected]> Reviewed-by: Ander Conselvan de Oliveira <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 7ff89ca commit 8f0cfa4

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

drivers/gpu/drm/i915/intel_cdclk.c

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,15 +1143,11 @@ static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco)
11431143
dev_priv->cdclk_pll.vco = vco;
11441144
}
11451145

1146-
static void bxt_set_cdclk(struct drm_i915_private *dev_priv, int cdclk)
1146+
static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
1147+
int cdclk, int vco)
11471148
{
11481149
u32 val, divider;
1149-
int vco, ret;
1150-
1151-
if (IS_GEMINILAKE(dev_priv))
1152-
vco = glk_de_pll_vco(dev_priv, cdclk);
1153-
else
1154-
vco = bxt_de_pll_vco(dev_priv, cdclk);
1150+
int ret;
11551151

11561152
DRM_DEBUG_DRIVER("Changing CDCLK to %d kHz (VCO %d kHz)\n",
11571153
cdclk, vco);
@@ -1284,7 +1280,7 @@ static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
12841280
*/
12851281
void bxt_init_cdclk(struct drm_i915_private *dev_priv)
12861282
{
1287-
int cdclk;
1283+
int cdclk, vco;
12881284

12891285
bxt_sanitize_cdclk(dev_priv);
12901286

@@ -1296,12 +1292,15 @@ void bxt_init_cdclk(struct drm_i915_private *dev_priv)
12961292
* - The initial CDCLK needs to be read from VBT.
12971293
* Need to make this change after VBT has changes for BXT.
12981294
*/
1299-
if (IS_GEMINILAKE(dev_priv))
1295+
if (IS_GEMINILAKE(dev_priv)) {
13001296
cdclk = glk_calc_cdclk(0);
1301-
else
1297+
vco = glk_de_pll_vco(dev_priv, cdclk);
1298+
} else {
13021299
cdclk = bxt_calc_cdclk(0);
1300+
vco = bxt_de_pll_vco(dev_priv, cdclk);
1301+
}
13031302

1304-
bxt_set_cdclk(dev_priv, cdclk);
1303+
bxt_set_cdclk(dev_priv, cdclk, vco);
13051304
}
13061305

13071306
/**
@@ -1313,7 +1312,7 @@ void bxt_init_cdclk(struct drm_i915_private *dev_priv)
13131312
*/
13141313
void bxt_uninit_cdclk(struct drm_i915_private *dev_priv)
13151314
{
1316-
bxt_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref);
1315+
bxt_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref, 0);
13171316
}
13181317

13191318
static int bdw_adjust_min_pipe_pixel_rate(struct intel_crtc_state *crtc_state,
@@ -1533,12 +1532,18 @@ static int bxt_modeset_calc_cdclk(struct drm_atomic_state *state)
15331532

15341533
static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
15351534
{
1536-
struct drm_device *dev = old_state->dev;
1535+
struct drm_i915_private *dev_priv = to_i915(old_state->dev);
15371536
struct intel_atomic_state *old_intel_state =
15381537
to_intel_atomic_state(old_state);
15391538
unsigned int req_cdclk = old_intel_state->dev_cdclk;
1539+
unsigned int req_vco;
1540+
1541+
if (IS_GEMINILAKE(dev_priv))
1542+
req_vco = glk_de_pll_vco(dev_priv, req_cdclk);
1543+
else
1544+
req_vco = bxt_de_pll_vco(dev_priv, req_cdclk);
15401545

1541-
bxt_set_cdclk(to_i915(dev), req_cdclk);
1546+
bxt_set_cdclk(dev_priv, req_cdclk, req_vco);
15421547
}
15431548

15441549
static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)

0 commit comments

Comments
 (0)