Lines Matching refs:clk

40 nvkm_clk_adjust(struct nvkm_clk *clk, bool adjust,  in nvkm_clk_adjust()  argument
43 struct nvkm_bios *bios = clk->subdev.device->bios; in nvkm_clk_adjust()
78 nvkm_cstate_prog(struct nvkm_clk *clk, struct nvkm_pstate *pstate, int cstatei) in nvkm_cstate_prog() argument
80 struct nvkm_subdev *subdev = &clk->subdev; in nvkm_cstate_prog()
109 ret = clk->func->calc(clk, cstate); in nvkm_cstate_prog()
111 ret = clk->func->prog(clk); in nvkm_cstate_prog()
112 clk->func->tidy(clk); in nvkm_cstate_prog()
138 nvkm_cstate_new(struct nvkm_clk *clk, int idx, struct nvkm_pstate *pstate) in nvkm_cstate_new() argument
140 struct nvkm_bios *bios = clk->subdev.device->bios; in nvkm_cstate_new()
141 const struct nvkm_domain *domain = clk->domains; in nvkm_cstate_new()
160 u32 freq = nvkm_clk_adjust(clk, true, pstate->pstate, in nvkm_cstate_new()
175 nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) in nvkm_pstate_prog() argument
177 struct nvkm_subdev *subdev = &clk->subdev; in nvkm_pstate_prog()
182 list_for_each_entry(pstate, &clk->states, head) { in nvkm_pstate_prog()
188 clk->pstate = pstatei; in nvkm_pstate_prog()
200 return nvkm_cstate_prog(clk, pstate, 0); in nvkm_pstate_prog()
206 struct nvkm_clk *clk = container_of(work, typeof(*clk), work); in nvkm_pstate_work() local
207 struct nvkm_subdev *subdev = &clk->subdev; in nvkm_pstate_work()
210 if (!atomic_xchg(&clk->waiting, 0)) in nvkm_pstate_work()
212 clk->pwrsrc = power_supply_is_system_supplied(); in nvkm_pstate_work()
215 clk->pstate, clk->pwrsrc, clk->ustate_ac, clk->ustate_dc, in nvkm_pstate_work()
216 clk->astate, clk->tstate, clk->dstate); in nvkm_pstate_work()
218 pstate = clk->pwrsrc ? clk->ustate_ac : clk->ustate_dc; in nvkm_pstate_work()
219 if (clk->state_nr && pstate != -1) { in nvkm_pstate_work()
220 pstate = (pstate < 0) ? clk->astate : pstate; in nvkm_pstate_work()
221 pstate = min(pstate, clk->state_nr - 1 + clk->tstate); in nvkm_pstate_work()
222 pstate = max(pstate, clk->dstate); in nvkm_pstate_work()
224 pstate = clk->pstate = -1; in nvkm_pstate_work()
228 if (pstate != clk->pstate) { in nvkm_pstate_work()
229 int ret = nvkm_pstate_prog(clk, pstate); in nvkm_pstate_work()
236 wake_up_all(&clk->wait); in nvkm_pstate_work()
237 nvkm_notify_get(&clk->pwrsrc_ntfy); in nvkm_pstate_work()
241 nvkm_pstate_calc(struct nvkm_clk *clk, bool wait) in nvkm_pstate_calc() argument
243 atomic_set(&clk->waiting, 1); in nvkm_pstate_calc()
244 schedule_work(&clk->work); in nvkm_pstate_calc()
246 wait_event(clk->wait, !atomic_read(&clk->waiting)); in nvkm_pstate_calc()
251 nvkm_pstate_info(struct nvkm_clk *clk, struct nvkm_pstate *pstate) in nvkm_pstate_info() argument
253 const struct nvkm_domain *clock = clk->domains - 1; in nvkm_pstate_info()
255 struct nvkm_subdev *subdev = &clk->subdev; in nvkm_pstate_info()
307 nvkm_pstate_new(struct nvkm_clk *clk, int idx) in nvkm_pstate_new() argument
309 struct nvkm_bios *bios = clk->subdev.device->bios; in nvkm_pstate_new()
310 const struct nvkm_domain *domain = clk->domains - 1; in nvkm_pstate_new()
349 perfS.v40.freq = nvkm_clk_adjust(clk, false, in nvkm_pstate_new()
362 nvkm_cstate_new(clk, idx, pstate); in nvkm_pstate_new()
366 nvkm_pstate_info(clk, pstate); in nvkm_pstate_new()
367 list_add_tail(&pstate->head, &clk->states); in nvkm_pstate_new()
368 clk->state_nr++; in nvkm_pstate_new()
376 nvkm_clk_ustate_update(struct nvkm_clk *clk, int req) in nvkm_clk_ustate_update() argument
381 if (!clk->allow_reclock) in nvkm_clk_ustate_update()
385 list_for_each_entry(pstate, &clk->states, head) { in nvkm_clk_ustate_update()
400 nvkm_clk_nstate(struct nvkm_clk *clk, const char *mode, int arglen) in nvkm_clk_nstate() argument
404 if (clk->allow_reclock && !strncasecmpz(mode, "auto", arglen)) in nvkm_clk_nstate()
413 ret = nvkm_clk_ustate_update(clk, v); in nvkm_clk_nstate()
424 nvkm_clk_ustate(struct nvkm_clk *clk, int req, int pwr) in nvkm_clk_ustate() argument
426 int ret = nvkm_clk_ustate_update(clk, req); in nvkm_clk_ustate()
428 if (ret -= 2, pwr) clk->ustate_ac = ret; in nvkm_clk_ustate()
429 else clk->ustate_dc = ret; in nvkm_clk_ustate()
430 return nvkm_pstate_calc(clk, true); in nvkm_clk_ustate()
436 nvkm_clk_astate(struct nvkm_clk *clk, int req, int rel, bool wait) in nvkm_clk_astate() argument
438 if (!rel) clk->astate = req; in nvkm_clk_astate()
439 if ( rel) clk->astate += rel; in nvkm_clk_astate()
440 clk->astate = min(clk->astate, clk->state_nr - 1); in nvkm_clk_astate()
441 clk->astate = max(clk->astate, 0); in nvkm_clk_astate()
442 return nvkm_pstate_calc(clk, wait); in nvkm_clk_astate()
446 nvkm_clk_tstate(struct nvkm_clk *clk, int req, int rel) in nvkm_clk_tstate() argument
448 if (!rel) clk->tstate = req; in nvkm_clk_tstate()
449 if ( rel) clk->tstate += rel; in nvkm_clk_tstate()
450 clk->tstate = min(clk->tstate, 0); in nvkm_clk_tstate()
451 clk->tstate = max(clk->tstate, -(clk->state_nr - 1)); in nvkm_clk_tstate()
452 return nvkm_pstate_calc(clk, true); in nvkm_clk_tstate()
456 nvkm_clk_dstate(struct nvkm_clk *clk, int req, int rel) in nvkm_clk_dstate() argument
458 if (!rel) clk->dstate = req; in nvkm_clk_dstate()
459 if ( rel) clk->dstate += rel; in nvkm_clk_dstate()
460 clk->dstate = min(clk->dstate, clk->state_nr - 1); in nvkm_clk_dstate()
461 clk->dstate = max(clk->dstate, 0); in nvkm_clk_dstate()
462 return nvkm_pstate_calc(clk, true); in nvkm_clk_dstate()
468 struct nvkm_clk *clk = in nvkm_clk_pwrsrc() local
469 container_of(notify, typeof(*clk), pwrsrc_ntfy); in nvkm_clk_pwrsrc()
470 nvkm_pstate_calc(clk, false); in nvkm_clk_pwrsrc()
479 nvkm_clk_read(struct nvkm_clk *clk, enum nv_clk_src src) in nvkm_clk_read() argument
481 return clk->func->read(clk, src); in nvkm_clk_read()
487 struct nvkm_clk *clk = nvkm_clk(subdev); in nvkm_clk_fini() local
488 nvkm_notify_put(&clk->pwrsrc_ntfy); in nvkm_clk_fini()
489 flush_work(&clk->work); in nvkm_clk_fini()
490 if (clk->func->fini) in nvkm_clk_fini()
491 clk->func->fini(clk); in nvkm_clk_fini()
498 struct nvkm_clk *clk = nvkm_clk(subdev); in nvkm_clk_init() local
499 const struct nvkm_domain *clock = clk->domains; in nvkm_clk_init()
502 memset(&clk->bstate, 0x00, sizeof(clk->bstate)); in nvkm_clk_init()
503 INIT_LIST_HEAD(&clk->bstate.list); in nvkm_clk_init()
504 clk->bstate.pstate = 0xff; in nvkm_clk_init()
507 ret = nvkm_clk_read(clk, clock->name); in nvkm_clk_init()
512 clk->bstate.base.domain[clock->name] = ret; in nvkm_clk_init()
516 nvkm_pstate_info(clk, &clk->bstate); in nvkm_clk_init()
518 if (clk->func->init) in nvkm_clk_init()
519 return clk->func->init(clk); in nvkm_clk_init()
521 clk->astate = clk->state_nr - 1; in nvkm_clk_init()
522 clk->tstate = 0; in nvkm_clk_init()
523 clk->dstate = 0; in nvkm_clk_init()
524 clk->pstate = -1; in nvkm_clk_init()
525 nvkm_pstate_calc(clk, true); in nvkm_clk_init()
532 struct nvkm_clk *clk = nvkm_clk(subdev); in nvkm_clk_dtor() local
535 nvkm_notify_fini(&clk->pwrsrc_ntfy); in nvkm_clk_dtor()
538 if (clk->func->pstates) in nvkm_clk_dtor()
539 return clk; in nvkm_clk_dtor()
541 list_for_each_entry_safe(pstate, temp, &clk->states, head) { in nvkm_clk_dtor()
545 return clk; in nvkm_clk_dtor()
557 int index, bool allow_reclock, struct nvkm_clk *clk) in nvkm_clk_ctor() argument
562 nvkm_subdev_ctor(&nvkm_clk, device, index, 0, &clk->subdev); in nvkm_clk_ctor()
563 clk->func = func; in nvkm_clk_ctor()
564 INIT_LIST_HEAD(&clk->states); in nvkm_clk_ctor()
565 clk->domains = func->domains; in nvkm_clk_ctor()
566 clk->ustate_ac = -1; in nvkm_clk_ctor()
567 clk->ustate_dc = -1; in nvkm_clk_ctor()
568 clk->allow_reclock = allow_reclock; in nvkm_clk_ctor()
570 INIT_WORK(&clk->work, nvkm_pstate_work); in nvkm_clk_ctor()
571 init_waitqueue_head(&clk->wait); in nvkm_clk_ctor()
572 atomic_set(&clk->waiting, 0); in nvkm_clk_ctor()
578 ret = nvkm_pstate_new(clk, idx++); in nvkm_clk_ctor()
582 list_add_tail(&func->pstates[idx].head, &clk->states); in nvkm_clk_ctor()
583 clk->state_nr = func->nr_pstates; in nvkm_clk_ctor()
587 NULL, 0, 0, &clk->pwrsrc_ntfy); in nvkm_clk_ctor()
593 clk->ustate_ac = nvkm_clk_nstate(clk, mode, arglen); in nvkm_clk_ctor()
594 clk->ustate_dc = nvkm_clk_nstate(clk, mode, arglen); in nvkm_clk_ctor()
599 clk->ustate_ac = nvkm_clk_nstate(clk, mode, arglen); in nvkm_clk_ctor()
603 clk->ustate_dc = nvkm_clk_nstate(clk, mode, arglen); in nvkm_clk_ctor()