[Nouveau] [PATCH v4 31/37] clk: split out update code to nv40
Martin Peres
martin.peres at free.fr
Wed Apr 20 22:08:25 UTC 2016
On 18/04/16 22:14, Karol Herbst wrote:
> this code will change for gf100 and newer
Reviewed-by: Martin Peres <martin.peres at free.fr>
>
> Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
> ---
> drm/nouveau/nvkm/subdev/clk/base.c | 14 ++++++--------
> drm/nouveau/nvkm/subdev/clk/g84.c | 1 +
> drm/nouveau/nvkm/subdev/clk/gf100.c | 1 +
> drm/nouveau/nvkm/subdev/clk/gk104.c | 1 +
> drm/nouveau/nvkm/subdev/clk/gk20a.c | 1 +
> drm/nouveau/nvkm/subdev/clk/gm20b.c | 1 +
> drm/nouveau/nvkm/subdev/clk/gt215.c | 1 +
> drm/nouveau/nvkm/subdev/clk/mcp77.c | 1 +
> drm/nouveau/nvkm/subdev/clk/nv40.c | 15 +++++++++++++++
> drm/nouveau/nvkm/subdev/clk/nv50.c | 1 +
> drm/nouveau/nvkm/subdev/clk/priv.h | 5 +++++
> 11 files changed, 34 insertions(+), 8 deletions(-)
>
> diff --git a/drm/nouveau/nvkm/subdev/clk/base.c b/drm/nouveau/nvkm/subdev/clk/base.c
> index d6f239f..3c40f67 100644
> --- a/drm/nouveau/nvkm/subdev/clk/base.c
> +++ b/drm/nouveau/nvkm/subdev/clk/base.c
> @@ -279,7 +279,7 @@ nvkm_cstate_new(struct nvkm_clk *clk, int idx, struct nvkm_pstate *pstate)
> /******************************************************************************
> * P-States
> *****************************************************************************/
> -static int
> +int
> nvkm_pstate_prog(struct nvkm_clk *clk, int pstateid)
> {
> struct nvkm_subdev *subdev = &clk->subdev;
> @@ -322,7 +322,10 @@ static void
> nvkm_clk_update_impl(struct nvkm_clk *clk)
> {
> struct nvkm_subdev *subdev = &clk->subdev;
> - int pstate, ret;
> + int pstate;
> +
> + if (!clk->func->update)
> + return;
>
> clk->pwrsrc = power_supply_is_system_supplied();
>
> @@ -341,12 +344,7 @@ nvkm_clk_update_impl(struct nvkm_clk *clk)
> pstate = -1;
> }
>
> - nvkm_trace(subdev, "-> %d\n", pstate);
> - ret = nvkm_pstate_prog(clk, pstate);
> - if (ret) {
> - nvkm_error(subdev, "error setting pstate %d: %d\n",
> - pstate, ret);
> - }
> + clk->func->update(clk, pstate);
> }
>
> static void
> diff --git a/drm/nouveau/nvkm/subdev/clk/g84.c b/drm/nouveau/nvkm/subdev/clk/g84.c
> index f97e3ec..7b9b30d 100644
> --- a/drm/nouveau/nvkm/subdev/clk/g84.c
> +++ b/drm/nouveau/nvkm/subdev/clk/g84.c
> @@ -29,6 +29,7 @@ g84_clk = {
> .calc = nv50_clk_calc,
> .prog = nv50_clk_prog,
> .tidy = nv50_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/gf100.c b/drm/nouveau/nvkm/subdev/clk/gf100.c
> index 71b7c9f..808e1ed 100644
> --- a/drm/nouveau/nvkm/subdev/clk/gf100.c
> +++ b/drm/nouveau/nvkm/subdev/clk/gf100.c
> @@ -437,6 +437,7 @@ gf100_clk = {
> .calc = gf100_clk_calc,
> .prog = gf100_clk_prog,
> .tidy = gf100_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/gk104.c b/drm/nouveau/nvkm/subdev/clk/gk104.c
> index 639234f..8448a88 100644
> --- a/drm/nouveau/nvkm/subdev/clk/gk104.c
> +++ b/drm/nouveau/nvkm/subdev/clk/gk104.c
> @@ -482,6 +482,7 @@ gk104_clk = {
> .calc = gk104_clk_calc,
> .prog = gk104_clk_prog,
> .tidy = gk104_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/gk20a.c b/drm/nouveau/nvkm/subdev/clk/gk20a.c
> index 5f0ee24..8b64cc9 100644
> --- a/drm/nouveau/nvkm/subdev/clk/gk20a.c
> +++ b/drm/nouveau/nvkm/subdev/clk/gk20a.c
> @@ -636,6 +636,7 @@ gk20a_clk = {
> .calc = gk20a_clk_calc,
> .prog = gk20a_clk_prog,
> .tidy = gk20a_clk_tidy,
> + .update = nv40_clk_update,
> .pstates = gk20a_pstates,
> .nr_pstates = ARRAY_SIZE(gk20a_pstates),
> .domains = {
> diff --git a/drm/nouveau/nvkm/subdev/clk/gm20b.c b/drm/nouveau/nvkm/subdev/clk/gm20b.c
> index 71b2bbb..8c8eb8c 100644
> --- a/drm/nouveau/nvkm/subdev/clk/gm20b.c
> +++ b/drm/nouveau/nvkm/subdev/clk/gm20b.c
> @@ -168,6 +168,7 @@ gm20b_clk_speedo0 = {
> .calc = gk20a_clk_calc,
> .prog = gk20a_clk_prog,
> .tidy = gk20a_clk_tidy,
> + .update = nv40_clk_update,
> .pstates = gm20b_pstates,
> .nr_pstates = ARRAY_SIZE(gm20b_pstates) - 1,
> .domains = {
> diff --git a/drm/nouveau/nvkm/subdev/clk/gt215.c b/drm/nouveau/nvkm/subdev/clk/gt215.c
> index 056702e..8913afa 100644
> --- a/drm/nouveau/nvkm/subdev/clk/gt215.c
> +++ b/drm/nouveau/nvkm/subdev/clk/gt215.c
> @@ -520,6 +520,7 @@ gt215_clk = {
> .calc = gt215_clk_calc,
> .prog = gt215_clk_prog,
> .tidy = gt215_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal , 0xff },
> { nv_clk_src_core , 0x00, 0, "core", 1000 },
> diff --git a/drm/nouveau/nvkm/subdev/clk/mcp77.c b/drm/nouveau/nvkm/subdev/clk/mcp77.c
> index 1c21b8b..e80b68e 100644
> --- a/drm/nouveau/nvkm/subdev/clk/mcp77.c
> +++ b/drm/nouveau/nvkm/subdev/clk/mcp77.c
> @@ -400,6 +400,7 @@ mcp77_clk = {
> .calc = mcp77_clk_calc,
> .prog = mcp77_clk_prog,
> .tidy = mcp77_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/nv40.c b/drm/nouveau/nvkm/subdev/clk/nv40.c
> index 2ab9b9b..a808319 100644
> --- a/drm/nouveau/nvkm/subdev/clk/nv40.c
> +++ b/drm/nouveau/nvkm/subdev/clk/nv40.c
> @@ -201,12 +201,27 @@ nv40_clk_tidy(struct nvkm_clk *obj)
> {
> }
>
> +void
> +nv40_clk_update(struct nvkm_clk *clk, int pstate)
> +{
> + struct nvkm_subdev *subdev = &clk->subdev;
> + int ret;
> +
> + nvkm_trace(subdev, "-> %d\n", pstate);
> + ret = nvkm_pstate_prog(clk, pstate);
> + if (ret) {
> + nvkm_error(subdev, "error setting pstate %d: %d\n",
> + pstate, ret);
> + }
> +}
> +
> static const struct nvkm_clk_func
> nv40_clk = {
> .read = nv40_clk_read,
> .calc = nv40_clk_calc,
> .prog = nv40_clk_prog,
> .tidy = nv40_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/nv50.c b/drm/nouveau/nvkm/subdev/clk/nv50.c
> index 5841f29..b29318e 100644
> --- a/drm/nouveau/nvkm/subdev/clk/nv50.c
> +++ b/drm/nouveau/nvkm/subdev/clk/nv50.c
> @@ -544,6 +544,7 @@ nv50_clk = {
> .calc = nv50_clk_calc,
> .prog = nv50_clk_prog,
> .tidy = nv50_clk_tidy,
> + .update = nv40_clk_update,
> .domains = {
> { nv_clk_src_crystal, 0xff },
> { nv_clk_src_href , 0xff },
> diff --git a/drm/nouveau/nvkm/subdev/clk/priv.h b/drm/nouveau/nvkm/subdev/clk/priv.h
> index 51eafc0..958f5e3 100644
> --- a/drm/nouveau/nvkm/subdev/clk/priv.h
> +++ b/drm/nouveau/nvkm/subdev/clk/priv.h
> @@ -10,6 +10,7 @@ struct nvkm_clk_func {
> int (*calc)(struct nvkm_clk *, struct nvkm_cstate *);
> int (*prog)(struct nvkm_clk *);
> void (*tidy)(struct nvkm_clk *);
> + void (*update)(struct nvkm_clk *, int pstate);
> struct nvkm_pstate *pstates;
> int nr_pstates;
> struct nvkm_domain domains[];
> @@ -20,7 +21,11 @@ int nvkm_clk_ctor(const struct nvkm_clk_func *, struct nvkm_device *, int,
> int nvkm_clk_new_(const struct nvkm_clk_func *, struct nvkm_device *, int,
> bool allow_reclock, struct nvkm_clk **);
>
> +int nvkm_pstate_prog(struct nvkm_clk *, int pstateid);
> +
> int nv04_clk_pll_calc(struct nvkm_clk *, struct nvbios_pll *, int clk,
> struct nvkm_pll_vals *);
> int nv04_clk_pll_prog(struct nvkm_clk *, u32 reg1, struct nvkm_pll_vals *);
> +
> +void nv40_clk_update(struct nvkm_clk *, int pstate);
> #endif
More information about the Nouveau
mailing list