gpu: nvgpu: provide usermode region via mmap

Add a mmap callback on the control device node for mapping the usermode
register region to userspace. Each such mapping is removed when the GPU
railgates, and brought back again on unrailgate.

The mapping offset must be 0 and its size must be 4 KB.

Bug 200145225

Change-Id: Ie8d3758da745b958376292691d7d1d02a24e7815
Signed-off-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1795819
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Konsta Holtta
2018-09-11 14:46:09 +03:00
committed by mobile promotions
parent d53495400e
commit f33935f426
4 changed files with 140 additions and 1 deletions

View File

@@ -56,6 +56,7 @@
#include "module_usermode.h"
#include "intr.h"
#include "ioctl.h"
#include "ioctl_ctrl.h"
#include "os_linux.h"
#include "os_ops.h"
@@ -76,7 +77,6 @@
#define CREATE_TRACE_POINTS
#include <trace/events/gk20a.h>
struct device_node *nvgpu_get_node(struct gk20a *g)
{
struct device *dev = dev_from_gk20a(g);
@@ -260,6 +260,8 @@ int gk20a_pm_finalize_poweron(struct device *dev)
if (err)
goto done;
nvgpu_restore_usermode_for_poweron(g);
/* Enable interrupt workqueue */
if (!l->nonstall_work_queue) {
l->nonstall_work_queue = alloc_workqueue("%s",
@@ -392,6 +394,7 @@ static int gk20a_pm_prepare_poweroff(struct device *dev)
/* Stop CPU from accessing the GPU registers. */
gk20a_lockout_registers(g);
nvgpu_hide_usermode_for_poweroff(g);
nvgpu_mutex_release(&g->power_lock);
return 0;