Skip to content

Commit 87b634c

Browse files
alexdeuchergregkh
authored andcommitted
drm/amdgpu: fix handling of harvesting for ip_discovery firmware
[ Upstream commit 357d90b ] Chips which use the IP discovery firmware loaded by the driver reported incorrect harvesting information in the ip discovery table in sysfs because the driver only uses the ip discovery firmware for populating sysfs and not for direct parsing for the driver itself as such, the fields that are used to print the harvesting info in sysfs report incorrect data for some IPs. Populate the relevant fields for this case as well. Fixes: 514678d ("drm/amdgpu/discovery: fix fw based ip discovery") Acked-by: Tom St Denis <[email protected]> Reviewed-by: Lijo Lazar <[email protected]> Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 0a77caa commit 87b634c

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,9 @@ static uint8_t amdgpu_discovery_get_harvest_info(struct amdgpu_device *adev,
10161016
/* Until a uniform way is figured, get mask based on hwid */
10171017
switch (hw_id) {
10181018
case VCN_HWID:
1019-
harvest = ((1 << inst) & adev->vcn.inst_mask) == 0;
1019+
/* VCN vs UVD+VCE */
1020+
if (!amdgpu_ip_version(adev, VCE_HWIP, 0))
1021+
harvest = ((1 << inst) & adev->vcn.inst_mask) == 0;
10201022
break;
10211023
case DMU_HWID:
10221024
if (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK)
@@ -2462,7 +2464,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
24622464
amdgpu_discovery_init(adev);
24632465
vega10_reg_base_init(adev);
24642466
adev->sdma.num_instances = 2;
2467+
adev->sdma.sdma_mask = 3;
24652468
adev->gmc.num_umc = 4;
2469+
adev->gfx.xcc_mask = 1;
24662470
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 0, 0);
24672471
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 0, 0);
24682472
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(4, 0, 0);
@@ -2489,7 +2493,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
24892493
amdgpu_discovery_init(adev);
24902494
vega10_reg_base_init(adev);
24912495
adev->sdma.num_instances = 2;
2496+
adev->sdma.sdma_mask = 3;
24922497
adev->gmc.num_umc = 4;
2498+
adev->gfx.xcc_mask = 1;
24932499
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 3, 0);
24942500
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 3, 0);
24952501
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(4, 0, 1);
@@ -2516,8 +2522,10 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
25162522
amdgpu_discovery_init(adev);
25172523
vega10_reg_base_init(adev);
25182524
adev->sdma.num_instances = 1;
2525+
adev->sdma.sdma_mask = 1;
25192526
adev->vcn.num_vcn_inst = 1;
25202527
adev->gmc.num_umc = 2;
2528+
adev->gfx.xcc_mask = 1;
25212529
if (adev->apu_flags & AMD_APU_IS_RAVEN2) {
25222530
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 2, 0);
25232531
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 2, 0);
@@ -2560,7 +2568,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
25602568
amdgpu_discovery_init(adev);
25612569
vega20_reg_base_init(adev);
25622570
adev->sdma.num_instances = 2;
2571+
adev->sdma.sdma_mask = 3;
25632572
adev->gmc.num_umc = 8;
2573+
adev->gfx.xcc_mask = 1;
25642574
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 4, 0);
25652575
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 4, 0);
25662576
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(4, 2, 0);
@@ -2588,8 +2598,10 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
25882598
amdgpu_discovery_init(adev);
25892599
arct_reg_base_init(adev);
25902600
adev->sdma.num_instances = 8;
2601+
adev->sdma.sdma_mask = 0xff;
25912602
adev->vcn.num_vcn_inst = 2;
25922603
adev->gmc.num_umc = 8;
2604+
adev->gfx.xcc_mask = 1;
25932605
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 4, 1);
25942606
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 4, 1);
25952607
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(4, 2, 1);
@@ -2621,8 +2633,10 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
26212633
amdgpu_discovery_init(adev);
26222634
aldebaran_reg_base_init(adev);
26232635
adev->sdma.num_instances = 5;
2636+
adev->sdma.sdma_mask = 0x1f;
26242637
adev->vcn.num_vcn_inst = 2;
26252638
adev->gmc.num_umc = 4;
2639+
adev->gfx.xcc_mask = 1;
26262640
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(9, 4, 2);
26272641
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(9, 4, 2);
26282642
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(4, 4, 0);
@@ -2657,6 +2671,8 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
26572671
} else {
26582672
cyan_skillfish_reg_base_init(adev);
26592673
adev->sdma.num_instances = 2;
2674+
adev->sdma.sdma_mask = 3;
2675+
adev->gfx.xcc_mask = 1;
26602676
adev->ip_versions[MMHUB_HWIP][0] = IP_VERSION(2, 0, 3);
26612677
adev->ip_versions[ATHUB_HWIP][0] = IP_VERSION(2, 0, 3);
26622678
adev->ip_versions[OSSSYS_HWIP][0] = IP_VERSION(5, 0, 1);

0 commit comments

Comments
 (0)