Skip to content

Commit c899ac3

Browse files
Likun Gaogregkh
authored andcommitted
drm/amdgpu: add function to program pbb mode for sienna cichlid
commit 274c240 upstream. Add function for sienna_cichlid to force PBB workload mode to zero by checking whether there have SE been harvested. Signed-off-by: Likun Gao <Likun.Gao@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org # 5.9.x Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 1d06687 commit c899ac3

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,22 @@
112112
#define mmCP_HYP_ME_UCODE_DATA 0x5817
113113
#define mmCP_HYP_ME_UCODE_DATA_BASE_IDX 1
114114

115+
//CC_GC_SA_UNIT_DISABLE
116+
#define mmCC_GC_SA_UNIT_DISABLE 0x0fe9
117+
#define mmCC_GC_SA_UNIT_DISABLE_BASE_IDX 0
118+
#define CC_GC_SA_UNIT_DISABLE__SA_DISABLE__SHIFT 0x8
119+
#define CC_GC_SA_UNIT_DISABLE__SA_DISABLE_MASK 0x0000FF00L
120+
//GC_USER_SA_UNIT_DISABLE
121+
#define mmGC_USER_SA_UNIT_DISABLE 0x0fea
122+
#define mmGC_USER_SA_UNIT_DISABLE_BASE_IDX 0
123+
#define GC_USER_SA_UNIT_DISABLE__SA_DISABLE__SHIFT 0x8
124+
#define GC_USER_SA_UNIT_DISABLE__SA_DISABLE_MASK 0x0000FF00L
125+
//PA_SC_ENHANCE_3
126+
#define mmPA_SC_ENHANCE_3 0x1085
127+
#define mmPA_SC_ENHANCE_3_BASE_IDX 0
128+
#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO__SHIFT 0x3
129+
#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO_MASK 0x00000008L
130+
115131
MODULE_FIRMWARE("amdgpu/navi10_ce.bin");
116132
MODULE_FIRMWARE("amdgpu/navi10_pfp.bin");
117133
MODULE_FIRMWARE("amdgpu/navi10_me.bin");
@@ -3189,6 +3205,8 @@ static int gfx_v10_0_wait_for_rlc_autoload_complete(struct amdgpu_device *adev);
31893205
static void gfx_v10_0_ring_emit_ce_meta(struct amdgpu_ring *ring, bool resume);
31903206
static void gfx_v10_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume);
31913207
static void gfx_v10_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure);
3208+
static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev);
3209+
static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev);
31923210

31933211
static void gfx10_kiq_set_resources(struct amdgpu_ring *kiq_ring, uint64_t queue_mask)
31943212
{
@@ -6929,6 +6947,9 @@ static int gfx_v10_0_hw_init(void *handle)
69296947
if (r)
69306948
return r;
69316949

6950+
if (adev->asic_type == CHIP_SIENNA_CICHLID)
6951+
gfx_v10_3_program_pbb_mode(adev);
6952+
69326953
return r;
69336954
}
69346955

@@ -8774,6 +8795,47 @@ static int gfx_v10_0_get_cu_info(struct amdgpu_device *adev,
87748795
return 0;
87758796
}
87768797

8798+
static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev)
8799+
{
8800+
uint32_t efuse_setting, vbios_setting, disabled_sa, max_sa_mask;
8801+
8802+
efuse_setting = RREG32_SOC15(GC, 0, mmCC_GC_SA_UNIT_DISABLE);
8803+
efuse_setting &= CC_GC_SA_UNIT_DISABLE__SA_DISABLE_MASK;
8804+
efuse_setting >>= CC_GC_SA_UNIT_DISABLE__SA_DISABLE__SHIFT;
8805+
8806+
vbios_setting = RREG32_SOC15(GC, 0, mmGC_USER_SA_UNIT_DISABLE);
8807+
vbios_setting &= GC_USER_SA_UNIT_DISABLE__SA_DISABLE_MASK;
8808+
vbios_setting >>= GC_USER_SA_UNIT_DISABLE__SA_DISABLE__SHIFT;
8809+
8810+
max_sa_mask = amdgpu_gfx_create_bitmask(adev->gfx.config.max_sh_per_se *
8811+
adev->gfx.config.max_shader_engines);
8812+
disabled_sa = efuse_setting | vbios_setting;
8813+
disabled_sa &= max_sa_mask;
8814+
8815+
return disabled_sa;
8816+
}
8817+
8818+
static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev)
8819+
{
8820+
uint32_t max_sa_per_se, max_sa_per_se_mask, max_shader_engines;
8821+
uint32_t disabled_sa_mask, se_index, disabled_sa_per_se;
8822+
8823+
disabled_sa_mask = gfx_v10_3_get_disabled_sa(adev);
8824+
8825+
max_sa_per_se = adev->gfx.config.max_sh_per_se;
8826+
max_sa_per_se_mask = (1 << max_sa_per_se) - 1;
8827+
max_shader_engines = adev->gfx.config.max_shader_engines;
8828+
8829+
for (se_index = 0; max_shader_engines > se_index; se_index++) {
8830+
disabled_sa_per_se = disabled_sa_mask >> (se_index * max_sa_per_se);
8831+
disabled_sa_per_se &= max_sa_per_se_mask;
8832+
if (disabled_sa_per_se == max_sa_per_se_mask) {
8833+
WREG32_FIELD15(GC, 0, PA_SC_ENHANCE_3, FORCE_PBB_WORKLOAD_MODE_TO_ZERO, 1);
8834+
break;
8835+
}
8836+
}
8837+
}
8838+
87778839
const struct amdgpu_ip_block_version gfx_v10_0_ip_block =
87788840
{
87798841
.type = AMD_IP_BLOCK_TYPE_GFX,

0 commit comments

Comments
 (0)