diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c b/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c index 62b6ae17..40a5b11c 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_clk_arb.c | |||
@@ -97,6 +97,43 @@ static int nvgpu_clk_arb_release_event_dev(struct inode *inode, | |||
97 | return 0; | 97 | return 0; |
98 | } | 98 | } |
99 | 99 | ||
100 | static inline u32 nvgpu_convert_gpu_event(u32 nvgpu_event) | ||
101 | { | ||
102 | u32 nvgpu_gpu_event; | ||
103 | |||
104 | switch (nvgpu_event) { | ||
105 | case NVGPU_EVENT_VF_UPDATE: | ||
106 | nvgpu_gpu_event = NVGPU_GPU_EVENT_VF_UPDATE; | ||
107 | break; | ||
108 | case NVGPU_EVENT_ALARM_TARGET_VF_NOT_POSSIBLE: | ||
109 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_TARGET_VF_NOT_POSSIBLE; | ||
110 | break; | ||
111 | case NVGPU_EVENT_ALARM_LOCAL_TARGET_VF_NOT_POSSIBLE: | ||
112 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_LOCAL_TARGET_VF_NOT_POSSIBLE; | ||
113 | break; | ||
114 | case NVGPU_EVENT_ALARM_CLOCK_ARBITER_FAILED: | ||
115 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_CLOCK_ARBITER_FAILED; | ||
116 | break; | ||
117 | case NVGPU_EVENT_ALARM_VF_TABLE_UPDATE_FAILED: | ||
118 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_VF_TABLE_UPDATE_FAILED; | ||
119 | break; | ||
120 | case NVGPU_EVENT_ALARM_THERMAL_ABOVE_THRESHOLD: | ||
121 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_THERMAL_ABOVE_THRESHOLD; | ||
122 | break; | ||
123 | case NVGPU_EVENT_ALARM_POWER_ABOVE_THRESHOLD: | ||
124 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_POWER_ABOVE_THRESHOLD; | ||
125 | break; | ||
126 | case NVGPU_EVENT_ALARM_GPU_LOST: | ||
127 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_GPU_LOST; | ||
128 | break; | ||
129 | default: | ||
130 | /* Control shouldn't come here */ | ||
131 | nvgpu_gpu_event = NVGPU_GPU_EVENT_ALARM_GPU_LOST + 1; | ||
132 | break; | ||
133 | } | ||
134 | return nvgpu_gpu_event; | ||
135 | } | ||
136 | |||
100 | static inline u32 __pending_event(struct nvgpu_clk_dev *dev, | 137 | static inline u32 __pending_event(struct nvgpu_clk_dev *dev, |
101 | struct nvgpu_gpu_event_info *info) { | 138 | struct nvgpu_gpu_event_info *info) { |
102 | 139 | ||
@@ -112,7 +149,7 @@ static inline u32 __pending_event(struct nvgpu_clk_dev *dev, | |||
112 | if (_WRAPGTEQ(tail, head) && info) { | 149 | if (_WRAPGTEQ(tail, head) && info) { |
113 | head++; | 150 | head++; |
114 | p_notif = &dev->queue.notifications[head % dev->queue.size]; | 151 | p_notif = &dev->queue.notifications[head % dev->queue.size]; |
115 | events |= p_notif->notification; | 152 | events |= nvgpu_convert_gpu_event(p_notif->notification); |
116 | info->event_id = ffs(events) - 1; | 153 | info->event_id = ffs(events) - 1; |
117 | info->timestamp = p_notif->timestamp; | 154 | info->timestamp = p_notif->timestamp; |
118 | nvgpu_atomic_set(&dev->queue.head, head); | 155 | nvgpu_atomic_set(&dev->queue.head, head); |