RE: [PATCH 3/3] drm/amd: Evaluate early init for all IP blocks even if one fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

Series is
Reviewed-by: Aaron Liu <aaron.liu@xxxxxxx>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Mario
> Limonciello
> Sent: Monday, January 16, 2023 3:22 AM
> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Limonciello, Mario <Mario.Limonciello@xxxxxxx>
> Subject: [PATCH 3/3] drm/amd: Evaluate early init for all IP blocks even if one
> fails
>
> If early init fails for a single IP block, then no further IP blocks are evaluated.
> This means that if a user was missing more than one firmware binary they would
> have to keep adding binaries and re-probing until they discovered the ones
> missing.
>
> To make this easier, run early init for each IP block and report a single failure if
> not all passed.
>
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 8846f026eeece..2f904bb545fe4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -2074,6 +2074,7 @@ static int amdgpu_device_ip_early_init(struct
> amdgpu_device *adev)
>       struct drm_device *dev = adev_to_drm(adev);
>       struct pci_dev *parent;
>       int i, r;
> +     bool total;
>
>       amdgpu_device_enable_virtual_display(adev);
>
> @@ -2157,6 +2158,7 @@ static int amdgpu_device_ip_early_init(struct
> amdgpu_device *adev)
>       if (amdgpu_sriov_vf(adev) && adev->asic_type ==
> CHIP_SIENNA_CICHLID)
>               adev->pm.pp_feature &= ~PP_OVERDRIVE_MASK;
>
> +     total = true;
>       for (i = 0; i < adev->num_ip_blocks; i++) {
>               if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
>                       DRM_ERROR("disabled ip block: %d <%s>\n", @@ -
> 2170,7 +2172,7 @@ static int amdgpu_device_ip_early_init(struct
> amdgpu_device *adev)
>                               } else if (r) {
>                                       DRM_ERROR("early_init of IP block
> <%s> failed %d\n",
>                                                 adev->ip_blocks[i].version-
> >funcs->name, r);
> -                                     return r;
> +                                     total = false;
>                               } else {
>                                       adev->ip_blocks[i].status.valid = true;
>                               }
> @@ -2201,6 +2203,8 @@ static int amdgpu_device_ip_early_init(struct
> amdgpu_device *adev)
>
>               }
>       }
> +     if (!total)
> +             return -ENODEV;
>
>       adev->cg_flags &= amdgpu_cg_mask;
>       adev->pg_flags &= amdgpu_pg_mask;
> --
> 2.25.1





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux