mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
gpu: nvgpu: add new hal.gr.init HAL to reset sys/gpc/be units
gr_gk20a_init_golden_ctx_image() right now resets sys/gpc/be units by directly accessing gr_fecs_ctxsw_reset_ctl_r() register Move this register write/read sequence to common.hal.gr.init unit through HAL operation g->ops.gr.init.override_context_reset() Use new HAL in gr_gk20a_init_golden_ctx_image() Also fix the delay() operations. delay() should be added before we read back gr_fecs_ctxsw_reset_ctl_r() register and not after Jira NVGPU-2961 Change-Id: I70d3a61b5aa60846815dee52ecac544066542695 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2070608 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
c4534b5ee3
commit
95f47ac13c
@@ -1232,31 +1232,7 @@ int gr_gk20a_init_golden_ctx_image(struct gk20a *g,
|
|||||||
goto clean_up;
|
goto clean_up;
|
||||||
}
|
}
|
||||||
|
|
||||||
gk20a_writel(g, gr_fecs_ctxsw_reset_ctl_r(),
|
g->ops.gr.init.override_context_reset(g);
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_context_reset_enabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_context_reset_enabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_context_reset_enabled_f());
|
|
||||||
(void) gk20a_readl(g, gr_fecs_ctxsw_reset_ctl_r());
|
|
||||||
nvgpu_udelay(10);
|
|
||||||
|
|
||||||
gk20a_writel(g, gr_fecs_ctxsw_reset_ctl_r(),
|
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_halt_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_engine_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_sys_context_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_gpc_context_reset_disabled_f() |
|
|
||||||
gr_fecs_ctxsw_reset_ctl_be_context_reset_disabled_f());
|
|
||||||
(void) gk20a_readl(g, gr_fecs_ctxsw_reset_ctl_r());
|
|
||||||
nvgpu_udelay(10);
|
|
||||||
|
|
||||||
err = g->ops.gr.init.fe_pwr_mode_force_on(g, false);
|
err = g->ops.gr.init.fe_pwr_mode_force_on(g, false);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
|||||||
@@ -426,6 +426,8 @@ static const struct gpu_ops gm20b_ops = {
|
|||||||
.init = {
|
.init = {
|
||||||
.fe_pwr_mode_force_on =
|
.fe_pwr_mode_force_on =
|
||||||
gm20b_gr_init_fe_pwr_mode_force_on,
|
gm20b_gr_init_fe_pwr_mode_force_on,
|
||||||
|
.override_context_reset =
|
||||||
|
gm20b_gr_init_override_context_reset,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.fb = {
|
.fb = {
|
||||||
|
|||||||
@@ -475,6 +475,8 @@ static const struct gpu_ops gp10b_ops = {
|
|||||||
.init = {
|
.init = {
|
||||||
.fe_pwr_mode_force_on =
|
.fe_pwr_mode_force_on =
|
||||||
gm20b_gr_init_fe_pwr_mode_force_on,
|
gm20b_gr_init_fe_pwr_mode_force_on,
|
||||||
|
.override_context_reset =
|
||||||
|
gm20b_gr_init_override_context_reset,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.fb = {
|
.fb = {
|
||||||
|
|||||||
@@ -611,6 +611,8 @@ static const struct gpu_ops gv100_ops = {
|
|||||||
.init = {
|
.init = {
|
||||||
.fe_pwr_mode_force_on =
|
.fe_pwr_mode_force_on =
|
||||||
gm20b_gr_init_fe_pwr_mode_force_on,
|
gm20b_gr_init_fe_pwr_mode_force_on,
|
||||||
|
.override_context_reset =
|
||||||
|
gm20b_gr_init_override_context_reset,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.fb = {
|
.fb = {
|
||||||
|
|||||||
@@ -568,6 +568,8 @@ static const struct gpu_ops gv11b_ops = {
|
|||||||
.init = {
|
.init = {
|
||||||
.fe_pwr_mode_force_on =
|
.fe_pwr_mode_force_on =
|
||||||
gm20b_gr_init_fe_pwr_mode_force_on,
|
gm20b_gr_init_fe_pwr_mode_force_on,
|
||||||
|
.override_context_reset =
|
||||||
|
gm20b_gr_init_override_context_reset,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.fb = {
|
.fb = {
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#define FE_PWR_MODE_TIMEOUT_MAX_US 2000U
|
#define FE_PWR_MODE_TIMEOUT_MAX_US 2000U
|
||||||
#define FE_PWR_MODE_TIMEOUT_DEFAULT_US 10U
|
#define FE_PWR_MODE_TIMEOUT_DEFAULT_US 10U
|
||||||
|
#define FECS_CTXSW_RESET_DELAY_US 10U
|
||||||
|
|
||||||
int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on)
|
int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on)
|
||||||
{
|
{
|
||||||
@@ -71,3 +72,35 @@ int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gm20b_gr_init_override_context_reset(struct gk20a *g)
|
||||||
|
{
|
||||||
|
nvgpu_writel(g, gr_fecs_ctxsw_reset_ctl_r(),
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_context_reset_enabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_context_reset_enabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_context_reset_enabled_f());
|
||||||
|
|
||||||
|
nvgpu_udelay(FECS_CTXSW_RESET_DELAY_US);
|
||||||
|
(void) nvgpu_readl(g, gr_fecs_ctxsw_reset_ctl_r());
|
||||||
|
|
||||||
|
/* Deassert reset */
|
||||||
|
nvgpu_writel(g, gr_fecs_ctxsw_reset_ctl_r(),
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_halt_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_engine_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_sys_context_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_gpc_context_reset_disabled_f() |
|
||||||
|
gr_fecs_ctxsw_reset_ctl_be_context_reset_disabled_f());
|
||||||
|
|
||||||
|
nvgpu_udelay(FECS_CTXSW_RESET_DELAY_US);
|
||||||
|
(void) nvgpu_readl(g, gr_fecs_ctxsw_reset_ctl_r());
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,5 +28,6 @@
|
|||||||
struct gk20a;
|
struct gk20a;
|
||||||
|
|
||||||
int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on);
|
int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on);
|
||||||
|
void gm20b_gr_init_override_context_reset(struct gk20a *g);
|
||||||
|
|
||||||
#endif /* NVGPU_GR_INIT_GM20B_H */
|
#endif /* NVGPU_GR_INIT_GM20B_H */
|
||||||
|
|||||||
@@ -638,6 +638,7 @@ struct gpu_ops {
|
|||||||
struct {
|
struct {
|
||||||
int (*fe_pwr_mode_force_on)(struct gk20a *g,
|
int (*fe_pwr_mode_force_on)(struct gk20a *g,
|
||||||
bool force_on);
|
bool force_on);
|
||||||
|
void (*override_context_reset)(struct gk20a *g);
|
||||||
} init;
|
} init;
|
||||||
|
|
||||||
u32 (*fecs_falcon_base_addr)(void);
|
u32 (*fecs_falcon_base_addr)(void);
|
||||||
|
|||||||
@@ -637,6 +637,8 @@ static const struct gpu_ops tu104_ops = {
|
|||||||
.init = {
|
.init = {
|
||||||
.fe_pwr_mode_force_on =
|
.fe_pwr_mode_force_on =
|
||||||
gm20b_gr_init_fe_pwr_mode_force_on,
|
gm20b_gr_init_fe_pwr_mode_force_on,
|
||||||
|
.override_context_reset =
|
||||||
|
gm20b_gr_init_override_context_reset,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.fb = {
|
.fb = {
|
||||||
|
|||||||
Reference in New Issue
Block a user