summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Courbot <acourbot@nvidia.com>2016-02-05 17:10:14 +0900
committerAlexandre Courbot <acourbot@nvidia.com>2016-02-26 10:24:28 +0900
commit4b4eec067943022b4a1b756f00043a92352a9ca3 (patch)
treea6f5b44942789aaedd076215dfa528dc8f109007
parent54d51aad0407b8566fd21f894331c8d8e77e172a (diff)
downloadnouveau-4b4eec067943022b4a1b756f00043a92352a9ca3.tar.gz
fold disable functions in
-rw-r--r--drm/nouveau/nvkm/subdev/clk/gk20a.c44
-rw-r--r--drm/nouveau/nvkm/subdev/clk/gm20b.c61
2 files changed, 46 insertions, 59 deletions
diff --git a/drm/nouveau/nvkm/subdev/clk/gk20a.c b/drm/nouveau/nvkm/subdev/clk/gk20a.c
index 209e7e736..d46423a68 100644
--- a/drm/nouveau/nvkm/subdev/clk/gk20a.c
+++ b/drm/nouveau/nvkm/subdev/clk/gk20a.c
@@ -383,30 +383,6 @@ gk20a_pllg_program_mnp(struct gk20a_clk *clk)
return err;
}
-static void
-gk20a_pllg_disable(struct gk20a_clk *clk)
-{
- struct nvkm_device *device = clk->base.subdev.device;
- u32 val;
-
- /* slide to VCO min */
- val = nvkm_rd32(device, GPCPLL_CFG);
- if (val & GPCPLL_CFG_ENABLE) {
- u32 coeff, m, n_lo;
-
- coeff = nvkm_rd32(device, GPCPLL_COEFF);
- m = (coeff >> GPCPLL_COEFF_M_SHIFT) & MASK(GPCPLL_COEFF_M_WIDTH);
- n_lo = DIV_ROUND_UP(m * clk->params->min_vco,
- clk->parent_rate / KHZ);
- gk20a_pllg_slide(clk, n_lo);
- }
-
- /* put PLL in bypass before disabling it */
- nvkm_mask(device, SEL_VCO, BIT(SEL_VCO_GPC2CLK_OUT_SHIFT), 0);
-
- _gk20a_pllg_disable(clk);
-}
-
#define GK20A_CLK_GPC_MDIV 1000
static struct nvkm_pstate
@@ -547,8 +523,26 @@ gk20a_clk_tidy(struct nvkm_clk *base)
static void
gk20a_clk_fini(struct nvkm_clk *base)
{
+ struct nvkm_device *device = base->subdev.device;
struct gk20a_clk *clk = gk20a_clk(base);
- gk20a_pllg_disable(clk);
+ u32 val;
+
+ /* slide to VCO min */
+ val = nvkm_rd32(device, GPCPLL_CFG);
+ if (val & GPCPLL_CFG_ENABLE) {
+ u32 coeff, m, n_lo;
+
+ coeff = nvkm_rd32(device, GPCPLL_COEFF);
+ m = (coeff >> GPCPLL_COEFF_M_SHIFT) & MASK(GPCPLL_COEFF_M_WIDTH);
+ n_lo = DIV_ROUND_UP(m * clk->params->min_vco,
+ clk->parent_rate / KHZ);
+ gk20a_pllg_slide(clk, n_lo);
+ }
+
+ /* put PLL in bypass before disabling it */
+ nvkm_mask(device, SEL_VCO, BIT(SEL_VCO_GPC2CLK_OUT_SHIFT), 0);
+
+ _gk20a_pllg_disable(clk);
}
static int
diff --git a/drm/nouveau/nvkm/subdev/clk/gm20b.c b/drm/nouveau/nvkm/subdev/clk/gm20b.c
index 86ec3e2cf..949b6447b 100644
--- a/drm/nouveau/nvkm/subdev/clk/gm20b.c
+++ b/drm/nouveau/nvkm/subdev/clk/gm20b.c
@@ -887,39 +887,6 @@ calibration_done:
return 0;
}
-static void
-gm20b_pllg_disable(struct gm20b_clk *clk)
-{
- struct nvkm_subdev *subdev = &clk->base.base.subdev;
- struct nvkm_device *device = subdev->device;
- u32 val;
-
- /* slide to VCO min */
- val = nvkm_rd32(device, GPCPLL_CFG);
- if (val & GPCPLL_CFG_ENABLE) {
- struct gm20b_gpcpll gpcpll;
- gpcpll.pll = clk->base.pll;
- gpcpll.dvfs = clk->dvfs;
- gpcpll.rate = clk->base.rate;
-
- gk20a_pllg_read_mnp(&clk->base.base, &gpcpll.pll);
- gpcpll.pll.n = DIV_ROUND_UP(gpcpll.pll.m * clk->base.params->min_vco,
- clk->base.parent_rate / KHZ);
- if (clk->base.napll_enabled)
- gm20b_clk_calc_dfs_ndiv(clk, &gpcpll.dvfs, gpcpll.dvfs.uv,
- gpcpll.pll.n);
- gm20b_pllg_slide(clk, &gpcpll);
- }
-
- /* put PLL in bypass before disabling it */
- nvkm_mask(device, SEL_VCO, BIT(SEL_VCO_GPC2CLK_OUT_SHIFT), 0);
-
- /* clear SYNC_MODE before disabling PLL */
- nvkm_mask(device, GPCPLL_CFG, ~(0x1 << GPCPLL_CFG_SYNC_MODE), 0);
-
- _gm20b_pllg_disable(clk);
-}
-
#define GM20B_CLK_GPC_MDIV 1000
static struct nvkm_pstate
@@ -1065,8 +1032,34 @@ gm20b_clk_tidy(struct nvkm_clk *clk)
static void
gm20b_clk_fini(struct nvkm_clk *base)
{
+ struct nvkm_device *device = base->subdev.device;
struct gm20b_clk *clk = gm20b_clk(base);
- gm20b_pllg_disable(clk);
+ u32 val;
+
+ /* slide to VCO min */
+ val = nvkm_rd32(device, GPCPLL_CFG);
+ if (val & GPCPLL_CFG_ENABLE) {
+ struct gm20b_gpcpll gpcpll;
+ gpcpll.pll = clk->base.pll;
+ gpcpll.dvfs = clk->dvfs;
+ gpcpll.rate = clk->base.rate;
+
+ gk20a_pllg_read_mnp(&clk->base.base, &gpcpll.pll);
+ gpcpll.pll.n = DIV_ROUND_UP(gpcpll.pll.m * clk->base.params->min_vco,
+ clk->base.parent_rate / KHZ);
+ if (clk->base.napll_enabled)
+ gm20b_clk_calc_dfs_ndiv(clk, &gpcpll.dvfs, gpcpll.dvfs.uv,
+ gpcpll.pll.n);
+ gm20b_pllg_slide(clk, &gpcpll);
+ }
+
+ /* put PLL in bypass before disabling it */
+ nvkm_mask(device, SEL_VCO, BIT(SEL_VCO_GPC2CLK_OUT_SHIFT), 0);
+
+ /* clear SYNC_MODE before disabling PLL */
+ nvkm_mask(device, GPCPLL_CFG, ~(0x1 << GPCPLL_CFG_SYNC_MODE), 0);
+
+ _gm20b_pllg_disable(clk);
}
static int