From 1480afeb013decec1d5451fd0d3eeaffa8e17bb6 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Fri, 3 Nov 2017 05:36:10 -0700 Subject: gpu: nvgpu: define EVENT_IDs in common code All the event ids NVGPU_IOCTL_CHANNEL_EVENT_ID_* are defined in linux specific user header uapi/linux/nvgpu.h and can't be used in common code Hence add new definitions of type NVGPU_EVENT_ID_* for all the events in common code and use them wherever required in common code For future additions to event ids, we need to update both NVGPU_IOCTL_CHANNEL_EVENT_ID_* and NVGPU_EVENT_ID_* fields Also add new API nvgpu_event_id_to_ioctl_channel_event_id() to convert common event_id of the form NVGPU_EVENT_ID_* to Linux specific event_id of the form NVGPU_IOCTL_CHANNEL_EVENT_ID_* Use this API in gk20a_channel/tsg_event_id_post_event() to get correct event_id Jira NVGPU-259 Change-Id: I15a7f41181fdbb8f1876f88bbcd044447d88325f Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1591434 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/ioctl_channel.c | 33 +++++++++++++++++++++++++- drivers/gpu/nvgpu/common/linux/ioctl_channel.h | 1 + drivers/gpu/nvgpu/common/linux/ioctl_tsg.c | 7 +++++- 3 files changed, 39 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/nvgpu/common/linux') diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c index 44f662cb..9a867bcb 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include @@ -689,12 +691,41 @@ static int gk20a_channel_get_event_data_from_id(struct channel_gk20a *ch, } } +/* + * Convert common event_id of the form NVGPU_EVENT_ID_* to Linux specific + * event_id of the form NVGPU_IOCTL_CHANNEL_EVENT_ID_* which is used in IOCTLs + */ +u32 nvgpu_event_id_to_ioctl_channel_event_id(u32 event_id) +{ + switch (event_id) { + case NVGPU_EVENT_ID_BPT_INT: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_INT; + case NVGPU_EVENT_ID_BPT_PAUSE: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_BPT_PAUSE; + case NVGPU_EVENT_ID_BLOCKING_SYNC: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_BLOCKING_SYNC; + case NVGPU_EVENT_ID_CILP_PREEMPTION_STARTED: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_CILP_PREEMPTION_STARTED; + case NVGPU_EVENT_ID_CILP_PREEMPTION_COMPLETE: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_CILP_PREEMPTION_COMPLETE; + case NVGPU_EVENT_ID_GR_SEMAPHORE_WRITE_AWAKEN: + return NVGPU_IOCTL_CHANNEL_EVENT_ID_GR_SEMAPHORE_WRITE_AWAKEN; + } + + return NVGPU_IOCTL_CHANNEL_EVENT_ID_MAX; +} + void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, - u32 event_id) + u32 __event_id) { struct gk20a_event_id_data *event_id_data; + u32 event_id; int err = 0; + event_id = nvgpu_event_id_to_ioctl_channel_event_id(__event_id); + if (event_id >= NVGPU_IOCTL_CHANNEL_EVENT_ID_MAX) + return; + err = gk20a_channel_get_event_data_from_id(ch, event_id, &event_id_data); if (err) diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.h b/drivers/gpu/nvgpu/common/linux/ioctl_channel.h index 1aac04aa..8cfce7e1 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.h +++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.h @@ -23,4 +23,5 @@ int gk20a_channel_open_ioctl(struct gk20a *g, extern const struct file_operations gk20a_event_id_ops; extern const struct file_operations gk20a_channel_ops; +u32 nvgpu_event_id_to_ioctl_channel_event_id(u32 event_id); #endif diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c index 2570886d..681a5e66 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_tsg.c @@ -80,11 +80,16 @@ static int gk20a_tsg_get_event_data_from_id(struct tsg_gk20a *tsg, } void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, - int event_id) + int __event_id) { struct gk20a_event_id_data *event_id_data; + u32 event_id; int err = 0; + event_id = nvgpu_event_id_to_ioctl_channel_event_id(__event_id); + if (event_id >= NVGPU_IOCTL_CHANNEL_EVENT_ID_MAX) + return; + err = gk20a_tsg_get_event_data_from_id(tsg, event_id, &event_id_data); if (err) -- cgit v1.2.2