On Mon, Mar 9, 2026 at 5:59 PM Pratap Nirujogi <[email protected]> wrote:
>
> Add NULL pointer checks for dev->type before accessing
> dev->type->name in ISP genpd add/remove functions to
> prevent kernel crashes. Also add MODULE_SOFTDEP to ensure
> ISP driver dependencies are loaded in correct order.
>
> The regression was introduced in kernel v7.0 where MFD ISP
> device enumeration doesn't complete by the time it is added
> to gendp. The timing of ISP device enumeration has changed
> because of the changes in registering the device sources in
> the device hierarchy.
>
> Co-developed-by: Bin Du <[email protected]>
> Fixes: 02c057ddefef ("ACPI: video: Convert the driver to a platform one")

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5021

I'm not too familiar with the underlying issue.  Does this actually
result in the driver loading properly or does it just prevent a
segfault?

Alex

> Signed-off-by: Pratap Nirujogi <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 +
>  drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c | 4 ++--
>  2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 95d26f086d545..920595f0d22ca 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -3212,3 +3212,4 @@ module_exit(amdgpu_exit);
>  MODULE_AUTHOR(DRIVER_AUTHOR);
>  MODULE_DESCRIPTION(DRIVER_DESC);
>  MODULE_LICENSE("GPL and additional rights");
> +MODULE_SOFTDEP("post: amd_isp4_capture i2c-designware-amdisp 
> pinctrl-amdisp");
> \ No newline at end of file
> diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c 
> b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
> index b3590b33cab9e..485ecdec96184 100644
> --- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c
> @@ -129,7 +129,7 @@ static int isp_genpd_add_device(struct device *dev, void 
> *data)
>         if (!pdev)
>                 return -EINVAL;
>
> -       if (!dev->type->name) {
> +       if (!dev->type || !dev->type->name) {
>                 drm_dbg(&adev->ddev, "Invalid device type to add\n");
>                 goto exit;
>         }
> @@ -165,7 +165,7 @@ static int isp_genpd_remove_device(struct device *dev, 
> void *data)
>         if (!pdev)
>                 return -EINVAL;
>
> -       if (!dev->type->name) {
> +       if (!dev->type || !dev->type->name) {
>                 drm_dbg(&adev->ddev, "Invalid device type to remove\n");
>                 goto exit;
>         }
> --
> 2.43.0
>

Reply via email to