Commit d61f4c17 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/nvif: device time mthd

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 159045cd
...@@ -129,6 +129,7 @@ struct nv_device_v0 { ...@@ -129,6 +129,7 @@ struct nv_device_v0 {
}; };
#define NV_DEVICE_V0_INFO 0x00 #define NV_DEVICE_V0_INFO 0x00
#define NV_DEVICE_V0_TIME 0x01
struct nv_device_info_v0 { struct nv_device_info_v0 {
__u8 version; __u8 version;
...@@ -157,6 +158,12 @@ struct nv_device_info_v0 { ...@@ -157,6 +158,12 @@ struct nv_device_info_v0 {
char name[64]; char name[64];
}; };
struct nv_device_time_v0 {
__u8 version;
__u8 pad01[7];
__u64 time;
};
/******************************************************************************* /*******************************************************************************
* context dma * context dma
......
...@@ -57,7 +57,6 @@ u64 nvif_device_time(struct nvif_device *); ...@@ -57,7 +57,6 @@ u64 nvif_device_time(struct nvif_device *);
#define nvxx_gpio(a) nvkm_gpio(nvxx_device(a)) #define nvxx_gpio(a) nvkm_gpio(nvxx_device(a))
#define nvxx_clk(a) nvkm_clk(nvxx_device(a)) #define nvxx_clk(a) nvkm_clk(nvxx_device(a))
#define nvxx_i2c(a) nvkm_i2c(nvxx_device(a)) #define nvxx_i2c(a) nvkm_i2c(nvxx_device(a))
#define nvxx_timer(a) nvkm_timer(nvxx_device(a))
#define nvxx_therm(a) nvkm_therm(nvxx_device(a)) #define nvxx_therm(a) nvkm_therm(nvxx_device(a))
#include <core/device.h> #include <core/device.h>
......
...@@ -27,7 +27,11 @@ ...@@ -27,7 +27,11 @@
u64 u64
nvif_device_time(struct nvif_device *device) nvif_device_time(struct nvif_device *device)
{ {
return nvxx_timer(device)->read(nvxx_timer(device)); struct nv_device_time_v0 args = {};
int ret = nvif_object_mthd(&device->object, NV_DEVICE_V0_TIME,
&args, sizeof(args));
WARN_ON_ONCE(ret != 0);
return args.time;
} }
void void
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <core/client.h> #include <core/client.h>
#include <subdev/fb.h> #include <subdev/fb.h>
#include <subdev/instmem.h> #include <subdev/instmem.h>
#include <subdev/timer.h>
#include <nvif/class.h> #include <nvif/class.h>
#include <nvif/unpack.h> #include <nvif/unpack.h>
...@@ -111,12 +112,32 @@ nvkm_udevice_info(struct nvkm_object *object, void *data, u32 size) ...@@ -111,12 +112,32 @@ nvkm_udevice_info(struct nvkm_object *object, void *data, u32 size)
return 0; return 0;
} }
static int
nvkm_udevice_time(struct nvkm_object *object, void *data, u32 size)
{
struct nvkm_udevice *udev = (void *)object;
struct nvkm_device *device = udev->device;
struct nvkm_timer *tmr = device->timer;
union {
struct nv_device_time_v0 v0;
} *args = data;
int ret;
if (nvif_unpack(args->v0, 0, 0, false)) {
args->v0.time = tmr->read(tmr);
}
return ret;
}
static int static int
nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
{ {
switch (mthd) { switch (mthd) {
case NV_DEVICE_V0_INFO: case NV_DEVICE_V0_INFO:
return nvkm_udevice_info(object, data, size); return nvkm_udevice_info(object, data, size);
case NV_DEVICE_V0_TIME:
return nvkm_udevice_time(object, data, size);
default: default:
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment