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]>

> ---
>  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
>

Reply via email to