drm/nouveau: add missing pll_calc calls
Subsystems (3)
PATCH 1/1 drm/nouveau: add missing pll_calc calls
Fixes a null pointer dereference when reclocking on my fermi.
Signed-off-by Maarten Lankhorst <[email protected]>
---
drivers/gpu/drm/nouveau/core/include/subdev/clock.h +2 -1
@@ -54,6 +54,7 @@ int nv04_clock_pll_calc(struct nouveau_clock *, struct nvbios_pll *, int clk, struct nouveau_pll_vals *);int nv04_clock_pll_prog (struct nouveau_clock *,u32 reg1,struct nouveau_pll_vals *); - +int nva3_clock_pll_calc (struct nouveau_clock *,struct nvbios_pll *, +int clk,struct nouveau_pll_vals *);#endif
drivers/gpu/drm/nouveau/core/subdev/clock/nva3.c +19 -0
@@ -66,6 +66,24 @@ nva3_clock_pll_set(struct nouveau_clock *clk, u32 type, u32 freq)return ret; } +int +nva3_clock_pll_calc (struct nouveau_clock *clock,struct nvbios_pll *info, +int clk,struct nouveau_pll_vals *pv) +{ +int ret,N ,M ,P ; + + ret =nva3_pll_calc (clock, info, clk, &N ,NULL , &M , &P ); + +if (ret >0 ) { + pv->refclk = info->refclk; + pv->N1 =N ; + pv->M1 =M ; + pv->log2P =P ; + } +return ret; +} + + static int nva3_clock_ctor(struct nouveau_object *parent, struct nouveau_object *engine, struct nouveau_oclass *oclass, void *data, u32 size,
@@ -80,6 +98,7 @@ nva3_clock_ctor(struct nouveau_object *parent, struct nouveau_object *engine,return ret; priv->base.pll_set = nva3_clock_pll_set; + priv->base.pll_calc = nva3_clock_pll_calc;return 0 ; }
drivers/gpu/drm/nouveau/core/subdev/clock/nvc0.c +1 -0
@@ -79,6 +79,7 @@ nvc0_clock_ctor(struct nouveau_object *parent, struct nouveau_object *engine,return ret; priv->base.pll_set = nvc0_clock_pll_set; + priv->base.pll_calc = nva3_clock_pll_calc;return 0 ; }