[Nouveau] [PATCH v4 36/37] WIP volt/gk104: readout speedo

Martin Peres martin.peres at free.fr
Wed Apr 20 22:39:35 UTC 2016


On 18/04/16 22:14, Karol Herbst wrote:
> this gk104 volt implementation has to be reworked a little, because the speedo
> readout in maxwell doesn't need those strange 0 and 41 writes into 0x122634,
> but it needs this PWM thing.
>
> Maybe Maxwell is PWM only and we could just simplify it there, but without
> proper knowledge there has some refactoring to be made.

This is not true, my GM206 is GPIO-based.

>
> Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
> ---
>   drm/nouveau/nvkm/subdev/volt/gk104.c | 19 +++++++++++++++++++
>   1 file changed, 19 insertions(+)
>
> diff --git a/drm/nouveau/nvkm/subdev/volt/gk104.c b/drm/nouveau/nvkm/subdev/volt/gk104.c
> index b735173..81788c2 100644
> --- a/drm/nouveau/nvkm/subdev/volt/gk104.c
> +++ b/drm/nouveau/nvkm/subdev/volt/gk104.c
> @@ -27,6 +27,7 @@
>   #include <subdev/gpio.h>
>   #include <subdev/bios.h>
>   #include <subdev/bios/volt.h>
> +#include <subdev/fuse.h>
>   
>   #define gk104_volt(p) container_of((p), struct gk104_volt, base)
>   struct gk104_volt {
> @@ -64,13 +65,31 @@ gk104_volt_set(struct nvkm_volt *base, u32 uv)
>   	return 0;
>   }
>   
> +static int
> +gk104_volt_speedo_read(struct nvkm_volt *volt)
> +{
> +	struct nvkm_device *device = volt->subdev.device;
> +	struct nvkm_fuse *fuse = device->fuse;
> +	int ret;
> +
> +	if (!fuse)
> +		return -EINVAL;
> +
> +	nvkm_wr32(device, 0x122634, 0x0);

I checked on a mmiotrace, and these writes are not only for this fuse. 
So they should be put in the gk104_fuse_read :)

After this,you can stop calling it a WIP patch and get rid of this 
confusing talk about the PWM voltage management, because I really do not 
get how it is relevant.

With this addressed:

Reviewed-by: Martin Peres <martin.peres at free.fr>

> +	ret = nvkm_fuse_read(fuse, 0x3a8);
> +	nvkm_wr32(device, 0x122634, 0x41);
> +	return ret;
> +}
> +
>   static const struct nvkm_volt_func
>   gk104_volt_pwm = {
>   	.volt_get = gk104_volt_get,
>   	.volt_set = gk104_volt_set,
> +	.speedo_read = gk104_volt_speedo_read,
>   }, gk104_volt_gpio = {
>   	.vid_get = nvkm_voltgpio_get,
>   	.vid_set = nvkm_voltgpio_set,
> +	.speedo_read = gk104_volt_speedo_read,
>   };
>   
>   int



More information about the Nouveau mailing list