[Nouveau] [RFC PATCH v2 0/7] stabilize kepler reclocking

Karol Herbst nouveau at karolherbst.de
Wed Dec 2 08:24:27 PST 2015

this series solves different issues we encounter on kepler cards while reclocking:

1. core clock doesn't change at all and produces a volting error (patch 1)
	this can happen when the voltage table has only 0ed values in the header
	so we have to parse the entries itself, which contain the right voltages
2. kepler won't clock to highest cstates (patch 2)
	this happens, because there are entries in the cstep table with too high voltages attached
	in this case we should simply drop those cstates, because they can't even be used by the gpu
	the voltage limit is found in the voltage map table
3. higher voltage used than on blob/Windows (patch 3-4)
	this happened, because previously nouveau didn't know how the read the max voltage for boosting out of the vbios
	like patch 2 we simply drop all cstates with voltage higher than this one
4. heat issues after clocking to highest pstate (patch 5-7)
	sometimes the gpu is able to handle the highest cstate, but the gpu isn't build for that high voltages
	in that case we should just parse the baseclock table, which tells us the clocks the gpu is intented to run with

the last patches also introduce a new config option: NvBoost

0: no boosting/cstates, this will stick with the base clocks from the PM_Mode table
1: highest clock available is the base clock (default)
2: highest clock available is the boost clock
3: all cstates are available (still limited by gpu and boost voltage)

because this will regress performance on some cards, the new option should be advertised later on, but I think
it is a better idea to be safe here, because otherwise nouveau can easily go above the TDP of the gpu and this
leads to complete different issues.

After this, we can then try to understand which factors are important for boosting and implement it in a better way, but for this we need:
1. support for power consumption sensors
2. better understanding on which power budget is the right one
3. in which situation we can boost how far

Because this series can mess up reclocking for a wide range of cards, I really want to have it tested on several systems, thanks

Karol Herbst (7):
  bios/volt: handle voltage table version 0x50 with 0ed header
  clk: drop cstates with too high voltage
  volt: parse the boost voltage entry
  clk: drop cstates with higher voltage than boost_max_voltage
  nvbios: add parsing of BASE CLOCK table
  subdev/clk: print the base clocks
  clk: allow boosting only when NvBoost is set

 drm/nouveau/include/nvkm/subdev/bios/baseclock.h | 23 +++++++
 drm/nouveau/include/nvkm/subdev/bios/vmap.h      |  1 +
 drm/nouveau/include/nvkm/subdev/clk.h            | 10 ++-
 drm/nouveau/include/nvkm/subdev/volt.h           |  6 ++
 drm/nouveau/nvkm/subdev/bios/Kbuild              |  1 +
 drm/nouveau/nvkm/subdev/bios/baseclock.c         | 79 ++++++++++++++++++++++++
 drm/nouveau/nvkm/subdev/bios/vmap.c              |  5 +-
 drm/nouveau/nvkm/subdev/bios/volt.c              |  3 +
 drm/nouveau/nvkm/subdev/clk/base.c               | 41 +++++++++++-
 drm/nouveau/nvkm/subdev/clk/gf100.c              |  2 +-
 drm/nouveau/nvkm/subdev/clk/gk104.c              |  2 +-
 drm/nouveau/nvkm/subdev/volt/base.c              | 26 +++++++-
 12 files changed, 192 insertions(+), 7 deletions(-)
 create mode 100644 drm/nouveau/include/nvkm/subdev/bios/baseclock.h
 create mode 100644 drm/nouveau/nvkm/subdev/bios/baseclock.c


More information about the Nouveau mailing list