Commit 7a1efad0 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher

drm/amdgpu: Use mask for active clusters

Use a mask of available active clusters instead of using only the number
of active clusters.
Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent bbca579f
...@@ -1070,7 +1070,8 @@ struct amdgpu_device { ...@@ -1070,7 +1070,8 @@ struct amdgpu_device {
bool job_hang; bool job_hang;
bool dc_enabled; bool dc_enabled;
uint32_t num_aid; /* Mask of active clusters */
uint32_t aid_mask;
}; };
static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev) static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
......
...@@ -358,25 +358,26 @@ static int aqua_vanjaram_xcp_mgr_init(struct amdgpu_device *adev) ...@@ -358,25 +358,26 @@ static int aqua_vanjaram_xcp_mgr_init(struct amdgpu_device *adev)
int aqua_vanjaram_init_soc_config(struct amdgpu_device *adev) int aqua_vanjaram_init_soc_config(struct amdgpu_device *adev)
{ {
u32 inst_mask = adev->sdma.sdma_mask; u32 inst_mask = adev->sdma.sdma_mask;
int ret; int ret, i, num_inst;
/* generally 1 AID supports 4 instances */ /* generally 1 AID supports 4 instances */
adev->sdma.num_inst_per_aid = 4; adev->sdma.num_inst_per_aid = 4;
adev->sdma.num_instances = NUM_SDMA(adev->sdma.sdma_mask); adev->sdma.num_instances = NUM_SDMA(adev->sdma.sdma_mask);
adev->num_aid = 1; adev->aid_mask = i = 1;
inst_mask >>= adev->sdma.num_inst_per_aid; inst_mask >>= adev->sdma.num_inst_per_aid;
for (const u32 mask = (1 << adev->sdma.num_inst_per_aid) - 1; inst_mask; for (const u32 mask = (1 << adev->sdma.num_inst_per_aid) - 1; inst_mask;
inst_mask >>= adev->sdma.num_inst_per_aid) { inst_mask >>= adev->sdma.num_inst_per_aid, ++i) {
if ((inst_mask & mask) == mask) if ((inst_mask & mask) == mask)
adev->num_aid++; adev->aid_mask |= (1 << i);
} }
num_inst = hweight32(adev->aid_mask);
adev->vcn.num_inst_per_aid = 1; adev->vcn.num_inst_per_aid = 1;
adev->vcn.num_vcn_inst = adev->vcn.num_inst_per_aid * adev->num_aid; adev->vcn.num_vcn_inst = adev->vcn.num_inst_per_aid * num_inst;
adev->jpeg.num_inst_per_aid = 1; adev->jpeg.num_inst_per_aid = 1;
adev->jpeg.num_jpeg_inst = adev->jpeg.num_inst_per_aid * adev->num_aid; adev->jpeg.num_jpeg_inst = adev->jpeg.num_inst_per_aid * num_inst;
ret = aqua_vanjaram_xcp_mgr_init(adev); ret = aqua_vanjaram_xcp_mgr_init(adev);
if (ret) if (ret)
......
...@@ -1674,6 +1674,7 @@ static int gmc_v9_0_sw_init(void *handle) ...@@ -1674,6 +1674,7 @@ static int gmc_v9_0_sw_init(void *handle)
{ {
int r, vram_width = 0, vram_type = 0, vram_vendor = 0, dma_addr_bits; int r, vram_width = 0, vram_type = 0, vram_vendor = 0, dma_addr_bits;
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
unsigned long inst_mask = adev->aid_mask;
adev->gfxhub.funcs->init(adev); adev->gfxhub.funcs->init(adev);
...@@ -1757,7 +1758,9 @@ static int gmc_v9_0_sw_init(void *handle) ...@@ -1757,7 +1758,9 @@ static int gmc_v9_0_sw_init(void *handle)
case IP_VERSION(9, 4, 3): case IP_VERSION(9, 4, 3):
bitmap_set(adev->vmhubs_mask, AMDGPU_GFXHUB(0), bitmap_set(adev->vmhubs_mask, AMDGPU_GFXHUB(0),
NUM_XCC(adev->gfx.xcc_mask)); NUM_XCC(adev->gfx.xcc_mask));
bitmap_set(adev->vmhubs_mask, AMDGPU_MMHUB0(0), adev->num_aid);
inst_mask <<= AMDGPU_MMHUB0(0);
bitmap_or(adev->vmhubs_mask, adev->vmhubs_mask, &inst_mask, 32);
amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48); amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48);
break; break;
......
...@@ -54,9 +54,11 @@ static void mmhub_v1_8_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmi ...@@ -54,9 +54,11 @@ static void mmhub_v1_8_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmi
uint64_t page_table_base) uint64_t page_table_base)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
u32 inst_mask;
int i; int i;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
hub = &adev->vmhub[AMDGPU_MMHUB0(i)]; hub = &adev->vmhub[AMDGPU_MMHUB0(i)];
WREG32_SOC15_OFFSET(MMHUB, i, WREG32_SOC15_OFFSET(MMHUB, i,
regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32,
...@@ -73,6 +75,7 @@ static void mmhub_v1_8_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmi ...@@ -73,6 +75,7 @@ static void mmhub_v1_8_setup_vm_pt_regs(struct amdgpu_device *adev, uint32_t vmi
static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev) static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev)
{ {
uint64_t pt_base; uint64_t pt_base;
u32 inst_mask;
int i; int i;
if (adev->gmc.pdb0_bo) if (adev->gmc.pdb0_bo)
...@@ -85,7 +88,8 @@ static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev) ...@@ -85,7 +88,8 @@ static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev)
/* If use GART for FB translation, vmid0 page table covers both /* If use GART for FB translation, vmid0 page table covers both
* vram and system memory (gart) * vram and system memory (gart)
*/ */
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
if (adev->gmc.pdb0_bo) { if (adev->gmc.pdb0_bo) {
WREG32_SOC15(MMHUB, i, WREG32_SOC15(MMHUB, i,
regVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, regVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,
...@@ -121,11 +125,12 @@ static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev) ...@@ -121,11 +125,12 @@ static void mmhub_v1_8_init_gart_aperture_regs(struct amdgpu_device *adev)
static void mmhub_v1_8_init_system_aperture_regs(struct amdgpu_device *adev) static void mmhub_v1_8_init_system_aperture_regs(struct amdgpu_device *adev)
{ {
uint32_t tmp, inst_mask;
uint64_t value; uint64_t value;
uint32_t tmp;
int i; int i;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
/* Program the AGP BAR */ /* Program the AGP BAR */
WREG32_SOC15(MMHUB, i, regMC_VM_AGP_BASE, 0); WREG32_SOC15(MMHUB, i, regMC_VM_AGP_BASE, 0);
WREG32_SOC15(MMHUB, i, regMC_VM_AGP_BOT, WREG32_SOC15(MMHUB, i, regMC_VM_AGP_BOT,
...@@ -183,11 +188,12 @@ static void mmhub_v1_8_init_system_aperture_regs(struct amdgpu_device *adev) ...@@ -183,11 +188,12 @@ static void mmhub_v1_8_init_system_aperture_regs(struct amdgpu_device *adev)
static void mmhub_v1_8_init_tlb_regs(struct amdgpu_device *adev) static void mmhub_v1_8_init_tlb_regs(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp, inst_mask;
int i; int i;
/* Setup TLB control */ /* Setup TLB control */
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
tmp = RREG32_SOC15(MMHUB, i, regMC_VM_MX_L1_TLB_CNTL); tmp = RREG32_SOC15(MMHUB, i, regMC_VM_MX_L1_TLB_CNTL);
tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB,
...@@ -208,14 +214,15 @@ static void mmhub_v1_8_init_tlb_regs(struct amdgpu_device *adev) ...@@ -208,14 +214,15 @@ static void mmhub_v1_8_init_tlb_regs(struct amdgpu_device *adev)
static void mmhub_v1_8_init_cache_regs(struct amdgpu_device *adev) static void mmhub_v1_8_init_cache_regs(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp, inst_mask;
int i; int i;
if (amdgpu_sriov_vf(adev)) if (amdgpu_sriov_vf(adev))
return; return;
/* Setup L2 cache */ /* Setup L2 cache */
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
tmp = RREG32_SOC15(MMHUB, i, regVM_L2_CNTL); tmp = RREG32_SOC15(MMHUB, i, regVM_L2_CNTL);
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 1); tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 1);
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, tmp = REG_SET_FIELD(tmp, VM_L2_CNTL,
...@@ -267,10 +274,11 @@ static void mmhub_v1_8_init_cache_regs(struct amdgpu_device *adev) ...@@ -267,10 +274,11 @@ static void mmhub_v1_8_init_cache_regs(struct amdgpu_device *adev)
static void mmhub_v1_8_enable_system_domain(struct amdgpu_device *adev) static void mmhub_v1_8_enable_system_domain(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp, inst_mask;
int i; int i;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
tmp = RREG32_SOC15(MMHUB, i, regVM_CONTEXT0_CNTL); tmp = RREG32_SOC15(MMHUB, i, regVM_CONTEXT0_CNTL);
tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, ENABLE_CONTEXT, 1); tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, ENABLE_CONTEXT, 1);
tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, PAGE_TABLE_DEPTH, tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, PAGE_TABLE_DEPTH,
...@@ -286,12 +294,14 @@ static void mmhub_v1_8_enable_system_domain(struct amdgpu_device *adev) ...@@ -286,12 +294,14 @@ static void mmhub_v1_8_enable_system_domain(struct amdgpu_device *adev)
static void mmhub_v1_8_disable_identity_aperture(struct amdgpu_device *adev) static void mmhub_v1_8_disable_identity_aperture(struct amdgpu_device *adev)
{ {
u32 inst_mask;
int i; int i;
if (amdgpu_sriov_vf(adev)) if (amdgpu_sriov_vf(adev))
return; return;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
WREG32_SOC15(MMHUB, i, WREG32_SOC15(MMHUB, i,
regVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, regVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32,
0XFFFFFFFF); 0XFFFFFFFF);
...@@ -317,7 +327,7 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev) ...@@ -317,7 +327,7 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
unsigned num_level, block_size; unsigned num_level, block_size;
uint32_t tmp; uint32_t tmp, inst_mask;
int i, j; int i, j;
num_level = adev->vm_manager.num_level; num_level = adev->vm_manager.num_level;
...@@ -327,7 +337,8 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev) ...@@ -327,7 +337,8 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev)
else else
block_size -= 9; block_size -= 9;
for (j = 0; j < adev->num_aid; j++) { inst_mask = adev->aid_mask;
for_each_inst(j, inst_mask) {
hub = &adev->vmhub[AMDGPU_MMHUB0(j)]; hub = &adev->vmhub[AMDGPU_MMHUB0(j)];
for (i = 0; i <= 14; i++) { for (i = 0; i <= 14; i++) {
tmp = RREG32_SOC15_OFFSET(MMHUB, j, regVM_CONTEXT1_CNTL, tmp = RREG32_SOC15_OFFSET(MMHUB, j, regVM_CONTEXT1_CNTL,
...@@ -382,9 +393,10 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev) ...@@ -382,9 +393,10 @@ static void mmhub_v1_8_setup_vmid_config(struct amdgpu_device *adev)
static void mmhub_v1_8_program_invalidation(struct amdgpu_device *adev) static void mmhub_v1_8_program_invalidation(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
unsigned i, j; u32 i, j, inst_mask;
for (j = 0; j < adev->num_aid; j++) { inst_mask = adev->aid_mask;
for_each_inst(j, inst_mask) {
hub = &adev->vmhub[AMDGPU_MMHUB0(j)]; hub = &adev->vmhub[AMDGPU_MMHUB0(j)];
for (i = 0; i < 18; ++i) { for (i = 0; i < 18; ++i) {
WREG32_SOC15_OFFSET(MMHUB, j, WREG32_SOC15_OFFSET(MMHUB, j,
...@@ -429,10 +441,11 @@ static void mmhub_v1_8_gart_disable(struct amdgpu_device *adev) ...@@ -429,10 +441,11 @@ static void mmhub_v1_8_gart_disable(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
u32 tmp; u32 tmp;
u32 i, j; u32 i, j, inst_mask;
/* Disable all tables */ /* Disable all tables */
for (j = 0; j < adev->num_aid; j++) { inst_mask = adev->aid_mask;
for_each_inst(j, inst_mask) {
hub = &adev->vmhub[AMDGPU_MMHUB0(j)]; hub = &adev->vmhub[AMDGPU_MMHUB0(j)];
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
WREG32_SOC15_OFFSET(MMHUB, j, regVM_CONTEXT0_CNTL, WREG32_SOC15_OFFSET(MMHUB, j, regVM_CONTEXT0_CNTL,
...@@ -465,13 +478,14 @@ static void mmhub_v1_8_gart_disable(struct amdgpu_device *adev) ...@@ -465,13 +478,14 @@ static void mmhub_v1_8_gart_disable(struct amdgpu_device *adev)
*/ */
static void mmhub_v1_8_set_fault_enable_default(struct amdgpu_device *adev, bool value) static void mmhub_v1_8_set_fault_enable_default(struct amdgpu_device *adev, bool value)
{ {
u32 tmp; u32 tmp, inst_mask;
int i; int i;
if (amdgpu_sriov_vf(adev)) if (amdgpu_sriov_vf(adev))
return; return;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
tmp = RREG32_SOC15(MMHUB, i, regVM_L2_PROTECTION_FAULT_CNTL); tmp = RREG32_SOC15(MMHUB, i, regVM_L2_PROTECTION_FAULT_CNTL);
tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL,
RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value);
...@@ -510,9 +524,11 @@ static void mmhub_v1_8_set_fault_enable_default(struct amdgpu_device *adev, bool ...@@ -510,9 +524,11 @@ static void mmhub_v1_8_set_fault_enable_default(struct amdgpu_device *adev, bool
static void mmhub_v1_8_init(struct amdgpu_device *adev) static void mmhub_v1_8_init(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
u32 inst_mask;
int i; int i;
for (i = 0; i < adev->num_aid; i++) { inst_mask = adev->aid_mask;
for_each_inst(i, inst_mask) {
hub = &adev->vmhub[AMDGPU_MMHUB0(i)]; hub = &adev->vmhub[AMDGPU_MMHUB0(i)];
hub->ctx0_ptb_addr_lo32 = SOC15_REG_OFFSET(MMHUB, i, hub->ctx0_ptb_addr_lo32 = SOC15_REG_OFFSET(MMHUB, i,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment