Re: [PATCH] drm/amdgpu: fix sysfs ip base addr for 64bit in standalone mode
Mario Limonciello <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
On 8/13/26 10:28, Alex Deucher wrote: > On Thu, Aug 13, 2026 at 11:20 AM Mukul Joshi <[email protected]> wrote: >> >> In standalone mode the ip_discovery sysfs tree is built from a verbatim >> copy of the discovery binary taken before reg_base_init() collapses the >> 64bit base addresses in place. Decoding as 32bit there yields interleaved >> zeros. Decode base_address_64[] in that case; keep reading the already >> collapsed adev->discovery.bin as-is otherwise. >> >> Fixes: 3ee1065e9830 ("drm/amdgpu: Export ip_discovery sysfs on probe failure") >> Signed-off-by: Mukul Joshi <[email protected]> > > Acked-by: Alex Deucher <[email protected]> Cc: [email protected] Reviewed-by: Mario Limonciello (AMD) <[email protected]> > >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 15 +++++++++++++-- >> 1 file changed, 13 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c >> index b5bc0d71653d..8745b0a66f1d 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c >> @@ -1308,8 +1308,19 @@ static int amdgpu_discovery_sysfs_ips(struct amdgpu_device *adev, >> ip_hw_instance->num_instance); >> ip_hw_instance->num_base_addresses = ip->num_base_address; >> >> - for (kk = 0; kk < ip_hw_instance->num_base_addresses; kk++) >> - ip_hw_instance->base_addr[kk] = ip->base_address[kk]; >> + for (kk = 0; kk < ip_hw_instance->num_base_addresses; kk++) { >> + /* >> + * Standalone mode uses a raw copy of the discovery >> + * binary; decode 64-bit addresses here. The shared >> + * bin is already collapsed to 32-bit in place. >> + */ >> + if (reg_base_64 && ip_top->standalone_mode) >> + ip_hw_instance->base_addr[kk] = >> + lower_32_bits(le64_to_cpu(ip->base_address_64[kk])) & 0x3FFFFFFF; >> + else >> + ip_hw_instance->base_addr[kk] = >> + le32_to_cpu(ip->base_address[kk]); >> + } >> >> kobject_init(&ip_hw_instance->kobj, &ip_hw_instance_ktype); >> ip_hw_instance->kobj.kset = &ip_hw_id->hw_id_kset; >> -- >> 2.54.0 >>