diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 22 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | 22 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/tsg_gk20a.h | 3 |
4 files changed, 49 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 4ad9d85b..468ee7f1 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -2583,6 +2583,28 @@ static int gk20a_channel_get_event_data_from_id(struct channel_gk20a *ch, | |||
2583 | } | 2583 | } |
2584 | } | 2584 | } |
2585 | 2585 | ||
2586 | void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, | ||
2587 | int event_id) | ||
2588 | { | ||
2589 | struct gk20a_event_id_data *event_id_data; | ||
2590 | int err = 0; | ||
2591 | |||
2592 | err = gk20a_channel_get_event_data_from_id(ch, event_id, | ||
2593 | &event_id_data); | ||
2594 | if (err) | ||
2595 | return; | ||
2596 | |||
2597 | mutex_lock(&event_id_data->lock); | ||
2598 | |||
2599 | gk20a_dbg_info( | ||
2600 | "posting event for event_id=%d on ch=%d\n", | ||
2601 | event_id, ch->hw_chid); | ||
2602 | |||
2603 | wake_up_interruptible_all(&event_id_data->event_id_wq); | ||
2604 | |||
2605 | mutex_unlock(&event_id_data->lock); | ||
2606 | } | ||
2607 | |||
2586 | static int gk20a_channel_event_id_enable(struct channel_gk20a *ch, | 2608 | static int gk20a_channel_event_id_enable(struct channel_gk20a *ch, |
2587 | int event_id, | 2609 | int event_id, |
2588 | int *fd) | 2610 | int *fd) |
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 577e3861..ca11739e 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |||
@@ -281,5 +281,7 @@ int gk20a_channel_get_timescale_from_timeslice(struct gk20a *g, | |||
281 | int *__timeslice_timeout, int *__timeslice_scale); | 281 | int *__timeslice_timeout, int *__timeslice_scale); |
282 | int gk20a_channel_set_priority(struct channel_gk20a *ch, u32 priority); | 282 | int gk20a_channel_set_priority(struct channel_gk20a *ch, u32 priority); |
283 | int gk20a_channel_set_timeslice(struct channel_gk20a *ch, u32 timeslice); | 283 | int gk20a_channel_set_timeslice(struct channel_gk20a *ch, u32 timeslice); |
284 | void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, | ||
285 | int event_id); | ||
284 | 286 | ||
285 | #endif /* CHANNEL_GK20A_H */ | 287 | #endif /* CHANNEL_GK20A_H */ |
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index a0232a69..51e6407c 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c | |||
@@ -212,6 +212,28 @@ static int gk20a_tsg_get_event_data_from_id(struct tsg_gk20a *tsg, | |||
212 | } | 212 | } |
213 | } | 213 | } |
214 | 214 | ||
215 | void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, | ||
216 | int event_id) | ||
217 | { | ||
218 | struct gk20a_event_id_data *event_id_data; | ||
219 | int err = 0; | ||
220 | |||
221 | err = gk20a_tsg_get_event_data_from_id(tsg, event_id, | ||
222 | &event_id_data); | ||
223 | if (err) | ||
224 | return; | ||
225 | |||
226 | mutex_lock(&event_id_data->lock); | ||
227 | |||
228 | gk20a_dbg_info( | ||
229 | "posting event for event_id=%d on tsg=%d\n", | ||
230 | event_id, tsg->tsgid); | ||
231 | |||
232 | wake_up_interruptible_all(&event_id_data->event_id_wq); | ||
233 | |||
234 | mutex_unlock(&event_id_data->lock); | ||
235 | } | ||
236 | |||
215 | static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, | 237 | static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, |
216 | int event_id, | 238 | int event_id, |
217 | int *fd) | 239 | int *fd) |
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h index ac872e30..9a23c973 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h | |||
@@ -59,4 +59,7 @@ struct tsg_gk20a { | |||
59 | int gk20a_enable_tsg(struct tsg_gk20a *tsg); | 59 | int gk20a_enable_tsg(struct tsg_gk20a *tsg); |
60 | int gk20a_disable_tsg(struct tsg_gk20a *tsg); | 60 | int gk20a_disable_tsg(struct tsg_gk20a *tsg); |
61 | 61 | ||
62 | void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, | ||
63 | int event_id); | ||
64 | |||
62 | #endif /* __TSG_GK20A_H_ */ | 65 | #endif /* __TSG_GK20A_H_ */ |