Skip to content

Commit 2d6a2a2

Browse files
andrealmeidalexdeucher
authored andcommitted
drm/amdgpu: Encapsulate all device reset info
To better organize struct amdgpu_device, keep all reset information related fields together in a separated struct. Signed-off-by: André Almeida <[email protected]> Signed-off-by: Shashank Sharma <[email protected]> Reviewed-by: Shashank Sharma <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 723fac6 commit 2d6a2a2

File tree

3 files changed

+36
-26
lines changed

3 files changed

+36
-26
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,26 @@ struct amdgpu_mqd {
773773
struct amdgpu_reset_domain;
774774
struct amdgpu_fru_info;
775775

776+
#ifdef CONFIG_DEV_COREDUMP
777+
struct amdgpu_coredump_info {
778+
struct amdgpu_device *adev;
779+
struct amdgpu_task_info reset_task_info;
780+
struct timespec64 reset_time;
781+
bool reset_vram_lost;
782+
};
783+
#endif
784+
785+
struct amdgpu_reset_info {
786+
/* reset dump register */
787+
u32 *reset_dump_reg_list;
788+
u32 *reset_dump_reg_value;
789+
int num_regs;
790+
791+
#ifdef CONFIG_DEV_COREDUMP
792+
struct amdgpu_coredump_info *coredump_info;
793+
#endif
794+
};
795+
776796
/*
777797
* Non-zero (true) if the GPU has VRAM. Zero (false) otherwise.
778798
*/
@@ -1081,10 +1101,7 @@ struct amdgpu_device {
10811101

10821102
struct mutex benchmark_mutex;
10831103

1084-
/* reset dump register */
1085-
uint32_t *reset_dump_reg_list;
1086-
uint32_t *reset_dump_reg_value;
1087-
int num_regs;
1104+
struct amdgpu_reset_info reset_info;
10881105

10891106
bool scpm_enabled;
10901107
uint32_t scpm_status;
@@ -1111,15 +1128,6 @@ static inline uint32_t amdgpu_ip_version(const struct amdgpu_device *adev,
11111128
return adev->ip_versions[ip][inst] & ~0xFFU;
11121129
}
11131130

1114-
#ifdef CONFIG_DEV_COREDUMP
1115-
struct amdgpu_coredump_info {
1116-
struct amdgpu_device *adev;
1117-
struct amdgpu_task_info reset_task_info;
1118-
struct timespec64 reset_time;
1119-
bool reset_vram_lost;
1120-
};
1121-
#endif
1122-
11231131
static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
11241132
{
11251133
return container_of(ddev, struct amdgpu_device, ddev);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,8 +2016,8 @@ static ssize_t amdgpu_reset_dump_register_list_read(struct file *f,
20162016
if (ret)
20172017
return ret;
20182018

2019-
for (i = 0; i < adev->num_regs; i++) {
2020-
sprintf(reg_offset, "0x%x\n", adev->reset_dump_reg_list[i]);
2019+
for (i = 0; i < adev->reset_info.num_regs; i++) {
2020+
sprintf(reg_offset, "0x%x\n", adev->reset_info.reset_dump_reg_list[i]);
20212021
up_read(&adev->reset_domain->sem);
20222022
if (copy_to_user(buf + len, reg_offset, strlen(reg_offset)))
20232023
return -EFAULT;
@@ -2074,9 +2074,9 @@ static ssize_t amdgpu_reset_dump_register_list_write(struct file *f,
20742074
if (ret)
20752075
goto error_free;
20762076

2077-
swap(adev->reset_dump_reg_list, tmp);
2078-
swap(adev->reset_dump_reg_value, new);
2079-
adev->num_regs = i;
2077+
swap(adev->reset_info.reset_dump_reg_list, tmp);
2078+
swap(adev->reset_info.reset_dump_reg_value, new);
2079+
adev->reset_info.num_regs = i;
20802080
up_write(&adev->reset_domain->sem);
20812081
ret = size;
20822082

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5048,10 +5048,12 @@ static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
50485048

50495049
lockdep_assert_held(&adev->reset_domain->sem);
50505050

5051-
for (i = 0; i < adev->num_regs; i++) {
5052-
adev->reset_dump_reg_value[i] = RREG32(adev->reset_dump_reg_list[i]);
5053-
trace_amdgpu_reset_reg_dumps(adev->reset_dump_reg_list[i],
5054-
adev->reset_dump_reg_value[i]);
5051+
for (i = 0; i < adev->reset_info.num_regs; i++) {
5052+
adev->reset_info.reset_dump_reg_value[i] =
5053+
RREG32(adev->reset_info.reset_dump_reg_list[i]);
5054+
5055+
trace_amdgpu_reset_reg_dumps(adev->reset_info.reset_dump_reg_list[i],
5056+
adev->reset_info.reset_dump_reg_value[i]);
50555057
}
50565058

50575059
return 0;
@@ -5089,13 +5091,13 @@ static ssize_t amdgpu_devcoredump_read(char *buffer, loff_t offset,
50895091

50905092
if (coredump->reset_vram_lost)
50915093
drm_printf(&p, "VRAM is lost due to GPU reset!\n");
5092-
if (coredump->adev->num_regs) {
5094+
if (coredump->adev->reset_info.num_regs) {
50935095
drm_printf(&p, "AMDGPU register dumps:\nOffset: Value:\n");
50945096

5095-
for (i = 0; i < coredump->adev->num_regs; i++)
5097+
for (i = 0; i < coredump->adev->reset_info.num_regs; i++)
50965098
drm_printf(&p, "0x%08x: 0x%08x\n",
5097-
coredump->adev->reset_dump_reg_list[i],
5098-
coredump->adev->reset_dump_reg_value[i]);
5099+
coredump->adev->reset_info.reset_dump_reg_list[i],
5100+
coredump->adev->reset_info.reset_dump_reg_value[i]);
50995101
}
51005102

51015103
return count - iter.remain;

0 commit comments

Comments
 (0)