mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
drm/amdgpu: include ip discovery data in devcoredump
This is the best way to describe the GPU to a tool loading the devcoredump. Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4e22a5fe6e
commit
e81eff80aa
|
|
@ -261,6 +261,8 @@ amdgpu_devcoredump_read(char *buffer, loff_t offset, size_t count,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
amdgpu_discovery_dump(coredump->adev, &p);
|
||||||
|
|
||||||
/* IP firmware information */
|
/* IP firmware information */
|
||||||
drm_printf(&p, "\nIP Firmwares\n");
|
drm_printf(&p, "\nIP Firmwares\n");
|
||||||
amdgpu_devcoredump_fw_info(coredump->adev, &p);
|
amdgpu_devcoredump_fw_info(coredump->adev, &p);
|
||||||
|
|
|
||||||
|
|
@ -1379,6 +1379,48 @@ static void amdgpu_discovery_sysfs_fini(struct amdgpu_device *adev)
|
||||||
kobject_put(&ip_top->kobj);
|
kobject_put(&ip_top->kobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* devcoredump support */
|
||||||
|
void amdgpu_discovery_dump(struct amdgpu_device *adev, struct drm_printer *p)
|
||||||
|
{
|
||||||
|
struct ip_discovery_top *ip_top = adev->discovery.ip_top;
|
||||||
|
struct ip_die_entry *ip_die_entry;
|
||||||
|
struct list_head *el_die, *el_hw_id, *el_hw_inst;
|
||||||
|
struct ip_hw_id *hw_id;
|
||||||
|
struct kset *die_kset;
|
||||||
|
struct ip_hw_instance *ip_inst;
|
||||||
|
int i = 0, j;
|
||||||
|
|
||||||
|
die_kset = &ip_top->die_kset;
|
||||||
|
|
||||||
|
drm_printf(p, "\nHW IP Discovery\n");
|
||||||
|
spin_lock(&die_kset->list_lock);
|
||||||
|
list_for_each(el_die, &die_kset->list) {
|
||||||
|
drm_printf(p, "die %d\n", i++);
|
||||||
|
ip_die_entry = to_ip_die_entry(list_to_kobj(el_die));
|
||||||
|
|
||||||
|
list_for_each(el_hw_id, &ip_die_entry->ip_kset.list) {
|
||||||
|
hw_id = to_ip_hw_id(list_to_kobj(el_hw_id));
|
||||||
|
drm_printf(p, "hw_id %d %s\n", hw_id->hw_id, hw_id_names[hw_id->hw_id]);
|
||||||
|
|
||||||
|
list_for_each(el_hw_inst, &hw_id->hw_id_kset.list) {
|
||||||
|
ip_inst = to_ip_hw_instance(list_to_kobj(el_hw_inst));
|
||||||
|
drm_printf(p, "\tinstance %d\n", ip_inst->num_instance);
|
||||||
|
drm_printf(p, "\tmajor %d\n", ip_inst->major);
|
||||||
|
drm_printf(p, "\tminor %d\n", ip_inst->minor);
|
||||||
|
drm_printf(p, "\trevision %d\n", ip_inst->revision);
|
||||||
|
drm_printf(p, "\tharvest 0x%01X\n", ip_inst->harvest);
|
||||||
|
drm_printf(p, "\tnum_base_addresses %d\n",
|
||||||
|
ip_inst->num_base_addresses);
|
||||||
|
for (j = 0; j < ip_inst->num_base_addresses; j++)
|
||||||
|
drm_printf(p, "\tbase_addr[%d] 0x%08X\n",
|
||||||
|
j, ip_inst->base_addr[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spin_unlock(&die_kset->list_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
|
static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
#define DISCOVERY_TMR_OFFSET (64 << 10)
|
#define DISCOVERY_TMR_OFFSET (64 << 10)
|
||||||
|
|
||||||
struct ip_discovery_top;
|
struct ip_discovery_top;
|
||||||
|
struct drm_printer;
|
||||||
|
|
||||||
struct amdgpu_discovery_info {
|
struct amdgpu_discovery_info {
|
||||||
struct debugfs_blob_wrapper debugfs_blob;
|
struct debugfs_blob_wrapper debugfs_blob;
|
||||||
|
|
@ -47,4 +48,6 @@ int amdgpu_discovery_get_nps_info(struct amdgpu_device *adev,
|
||||||
struct amdgpu_gmc_memrange **ranges,
|
struct amdgpu_gmc_memrange **ranges,
|
||||||
int *range_cnt, bool refresh);
|
int *range_cnt, bool refresh);
|
||||||
|
|
||||||
|
void amdgpu_discovery_dump(struct amdgpu_device *adev, struct drm_printer *p);
|
||||||
|
|
||||||
#endif /* __AMDGPU_DISCOVERY__ */
|
#endif /* __AMDGPU_DISCOVERY__ */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user