Commit 58e92b5e authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/nvif: access PTIMER through usermode class, if available

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 028a12f5
...@@ -10,6 +10,7 @@ struct nvif_user { ...@@ -10,6 +10,7 @@ struct nvif_user {
struct nvif_user_func { struct nvif_user_func {
void (*doorbell)(struct nvif_user *, u32 token); void (*doorbell)(struct nvif_user *, u32 token);
u64 (*time)(struct nvif_user *);
}; };
int nvif_user_init(struct nvif_device *); int nvif_user_init(struct nvif_device *);
......
...@@ -27,11 +27,15 @@ ...@@ -27,11 +27,15 @@
u64 u64
nvif_device_time(struct nvif_device *device) nvif_device_time(struct nvif_device *device)
{ {
if (!device->user.func) {
struct nv_device_time_v0 args = {}; struct nv_device_time_v0 args = {};
int ret = nvif_object_mthd(&device->object, NV_DEVICE_V0_TIME, int ret = nvif_object_mthd(&device->object, NV_DEVICE_V0_TIME,
&args, sizeof(args)); &args, sizeof(args));
WARN_ON_ONCE(ret != 0); WARN_ON_ONCE(ret != 0);
return args.time; return args.time;
}
return device->user.func->time(&device->user);
} }
void void
......
...@@ -21,6 +21,19 @@ ...@@ -21,6 +21,19 @@
*/ */
#include <nvif/user.h> #include <nvif/user.h>
static u64
nvif_userc361_time(struct nvif_user *user)
{
u32 hi, lo;
do {
hi = nvif_rd32(&user->object, 0x084);
lo = nvif_rd32(&user->object, 0x080);
} while (hi != nvif_rd32(&user->object, 0x084));
return ((u64)hi << 32 | lo);
}
static void static void
nvif_userc361_doorbell(struct nvif_user *user, u32 token) nvif_userc361_doorbell(struct nvif_user *user, u32 token)
{ {
...@@ -30,4 +43,5 @@ nvif_userc361_doorbell(struct nvif_user *user, u32 token) ...@@ -30,4 +43,5 @@ nvif_userc361_doorbell(struct nvif_user *user, u32 token)
const struct nvif_user_func const struct nvif_user_func
nvif_userc361 = { nvif_userc361 = {
.doorbell = nvif_userc361_doorbell, .doorbell = nvif_userc361_doorbell,
.time = nvif_userc361_time,
}; };
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