Commit 2efd3908 authored by Alexandre Courbot's avatar Alexandre Courbot Committed by Ben Skeggs

drm/nouveau/clk/gk20a: split gk20a_clk_new()

This allows to instanciate drivers that use the same logic as gk20a with
different parameters.

Add a constructor function to allow other chips that inherit from this
clock to easily initialize its members
Signed-off-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 195c1137
...@@ -671,29 +671,48 @@ gk20a_clk = { ...@@ -671,29 +671,48 @@ gk20a_clk = {
}; };
int int
gk20a_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) _gk20a_clk_ctor(struct nvkm_device *device, int index,
const struct nvkm_clk_func *func,
const struct gk20a_clk_pllg_params *params,
struct gk20a_clk *clk)
{ {
struct nvkm_device_tegra *tdev = device->func->tegra(device); struct nvkm_device_tegra *tdev = device->func->tegra(device);
struct gk20a_clk *clk; int ret;
int ret, i; int i;
if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL)))
return -ENOMEM;
*pclk = &clk->base;
/* Finish initializing the pstates */ /* Finish initializing the pstates */
for (i = 0; i < ARRAY_SIZE(gk20a_pstates); i++) { for (i = 0; i < func->nr_pstates; i++) {
INIT_LIST_HEAD(&gk20a_pstates[i].list); INIT_LIST_HEAD(&func->pstates[i].list);
gk20a_pstates[i].pstate = i + 1; func->pstates[i].pstate = i + 1;
} }
clk->params = &gk20a_pllg_params; clk->params = params;
clk->parent_rate = clk_get_rate(tdev->clk); clk->parent_rate = clk_get_rate(tdev->clk);
ret = nvkm_clk_ctor(&gk20a_clk, device, index, true, &clk->base); ret = nvkm_clk_ctor(func, device, index, true, &clk->base);
if (ret)
return ret;
nvkm_debug(&clk->base.subdev, "parent clock rate: %d Khz\n", nvkm_debug(&clk->base.subdev, "parent clock rate: %d Khz\n",
clk->parent_rate / KHZ); clk->parent_rate / KHZ);
return 0;
}
int
gk20a_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk)
{
struct gk20a_clk *clk;
int ret;
clk = kzalloc(sizeof(*clk), GFP_KERNEL);
if (!clk)
return -ENOMEM;
*pclk = &clk->base;
ret = _gk20a_clk_ctor(device, index, &gk20a_clk, &gk20a_pllg_params,
clk);
clk->pl_to_div = pl_to_div; clk->pl_to_div = pl_to_div;
clk->div_to_pl = div_to_pl; clk->div_to_pl = div_to_pl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment