drm/nouveau/nvif: device time mthd
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
159045cdc4
commit
d61f4c178c
4 changed files with 33 additions and 2 deletions
|
@ -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 {
|
||||||
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 *);
|
||||||
#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 @@
|
||||||
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 @@
|
||||||
#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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue