mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 03:10:30 -04:00
drm/nouveau/clk: allow non-blocking for nouveau_clock_astate()
There might be some callers of nouveau_clock_astate(), and they are from inetrrupt context. So we must ensure that this function can be atomic in that condition. This patch adds one parameter which is subsequently passed to nouveau_pstate_calc(). Therefore we can choose whether we want to wait for the pstate work's completion or not. Signed-off-by: Vince Hsu <vinceh@nvidia.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -159,7 +159,7 @@ int nva3_clock_pll_calc(struct nouveau_clock *, struct nvbios_pll *,
|
||||
int clk, struct nouveau_pll_vals *);
|
||||
|
||||
int nouveau_clock_ustate(struct nouveau_clock *, int req, int pwr);
|
||||
int nouveau_clock_astate(struct nouveau_clock *, int req, int rel);
|
||||
int nouveau_clock_astate(struct nouveau_clock *, int req, int rel, bool wait);
|
||||
int nouveau_clock_dstate(struct nouveau_clock *, int req, int rel);
|
||||
int nouveau_clock_tstate(struct nouveau_clock *, int req, int rel);
|
||||
|
||||
|
||||
@@ -430,13 +430,13 @@ nouveau_clock_ustate(struct nouveau_clock *clk, int req, int pwr)
|
||||
}
|
||||
|
||||
int
|
||||
nouveau_clock_astate(struct nouveau_clock *clk, int req, int rel)
|
||||
nouveau_clock_astate(struct nouveau_clock *clk, int req, int rel, bool wait)
|
||||
{
|
||||
if (!rel) clk->astate = req;
|
||||
if ( rel) clk->astate += rel;
|
||||
clk->astate = min(clk->astate, clk->state_nr - 1);
|
||||
clk->astate = max(clk->astate, 0);
|
||||
return nouveau_pstate_calc(clk, true);
|
||||
return nouveau_pstate_calc(clk, wait);
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
Reference in New Issue
Block a user