mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: vgpu: add tsg release command
gv11b needs tsg release callback to release CE method buffer. Bug 2022929 Change-Id: I32e27a5fa49eb61b9c2fc72ea32034191a9be48e Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1611631 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Thomas Fleury <tfleury@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Aparna Das <aparnad@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
7f0aa103ea
commit
fa1b18c171
@@ -50,6 +50,7 @@ int vgpu_fifo_force_reset_ch(struct channel_gk20a *ch,
|
|||||||
u32 err_code, bool verbose);
|
u32 err_code, bool verbose);
|
||||||
u32 vgpu_fifo_default_timeslice_us(struct gk20a *g);
|
u32 vgpu_fifo_default_timeslice_us(struct gk20a *g);
|
||||||
int vgpu_tsg_open(struct tsg_gk20a *tsg);
|
int vgpu_tsg_open(struct tsg_gk20a *tsg);
|
||||||
|
void vgpu_tsg_release(struct tsg_gk20a *tsg);
|
||||||
int vgpu_tsg_bind_channel(struct tsg_gk20a *tsg,
|
int vgpu_tsg_bind_channel(struct tsg_gk20a *tsg,
|
||||||
struct channel_gk20a *ch);
|
struct channel_gk20a *ch);
|
||||||
int vgpu_tsg_unbind_channel(struct channel_gk20a *ch);
|
int vgpu_tsg_unbind_channel(struct channel_gk20a *ch);
|
||||||
|
|||||||
@@ -355,6 +355,7 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
|||||||
.set_runlist_interleave = vgpu_fifo_set_runlist_interleave,
|
.set_runlist_interleave = vgpu_fifo_set_runlist_interleave,
|
||||||
.tsg_set_timeslice = vgpu_tsg_set_timeslice,
|
.tsg_set_timeslice = vgpu_tsg_set_timeslice,
|
||||||
.tsg_open = vgpu_tsg_open,
|
.tsg_open = vgpu_tsg_open,
|
||||||
|
.tsg_release = vgpu_tsg_release,
|
||||||
.force_reset_ch = vgpu_fifo_force_reset_ch,
|
.force_reset_ch = vgpu_fifo_force_reset_ch,
|
||||||
.engine_enum_from_type = gp10b_fifo_engine_enum_from_type,
|
.engine_enum_from_type = gp10b_fifo_engine_enum_from_type,
|
||||||
.device_info_data_parse = gp10b_device_info_data_parse,
|
.device_info_data_parse = gp10b_device_info_data_parse,
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
int vgpu_tsg_open(struct tsg_gk20a *tsg)
|
int vgpu_tsg_open(struct tsg_gk20a *tsg)
|
||||||
{
|
{
|
||||||
struct tegra_vgpu_cmd_msg msg = {};
|
struct tegra_vgpu_cmd_msg msg = {};
|
||||||
struct tegra_vgpu_tsg_open_params *p =
|
struct tegra_vgpu_tsg_open_rel_params *p =
|
||||||
&msg.params.tsg_open;
|
&msg.params.tsg_open;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -47,6 +47,26 @@ int vgpu_tsg_open(struct tsg_gk20a *tsg)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vgpu_tsg_release(struct tsg_gk20a *tsg)
|
||||||
|
{
|
||||||
|
struct tegra_vgpu_cmd_msg msg = {};
|
||||||
|
struct tegra_vgpu_tsg_open_rel_params *p =
|
||||||
|
&msg.params.tsg_release;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
gk20a_dbg_fn("");
|
||||||
|
|
||||||
|
msg.cmd = TEGRA_VGPU_CMD_TSG_RELEASE;
|
||||||
|
msg.handle = vgpu_get_handle(tsg->g);
|
||||||
|
p->tsg_id = tsg->tsgid;
|
||||||
|
err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
|
||||||
|
err = err ? err : msg.ret;
|
||||||
|
if (err) {
|
||||||
|
nvgpu_err(tsg->g,
|
||||||
|
"vgpu_tsg_release failed, tsgid %d", tsg->tsgid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int vgpu_enable_tsg(struct tsg_gk20a *tsg)
|
int vgpu_enable_tsg(struct tsg_gk20a *tsg)
|
||||||
{
|
{
|
||||||
struct gk20a *g = tsg->g;
|
struct gk20a *g = tsg->g;
|
||||||
|
|||||||
@@ -552,6 +552,7 @@ struct gpu_ops {
|
|||||||
struct channel_gk20a *ch);
|
struct channel_gk20a *ch);
|
||||||
int (*tsg_unbind_channel)(struct channel_gk20a *ch);
|
int (*tsg_unbind_channel)(struct channel_gk20a *ch);
|
||||||
int (*tsg_open)(struct tsg_gk20a *tsg);
|
int (*tsg_open)(struct tsg_gk20a *tsg);
|
||||||
|
void (*tsg_release)(struct tsg_gk20a *tsg);
|
||||||
u32 (*eng_runlist_base_size)(void);
|
u32 (*eng_runlist_base_size)(void);
|
||||||
int (*init_engine_info)(struct fifo_gk20a *f);
|
int (*init_engine_info)(struct fifo_gk20a *f);
|
||||||
u32 (*runlist_entry_size)(void);
|
u32 (*runlist_entry_size)(void);
|
||||||
|
|||||||
@@ -315,6 +315,9 @@ void gk20a_tsg_release(struct nvgpu_ref *ref)
|
|||||||
struct gk20a *g = tsg->g;
|
struct gk20a *g = tsg->g;
|
||||||
struct gk20a_event_id_data *event_id_data, *event_id_data_temp;
|
struct gk20a_event_id_data *event_id_data, *event_id_data_temp;
|
||||||
|
|
||||||
|
if (g->ops.fifo.tsg_release)
|
||||||
|
g->ops.fifo.tsg_release(tsg);
|
||||||
|
|
||||||
if (tsg->tsg_gr_ctx) {
|
if (tsg->tsg_gr_ctx) {
|
||||||
gr_gk20a_free_tsg_gr_ctx(tsg);
|
gr_gk20a_free_tsg_gr_ctx(tsg);
|
||||||
tsg->tsg_gr_ctx = NULL;
|
tsg->tsg_gr_ctx = NULL;
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ enum {
|
|||||||
TEGRA_VGPU_CMD_PROF_MGT = 72,
|
TEGRA_VGPU_CMD_PROF_MGT = 72,
|
||||||
TEGRA_VGPU_CMD_PERFBUF_MGT = 73,
|
TEGRA_VGPU_CMD_PERFBUF_MGT = 73,
|
||||||
TEGRA_VGPU_CMD_GET_TIMESTAMPS_ZIPPER = 74,
|
TEGRA_VGPU_CMD_GET_TIMESTAMPS_ZIPPER = 74,
|
||||||
|
TEGRA_VGPU_CMD_TSG_RELEASE = 75,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tegra_vgpu_connect_params {
|
struct tegra_vgpu_connect_params {
|
||||||
@@ -384,7 +385,7 @@ struct tegra_vgpu_tsg_timeslice_params {
|
|||||||
u32 timeslice_us;
|
u32 timeslice_us;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tegra_vgpu_tsg_open_params {
|
struct tegra_vgpu_tsg_open_rel_params {
|
||||||
u32 tsg_id;
|
u32 tsg_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -562,7 +563,8 @@ struct tegra_vgpu_cmd_msg {
|
|||||||
struct tegra_vgpu_channel_bind_gr_ctx_params ch_bind_gr_ctx;
|
struct tegra_vgpu_channel_bind_gr_ctx_params ch_bind_gr_ctx;
|
||||||
struct tegra_vgpu_tsg_bind_gr_ctx_params tsg_bind_gr_ctx;
|
struct tegra_vgpu_tsg_bind_gr_ctx_params tsg_bind_gr_ctx;
|
||||||
struct tegra_vgpu_tsg_bind_unbind_channel_params tsg_bind_unbind_channel;
|
struct tegra_vgpu_tsg_bind_unbind_channel_params tsg_bind_unbind_channel;
|
||||||
struct tegra_vgpu_tsg_open_params tsg_open;
|
struct tegra_vgpu_tsg_open_rel_params tsg_open;
|
||||||
|
struct tegra_vgpu_tsg_open_rel_params tsg_release;
|
||||||
struct tegra_vgpu_tsg_preempt_params tsg_preempt;
|
struct tegra_vgpu_tsg_preempt_params tsg_preempt;
|
||||||
struct tegra_vgpu_tsg_timeslice_params tsg_timeslice;
|
struct tegra_vgpu_tsg_timeslice_params tsg_timeslice;
|
||||||
struct tegra_vgpu_tsg_runlist_interleave_params tsg_interleave;
|
struct tegra_vgpu_tsg_runlist_interleave_params tsg_interleave;
|
||||||
|
|||||||
Reference in New Issue
Block a user