Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9c39056 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Ben Skeggs
Browse files

drm/nouveau: add missing pll_calc calls



Fixes a null pointer dereference when reclocking on my fermi.

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent bf7e438b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+19 −0
Original line number Diff line number Diff line
@@ -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;
}

+1 −0
Original line number Diff line number Diff line
@@ -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;
}