mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 02:52:51 +03:00
Merge remote-tracking branch 'remotes/origin/dev/linux-nvgpu-t19x' into linux-nvgpu
Bug 200363166 Change-Id: Ic662d7b44b673db28dc0aeba338ae67cf2a43d64 Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
This commit is contained in:
29
drivers/gpu/nvgpu/common/linux/io_t19x.c
Normal file
29
drivers/gpu/nvgpu/common/linux/io_t19x.c
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <nvgpu/io.h>
|
||||
#include <nvgpu/types.h>
|
||||
|
||||
#include "common/linux/os_linux.h"
|
||||
#include "gk20a/gk20a.h"
|
||||
|
||||
#include <nvgpu/hw/gv11b/hw_usermode_gv11b.h>
|
||||
|
||||
void gv11b_usermode_writel(struct gk20a *g, u32 r, u32 v)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
void __iomem *reg = l->t19x.usermode_regs + (r - usermode_cfg0_r());
|
||||
|
||||
writel_relaxed(v, reg);
|
||||
gk20a_dbg(gpu_dbg_reg, "usermode r=0x%x v=0x%x", r, v);
|
||||
}
|
||||
33
drivers/gpu/nvgpu/common/linux/ioctl_ctrl_t19x.c
Normal file
33
drivers/gpu/nvgpu/common/linux/ioctl_ctrl_t19x.c
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <uapi/linux/nvgpu.h>
|
||||
|
||||
#include <nvgpu/types.h>
|
||||
#include <nvgpu/enabled.h>
|
||||
#include <nvgpu/enabled_t19x.h>
|
||||
|
||||
#include "ioctl_ctrl_t19x.h"
|
||||
#include "common/linux/os_linux.h"
|
||||
#include "gk20a/gk20a.h"
|
||||
|
||||
u64 nvgpu_ctrl_ioctl_gpu_characteristics_flags_t19x(struct gk20a *g)
|
||||
{
|
||||
u64 ioctl_flags = 0;
|
||||
|
||||
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_TSG_SUBCONTEXTS))
|
||||
ioctl_flags |= NVGPU_GPU_FLAGS_SUPPORT_TSG_SUBCONTEXTS;
|
||||
|
||||
return ioctl_flags;
|
||||
}
|
||||
|
||||
23
drivers/gpu/nvgpu/common/linux/ioctl_ctrl_t19x.h
Normal file
23
drivers/gpu/nvgpu/common/linux/ioctl_ctrl_t19x.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#ifndef _NVGPU_IOCTL_CTRL_T19X
|
||||
#define _NVGPU_IOCTL_CTRL_T19X
|
||||
|
||||
#include <nvgpu/types.h>
|
||||
|
||||
struct gk20a;
|
||||
|
||||
u64 nvgpu_ctrl_ioctl_gpu_characteristics_flags_t19x(struct gk20a *g);
|
||||
|
||||
#endif
|
||||
115
drivers/gpu/nvgpu/common/linux/ioctl_tsg_t19x.c
Normal file
115
drivers/gpu/nvgpu/common/linux/ioctl_tsg_t19x.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* GV11B TSG IOCTL Handler
|
||||
*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <uapi/linux/nvgpu.h>
|
||||
|
||||
#include "gk20a/gk20a.h"
|
||||
|
||||
#include "gv11b/fifo_gv11b.h"
|
||||
#include "gv11b/subctx_gv11b.h"
|
||||
#include "ioctl_tsg_t19x.h"
|
||||
#include "common/linux/os_linux.h"
|
||||
|
||||
static int gv11b_tsg_ioctl_bind_channel_ex(struct gk20a *g,
|
||||
struct tsg_gk20a *tsg, struct nvgpu_tsg_bind_channel_ex_args *arg)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
|
||||
struct channel_gk20a *ch;
|
||||
struct gr_gk20a *gr = &g->gr;
|
||||
int err = 0;
|
||||
|
||||
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid);
|
||||
|
||||
nvgpu_mutex_acquire(&sched->control_lock);
|
||||
if (sched->control_locked) {
|
||||
err = -EPERM;
|
||||
goto mutex_release;
|
||||
}
|
||||
err = gk20a_busy(g);
|
||||
if (err) {
|
||||
nvgpu_err(g, "failed to power on gpu");
|
||||
goto mutex_release;
|
||||
}
|
||||
|
||||
ch = gk20a_get_channel_from_file(arg->channel_fd);
|
||||
if (!ch) {
|
||||
err = -EINVAL;
|
||||
goto idle;
|
||||
}
|
||||
|
||||
if (arg->tpc_pg_enabled && (!tsg->t19x.tpc_num_initialized)) {
|
||||
if ((arg->num_active_tpcs > gr->max_tpc_count) ||
|
||||
!(arg->num_active_tpcs)) {
|
||||
nvgpu_err(g, "Invalid num of active TPCs");
|
||||
err = -EINVAL;
|
||||
goto ch_put;
|
||||
}
|
||||
tsg->t19x.tpc_num_initialized = true;
|
||||
tsg->t19x.num_active_tpcs = arg->num_active_tpcs;
|
||||
tsg->t19x.tpc_pg_enabled = true;
|
||||
} else {
|
||||
tsg->t19x.tpc_pg_enabled = false;
|
||||
nvgpu_log(g, gpu_dbg_info, "dynamic TPC-PG not enabled");
|
||||
}
|
||||
|
||||
if (arg->subcontext_id < g->fifo.t19x.max_subctx_count) {
|
||||
ch->t19x.subctx_id = arg->subcontext_id;
|
||||
} else {
|
||||
err = -EINVAL;
|
||||
goto ch_put;
|
||||
}
|
||||
|
||||
nvgpu_log(g, gpu_dbg_info, "channel id : %d : subctx: %d",
|
||||
ch->chid, ch->t19x.subctx_id);
|
||||
|
||||
/* Use runqueue selector 1 for all ASYNC ids */
|
||||
if (ch->t19x.subctx_id > CHANNEL_INFO_VEID0)
|
||||
ch->t19x.runqueue_sel = 1;
|
||||
|
||||
err = ch->g->ops.fifo.tsg_bind_channel(tsg, ch);
|
||||
ch_put:
|
||||
gk20a_channel_put(ch);
|
||||
idle:
|
||||
gk20a_idle(g);
|
||||
mutex_release:
|
||||
nvgpu_mutex_release(&sched->control_lock);
|
||||
return err;
|
||||
}
|
||||
|
||||
int t19x_tsg_ioctl_handler(struct gk20a *g, struct tsg_gk20a *tsg,
|
||||
unsigned int cmd, u8 *buf)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
nvgpu_log(g, gpu_dbg_fn, "t19x_tsg_ioctl_handler");
|
||||
|
||||
switch (cmd) {
|
||||
case NVGPU_TSG_IOCTL_BIND_CHANNEL_EX:
|
||||
{
|
||||
err = gv11b_tsg_ioctl_bind_channel_ex(g, tsg,
|
||||
(struct nvgpu_tsg_bind_channel_ex_args *)buf);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
nvgpu_err(g, "unrecognized tsg gpu ioctl cmd: 0x%x",
|
||||
cmd);
|
||||
err = -ENOTTY;
|
||||
break;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
21
drivers/gpu/nvgpu/common/linux/ioctl_tsg_t19x.h
Normal file
21
drivers/gpu/nvgpu/common/linux/ioctl_tsg_t19x.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* GV11B TSG IOCTL handler
|
||||
*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#ifndef _NVGPU_IOCTL_TSG_T19X
|
||||
#define _NVGPU_IOCTL_TSG_T19X
|
||||
|
||||
int t19x_tsg_ioctl_handler(struct gk20a *g, struct tsg_gk20a *tsg,
|
||||
unsigned int cmd, u8 *arg);
|
||||
#endif
|
||||
62
drivers/gpu/nvgpu/common/linux/module_t19x.c
Normal file
62
drivers/gpu/nvgpu/common/linux/module_t19x.c
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <nvgpu/types.h>
|
||||
|
||||
#include <nvgpu/hw/gv11b/hw_usermode_gv11b.h>
|
||||
|
||||
#include "common/linux/os_linux.h"
|
||||
|
||||
/*
|
||||
* Locks out the driver from accessing GPU registers. This prevents access to
|
||||
* thse registers after the GPU has been clock or power gated. This should help
|
||||
* find annoying bugs where register reads and writes are silently dropped
|
||||
* after the GPU has been turned off. On older chips these reads and writes can
|
||||
* also lock the entire CPU up.
|
||||
*/
|
||||
void t19x_lockout_registers(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
|
||||
l->t19x.usermode_regs = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Undoes t19x_lockout_registers().
|
||||
*/
|
||||
void t19x_restore_registers(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
|
||||
l->t19x.usermode_regs = l->t19x.usermode_regs_saved;
|
||||
}
|
||||
|
||||
void t19x_remove_support(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
|
||||
if (l->t19x.usermode_regs) {
|
||||
l->t19x.usermode_regs = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void t19x_init_support(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
|
||||
l->t19x.usermode_regs = l->regs + usermode_cfg0_r();
|
||||
l->t19x.usermode_regs_saved = l->t19x.usermode_regs;
|
||||
}
|
||||
35
drivers/gpu/nvgpu/common/linux/nvhost_t19x.c
Normal file
35
drivers/gpu/nvgpu/common/linux/nvhost_t19x.c
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <linux/nvhost.h>
|
||||
#include <linux/nvhost_t194.h>
|
||||
|
||||
#include <nvgpu/nvhost_t19x.h>
|
||||
|
||||
#include "common/linux/nvhost_priv.h"
|
||||
|
||||
int nvgpu_nvhost_syncpt_unit_interface_get_aperture(
|
||||
struct nvgpu_nvhost_dev *nvhost_dev,
|
||||
u64 *base, size_t *size)
|
||||
{
|
||||
return nvhost_syncpt_unit_interface_get_aperture(
|
||||
nvhost_dev->host1x_pdev, (phys_addr_t *)base, size);
|
||||
}
|
||||
|
||||
u32 nvgpu_nvhost_syncpt_unit_interface_get_byte_offset(u32 syncpt_id)
|
||||
{
|
||||
return nvhost_syncpt_unit_interface_get_byte_offset(syncpt_id);
|
||||
}
|
||||
24
drivers/gpu/nvgpu/common/linux/pci_t19x.c
Normal file
24
drivers/gpu/nvgpu/common/linux/pci_t19x.c
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <nvgpu/types.h>
|
||||
|
||||
#include <nvgpu/hw/gv11b/hw_usermode_gv11b.h>
|
||||
|
||||
#include "common/linux/os_linux.h"
|
||||
|
||||
void t19x_nvgpu_pci_init_support(struct nvgpu_os_linux *l)
|
||||
{
|
||||
l->t19x.usermode_regs = l->regs + usermode_cfg0_r();
|
||||
l->t19x.usermode_regs_saved = l->t19x.usermode_regs;
|
||||
}
|
||||
Reference in New Issue
Block a user