On 18/04/16 22:14, Karol Herbst wrote:
this code will change for gf100 and newer

Reviewed-by: Martin Peres <martin.pe...@free.fr>

Signed-off-by: Karol Herbst <nouv...@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

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to