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 >
