Skip to content

Commit 95a2687

Browse files
committed
drm/amdgpu/smu: rework i2c adpater registration
The i2c init/fini functions just register the i2c adapter. There is no need to call them during hw init/fini. They only need to be called once per driver init/fini. The previous behavior broke runtime pm because we unregistered the i2c adapter during suspend. Tested-by: Tom St Denis <[email protected]> Reviewed-by: Kevin Wang <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent d6a4e5e commit 95a2687

File tree

4 files changed

+6
-48
lines changed

4 files changed

+6
-48
lines changed

drivers/gpu/drm/amd/powerplay/amdgpu_smu.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -579,13 +579,19 @@ static int smu_smc_table_sw_init(struct smu_context *smu)
579579
if (ret)
580580
return ret;
581581

582+
ret = smu_i2c_init(smu, &smu->adev->pm.smu_i2c);
583+
if (ret)
584+
return ret;
585+
582586
return 0;
583587
}
584588

585589
static int smu_smc_table_sw_fini(struct smu_context *smu)
586590
{
587591
int ret;
588592

593+
smu_i2c_fini(smu, &smu->adev->pm.smu_i2c);
594+
589595
ret = smu_free_memory_pool(smu);
590596
if (ret)
591597
return ret;
@@ -844,10 +850,6 @@ static int smu_smc_hw_setup(struct smu_context *smu)
844850
return ret;
845851
}
846852

847-
ret = smu_i2c_init(smu, &adev->pm.smu_i2c);
848-
if (ret)
849-
return ret;
850-
851853
ret = smu_disable_umc_cdr_12gbps_workaround(smu);
852854
if (ret) {
853855
dev_err(adev->dev, "Workaround failed to disable UMC CDR feature on 12Gbps SKU!\n");
@@ -1046,8 +1048,6 @@ static int smu_smc_hw_cleanup(struct smu_context *smu)
10461048
struct amdgpu_device *adev = smu->adev;
10471049
int ret = 0;
10481050

1049-
smu_i2c_fini(smu, &adev->pm.smu_i2c);
1050-
10511051
cancel_work_sync(&smu->throttling_logging_work);
10521052

10531053
ret = smu_disable_thermal_alert(smu);

drivers/gpu/drm/amd/powerplay/arcturus_ppt.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,22 +2080,11 @@ static const struct i2c_algorithm arcturus_i2c_algo = {
20802080
.functionality = arcturus_i2c_func,
20812081
};
20822082

2083-
static bool arcturus_i2c_adapter_is_added(struct i2c_adapter *control)
2084-
{
2085-
struct amdgpu_device *adev = to_amdgpu_device(control);
2086-
2087-
return control->dev.parent == &adev->pdev->dev;
2088-
}
2089-
20902083
static int arcturus_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)
20912084
{
20922085
struct amdgpu_device *adev = to_amdgpu_device(control);
20932086
int res;
20942087

2095-
/* smu_i2c_eeprom_init may be called twice in sriov */
2096-
if (arcturus_i2c_adapter_is_added(control))
2097-
return 0;
2098-
20992088
control->owner = THIS_MODULE;
21002089
control->class = I2C_CLASS_SPD;
21012090
control->dev.parent = &adev->pdev->dev;
@@ -2111,9 +2100,6 @@ static int arcturus_i2c_control_init(struct smu_context *smu, struct i2c_adapter
21112100

21122101
static void arcturus_i2c_control_fini(struct smu_context *smu, struct i2c_adapter *control)
21132102
{
2114-
if (!arcturus_i2c_adapter_is_added(control))
2115-
return;
2116-
21172103
i2c_del_adapter(control);
21182104
}
21192105

drivers/gpu/drm/amd/powerplay/navi10_ppt.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2457,22 +2457,11 @@ static const struct i2c_algorithm navi10_i2c_algo = {
24572457
.functionality = navi10_i2c_func,
24582458
};
24592459

2460-
static bool navi10_i2c_adapter_is_added(struct i2c_adapter *control)
2461-
{
2462-
struct amdgpu_device *adev = to_amdgpu_device(control);
2463-
2464-
return control->dev.parent == &adev->pdev->dev;
2465-
}
2466-
24672460
static int navi10_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)
24682461
{
24692462
struct amdgpu_device *adev = to_amdgpu_device(control);
24702463
int res;
24712464

2472-
/* smu_i2c_eeprom_init may be called twice in sriov */
2473-
if (navi10_i2c_adapter_is_added(control))
2474-
return 0;
2475-
24762465
control->owner = THIS_MODULE;
24772466
control->class = I2C_CLASS_SPD;
24782467
control->dev.parent = &adev->pdev->dev;
@@ -2488,9 +2477,6 @@ static int navi10_i2c_control_init(struct smu_context *smu, struct i2c_adapter *
24882477

24892478
static void navi10_i2c_control_fini(struct smu_context *smu, struct i2c_adapter *control)
24902479
{
2491-
if (!navi10_i2c_adapter_is_added(control))
2492-
return;
2493-
24942480
i2c_del_adapter(control);
24952481
}
24962482

drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2630,22 +2630,11 @@ static const struct i2c_algorithm sienna_cichlid_i2c_algo = {
26302630
.functionality = sienna_cichlid_i2c_func,
26312631
};
26322632

2633-
static bool sienna_cichlid_i2c_adapter_is_added(struct i2c_adapter *control)
2634-
{
2635-
struct amdgpu_device *adev = to_amdgpu_device(control);
2636-
2637-
return control->dev.parent == &adev->pdev->dev;
2638-
}
2639-
26402633
static int sienna_cichlid_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)
26412634
{
26422635
struct amdgpu_device *adev = to_amdgpu_device(control);
26432636
int res;
26442637

2645-
/* smu_i2c_eeprom_init may be called twice in sriov */
2646-
if (sienna_cichlid_i2c_adapter_is_added(control))
2647-
return 0;
2648-
26492638
control->owner = THIS_MODULE;
26502639
control->class = I2C_CLASS_SPD;
26512640
control->dev.parent = &adev->pdev->dev;
@@ -2661,9 +2650,6 @@ static int sienna_cichlid_i2c_control_init(struct smu_context *smu, struct i2c_a
26612650

26622651
static void sienna_cichlid_i2c_control_fini(struct smu_context *smu, struct i2c_adapter *control)
26632652
{
2664-
if (!sienna_cichlid_i2c_adapter_is_added(control))
2665-
return;
2666-
26672653
i2c_del_adapter(control);
26682654
}
26692655

0 commit comments

Comments
 (0)