Skip to content

Commit 82ae661

Browse files
amd-sukhatrialexdeucher
authored andcommitted
drm/amdgpu: update the handle ptr in wait_for_idle
Update the *handle to amdgpu_ip_block ptr for all functions pointers of wait_for_idle. Signed-off-by: Sunil Khatri <[email protected]> Reviewed-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent ded57e4 commit 82ae661

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+219
-157
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ static bool acp_is_idle(void *handle)
590590
return true;
591591
}
592592

593-
static int acp_wait_for_idle(void *handle)
593+
static int acp_wait_for_idle(struct amdgpu_ip_block *ip_block)
594594
{
595595
return 0;
596596
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2204,7 +2204,7 @@ int amdgpu_device_ip_wait_for_idle(struct amdgpu_device *adev,
22042204
if (!adev->ip_blocks[i].status.valid)
22052205
continue;
22062206
if (adev->ip_blocks[i].version->type == block_type) {
2207-
r = adev->ip_blocks[i].version->funcs->wait_for_idle((void *)adev);
2207+
r = adev->ip_blocks[i].version->funcs->wait_for_idle(&adev->ip_blocks[i]);
22082208
if (r)
22092209
return r;
22102210
break;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ static bool isp_is_idle(void *handle)
155155
return true;
156156
}
157157

158-
static int isp_wait_for_idle(void *handle)
158+
static int isp_wait_for_idle(struct amdgpu_ip_block *ip_block)
159159
{
160160
return 0;
161161
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ static bool amdgpu_vkms_is_idle(void *handle)
632632
return true;
633633
}
634634

635-
static int amdgpu_vkms_wait_for_idle(void *handle)
635+
static int amdgpu_vkms_wait_for_idle(struct amdgpu_ip_block *ip_block)
636636
{
637637
return 0;
638638
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2172,7 +2172,7 @@ static bool cik_common_is_idle(void *handle)
21722172
return true;
21732173
}
21742174

2175-
static int cik_common_wait_for_idle(void *handle)
2175+
static int cik_common_wait_for_idle(struct amdgpu_ip_block *ip_block)
21762176
{
21772177
return 0;
21782178
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,11 +362,11 @@ static bool cik_ih_is_idle(void *handle)
362362
return true;
363363
}
364364

365-
static int cik_ih_wait_for_idle(void *handle)
365+
static int cik_ih_wait_for_idle(struct amdgpu_ip_block *ip_block)
366366
{
367367
unsigned i;
368368
u32 tmp;
369-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
369+
struct amdgpu_device *adev = ip_block->adev;
370370

371371
for (i = 0; i < adev->usec_timeout; i++) {
372372
/* read MC_STATUS */

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,11 +1039,11 @@ static bool cik_sdma_is_idle(void *handle)
10391039
return true;
10401040
}
10411041

1042-
static int cik_sdma_wait_for_idle(void *handle)
1042+
static int cik_sdma_wait_for_idle(struct amdgpu_ip_block *ip_block)
10431043
{
10441044
unsigned i;
10451045
u32 tmp;
1046-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1046+
struct amdgpu_device *adev = ip_block->adev;
10471047

10481048
for (i = 0; i < adev->usec_timeout; i++) {
10491049
tmp = RREG32(mmSRBM_STATUS2) & (SRBM_STATUS2__SDMA_BUSY_MASK |

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,11 @@ static bool cz_ih_is_idle(void *handle)
358358
return true;
359359
}
360360

361-
static int cz_ih_wait_for_idle(void *handle)
361+
static int cz_ih_wait_for_idle(struct amdgpu_ip_block *ip_block)
362362
{
363363
unsigned i;
364364
u32 tmp;
365-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
365+
struct amdgpu_device *adev = ip_block->adev;
366366

367367
for (i = 0; i < adev->usec_timeout; i++) {
368368
/* read MC_STATUS */

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2948,7 +2948,7 @@ static bool dce_v10_0_is_idle(void *handle)
29482948
return true;
29492949
}
29502950

2951-
static int dce_v10_0_wait_for_idle(void *handle)
2951+
static int dce_v10_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
29522952
{
29532953
return 0;
29542954
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3086,7 +3086,7 @@ static bool dce_v11_0_is_idle(void *handle)
30863086
return true;
30873087
}
30883088

3089-
static int dce_v11_0_wait_for_idle(void *handle)
3089+
static int dce_v11_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
30903090
{
30913091
return 0;
30923092
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2843,7 +2843,7 @@ static bool dce_v6_0_is_idle(void *handle)
28432843
return true;
28442844
}
28452845

2846-
static int dce_v6_0_wait_for_idle(void *handle)
2846+
static int dce_v6_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
28472847
{
28482848
return 0;
28492849
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2866,7 +2866,7 @@ static bool dce_v8_0_is_idle(void *handle)
28662866
return true;
28672867
}
28682868

2869-
static int dce_v8_0_wait_for_idle(void *handle)
2869+
static int dce_v8_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
28702870
{
28712871
return 0;
28722872
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7477,11 +7477,11 @@ static bool gfx_v10_0_is_idle(void *handle)
74777477
return true;
74787478
}
74797479

7480-
static int gfx_v10_0_wait_for_idle(void *handle)
7480+
static int gfx_v10_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
74817481
{
74827482
unsigned int i;
74837483
u32 tmp;
7484-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
7484+
struct amdgpu_device *adev = ip_block->adev;
74857485

74867486
for (i = 0; i < adev->usec_timeout; i++) {
74877487
/* read MC_STATUS */

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4726,11 +4726,11 @@ static bool gfx_v11_0_is_idle(void *handle)
47264726
return true;
47274727
}
47284728

4729-
static int gfx_v11_0_wait_for_idle(void *handle)
4729+
static int gfx_v11_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
47304730
{
47314731
unsigned i;
47324732
u32 tmp;
4733-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
4733+
struct amdgpu_device *adev = ip_block->adev;
47344734

47354735
for (i = 0; i < adev->usec_timeout; i++) {
47364736
/* read MC_STATUS */

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3664,11 +3664,11 @@ static bool gfx_v12_0_is_idle(void *handle)
36643664
return true;
36653665
}
36663666

3667-
static int gfx_v12_0_wait_for_idle(void *handle)
3667+
static int gfx_v12_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
36683668
{
36693669
unsigned i;
36703670
u32 tmp;
3671-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
3671+
struct amdgpu_device *adev = ip_block->adev;
36723672

36733673
for (i = 0; i < adev->usec_timeout; i++) {
36743674
/* read MC_STATUS */

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3177,13 +3177,13 @@ static bool gfx_v6_0_is_idle(void *handle)
31773177
return true;
31783178
}
31793179

3180-
static int gfx_v6_0_wait_for_idle(void *handle)
3180+
static int gfx_v6_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
31813181
{
31823182
unsigned i;
3183-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
3183+
struct amdgpu_device *adev = ip_block->adev;
31843184

31853185
for (i = 0; i < adev->usec_timeout; i++) {
3186-
if (gfx_v6_0_is_idle(handle))
3186+
if (gfx_v6_0_is_idle(adev))
31873187
return 0;
31883188
udelay(1);
31893189
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4523,11 +4523,11 @@ static bool gfx_v7_0_is_idle(void *handle)
45234523
return true;
45244524
}
45254525

4526-
static int gfx_v7_0_wait_for_idle(void *handle)
4526+
static int gfx_v7_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
45274527
{
45284528
unsigned i;
45294529
u32 tmp;
4530-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
4530+
struct amdgpu_device *adev = ip_block->adev;
45314531

45324532
for (i = 0; i < adev->usec_timeout; i++) {
45334533
/* read MC_STATUS */

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4865,13 +4865,13 @@ static int gfx_v8_0_wait_for_rlc_idle(void *handle)
48654865
return -ETIMEDOUT;
48664866
}
48674867

4868-
static int gfx_v8_0_wait_for_idle(void *handle)
4868+
static int gfx_v8_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
48694869
{
48704870
unsigned int i;
4871-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
4871+
struct amdgpu_device *adev = ip_block->adev;
48724872

48734873
for (i = 0; i < adev->usec_timeout; i++) {
4874-
if (gfx_v8_0_is_idle(handle))
4874+
if (gfx_v8_0_is_idle(adev))
48754875
return 0;
48764876

48774877
udelay(1);
@@ -4882,6 +4882,7 @@ static int gfx_v8_0_wait_for_idle(void *handle)
48824882
static int gfx_v8_0_hw_fini(void *handle)
48834883
{
48844884
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
4885+
struct amdgpu_ip_block *ip_block;
48854886

48864887
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
48874888
amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
@@ -4897,8 +4898,13 @@ static int gfx_v8_0_hw_fini(void *handle)
48974898
pr_debug("For SRIOV client, shouldn't do anything.\n");
48984899
return 0;
48994900
}
4901+
4902+
ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GFX);
4903+
if (!ip_block)
4904+
return -EINVAL;
4905+
49004906
amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
4901-
if (!gfx_v8_0_wait_for_idle(adev))
4907+
if (!gfx_v8_0_wait_for_idle(ip_block))
49024908
gfx_v8_0_cp_enable(adev, false);
49034909
else
49044910
pr_err("cp is busy, skip halt cp\n");

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4095,13 +4095,13 @@ static bool gfx_v9_0_is_idle(void *handle)
40954095
return true;
40964096
}
40974097

4098-
static int gfx_v9_0_wait_for_idle(void *handle)
4098+
static int gfx_v9_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
40994099
{
41004100
unsigned i;
4101-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
4101+
struct amdgpu_device *adev = ip_block->adev;
41024102

41034103
for (i = 0; i < adev->usec_timeout; i++) {
4104-
if (gfx_v9_0_is_idle(handle))
4104+
if (gfx_v9_0_is_idle(adev))
41054105
return 0;
41064106
udelay(1);
41074107
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2410,13 +2410,13 @@ static bool gfx_v9_4_3_is_idle(void *handle)
24102410
return true;
24112411
}
24122412

2413-
static int gfx_v9_4_3_wait_for_idle(void *handle)
2413+
static int gfx_v9_4_3_wait_for_idle(struct amdgpu_ip_block *ip_block)
24142414
{
24152415
unsigned i;
2416-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2416+
struct amdgpu_device *adev = ip_block->adev;
24172417

24182418
for (i = 0; i < adev->usec_timeout; i++) {
2419-
if (gfx_v9_4_3_is_idle(handle))
2419+
if (gfx_v9_4_3_is_idle(adev))
24202420
return 0;
24212421
udelay(1);
24222422
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ static bool gmc_v10_0_is_idle(void *handle)
10821082
return true;
10831083
}
10841084

1085-
static int gmc_v10_0_wait_for_idle(void *handle)
1085+
static int gmc_v10_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
10861086
{
10871087
/* There is no need to wait for MC idle in GMC v10.*/
10881088
return 0;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ static bool gmc_v11_0_is_idle(void *handle)
990990
return true;
991991
}
992992

993-
static int gmc_v11_0_wait_for_idle(void *handle)
993+
static int gmc_v11_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
994994
{
995995
/* There is no need to wait for MC idle in GMC v11.*/
996996
return 0;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ static bool gmc_v12_0_is_idle(void *handle)
974974
return true;
975975
}
976976

977-
static int gmc_v12_0_wait_for_idle(void *handle)
977+
static int gmc_v12_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
978978
{
979979
/* There is no need to wait for MC idle in GMC v11.*/
980980
return 0;

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

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
static void gmc_v6_0_set_gmc_funcs(struct amdgpu_device *adev);
4545
static void gmc_v6_0_set_irq_funcs(struct amdgpu_device *adev);
46-
static int gmc_v6_0_wait_for_idle(void *handle);
46+
static int gmc_v6_0_wait_for_idle(struct amdgpu_ip_block *ip_block);
4747

4848
MODULE_FIRMWARE("amdgpu/tahiti_mc.bin");
4949
MODULE_FIRMWARE("amdgpu/pitcairn_mc.bin");
@@ -64,8 +64,13 @@ MODULE_FIRMWARE("amdgpu/si58_mc.bin");
6464
static void gmc_v6_0_mc_stop(struct amdgpu_device *adev)
6565
{
6666
u32 blackout;
67+
struct amdgpu_ip_block *ip_block;
6768

68-
gmc_v6_0_wait_for_idle((void *)adev);
69+
ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GMC);
70+
if (!ip_block)
71+
return;
72+
73+
gmc_v6_0_wait_for_idle(ip_block);
6974

7075
blackout = RREG32(mmMC_SHARED_BLACKOUT_CNTL);
7176
if (REG_GET_FIELD(blackout, MC_SHARED_BLACKOUT_CNTL, BLACKOUT_MODE) != 1) {
@@ -213,6 +218,8 @@ static void gmc_v6_0_vram_gtt_location(struct amdgpu_device *adev,
213218
static void gmc_v6_0_mc_program(struct amdgpu_device *adev)
214219
{
215220
int i, j;
221+
struct amdgpu_ip_block *ip_block;
222+
216223

217224
/* Initialize HDP */
218225
for (i = 0, j = 0; i < 32; i++, j += 0x6) {
@@ -224,7 +231,11 @@ static void gmc_v6_0_mc_program(struct amdgpu_device *adev)
224231
}
225232
WREG32(mmHDP_REG_COHERENCY_FLUSH_CNTL, 0);
226233

227-
if (gmc_v6_0_wait_for_idle((void *)adev))
234+
ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GMC);
235+
if (!ip_block)
236+
return;
237+
238+
if (gmc_v6_0_wait_for_idle(ip_block))
228239
dev_warn(adev->dev, "Wait for MC idle timedout !\n");
229240

230241
if (adev->mode_info.num_crtc) {
@@ -251,7 +262,7 @@ static void gmc_v6_0_mc_program(struct amdgpu_device *adev)
251262
WREG32(mmMC_VM_AGP_TOP, adev->gmc.agp_end >> 22);
252263
WREG32(mmMC_VM_AGP_BOT, adev->gmc.agp_start >> 22);
253264

254-
if (gmc_v6_0_wait_for_idle((void *)adev))
265+
if (gmc_v6_0_wait_for_idle(ip_block))
255266
dev_warn(adev->dev, "Wait for MC idle timedout !\n");
256267
}
257268

@@ -950,6 +961,7 @@ static int gmc_v6_0_resume(void *handle)
950961
static bool gmc_v6_0_is_idle(void *handle)
951962
{
952963
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
964+
953965
u32 tmp = RREG32(mmSRBM_STATUS);
954966

955967
if (tmp & (SRBM_STATUS__MCB_BUSY_MASK | SRBM_STATUS__MCB_NON_DISPLAY_BUSY_MASK |
@@ -959,13 +971,13 @@ static bool gmc_v6_0_is_idle(void *handle)
959971
return true;
960972
}
961973

962-
static int gmc_v6_0_wait_for_idle(void *handle)
974+
static int gmc_v6_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
963975
{
964976
unsigned int i;
965-
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
977+
struct amdgpu_device *adev = ip_block->adev;
966978

967979
for (i = 0; i < adev->usec_timeout; i++) {
968-
if (gmc_v6_0_is_idle(handle))
980+
if (gmc_v6_0_is_idle(adev))
969981
return 0;
970982
udelay(1);
971983
}
@@ -976,6 +988,7 @@ static int gmc_v6_0_wait_for_idle(void *handle)
976988
static int gmc_v6_0_soft_reset(struct amdgpu_ip_block *ip_block)
977989
{
978990
struct amdgpu_device *adev = ip_block->adev;
991+
979992
u32 srbm_soft_reset = 0;
980993
u32 tmp = RREG32(mmSRBM_STATUS);
981994

@@ -992,7 +1005,8 @@ static int gmc_v6_0_soft_reset(struct amdgpu_ip_block *ip_block)
9921005

9931006
if (srbm_soft_reset) {
9941007
gmc_v6_0_mc_stop(adev);
995-
if (gmc_v6_0_wait_for_idle(adev))
1008+
1009+
if (gmc_v6_0_wait_for_idle(ip_block))
9961010
dev_warn(adev->dev, "Wait for GMC idle timed out !\n");
9971011

9981012
tmp = RREG32(mmSRBM_SOFT_RESET);

0 commit comments

Comments
 (0)