Loading drivers/gpu/drm/nouveau/include/nvif/class.h +7 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ struct nv_device_v0 { }; #define NV_DEVICE_V0_INFO 0x00 #define NV_DEVICE_V0_TIME 0x01 struct nv_device_info_v0 { __u8 version; Loading Loading @@ -157,6 +158,12 @@ struct nv_device_info_v0 { char name[64]; }; struct nv_device_time_v0 { __u8 version; __u8 pad01[7]; __u64 time; }; /******************************************************************************* * context dma Loading drivers/gpu/drm/nouveau/include/nvif/device.h +0 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ u64 nvif_device_time(struct nvif_device *); #define nvxx_gpio(a) nvkm_gpio(nvxx_device(a)) #define nvxx_clk(a) nvkm_clk(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)) #include <core/device.h> Loading drivers/gpu/drm/nouveau/nvif/device.c +5 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,11 @@ u64 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 Loading drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +21 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <core/client.h> #include <subdev/fb.h> #include <subdev/instmem.h> #include <subdev/timer.h> #include <nvif/class.h> #include <nvif/unpack.h> Loading Loading @@ -111,12 +112,32 @@ nvkm_udevice_info(struct nvkm_object *object, void *data, u32 size) 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 nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) { switch (mthd) { case NV_DEVICE_V0_INFO: return nvkm_udevice_info(object, data, size); case NV_DEVICE_V0_TIME: return nvkm_udevice_time(object, data, size); default: break; } Loading Loading
drivers/gpu/drm/nouveau/include/nvif/class.h +7 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ struct nv_device_v0 { }; #define NV_DEVICE_V0_INFO 0x00 #define NV_DEVICE_V0_TIME 0x01 struct nv_device_info_v0 { __u8 version; Loading Loading @@ -157,6 +158,12 @@ struct nv_device_info_v0 { char name[64]; }; struct nv_device_time_v0 { __u8 version; __u8 pad01[7]; __u64 time; }; /******************************************************************************* * context dma Loading
drivers/gpu/drm/nouveau/include/nvif/device.h +0 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ u64 nvif_device_time(struct nvif_device *); #define nvxx_gpio(a) nvkm_gpio(nvxx_device(a)) #define nvxx_clk(a) nvkm_clk(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)) #include <core/device.h> Loading
drivers/gpu/drm/nouveau/nvif/device.c +5 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,11 @@ u64 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 Loading
drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +21 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <core/client.h> #include <subdev/fb.h> #include <subdev/instmem.h> #include <subdev/timer.h> #include <nvif/class.h> #include <nvif/unpack.h> Loading Loading @@ -111,12 +112,32 @@ nvkm_udevice_info(struct nvkm_object *object, void *data, u32 size) 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 nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) { switch (mthd) { case NV_DEVICE_V0_INFO: return nvkm_udevice_info(object, data, size); case NV_DEVICE_V0_TIME: return nvkm_udevice_time(object, data, size); default: break; } Loading