mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: gv11b+: set live pes mask
This change is reading the live pes from the register "gr_gpc0_gpm_pd_live_physical_pes_r" and set it to "gr_gpc0_swdx_pes_mask_r". Every PES needs at least a TPC to work. If any of the TPCs are floorswept,the live PES mask is read from "gr_gpc0_gpm_pd_live_physical_pes_r" and the corresponding active PES mask is updated in "gr_gpc0_swdx_pes_mask_r". Bug 3677421 Change-Id: I899ac41c4a82beb3ce75c84ad57dcad262a49ba1 Signed-off-by: Dinesh T <dt@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2736560 (cherry picked from commit 85f2ceb3db6eeef925b49553f445d8cc31ec39da) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2759135 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Rajesh Devaraj <rdevaraj@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
mobile promotions
parent
8cb147aa88
commit
68976fbd22
@@ -863,6 +863,16 @@ static int gr_init_support_impl(struct gk20a *g)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable this errata for all the chips from GV11B.
|
||||
*/
|
||||
if (nvgpu_is_errata_present(g, NVGPU_ERRATA_200075440)) {
|
||||
if (g->ops.gr.config.set_live_pes_mask != NULL) {
|
||||
g->ops.gr.config.set_live_pes_mask(g,
|
||||
nvgpu_gr_config_get_gpc_count(gr->config));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Move sm id programming before loading ctxsw and gpccs firmwares. This
|
||||
* is the actual sequence expected by ctxsw ucode.
|
||||
|
||||
@@ -30,4 +30,6 @@ struct nvgpu_gr_config;
|
||||
|
||||
u32 gv11b_gr_config_get_gpc_pes_mask(struct gk20a *g,
|
||||
struct nvgpu_gr_config *config, u32 gpc_index);
|
||||
void gv11b_gr_config_set_live_pes_mask(struct gk20a *g,
|
||||
u32 gpc_count);
|
||||
#endif /* NVGPU_GR_CONFIG_GV11B_H */
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include <nvgpu/io.h>
|
||||
#include <nvgpu/static_analysis.h>
|
||||
#include <nvgpu/gr/config.h>
|
||||
|
||||
#include <nvgpu/gr/gr.h>
|
||||
#include "gr_config_gv11b.h"
|
||||
|
||||
#include <nvgpu/hw/gv11b/hw_gr_gv11b.h>
|
||||
@@ -43,3 +43,32 @@ u32 gv11b_gr_config_get_gpc_pes_mask(struct gk20a *g,
|
||||
|
||||
return (~val) & nvgpu_safe_sub_u32(BIT32(pes_cnt), 1U);
|
||||
}
|
||||
|
||||
void gv11b_gr_config_set_live_pes_mask(struct gk20a *g,
|
||||
u32 gpc_count)
|
||||
{
|
||||
u32 pes_mask = 0U;
|
||||
u32 temp_mask = 0U;
|
||||
u32 offset = 0U;
|
||||
u32 gpc_index = 0U;
|
||||
|
||||
for (gpc_index = 0U; gpc_index < gpc_count; gpc_index++) {
|
||||
offset = nvgpu_gr_gpc_offset(g, gpc_index);
|
||||
temp_mask = nvgpu_readl(g, gr_gpc0_gpm_pd_live_physical_pes_r()
|
||||
+ offset);
|
||||
temp_mask =
|
||||
gr_gpc0_gpm_pd_live_physical_pes_gpc0_gpm_pd_live_physical_pes_mask_f(temp_mask);
|
||||
temp_mask <<= (NUMBER_OF_BITS_COMPUTE_PES_MASK * gpc_index);
|
||||
pes_mask = temp_mask | pes_mask;
|
||||
}
|
||||
/*
|
||||
* When TPCs are floorswept, Corresponding PES mask needs to be updated
|
||||
* in this register. For an example : If a GPC contains "x" TPCs and "y"
|
||||
* PES. Every PES needs atleast a TPC to be enabled to work. If
|
||||
* contiguous "x/y" TPCs are floorswept , then "y-1" PES will be active.
|
||||
*/
|
||||
for (gpc_index = 0U; gpc_index < gpc_count; gpc_index++) {
|
||||
offset = nvgpu_gr_gpc_offset(g, gpc_index);
|
||||
nvgpu_writel(g, gr_gpc0_swdx_pes_mask_r() + offset, pes_mask);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -528,6 +528,7 @@ static const struct gops_gr_ctxsw_prog ga100_ops_gr_ctxsw_prog = {
|
||||
static const struct gops_gr_config ga100_ops_gr_config = {
|
||||
.get_gpc_mask = gm20b_gr_config_get_gpc_mask,
|
||||
.get_gpc_pes_mask = gv11b_gr_config_get_gpc_pes_mask,
|
||||
.set_live_pes_mask = gv11b_gr_config_set_live_pes_mask,
|
||||
.get_gpc_tpc_mask = gm20b_gr_config_get_gpc_tpc_mask,
|
||||
.get_tpc_count_in_gpc = gm20b_gr_config_get_tpc_count_in_gpc,
|
||||
.get_pes_tpc_mask = gm20b_gr_config_get_pes_tpc_mask,
|
||||
@@ -1864,6 +1865,7 @@ int ga100_init_hal(struct gk20a *g)
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200391931, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_SYNCPT_INVALID_ID_0, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_2557724, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200075440, true);
|
||||
|
||||
if (gops->fuse.fuse_opt_sm_ttu_en(g) != 0U) {
|
||||
nvgpu_set_enabled(g, NVGPU_SUPPORT_SM_TTU, true);
|
||||
|
||||
@@ -521,6 +521,7 @@ static const struct gops_gr_config ga10b_ops_gr_config = {
|
||||
.get_gpc_mask = gm20b_gr_config_get_gpc_mask,
|
||||
.get_gpc_tpc_mask = gm20b_gr_config_get_gpc_tpc_mask,
|
||||
.get_gpc_pes_mask = gv11b_gr_config_get_gpc_pes_mask,
|
||||
.set_live_pes_mask = gv11b_gr_config_set_live_pes_mask,
|
||||
.get_gpc_rop_mask = ga10b_gr_config_get_gpc_rop_mask,
|
||||
.get_tpc_count_in_gpc = gm20b_gr_config_get_tpc_count_in_gpc,
|
||||
.get_pes_tpc_mask = gm20b_gr_config_get_pes_tpc_mask,
|
||||
@@ -1879,6 +1880,7 @@ int ga10b_init_hal(struct gk20a *g)
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_SYNCPT_INVALID_ID_0, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_2557724, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_3524791, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200075440, true);
|
||||
|
||||
nvgpu_set_enabled(g, NVGPU_GR_USE_DMA_FOR_FW_BOOTSTRAP, false);
|
||||
|
||||
|
||||
@@ -416,6 +416,7 @@ static const struct gops_gr_config gv11b_ops_gr_config = {
|
||||
.get_tpc_count_in_gpc = gm20b_gr_config_get_tpc_count_in_gpc,
|
||||
.get_pes_tpc_mask = gm20b_gr_config_get_pes_tpc_mask,
|
||||
.get_gpc_pes_mask = gv11b_gr_config_get_gpc_pes_mask,
|
||||
.set_live_pes_mask = gv11b_gr_config_set_live_pes_mask,
|
||||
.get_pd_dist_skip_table_size = gm20b_gr_config_get_pd_dist_skip_table_size,
|
||||
.init_sm_id_table = gv100_gr_config_init_sm_id_table,
|
||||
#ifdef CONFIG_NVGPU_GRAPHICS
|
||||
@@ -1598,6 +1599,7 @@ int gv11b_init_hal(struct gk20a *g)
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200391931, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_SYNCPT_INVALID_ID_0, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_3524791, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200075440, true);
|
||||
|
||||
nvgpu_set_enabled(g, NVGPU_GR_USE_DMA_FOR_FW_BOOTSTRAP, false);
|
||||
|
||||
|
||||
@@ -459,6 +459,7 @@ static const struct gops_gr_config tu104_ops_gr_config = {
|
||||
.get_tpc_count_in_gpc = gm20b_gr_config_get_tpc_count_in_gpc,
|
||||
.get_pes_tpc_mask = gm20b_gr_config_get_pes_tpc_mask,
|
||||
.get_gpc_pes_mask = gv11b_gr_config_get_gpc_pes_mask,
|
||||
.set_live_pes_mask = gv11b_gr_config_set_live_pes_mask,
|
||||
.get_pd_dist_skip_table_size = gm20b_gr_config_get_pd_dist_skip_table_size,
|
||||
.init_sm_id_table = gv100_gr_config_init_sm_id_table,
|
||||
#ifdef CONFIG_NVGPU_GRAPHICS
|
||||
@@ -1786,6 +1787,7 @@ int tu104_init_hal(struct gk20a *g)
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200391931, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_SYNCPT_INVALID_ID_0, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_3524791, true);
|
||||
nvgpu_set_errata(g, NVGPU_ERRATA_200075440, true);
|
||||
|
||||
nvgpu_set_enabled(g, NVGPU_SEC_PRIVSECURITY, true);
|
||||
nvgpu_set_enabled(g, NVGPU_SEC_SECUREGPCCS, true);
|
||||
|
||||
@@ -70,6 +70,8 @@ struct gk20a;
|
||||
DEFINE_ERRATA(NVGPU_ERRATA_3288192, "GA10B", "L4 SCF NOT SUPPORTED"), \
|
||||
/* NvGPU Driver */ \
|
||||
DEFINE_ERRATA(NVGPU_ERRATA_SYNCPT_INVALID_ID_0, "SW", "Syncpt ID"),\
|
||||
/* GV11B+ */ \
|
||||
DEFINE_ERRATA(NVGPU_ERRATA_200075440, "GV11B", "PES MASK"),\
|
||||
DEFINE_ERRATA(NVGPU_MAX_ERRATA_BITS, "NA", "Marks max number of flags"),
|
||||
|
||||
/**
|
||||
|
||||
@@ -944,6 +944,8 @@ struct gops_gr_config {
|
||||
u32 (*get_gpc_pes_mask)(struct gk20a *g,
|
||||
struct nvgpu_gr_config *config,
|
||||
u32 gpc_index);
|
||||
void (*set_live_pes_mask)(struct gk20a *g,
|
||||
u32 gpc_count);
|
||||
u32 (*get_gpc_rop_mask)(struct gk20a *g,
|
||||
struct nvgpu_gr_config *config,
|
||||
u32 gpc_index);
|
||||
|
||||
@@ -34,6 +34,11 @@ struct gk20a;
|
||||
struct nvgpu_sm_info;
|
||||
struct nvgpu_gr_config;
|
||||
|
||||
/*
|
||||
* Number of bits represents a PES Mask.
|
||||
*/
|
||||
#define NUMBER_OF_BITS_COMPUTE_PES_MASK 4U
|
||||
|
||||
/**
|
||||
* @brief Initialize GR engine configuration information.
|
||||
*
|
||||
|
||||
@@ -776,6 +776,10 @@
|
||||
#define gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v() (0x00000800U)
|
||||
#define gr_gpc0_ppc0_cbm_alpha_cb_size_v_granularity_v() (0x00000020U)
|
||||
#define gr_gpc0_ppc0_cbm_alpha_cb_offset_r() (0x005030f8U)
|
||||
#define gr_gpc0_swdx_pes_mask_r() (0x005001d0U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_r() (0x00500c50U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_gpc0_gpm_pd_live_physical_pes_mask_f(v)\
|
||||
((U32(v) & 0xfU) << 0U)
|
||||
#define gr_gpcs_tpcs_tex_m_dbg2_r() (0x00419a3cU)
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r() (0x005030f0U)
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(v)\
|
||||
|
||||
@@ -732,6 +732,10 @@
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r() (0x005030f0U)
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(v)\
|
||||
((U32(v) & 0x3fffffU) << 0U)
|
||||
#define gr_gpc0_swdx_pes_mask_r() (0x005001d0U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_r() (0x00500c50U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_gpc0_gpm_pd_live_physical_pes_mask_f(v)\
|
||||
((U32(v) & 0xfU) << 0U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_r() (0x00419e00U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_base_addr_43_12_f(v)\
|
||||
((U32(v) & 0xffffffffU) << 0U)
|
||||
|
||||
@@ -1107,6 +1107,10 @@
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(v)\
|
||||
((U32(v) & 0x3fffffU) << 0U)
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_default_v() (0x00000800U)
|
||||
#define gr_gpc0_swdx_pes_mask_r() (0x005001d0U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_r() (0x00500c50U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_gpc0_gpm_pd_live_physical_pes_mask_f(v)\
|
||||
((U32(v) & 0xfU) << 0U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_r() (0x00419e00U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_base_addr_43_12_f(v)\
|
||||
((U32(v) & 0xffffffffU) << 0U)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -829,6 +829,10 @@
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(v)\
|
||||
((U32(v) & 0x3fffffU) << 0U)
|
||||
#define gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_default_v() (0x00000700U)
|
||||
#define gr_gpc0_swdx_pes_mask_r() (0x005001d0U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_r() (0x00500c50U)
|
||||
#define gr_gpc0_gpm_pd_live_physical_pes_gpc0_gpm_pd_live_physical_pes_mask_f(v)\
|
||||
((U32(v) & 0xfU) << 0U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_r() (0x00419e00U)
|
||||
#define gr_gpcs_tpcs_tex_rm_cb_0_base_addr_43_12_f(v)\
|
||||
((U32(v) & 0xffffffffU) << 0U)
|
||||
|
||||
Reference in New Issue
Block a user