Commit 8078f1c6 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher

drm/amdgpu: Change num_xcd to xcc_mask

Instead of number of XCCs, keep a mask of XCCs for the exact XCCs
available on the ASIC. XCC configuration could differ based on
different ASIC configs.

v2:
	Rename num_xcd to num_xcc (Hawking)
	Use smaller xcc_mask size, changed to u16 (Le)
Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: default avatarLe Ma <Le.Ma@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9eb7681f
...@@ -209,12 +209,12 @@ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev) ...@@ -209,12 +209,12 @@ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev)
int max_queues_per_mec = min(adev->gfx.mec.num_pipe_per_mec * int max_queues_per_mec = min(adev->gfx.mec.num_pipe_per_mec *
adev->gfx.mec.num_queue_per_pipe, adev->gfx.mec.num_queue_per_pipe,
adev->gfx.num_compute_rings); adev->gfx.num_compute_rings);
int num_xcd = (adev->gfx.num_xcd > 1) ? adev->gfx.num_xcd : 1; int num_xcc = adev->gfx.xcc_mask ? NUM_XCC(adev->gfx.xcc_mask) : 1;
if (multipipe_policy) { if (multipipe_policy) {
/* policy: make queues evenly cross all pipes on MEC1 only /* policy: make queues evenly cross all pipes on MEC1 only
* for multiple xcc, just use the original policy for simplicity */ * for multiple xcc, just use the original policy for simplicity */
for (j = 0; j < num_xcd; j++) { for (j = 0; j < num_xcc; j++) {
for (i = 0; i < max_queues_per_mec; i++) { for (i = 0; i < max_queues_per_mec; i++) {
pipe = i % adev->gfx.mec.num_pipe_per_mec; pipe = i % adev->gfx.mec.num_pipe_per_mec;
queue = (i / adev->gfx.mec.num_pipe_per_mec) % queue = (i / adev->gfx.mec.num_pipe_per_mec) %
...@@ -226,13 +226,13 @@ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev) ...@@ -226,13 +226,13 @@ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev)
} }
} else { } else {
/* policy: amdgpu owns all queues in the given pipe */ /* policy: amdgpu owns all queues in the given pipe */
for (j = 0; j < num_xcd; j++) { for (j = 0; j < num_xcc; j++) {
for (i = 0; i < max_queues_per_mec; ++i) for (i = 0; i < max_queues_per_mec; ++i)
set_bit(i, adev->gfx.mec_bitmap[j].queue_bitmap); set_bit(i, adev->gfx.mec_bitmap[j].queue_bitmap);
} }
} }
for (j = 0; j < num_xcd; j++) { for (j = 0; j < num_xcc; j++) {
dev_dbg(adev->dev, "mec queue bitmap weight=%d\n", dev_dbg(adev->dev, "mec queue bitmap weight=%d\n",
bitmap_weight(adev->gfx.mec_bitmap[j].queue_bitmap, AMDGPU_MAX_COMPUTE_QUEUES)); bitmap_weight(adev->gfx.mec_bitmap[j].queue_bitmap, AMDGPU_MAX_COMPUTE_QUEUES));
} }
...@@ -1207,23 +1207,24 @@ static ssize_t amdgpu_gfx_set_compute_partition(struct device *dev, ...@@ -1207,23 +1207,24 @@ static ssize_t amdgpu_gfx_set_compute_partition(struct device *dev,
struct drm_device *ddev = dev_get_drvdata(dev); struct drm_device *ddev = dev_get_drvdata(dev);
struct amdgpu_device *adev = drm_to_adev(ddev); struct amdgpu_device *adev = drm_to_adev(ddev);
enum amdgpu_gfx_partition mode; enum amdgpu_gfx_partition mode;
int ret; int ret = 0, num_xcc;
if (adev->gfx.num_xcd % 2 != 0) num_xcc = NUM_XCC(adev->gfx.xcc_mask);
if (num_xcc % 2 != 0)
return -EINVAL; return -EINVAL;
if (!strncasecmp("SPX", buf, strlen("SPX"))) { if (!strncasecmp("SPX", buf, strlen("SPX"))) {
mode = AMDGPU_SPX_PARTITION_MODE; mode = AMDGPU_SPX_PARTITION_MODE;
} else if (!strncasecmp("DPX", buf, strlen("DPX"))) { } else if (!strncasecmp("DPX", buf, strlen("DPX"))) {
if (adev->gfx.num_xcd != 4 || adev->gfx.num_xcd != 8) if (num_xcc != 4 || num_xcc != 8)
return -EINVAL; return -EINVAL;
mode = AMDGPU_DPX_PARTITION_MODE; mode = AMDGPU_DPX_PARTITION_MODE;
} else if (!strncasecmp("TPX", buf, strlen("TPX"))) { } else if (!strncasecmp("TPX", buf, strlen("TPX"))) {
if (adev->gfx.num_xcd != 6) if (num_xcc != 6)
return -EINVAL; return -EINVAL;
mode = AMDGPU_TPX_PARTITION_MODE; mode = AMDGPU_TPX_PARTITION_MODE;
} else if (!strncasecmp("QPX", buf, strlen("QPX"))) { } else if (!strncasecmp("QPX", buf, strlen("QPX"))) {
if (adev->gfx.num_xcd != 8) if (num_xcc != 8)
return -EINVAL; return -EINVAL;
mode = AMDGPU_QPX_PARTITION_MODE; mode = AMDGPU_QPX_PARTITION_MODE;
} else if (!strncasecmp("CPX", buf, strlen("CPX"))) { } else if (!strncasecmp("CPX", buf, strlen("CPX"))) {
...@@ -1253,7 +1254,7 @@ static ssize_t amdgpu_gfx_get_available_compute_partition(struct device *dev, ...@@ -1253,7 +1254,7 @@ static ssize_t amdgpu_gfx_get_available_compute_partition(struct device *dev,
char *supported_partition; char *supported_partition;
/* TBD */ /* TBD */
switch (adev->gfx.num_xcd) { switch (NUM_XCC(adev->gfx.xcc_mask)) {
case 8: case 8:
supported_partition = "SPX, DPX, QPX, CPX"; supported_partition = "SPX, DPX, QPX, CPX";
break; break;
......
...@@ -64,6 +64,8 @@ enum amdgpu_gfx_partition { ...@@ -64,6 +64,8 @@ enum amdgpu_gfx_partition {
AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE, AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE,
}; };
#define NUM_XCC(x) hweight16(x)
struct amdgpu_mec { struct amdgpu_mec {
struct amdgpu_bo *hpd_eop_obj; struct amdgpu_bo *hpd_eop_obj;
u64 hpd_eop_gpu_addr; u64 hpd_eop_gpu_addr;
...@@ -396,7 +398,7 @@ struct amdgpu_gfx { ...@@ -396,7 +398,7 @@ struct amdgpu_gfx {
bool cp_gfx_shadow; /* for gfx11 */ bool cp_gfx_shadow; /* for gfx11 */
enum amdgpu_gfx_partition partition_mode; enum amdgpu_gfx_partition partition_mode;
uint32_t num_xcd; uint16_t xcc_mask;
uint32_t num_xcc_per_xcp; uint32_t num_xcc_per_xcp;
struct mutex partition_mutex; struct mutex partition_mutex;
}; };
......
...@@ -4536,7 +4536,7 @@ static int gfx_v9_0_early_init(void *handle) ...@@ -4536,7 +4536,7 @@ static int gfx_v9_0_early_init(void *handle)
adev->gfx.num_gfx_rings = 0; adev->gfx.num_gfx_rings = 0;
else else
adev->gfx.num_gfx_rings = GFX9_NUM_GFX_RINGS; adev->gfx.num_gfx_rings = GFX9_NUM_GFX_RINGS;
adev->gfx.num_xcd = 1; adev->gfx.xcc_mask = 1;
adev->gfx.num_compute_rings = min(amdgpu_gfx_get_num_kcq(adev), adev->gfx.num_compute_rings = min(amdgpu_gfx_get_num_kcq(adev),
AMDGPU_MAX_COMPUTE_RINGS); AMDGPU_MAX_COMPUTE_RINGS);
gfx_v9_0_set_kiq_pm4_funcs(adev); gfx_v9_0_set_kiq_pm4_funcs(adev);
......
This diff is collapsed.
...@@ -43,9 +43,10 @@ static void gfxhub_v1_2_setup_vm_pt_regs(struct amdgpu_device *adev, ...@@ -43,9 +43,10 @@ static void gfxhub_v1_2_setup_vm_pt_regs(struct amdgpu_device *adev,
uint64_t page_table_base) uint64_t page_table_base)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
hub = &adev->vmhub[AMDGPU_GFXHUB(i)]; hub = &adev->vmhub[AMDGPU_GFXHUB(i)];
WREG32_SOC15_OFFSET(GC, i, WREG32_SOC15_OFFSET(GC, i,
regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32,
...@@ -56,13 +57,14 @@ static void gfxhub_v1_2_setup_vm_pt_regs(struct amdgpu_device *adev, ...@@ -56,13 +57,14 @@ static void gfxhub_v1_2_setup_vm_pt_regs(struct amdgpu_device *adev,
regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32,
hub->ctx_addr_distance * vmid, hub->ctx_addr_distance * vmid,
upper_32_bits(page_table_base)); upper_32_bits(page_table_base));
} }
} }
static void gfxhub_v1_2_init_gart_aperture_regs(struct amdgpu_device *adev) static void gfxhub_v1_2_init_gart_aperture_regs(struct amdgpu_device *adev)
{ {
uint64_t pt_base; uint64_t pt_base;
int i; int i, num_xcc;
if (adev->gmc.pdb0_bo) if (adev->gmc.pdb0_bo)
pt_base = amdgpu_gmc_pd_addr(adev->gmc.pdb0_bo); pt_base = amdgpu_gmc_pd_addr(adev->gmc.pdb0_bo);
...@@ -74,7 +76,8 @@ static void gfxhub_v1_2_init_gart_aperture_regs(struct amdgpu_device *adev) ...@@ -74,7 +76,8 @@ static void gfxhub_v1_2_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->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
if (adev->gmc.pdb0_bo) { if (adev->gmc.pdb0_bo) {
WREG32_SOC15(GC, i, WREG32_SOC15(GC, i,
regVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, regVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,
...@@ -111,9 +114,10 @@ static void gfxhub_v1_2_init_system_aperture_regs(struct amdgpu_device *adev) ...@@ -111,9 +114,10 @@ static void gfxhub_v1_2_init_system_aperture_regs(struct amdgpu_device *adev)
{ {
uint64_t value; uint64_t value;
uint32_t tmp; uint32_t tmp;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
/* Program the AGP BAR */ /* Program the AGP BAR */
WREG32_SOC15_RLC(GC, i, regMC_VM_AGP_BASE, 0); WREG32_SOC15_RLC(GC, i, regMC_VM_AGP_BASE, 0);
WREG32_SOC15_RLC(GC, i, regMC_VM_AGP_BOT, adev->gmc.agp_start >> 24); WREG32_SOC15_RLC(GC, i, regMC_VM_AGP_BOT, adev->gmc.agp_start >> 24);
...@@ -177,9 +181,10 @@ static void gfxhub_v1_2_init_system_aperture_regs(struct amdgpu_device *adev) ...@@ -177,9 +181,10 @@ static void gfxhub_v1_2_init_system_aperture_regs(struct amdgpu_device *adev)
static void gfxhub_v1_2_init_tlb_regs(struct amdgpu_device *adev) static void gfxhub_v1_2_init_tlb_regs(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
/* Setup TLB control */ /* Setup TLB control */
tmp = RREG32_SOC15(GC, i, regMC_VM_MX_L1_TLB_CNTL); tmp = RREG32_SOC15(GC, i, regMC_VM_MX_L1_TLB_CNTL);
...@@ -202,9 +207,10 @@ static void gfxhub_v1_2_init_tlb_regs(struct amdgpu_device *adev) ...@@ -202,9 +207,10 @@ static void gfxhub_v1_2_init_tlb_regs(struct amdgpu_device *adev)
static void gfxhub_v1_2_init_cache_regs(struct amdgpu_device *adev) static void gfxhub_v1_2_init_cache_regs(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
/* Setup L2 cache */ /* Setup L2 cache */
tmp = RREG32_SOC15(GC, i, regVM_L2_CNTL); tmp = RREG32_SOC15(GC, 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);
...@@ -249,9 +255,10 @@ static void gfxhub_v1_2_init_cache_regs(struct amdgpu_device *adev) ...@@ -249,9 +255,10 @@ static void gfxhub_v1_2_init_cache_regs(struct amdgpu_device *adev)
static void gfxhub_v1_2_enable_system_domain(struct amdgpu_device *adev) static void gfxhub_v1_2_enable_system_domain(struct amdgpu_device *adev)
{ {
uint32_t tmp; uint32_t tmp;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
tmp = RREG32_SOC15(GC, i, regVM_CONTEXT0_CNTL); tmp = RREG32_SOC15(GC, 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,
...@@ -266,9 +273,10 @@ static void gfxhub_v1_2_enable_system_domain(struct amdgpu_device *adev) ...@@ -266,9 +273,10 @@ static void gfxhub_v1_2_enable_system_domain(struct amdgpu_device *adev)
static void gfxhub_v1_2_disable_identity_aperture(struct amdgpu_device *adev) static void gfxhub_v1_2_disable_identity_aperture(struct amdgpu_device *adev)
{ {
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
WREG32_SOC15(GC, i, WREG32_SOC15(GC, i,
regVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, regVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32,
0XFFFFFFFF); 0XFFFFFFFF);
...@@ -295,7 +303,7 @@ static void gfxhub_v1_2_setup_vmid_config(struct amdgpu_device *adev) ...@@ -295,7 +303,7 @@ static void gfxhub_v1_2_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;
int i, j; int i, j, num_xcc;
num_level = adev->vm_manager.num_level; num_level = adev->vm_manager.num_level;
block_size = adev->vm_manager.block_size; block_size = adev->vm_manager.block_size;
...@@ -304,7 +312,8 @@ static void gfxhub_v1_2_setup_vmid_config(struct amdgpu_device *adev) ...@@ -304,7 +312,8 @@ static void gfxhub_v1_2_setup_vmid_config(struct amdgpu_device *adev)
else else
block_size -= 9; block_size -= 9;
for (j = 0; j < adev->gfx.num_xcd; j++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (j = 0; j < num_xcc; j++) {
hub = &adev->vmhub[AMDGPU_GFXHUB(j)]; hub = &adev->vmhub[AMDGPU_GFXHUB(j)];
for (i = 0; i <= 14; i++) { for (i = 0; i <= 14; i++) {
tmp = RREG32_SOC15_OFFSET(GC, j, regVM_CONTEXT1_CNTL, i); tmp = RREG32_SOC15_OFFSET(GC, j, regVM_CONTEXT1_CNTL, i);
...@@ -362,10 +371,12 @@ static void gfxhub_v1_2_setup_vmid_config(struct amdgpu_device *adev) ...@@ -362,10 +371,12 @@ static void gfxhub_v1_2_setup_vmid_config(struct amdgpu_device *adev)
static void gfxhub_v1_2_program_invalidation(struct amdgpu_device *adev) static void gfxhub_v1_2_program_invalidation(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
unsigned i, j; unsigned i, j, num_xcc;
for (j = 0; j < adev->gfx.num_xcd; j++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (j = 0; j < num_xcc; j++) {
hub = &adev->vmhub[AMDGPU_GFXHUB(j)]; hub = &adev->vmhub[AMDGPU_GFXHUB(j)];
for (i = 0 ; i < 18; ++i) { for (i = 0 ; i < 18; ++i) {
WREG32_SOC15_OFFSET(GC, j, regVM_INVALIDATE_ENG0_ADDR_RANGE_LO32, WREG32_SOC15_OFFSET(GC, j, regVM_INVALIDATE_ENG0_ADDR_RANGE_LO32,
i * hub->eng_addr_distance, 0xffffffff); i * hub->eng_addr_distance, 0xffffffff);
...@@ -377,9 +388,10 @@ static void gfxhub_v1_2_program_invalidation(struct amdgpu_device *adev) ...@@ -377,9 +388,10 @@ static void gfxhub_v1_2_program_invalidation(struct amdgpu_device *adev)
static int gfxhub_v1_2_gart_enable(struct amdgpu_device *adev) static int gfxhub_v1_2_gart_enable(struct amdgpu_device *adev)
{ {
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
if (amdgpu_sriov_vf(adev)) { if (amdgpu_sriov_vf(adev)) {
/* /*
* MC_VM_FB_LOCATION_BASE/TOP is NULL for VF, becuase they are * MC_VM_FB_LOCATION_BASE/TOP is NULL for VF, becuase they are
...@@ -413,9 +425,10 @@ static void gfxhub_v1_2_gart_disable(struct amdgpu_device *adev) ...@@ -413,9 +425,10 @@ static void gfxhub_v1_2_gart_disable(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
u32 tmp; u32 tmp;
u32 i, j; u32 i, j, num_xcc;
for (j = 0; j < adev->gfx.num_xcd; j++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (j = 0; j < num_xcc; j++) {
hub = &adev->vmhub[AMDGPU_GFXHUB(j)]; hub = &adev->vmhub[AMDGPU_GFXHUB(j)];
/* Disable all tables */ /* Disable all tables */
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
...@@ -449,9 +462,10 @@ static void gfxhub_v1_2_set_fault_enable_default(struct amdgpu_device *adev, ...@@ -449,9 +462,10 @@ static void gfxhub_v1_2_set_fault_enable_default(struct amdgpu_device *adev,
bool value) bool value)
{ {
u32 tmp; u32 tmp;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
tmp = RREG32_SOC15(GC, i, regVM_L2_PROTECTION_FAULT_CNTL); tmp = RREG32_SOC15(GC, 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);
...@@ -490,9 +504,10 @@ static void gfxhub_v1_2_set_fault_enable_default(struct amdgpu_device *adev, ...@@ -490,9 +504,10 @@ static void gfxhub_v1_2_set_fault_enable_default(struct amdgpu_device *adev,
static void gfxhub_v1_2_init(struct amdgpu_device *adev) static void gfxhub_v1_2_init(struct amdgpu_device *adev)
{ {
struct amdgpu_vmhub *hub; struct amdgpu_vmhub *hub;
int i; int i, num_xcc;
for (i = 0; i < adev->gfx.num_xcd; i++) { num_xcc = NUM_XCC(adev->gfx.xcc_mask);
for (i = 0; i < num_xcc; i++) {
hub = &adev->vmhub[AMDGPU_GFXHUB(i)]; hub = &adev->vmhub[AMDGPU_GFXHUB(i)];
hub->ctx0_ptb_addr_lo32 = hub->ctx0_ptb_addr_lo32 =
......
...@@ -1733,7 +1733,8 @@ static int gmc_v9_0_sw_init(void *handle) ...@@ -1733,7 +1733,8 @@ static int gmc_v9_0_sw_init(void *handle)
adev->gmc.translate_further = adev->vm_manager.num_level > 1; adev->gmc.translate_further = adev->vm_manager.num_level > 1;
break; break;
case IP_VERSION(9, 4, 3): case IP_VERSION(9, 4, 3):
bitmap_set(adev->vmhubs_mask, AMDGPU_GFXHUB(0), adev->gfx.num_xcd); bitmap_set(adev->vmhubs_mask, AMDGPU_GFXHUB(0),
NUM_XCC(adev->gfx.xcc_mask));
bitmap_set(adev->vmhubs_mask, AMDGPU_MMHUB0(0), adev->num_aid); bitmap_set(adev->vmhubs_mask, AMDGPU_MMHUB0(0), adev->num_aid);
amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48); amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48);
......
...@@ -592,6 +592,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, ...@@ -592,6 +592,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
struct kfd_node *node; struct kfd_node *node;
uint32_t first_vmid_kfd, last_vmid_kfd, vmid_num_kfd; uint32_t first_vmid_kfd, last_vmid_kfd, vmid_num_kfd;
unsigned int max_proc_per_quantum; unsigned int max_proc_per_quantum;
int num_xcd;
kfd->mec_fw_version = amdgpu_amdkfd_get_fw_version(kfd->adev, kfd->mec_fw_version = amdgpu_amdkfd_get_fw_version(kfd->adev,
KGD_ENGINE_MEC1); KGD_ENGINE_MEC1);
...@@ -601,16 +602,15 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, ...@@ -601,16 +602,15 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
KGD_ENGINE_SDMA1); KGD_ENGINE_SDMA1);
kfd->shared_resources = *gpu_resources; kfd->shared_resources = *gpu_resources;
if (kfd->adev->gfx.num_xcd == 0 || kfd->adev->gfx.num_xcd == 1 || num_xcd = NUM_XCC(kfd->adev->gfx.xcc_mask);
kfd->adev->gfx.num_xcc_per_xcp == 0) if (num_xcd == 0 || num_xcd == 1 || kfd->adev->gfx.num_xcc_per_xcp == 0)
kfd->num_nodes = 1; kfd->num_nodes = 1;
else else
kfd->num_nodes = kfd->num_nodes = num_xcd / kfd->adev->gfx.num_xcc_per_xcp;
kfd->adev->gfx.num_xcd/kfd->adev->gfx.num_xcc_per_xcp;
if (kfd->num_nodes == 0) { if (kfd->num_nodes == 0) {
dev_err(kfd_device, dev_err(kfd_device,
"KFD num nodes cannot be 0, GC inst: %d, num_xcc_in_node: %d\n", "KFD num nodes cannot be 0, GC inst: %d, num_xcc_in_node: %d\n",
kfd->adev->gfx.num_xcd, kfd->adev->gfx.num_xcc_per_xcp); num_xcd, kfd->adev->gfx.num_xcc_per_xcp);
goto out; goto out;
} }
......
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