[Nouveau] [PATCH v4 29/37] clk: we should pass the pstate id around not the index in the list
Martin Peres
martin.peres at free.fr
Wed Apr 20 21:59:27 UTC 2016
On 18/04/16 22:14, Karol Herbst wrote:
> this makes the code easier, because we can compare the id with pstate->pstate
> and safe us the trouble iterating over the entire pstate list
save us.
Not the easiest patch to read, but it seems alright and it has been
tested, so:
Reviewed-by: Martin Peres <martin.peres at free.fr>
>
> Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
> ---
> drm/nouveau/nouveau_debugfs.c | 6 ++---
> drm/nouveau/nvkm/subdev/clk/base.c | 49 +++++++++++---------------------------
> 2 files changed, 17 insertions(+), 38 deletions(-)
>
> diff --git a/drm/nouveau/nouveau_debugfs.c b/drm/nouveau/nouveau_debugfs.c
> index 31b309f..334b472 100644
> --- a/drm/nouveau/nouveau_debugfs.c
> +++ b/drm/nouveau/nouveau_debugfs.c
> @@ -96,11 +96,11 @@ nouveau_debugfs_pstate_get(struct seq_file *m, void *data)
> } while (attr.index);
>
> if (state >= 0) {
> - if (info.ustate_ac == state)
> + if (info.ustate_ac == attr.state)
> seq_printf(m, " AC");
> - if (info.ustate_dc == state)
> + if (info.ustate_dc == attr.state)
> seq_printf(m, " DC");
> - if (info.pstate == state)
> + if (info.pstate == attr.state)
> seq_printf(m, " *");
> } else {
> if (info.ustate_ac < -1)
> diff --git a/drm/nouveau/nvkm/subdev/clk/base.c b/drm/nouveau/nvkm/subdev/clk/base.c
> index 23f4cfe..7f86e41 100644
> --- a/drm/nouveau/nvkm/subdev/clk/base.c
> +++ b/drm/nouveau/nvkm/subdev/clk/base.c
> @@ -280,23 +280,26 @@ nvkm_cstate_new(struct nvkm_clk *clk, int idx, struct nvkm_pstate *pstate)
> * P-States
> *****************************************************************************/
> static int
> -nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei)
> +nvkm_pstate_prog(struct nvkm_clk *clk, int pstateid)
> {
> struct nvkm_subdev *subdev = &clk->subdev;
> struct nvkm_fb *fb = subdev->device->fb;
> struct nvkm_pci *pci = subdev->device->pci;
> struct nvkm_pstate *pstate;
> - int ret, idx = 0;
> + int ret;
>
> - if (pstatei == -1)
> + if (pstateid == -1)
> return 0;
>
> list_for_each_entry(pstate, &clk->states, head) {
> - if (idx++ == pstatei)
> + if (pstate->pstate == pstateid)
> break;
> }
>
> - nvkm_debug(subdev, "setting performance state %d\n", pstatei);
> + if (!pstate)
> + return -EINVAL;
> +
> + nvkm_debug(subdev, "setting performance state %x\n", pstateid);
> clk->pstate = pstate;
>
> nvkm_pcie_set_link(pci, pstate->pcie_speed, pstate->pcie_width);
> @@ -496,30 +499,6 @@ nvkm_pstate_new(struct nvkm_clk *clk, int idx)
> * Adjustment triggers
> *****************************************************************************/
> static int
> -nvkm_clk_ustate_update(struct nvkm_clk *clk, int req)
> -{
> - struct nvkm_pstate *pstate;
> - int i = 0;
> -
> - if (!clk->allow_reclock)
> - return -ENOSYS;
> -
> - if (req != -1 && req != -2) {
> - list_for_each_entry(pstate, &clk->states, head) {
> - if (pstate->pstate == req)
> - break;
> - i++;
> - }
> -
> - if (pstate->pstate != req)
> - return -EINVAL;
> - req = i;
> - }
> -
> - return req + 2;
> -}
> -
> -static int
> nvkm_clk_nstate(struct nvkm_clk *clk, const char *mode, int arglen)
> {
> int ret = 1;
> @@ -533,23 +512,23 @@ nvkm_clk_nstate(struct nvkm_clk *clk, const char *mode, int arglen)
>
> ((char *)mode)[arglen] = '\0';
> if (!kstrtol(mode, 0, &v)) {
> - ret = nvkm_clk_ustate_update(clk, v);
> + ret = v;
> if (ret < 0)
> ret = 1;
> }
> ((char *)mode)[arglen] = save;
> }
>
> - return ret - 2;
> + return ret;
> }
>
> int
> nvkm_clk_ustate(struct nvkm_clk *clk, int req, int pwr)
> {
> - int ret = nvkm_clk_ustate_update(clk, req);
> + int ret = req;
> if (ret >= 0) {
> - if (ret -= 2, pwr) clk->ustate_ac = ret;
> - else clk->ustate_dc = ret;
> + if (pwr) clk->ustate_ac = ret;
> + else clk->ustate_dc = ret;
> clk->exp_cstate = NVKM_CLK_CSTATE_HIGHEST;
> return nvkm_clk_update(clk, true);
> }
> @@ -623,7 +602,7 @@ nvkm_clk_init(struct nvkm_subdev *subdev)
> if (clk->func->init)
> return clk->func->init(clk);
>
> - clk->astate = clk->state_nr - 1;
> + clk->astate = -1;
> clk->pstate = NULL;
> clk->exp_cstate = NVKM_CLK_CSTATE_DEFAULT;
> clk->set_cstate = NULL;
More information about the Nouveau
mailing list