public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
@ 2026-03-05 23:11 Nirujogi, Pratap
  2026-03-06  0:35 ` Mario Limonciello (AMD) (kernel.org)
  2026-03-06 12:10 ` [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Rafael J. Wysocki
  0 siblings, 2 replies; 13+ messages in thread
From: Nirujogi, Pratap @ 2026-03-05 23:11 UTC (permalink / raw)
  To: rafael
  Cc: W_Armin, lenb, Mario Limonciello, Bin Du, benjamin.chan, king.li,
	linux-acpi, linux-kernel, regressions

Hi Rafael,

In kernel version 7.0-rc2, the AMDISP device reports the following 
errors when created via mfd_add_hotplug_devices.

[    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom: 
no  post: no)
[    5.236744] input: Video Bus as 
/devices/pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
[    5.236779] acpi device:14: Error installing notify handler
[    5.236782] acpi device:15: Error installing notify handler
[    5.236783] acpi device:16: Error installing notify handler
[    5.236784] acpi device:17: Error installing notify handler
[    5.236785] acpi device:18: Error installing notify handler
[    5.236786] acpi device:19: Error installing notify handler
[    5.236786] acpi device:1a: Error installing notify handler
[    5.236787] acpi device:1b: Error installing notify handler
[    5.236788] acpi device:1c: Error installing notify handler

These failures indicate AMDISP device is incorrectly detected as ACPI 
Video device while it is not.

The seems like a regression caused by the change that converts the ACPI 
video device to a platform device (commit: 02c057ddefef5).

Issue is not observed in 6.19-rc6, and also when this change is reverted 
in 7.0-rc2.

I really appreciate your inputs on addressing this issue and helping us 
make progress on 7.0 rc2.

Steps followed to reproduce the issue:

1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to 
avoid kernel panic found in v7.0-rc2)
3. Build kernel with:
     - CONFIG_AMD_ISP_PLATFORM=y
     - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
5. Boot system to see the failures

[1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
[2] 
https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c#L132

Thanks,
Pratap





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-05 23:11 [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Nirujogi, Pratap
@ 2026-03-06  0:35 ` Mario Limonciello (AMD) (kernel.org)
  2026-03-06 12:01   ` Rafael J. Wysocki
  2026-03-06 12:10 ` [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Rafael J. Wysocki
  1 sibling, 1 reply; 13+ messages in thread
From: Mario Limonciello (AMD) (kernel.org) @ 2026-03-06  0:35 UTC (permalink / raw)
  To: Nirujogi, Pratap, rafael
  Cc: W_Armin, lenb, Bin Du, benjamin.chan, king.li, linux-acpi,
	linux-kernel, regressions



On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> Hi Rafael,
> 
> In kernel version 7.0-rc2, the AMDISP device reports the following 
> errors when created via mfd_add_hotplug_devices.
> 
> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom: 
> no  post: no)
> [    5.236744] input: Video Bus as /devices/ 
> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
> [    5.236779] acpi device:14: Error installing notify handler
> [    5.236782] acpi device:15: Error installing notify handler
> [    5.236783] acpi device:16: Error installing notify handler
> [    5.236784] acpi device:17: Error installing notify handler
> [    5.236785] acpi device:18: Error installing notify handler
> [    5.236786] acpi device:19: Error installing notify handler
> [    5.236786] acpi device:1a: Error installing notify handler
> [    5.236787] acpi device:1b: Error installing notify handler
> [    5.236788] acpi device:1c: Error installing notify handler
> 
> These failures indicate AMDISP device is incorrectly detected as ACPI 
> Video device while it is not.
> 
> The seems like a regression caused by the change that converts the ACPI 
> video device to a platform device (commit: 02c057ddefef5).
> 
> Issue is not observed in 6.19-rc6, and also when this change is reverted 
> in 7.0-rc2.
> 
> I really appreciate your inputs on addressing this issue and helping us 
> make progress on 7.0 rc2.
> 
> Steps followed to reproduce the issue:
> 
> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to 
> avoid kernel panic found in v7.0-rc2)
> 3. Build kernel with:
>      - CONFIG_AMD_ISP_PLATFORM=y
>      - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> 5. Boot system to see the failures
> 
> [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/ 
> amdgpu/isp_v4_1_1.c#L132
> 
> Thanks,
> Pratap
> 
> 
> 

It's a bit weird to see it even probe in this path in the first place. 
acpi_video_bus_probe() getting called with the mfd device doesn't seem 
right to me.

I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO 
ends up matching).

Would a sensible solution be to reject mfd device types in 
acpi_video_bus_probe()?

> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-06  0:35 ` Mario Limonciello (AMD) (kernel.org)
@ 2026-03-06 12:01   ` Rafael J. Wysocki
  2026-03-06 12:45     ` Mario Limonciello
  0 siblings, 1 reply; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-06 12:01 UTC (permalink / raw)
  To: Mario Limonciello (AMD) (kernel.org)
  Cc: Nirujogi, Pratap, rafael, W_Armin, lenb, Bin Du, benjamin.chan,
	king.li, linux-acpi, linux-kernel, regressions

On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
<superm1@kernel.org> wrote:
>
>
>
> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> > Hi Rafael,
> >
> > In kernel version 7.0-rc2, the AMDISP device reports the following
> > errors when created via mfd_add_hotplug_devices.
> >
> > [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> > no  post: no)
> > [    5.236744] input: Video Bus as /devices/
> > pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
> > [    5.236779] acpi device:14: Error installing notify handler
> > [    5.236782] acpi device:15: Error installing notify handler
> > [    5.236783] acpi device:16: Error installing notify handler
> > [    5.236784] acpi device:17: Error installing notify handler
> > [    5.236785] acpi device:18: Error installing notify handler
> > [    5.236786] acpi device:19: Error installing notify handler
> > [    5.236786] acpi device:1a: Error installing notify handler
> > [    5.236787] acpi device:1b: Error installing notify handler
> > [    5.236788] acpi device:1c: Error installing notify handler
> >
> > These failures indicate AMDISP device is incorrectly detected as ACPI
> > Video device while it is not.
> >
> > The seems like a regression caused by the change that converts the ACPI
> > video device to a platform device (commit: 02c057ddefef5).
> >
> > Issue is not observed in 6.19-rc6, and also when this change is reverted
> > in 7.0-rc2.
> >
> > I really appreciate your inputs on addressing this issue and helping us
> > make progress on 7.0 rc2.
> >
> > Steps followed to reproduce the issue:
> >
> > 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> > 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> > avoid kernel panic found in v7.0-rc2)
> > 3. Build kernel with:
> >      - CONFIG_AMD_ISP_PLATFORM=y
> >      - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> > 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> > 5. Boot system to see the failures
> >
> > [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
> > [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> > amdgpu/isp_v4_1_1.c#L132
> >
> > Thanks,
> > Pratap
> >
> >
> >
>
> It's a bit weird to see it even probe in this path in the first place.
> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> right to me.
>
> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> ends up matching).
>
> Would a sensible solution be to reject mfd device types in
> acpi_video_bus_probe()?

Every platform device with LNXVIDEO in the device ID list will be
matched and so probed.

I'm wondering how those devices get that ID though.

Also, is this really a mainline regression?  AMDISP patches are not in
the mainline, no?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-05 23:11 [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Nirujogi, Pratap
  2026-03-06  0:35 ` Mario Limonciello (AMD) (kernel.org)
@ 2026-03-06 12:10 ` Rafael J. Wysocki
  1 sibling, 0 replies; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-06 12:10 UTC (permalink / raw)
  To: Nirujogi, Pratap
  Cc: rafael, W_Armin, lenb, Mario Limonciello, Bin Du, benjamin.chan,
	king.li, linux-acpi, linux-kernel, regressions

Hi,

On Fri, Mar 6, 2026 at 12:11 AM Nirujogi, Pratap <pnirujog@amd.com> wrote:
>
> Hi Rafael,
>
> In kernel version 7.0-rc2, the AMDISP device reports the following
> errors when created via mfd_add_hotplug_devices.
>
> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> no  post: no)
> [    5.236744] input: Video Bus as
> /devices/pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
> [    5.236779] acpi device:14: Error installing notify handler
> [    5.236782] acpi device:15: Error installing notify handler
> [    5.236783] acpi device:16: Error installing notify handler
> [    5.236784] acpi device:17: Error installing notify handler
> [    5.236785] acpi device:18: Error installing notify handler
> [    5.236786] acpi device:19: Error installing notify handler
> [    5.236786] acpi device:1a: Error installing notify handler
> [    5.236787] acpi device:1b: Error installing notify handler
> [    5.236788] acpi device:1c: Error installing notify handler
>
> These failures indicate AMDISP device is incorrectly detected as ACPI
> Video device while it is not.

I think that this is because those devices share the ACPI companion
with their parent, which is the ACPI video bus device, and they are
also platform devices.

If they were, say, auxiliary devices, there wouldn't be a problem.

A check can be added to acpi_video_bus_probe() to avoid this, kind of
along the lines of Mario's patch, but please note that sharing an ACPI
companion between multiple devices of the same type on different
levels of device hierarchy is a slippery slope.

> The seems like a regression caused by the change that converts the ACPI
> video device to a platform device (commit: 02c057ddefef5).
>
> Issue is not observed in 6.19-rc6, and also when this change is reverted
> in 7.0-rc2.
>
> I really appreciate your inputs on addressing this issue and helping us
> make progress on 7.0 rc2.
>
> Steps followed to reproduce the issue:
>
> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> avoid kernel panic found in v7.0-rc2)
> 3. Build kernel with:
>      - CONFIG_AMD_ISP_PLATFORM=y
>      - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> 5. Boot system to see the failures
>
> [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
> [2]
> https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c#L132
>
> Thanks,
> Pratap
>
>
>
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-06 12:01   ` Rafael J. Wysocki
@ 2026-03-06 12:45     ` Mario Limonciello
  2026-03-06 13:28       ` Rafael J. Wysocki
  2026-03-09  3:52       ` Nirujogi, Pratap
  0 siblings, 2 replies; 13+ messages in thread
From: Mario Limonciello @ 2026-03-06 12:45 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Nirujogi, Pratap, W_Armin, lenb, Bin Du, benjamin.chan, king.li,
	linux-acpi, linux-kernel, regressions



On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> <superm1@kernel.org> wrote:
>>
>>
>>
>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
>>> Hi Rafael,
>>>
>>> In kernel version 7.0-rc2, the AMDISP device reports the following
>>> errors when created via mfd_add_hotplug_devices.
>>>
>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
>>> no  post: no)
>>> [    5.236744] input: Video Bus as /devices/
>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
>>> [    5.236779] acpi device:14: Error installing notify handler
>>> [    5.236782] acpi device:15: Error installing notify handler
>>> [    5.236783] acpi device:16: Error installing notify handler
>>> [    5.236784] acpi device:17: Error installing notify handler
>>> [    5.236785] acpi device:18: Error installing notify handler
>>> [    5.236786] acpi device:19: Error installing notify handler
>>> [    5.236786] acpi device:1a: Error installing notify handler
>>> [    5.236787] acpi device:1b: Error installing notify handler
>>> [    5.236788] acpi device:1c: Error installing notify handler
>>>
>>> These failures indicate AMDISP device is incorrectly detected as ACPI
>>> Video device while it is not.
>>>
>>> The seems like a regression caused by the change that converts the ACPI
>>> video device to a platform device (commit: 02c057ddefef5).
>>>
>>> Issue is not observed in 6.19-rc6, and also when this change is reverted
>>> in 7.0-rc2.
>>>
>>> I really appreciate your inputs on addressing this issue and helping us
>>> make progress on 7.0 rc2.
>>>
>>> Steps followed to reproduce the issue:
>>>
>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
>>> avoid kernel panic found in v7.0-rc2)
>>> 3. Build kernel with:
>>>       - CONFIG_AMD_ISP_PLATFORM=y
>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
>>> 5. Boot system to see the failures
>>>
>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
>>> amdgpu/isp_v4_1_1.c#L132
>>>
>>> Thanks,
>>> Pratap
>>>
>>>
>>>
>>
>> It's a bit weird to see it even probe in this path in the first place.
>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
>> right to me.
>>
>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
>> ends up matching).
>>
>> Would a sensible solution be to reject mfd device types in
>> acpi_video_bus_probe()?
> 
> Every platform device with LNXVIDEO in the device ID list will be
> matched and so probed.
> 
> I'm wondering how those devices get that ID though.

Yeah me too.  I was surprised an MFD device got it.

Pratap - can you figure this out before we go too far in this path?

If they really shouldn't have LNXVIDEO fixing that may be a better solution.

> 
> Also, is this really a mainline regression?  AMDISP patches are not in
> the mainline, no?

The amdgpu half of it is mainline, the other half is still on the lists.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-06 12:45     ` Mario Limonciello
@ 2026-03-06 13:28       ` Rafael J. Wysocki
  2026-03-09  3:52       ` Nirujogi, Pratap
  1 sibling, 0 replies; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-06 13:28 UTC (permalink / raw)
  To: Mario Limonciello
  Cc: Rafael J. Wysocki, Nirujogi, Pratap, W_Armin, lenb, Bin Du,
	benjamin.chan, king.li, linux-acpi, linux-kernel, regressions

On Fri, Mar 6, 2026 at 1:45 PM Mario Limonciello <superm1@kernel.org> wrote:
>
>
>
> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> > On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> > <superm1@kernel.org> wrote:
> >>
> >>
> >>
> >> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> >>> Hi Rafael,
> >>>
> >>> In kernel version 7.0-rc2, the AMDISP device reports the following
> >>> errors when created via mfd_add_hotplug_devices.
> >>>
> >>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> >>> no  post: no)
> >>> [    5.236744] input: Video Bus as /devices/
> >>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/input21
> >>> [    5.236779] acpi device:14: Error installing notify handler
> >>> [    5.236782] acpi device:15: Error installing notify handler
> >>> [    5.236783] acpi device:16: Error installing notify handler
> >>> [    5.236784] acpi device:17: Error installing notify handler
> >>> [    5.236785] acpi device:18: Error installing notify handler
> >>> [    5.236786] acpi device:19: Error installing notify handler
> >>> [    5.236786] acpi device:1a: Error installing notify handler
> >>> [    5.236787] acpi device:1b: Error installing notify handler
> >>> [    5.236788] acpi device:1c: Error installing notify handler
> >>>
> >>> These failures indicate AMDISP device is incorrectly detected as ACPI
> >>> Video device while it is not.
> >>>
> >>> The seems like a regression caused by the change that converts the ACPI
> >>> video device to a platform device (commit: 02c057ddefef5).
> >>>
> >>> Issue is not observed in 6.19-rc6, and also when this change is reverted
> >>> in 7.0-rc2.
> >>>
> >>> I really appreciate your inputs on addressing this issue and helping us
> >>> make progress on 7.0 rc2.
> >>>
> >>> Steps followed to reproduce the issue:
> >>>
> >>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> >>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> >>> avoid kernel panic found in v7.0-rc2)
> >>> 3. Build kernel with:
> >>>       - CONFIG_AMD_ISP_PLATFORM=y
> >>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> >>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> >>> 5. Boot system to see the failures
> >>>
> >>> [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
> >>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> >>> amdgpu/isp_v4_1_1.c#L132
> >>>
> >>> Thanks,
> >>> Pratap
> >>>
> >>>
> >>>
> >>
> >> It's a bit weird to see it even probe in this path in the first place.
> >> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> >> right to me.
> >>
> >> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> >> ends up matching).
> >>
> >> Would a sensible solution be to reject mfd device types in
> >> acpi_video_bus_probe()?
> >
> > Every platform device with LNXVIDEO in the device ID list will be
> > matched and so probed.
> >
> > I'm wondering how those devices get that ID though.
>
> Yeah me too.  I was surprised an MFD device got it.
>
> Pratap - can you figure this out before we go too far in this path?
>
> If they really shouldn't have LNXVIDEO fixing that may be a better solution.

The current theory is that they share the ACPI companion with the
"right" ACPI video bus device.  If that is confirmed (for example, by
testing the patch posted by me earlier), I will be wondering why they
do so.

If the ACPI companion sharing is necessary for some reason, maybe
changing the type of the other devices to something like auxiliary
devices can be considered.

> >
> > Also, is this really a mainline regression?  AMDISP patches are not in
> > the mainline, no?
>
> The amdgpu half of it is mainline, the other half is still on the lists.

Well, I mean the other part seems to be necessary to reproduce the error.

Also please note that this error is just a bit noisy, but it actually
means that the probe has failed which is what we want.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-06 12:45     ` Mario Limonciello
  2026-03-06 13:28       ` Rafael J. Wysocki
@ 2026-03-09  3:52       ` Nirujogi, Pratap
  2026-03-09  8:11         ` Du, Bin
  1 sibling, 1 reply; 13+ messages in thread
From: Nirujogi, Pratap @ 2026-03-09  3:52 UTC (permalink / raw)
  To: Mario Limonciello, Rafael J. Wysocki
  Cc: W_Armin, lenb, Bin Du, benjamin.chan, king.li, linux-acpi,
	linux-kernel, regressions



On 3/6/2026 7:45 AM, Mario Limonciello wrote:
> Caution: This message originated from an External Source. Use proper 
> caution when opening attachments, clicking links, or responding.
> 
> 
> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
>> <superm1@kernel.org> wrote:
>>>
>>>
>>>
>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
>>>> Hi Rafael,
>>>>
>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
>>>> errors when created via mfd_add_hotplug_devices.
>>>>
>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
>>>> no  post: no)
>>>> [    5.236744] input: Video Bus as /devices/
>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/ 
>>>> input21
>>>> [    5.236779] acpi device:14: Error installing notify handler
>>>> [    5.236782] acpi device:15: Error installing notify handler
>>>> [    5.236783] acpi device:16: Error installing notify handler
>>>> [    5.236784] acpi device:17: Error installing notify handler
>>>> [    5.236785] acpi device:18: Error installing notify handler
>>>> [    5.236786] acpi device:19: Error installing notify handler
>>>> [    5.236786] acpi device:1a: Error installing notify handler
>>>> [    5.236787] acpi device:1b: Error installing notify handler
>>>> [    5.236788] acpi device:1c: Error installing notify handler
>>>>
>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
>>>> Video device while it is not.
>>>>
>>>> The seems like a regression caused by the change that converts the ACPI
>>>> video device to a platform device (commit: 02c057ddefef5).
>>>>
>>>> Issue is not observed in 6.19-rc6, and also when this change is 
>>>> reverted
>>>> in 7.0-rc2.
>>>>
>>>> I really appreciate your inputs on addressing this issue and helping us
>>>> make progress on 7.0 rc2.
>>>>
>>>> Steps followed to reproduce the issue:
>>>>
>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
>>>> avoid kernel panic found in v7.0-rc2)
>>>> 3. Build kernel with:
>>>>       - CONFIG_AMD_ISP_PLATFORM=y
>>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
>>>> 5. Boot system to see the failures
>>>>
>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-Bin.Du@amd.com/
>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
>>>> amdgpu/isp_v4_1_1.c#L132
>>>>
>>>> Thanks,
>>>> Pratap
>>>>
>>>>
>>>>
>>>
>>> It's a bit weird to see it even probe in this path in the first place.
>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
>>> right to me.
>>>
>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
>>> ends up matching).
>>>
>>> Would a sensible solution be to reject mfd device types in
>>> acpi_video_bus_probe()?
>>
>> Every platform device with LNXVIDEO in the device ID list will be
>> matched and so probed.
>>
>> I'm wondering how those devices get that ID though.
> 
> Yeah me too.  I was surprised an MFD device got it.
> 
> Pratap - can you figure this out before we go too far in this path?
> 
yes, MFD child devices in this case have the device ID as that of parent 
(GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the 
MFD child devices are inheriting the parent's ACPI companion device and 
this is resulting in having the same parent's ACPI device ID.

device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91

> If they really shouldn't have LNXVIDEO fixing that may be a better 
> solution.
> 
AMD ISP related MFD devices are using the same LNXVIDEO device ID even 
on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP 
device probe works and also camera works on 7.0-rc2 if I avoid 
inheriting ACPI companion of the parent (GPU) in the mfd-core.c

// device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91

But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to 
be root caused.

>>
>> Also, is this really a mainline regression?  AMDISP patches are not in
>> the mainline, no?
> 
> The amdgpu half of it is mainline, the other half is still on the lists.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-09  3:52       ` Nirujogi, Pratap
@ 2026-03-09  8:11         ` Du, Bin
  2026-03-09 11:58           ` Rafael J. Wysocki
  0 siblings, 1 reply; 13+ messages in thread
From: Du, Bin @ 2026-03-09  8:11 UTC (permalink / raw)
  To: Nirujogi, Pratap, Mario Limonciello, Rafael J. Wysocki
  Cc: W_Armin, lenb, benjamin.chan, king.li, linux-acpi, linux-kernel,
	regressions



On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
> 
> 
> On 3/6/2026 7:45 AM, Mario Limonciello wrote:
>> Caution: This message originated from an External Source. Use proper 
>> caution when opening attachments, clicking links, or responding.
>>
>>
>> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
>>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
>>> <superm1@kernel.org> wrote:
>>>>
>>>>
>>>>
>>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
>>>>> Hi Rafael,
>>>>>
>>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
>>>>> errors when created via mfd_add_hotplug_devices.
>>>>>
>>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
>>>>> no  post: no)
>>>>> [    5.236744] input: Video Bus as /devices/
>>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/ 
>>>>> input21
>>>>> [    5.236779] acpi device:14: Error installing notify handler
>>>>> [    5.236782] acpi device:15: Error installing notify handler
>>>>> [    5.236783] acpi device:16: Error installing notify handler
>>>>> [    5.236784] acpi device:17: Error installing notify handler
>>>>> [    5.236785] acpi device:18: Error installing notify handler
>>>>> [    5.236786] acpi device:19: Error installing notify handler
>>>>> [    5.236786] acpi device:1a: Error installing notify handler
>>>>> [    5.236787] acpi device:1b: Error installing notify handler
>>>>> [    5.236788] acpi device:1c: Error installing notify handler
>>>>>
>>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
>>>>> Video device while it is not.
>>>>>
>>>>> The seems like a regression caused by the change that converts the 
>>>>> ACPI
>>>>> video device to a platform device (commit: 02c057ddefef5).
>>>>>
>>>>> Issue is not observed in 6.19-rc6, and also when this change is 
>>>>> reverted
>>>>> in 7.0-rc2.
>>>>>
>>>>> I really appreciate your inputs on addressing this issue and 
>>>>> helping us
>>>>> make progress on 7.0 rc2.
>>>>>
>>>>> Steps followed to reproduce the issue:
>>>>>
>>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
>>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
>>>>> avoid kernel panic found in v7.0-rc2)
>>>>> 3. Build kernel with:
>>>>>       - CONFIG_AMD_ISP_PLATFORM=y
>>>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
>>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
>>>>> 5. Boot system to see the failures
>>>>>
>>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1- 
>>>>> Bin.Du@amd.com/
>>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
>>>>> amdgpu/isp_v4_1_1.c#L132
>>>>>
>>>>> Thanks,
>>>>> Pratap
>>>>>
>>>>>
>>>>>
>>>>
>>>> It's a bit weird to see it even probe in this path in the first place.
>>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
>>>> right to me.
>>>>
>>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
>>>> ends up matching).
>>>>
>>>> Would a sensible solution be to reject mfd device types in
>>>> acpi_video_bus_probe()?
>>>
>>> Every platform device with LNXVIDEO in the device ID list will be
>>> matched and so probed.
>>>
>>> I'm wondering how those devices get that ID though.
>>
>> Yeah me too.  I was surprised an MFD device got it.
>>
>> Pratap - can you figure this out before we go too far in this path?
>>
> yes, MFD child devices in this case have the device ID as that of parent 
> (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the 
> MFD child devices are inheriting the parent's ACPI companion device and 
> this is resulting in having the same parent's ACPI device ID.
> 
> device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> 
>> If they really shouldn't have LNXVIDEO fixing that may be a better 
>> solution.
>>
> AMD ISP related MFD devices are using the same LNXVIDEO device ID even 
> on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP 
> device probe works and also camera works on 7.0-rc2 if I avoid 
> inheriting ACPI companion of the parent (GPU) in the mfd-core.c
> 
> // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> 
> But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to 
> be root caused.
> 

Possible cause may be.
1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was 
registered as an acpi_driver (static struct acpi_driver acpi_video_bus) 
,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct 
acpi_device objects in the ACPI namespace. MFD children of GFX 
(amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform 
devices on the platform bus, they are completely invisible to 
acpi_driver, so there is no chance of the ACPI video driver matching an 
MFD child.
2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was 
converted to a platform_driver (static struct platform_driver 
acpi_video_bus), it lives on the platform bus. When the kernel registers 
a new platform device, it checks ALL registered platform drivers to see 
if any match. The matching logic for acpi_match_table works like this:
- Get the platform device's ACPI companion (ACPI_COMPANION(dev))
- Check if the companion's HID/CID matches any entry in acpi_match_table
- If yes, the driver probes the device

amd_isp_capture, amd_isp_i2c_designware, and amdisp-pinctrl are MFD 
children of GFX and inherit their parent's ACPI companion, which uses 
the HID "LNXVIDEO". As a result, all these components will match with 
the ACPI video driver. Consequently, this issue impacts not only 
amd_isp_capture but also the upstreamed driver amd_isp_i2c_designware 
(located in drivers/i2c/busses/i2c-designware-amdisp.c under the 
I2C_DESIGNWARE_AMDISP config) and amdisp-pinctrl (found in 
drivers/pinctrl/pinctrl-amdisp.c under the PINCTRL_AMDISP config).

>>>
>>> Also, is this really a mainline regression?  AMDISP patches are not in
>>> the mainline, no?
>>
>> The amdgpu half of it is mainline, the other half is still on the lists.
> 

-- 
Regards,
Bin


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-09  8:11         ` Du, Bin
@ 2026-03-09 11:58           ` Rafael J. Wysocki
  2026-03-09 12:23             ` Rafael J. Wysocki
  0 siblings, 1 reply; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-09 11:58 UTC (permalink / raw)
  To: Du, Bin
  Cc: Nirujogi, Pratap, Mario Limonciello, Rafael J. Wysocki, W_Armin,
	lenb, benjamin.chan, king.li, linux-acpi, linux-kernel,
	regressions

On Mon, Mar 9, 2026 at 9:11 AM Du, Bin <bin.du@amd.com> wrote:
>
>
>
> On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
> >
> >
> > On 3/6/2026 7:45 AM, Mario Limonciello wrote:
> >> Caution: This message originated from an External Source. Use proper
> >> caution when opening attachments, clicking links, or responding.
> >>
> >>
> >> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> >>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> >>> <superm1@kernel.org> wrote:
> >>>>
> >>>>
> >>>>
> >>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> >>>>> Hi Rafael,
> >>>>>
> >>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
> >>>>> errors when created via mfd_add_hotplug_devices.
> >>>>>
> >>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> >>>>> no  post: no)
> >>>>> [    5.236744] input: Video Bus as /devices/
> >>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/
> >>>>> input21
> >>>>> [    5.236779] acpi device:14: Error installing notify handler
> >>>>> [    5.236782] acpi device:15: Error installing notify handler
> >>>>> [    5.236783] acpi device:16: Error installing notify handler
> >>>>> [    5.236784] acpi device:17: Error installing notify handler
> >>>>> [    5.236785] acpi device:18: Error installing notify handler
> >>>>> [    5.236786] acpi device:19: Error installing notify handler
> >>>>> [    5.236786] acpi device:1a: Error installing notify handler
> >>>>> [    5.236787] acpi device:1b: Error installing notify handler
> >>>>> [    5.236788] acpi device:1c: Error installing notify handler
> >>>>>
> >>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
> >>>>> Video device while it is not.
> >>>>>
> >>>>> The seems like a regression caused by the change that converts the
> >>>>> ACPI
> >>>>> video device to a platform device (commit: 02c057ddefef5).
> >>>>>
> >>>>> Issue is not observed in 6.19-rc6, and also when this change is
> >>>>> reverted
> >>>>> in 7.0-rc2.
> >>>>>
> >>>>> I really appreciate your inputs on addressing this issue and
> >>>>> helping us
> >>>>> make progress on 7.0 rc2.
> >>>>>
> >>>>> Steps followed to reproduce the issue:
> >>>>>
> >>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> >>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> >>>>> avoid kernel panic found in v7.0-rc2)
> >>>>> 3. Build kernel with:
> >>>>>       - CONFIG_AMD_ISP_PLATFORM=y
> >>>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> >>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> >>>>> 5. Boot system to see the failures
> >>>>>
> >>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-
> >>>>> Bin.Du@amd.com/
> >>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> >>>>> amdgpu/isp_v4_1_1.c#L132
> >>>>>
> >>>>> Thanks,
> >>>>> Pratap
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>> It's a bit weird to see it even probe in this path in the first place.
> >>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> >>>> right to me.
> >>>>
> >>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> >>>> ends up matching).
> >>>>
> >>>> Would a sensible solution be to reject mfd device types in
> >>>> acpi_video_bus_probe()?
> >>>
> >>> Every platform device with LNXVIDEO in the device ID list will be
> >>> matched and so probed.
> >>>
> >>> I'm wondering how those devices get that ID though.
> >>
> >> Yeah me too.  I was surprised an MFD device got it.
> >>
> >> Pratap - can you figure this out before we go too far in this path?
> >>
> > yes, MFD child devices in this case have the device ID as that of parent
> > (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the
> > MFD child devices are inheriting the parent's ACPI companion device and
> > this is resulting in having the same parent's ACPI device ID.
> >
> > device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> >
> >> If they really shouldn't have LNXVIDEO fixing that may be a better
> >> solution.
> >>
> > AMD ISP related MFD devices are using the same LNXVIDEO device ID even
> > on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP
> > device probe works and also camera works on 7.0-rc2 if I avoid
> > inheriting ACPI companion of the parent (GPU) in the mfd-core.c
> >
> > // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> >
> > But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to
> > be root caused.
> >
>
> Possible cause may be.
> 1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was
> registered as an acpi_driver (static struct acpi_driver acpi_video_bus)
> ,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct
> acpi_device objects in the ACPI namespace. MFD children of GFX
> (amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform
> devices on the platform bus, they are completely invisible to
> acpi_driver, so there is no chance of the ACPI video driver matching an
> MFD child.
> 2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was
> converted to a platform_driver (static struct platform_driver
> acpi_video_bus), it lives on the platform bus. When the kernel registers
> a new platform device, it checks ALL registered platform drivers to see
> if any match. The matching logic for acpi_match_table works like this:
> - Get the platform device's ACPI companion (ACPI_COMPANION(dev))
> - Check if the companion's HID/CID matches any entry in acpi_match_table
> - If yes, the driver probes the device

It does, but then the probe fails.  This is the problem that has been
reported to start with.

> amd_isp_capture, amd_isp_i2c_designware, and amdisp-pinctrl are MFD
> children of GFX and inherit their parent's ACPI companion, which uses
> the HID "LNXVIDEO". As a result, all these components will match with
> the ACPI video driver. Consequently, this issue impacts not only
> amd_isp_capture but also the upstreamed driver amd_isp_i2c_designware
> (located in drivers/i2c/busses/i2c-designware-amdisp.c under the
> I2C_DESIGNWARE_AMDISP config) and amdisp-pinctrl (found in
> drivers/pinctrl/pinctrl-amdisp.c under the PINCTRL_AMDISP config).

Why is inheriting the parent's ACPI node regarded as a good idea?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5
  2026-03-09 11:58           ` Rafael J. Wysocki
@ 2026-03-09 12:23             ` Rafael J. Wysocki
  2026-03-09 16:01               ` [PATCH v1] ACPI: video: Switch over to auxiliary bus type Rafael J. Wysocki
  0 siblings, 1 reply; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-09 12:23 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Du, Bin, Nirujogi, Pratap, Mario Limonciello, W_Armin, lenb,
	benjamin.chan, king.li, linux-acpi, linux-kernel, regressions

On Mon, Mar 9, 2026 at 12:58 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
>
> On Mon, Mar 9, 2026 at 9:11 AM Du, Bin <bin.du@amd.com> wrote:
> >
> >
> >
> > On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
> > >
> > >
> > > On 3/6/2026 7:45 AM, Mario Limonciello wrote:
> > >> Caution: This message originated from an External Source. Use proper
> > >> caution when opening attachments, clicking links, or responding.
> > >>
> > >>
> > >> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> > >>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> > >>> <superm1@kernel.org> wrote:
> > >>>>
> > >>>>
> > >>>>
> > >>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> > >>>>> Hi Rafael,
> > >>>>>
> > >>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
> > >>>>> errors when created via mfd_add_hotplug_devices.
> > >>>>>
> > >>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> > >>>>> no  post: no)
> > >>>>> [    5.236744] input: Video Bus as /devices/
> > >>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/
> > >>>>> input21
> > >>>>> [    5.236779] acpi device:14: Error installing notify handler
> > >>>>> [    5.236782] acpi device:15: Error installing notify handler
> > >>>>> [    5.236783] acpi device:16: Error installing notify handler
> > >>>>> [    5.236784] acpi device:17: Error installing notify handler
> > >>>>> [    5.236785] acpi device:18: Error installing notify handler
> > >>>>> [    5.236786] acpi device:19: Error installing notify handler
> > >>>>> [    5.236786] acpi device:1a: Error installing notify handler
> > >>>>> [    5.236787] acpi device:1b: Error installing notify handler
> > >>>>> [    5.236788] acpi device:1c: Error installing notify handler
> > >>>>>
> > >>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
> > >>>>> Video device while it is not.
> > >>>>>
> > >>>>> The seems like a regression caused by the change that converts the
> > >>>>> ACPI
> > >>>>> video device to a platform device (commit: 02c057ddefef5).
> > >>>>>
> > >>>>> Issue is not observed in 6.19-rc6, and also when this change is
> > >>>>> reverted
> > >>>>> in 7.0-rc2.
> > >>>>>
> > >>>>> I really appreciate your inputs on addressing this issue and
> > >>>>> helping us
> > >>>>> make progress on 7.0 rc2.
> > >>>>>
> > >>>>> Steps followed to reproduce the issue:
> > >>>>>
> > >>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> > >>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> > >>>>> avoid kernel panic found in v7.0-rc2)
> > >>>>> 3. Build kernel with:
> > >>>>>       - CONFIG_AMD_ISP_PLATFORM=y
> > >>>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> > >>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> > >>>>> 5. Boot system to see the failures
> > >>>>>
> > >>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-
> > >>>>> Bin.Du@amd.com/
> > >>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> > >>>>> amdgpu/isp_v4_1_1.c#L132
> > >>>>>
> > >>>>> Thanks,
> > >>>>> Pratap
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>
> > >>>> It's a bit weird to see it even probe in this path in the first place.
> > >>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> > >>>> right to me.
> > >>>>
> > >>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> > >>>> ends up matching).
> > >>>>
> > >>>> Would a sensible solution be to reject mfd device types in
> > >>>> acpi_video_bus_probe()?
> > >>>
> > >>> Every platform device with LNXVIDEO in the device ID list will be
> > >>> matched and so probed.
> > >>>
> > >>> I'm wondering how those devices get that ID though.
> > >>
> > >> Yeah me too.  I was surprised an MFD device got it.
> > >>
> > >> Pratap - can you figure this out before we go too far in this path?
> > >>
> > > yes, MFD child devices in this case have the device ID as that of parent
> > > (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the
> > > MFD child devices are inheriting the parent's ACPI companion device and
> > > this is resulting in having the same parent's ACPI device ID.
> > >
> > > device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> > >
> > >> If they really shouldn't have LNXVIDEO fixing that may be a better
> > >> solution.
> > >>
> > > AMD ISP related MFD devices are using the same LNXVIDEO device ID even
> > > on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP
> > > device probe works and also camera works on 7.0-rc2 if I avoid
> > > inheriting ACPI companion of the parent (GPU) in the mfd-core.c
> > >
> > > // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> > >
> > > But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to
> > > be root caused.
> > >
> >
> > Possible cause may be.
> > 1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was
> > registered as an acpi_driver (static struct acpi_driver acpi_video_bus)
> > ,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct
> > acpi_device objects in the ACPI namespace. MFD children of GFX
> > (amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform
> > devices on the platform bus, they are completely invisible to
> > acpi_driver, so there is no chance of the ACPI video driver matching an
> > MFD child.
> > 2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was
> > converted to a platform_driver (static struct platform_driver
> > acpi_video_bus), it lives on the platform bus. When the kernel registers
> > a new platform device, it checks ALL registered platform drivers to see
> > if any match. The matching logic for acpi_match_table works like this:
> > - Get the platform device's ACPI companion (ACPI_COMPANION(dev))
> > - Check if the companion's HID/CID matches any entry in acpi_match_table
> > - If yes, the driver probes the device
>
> It does, but then the probe fails.  This is the problem that has been
> reported to start with.

I guess I know what's going on.

Every device that shares an ACPI companion with the ACPI video bus
device advertises itself as "LNXVIDEO", so udev looks for a module
matching that device ID and since the ACPI video driver is loaded, it
will not attempt to load anything else.

It may be viable to use an auxiliary device for ACPI video bus device
representation, let me have a look at that.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v1] ACPI: video: Switch over to auxiliary bus type
  2026-03-09 12:23             ` Rafael J. Wysocki
@ 2026-03-09 16:01               ` Rafael J. Wysocki
  2026-03-09 20:24                 ` Nirujogi, Pratap
  0 siblings, 1 reply; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-09 16:01 UTC (permalink / raw)
  To: Nirujogi, Pratap
  Cc: Du, Bin, Mario Limonciello, W_Armin, benjamin.chan, king.li,
	linux-acpi, linux-kernel, regressions

On Monday, March 9, 2026 1:23:35 PM CET Rafael J. Wysocki wrote:
> On Mon, Mar 9, 2026 at 12:58 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
> >
> > On Mon, Mar 9, 2026 at 9:11 AM Du, Bin <bin.du@amd.com> wrote:
> > >
> > >
> > >
> > > On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
> > > >
> > > >
> > > > On 3/6/2026 7:45 AM, Mario Limonciello wrote:
> > > >> Caution: This message originated from an External Source. Use proper
> > > >> caution when opening attachments, clicking links, or responding.
> > > >>
> > > >>
> > > >> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> > > >>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> > > >>> <superm1@kernel.org> wrote:
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> > > >>>>> Hi Rafael,
> > > >>>>>
> > > >>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
> > > >>>>> errors when created via mfd_add_hotplug_devices.
> > > >>>>>
> > > >>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> > > >>>>> no  post: no)
> > > >>>>> [    5.236744] input: Video Bus as /devices/
> > > >>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/
> > > >>>>> input21
> > > >>>>> [    5.236779] acpi device:14: Error installing notify handler
> > > >>>>> [    5.236782] acpi device:15: Error installing notify handler
> > > >>>>> [    5.236783] acpi device:16: Error installing notify handler
> > > >>>>> [    5.236784] acpi device:17: Error installing notify handler
> > > >>>>> [    5.236785] acpi device:18: Error installing notify handler
> > > >>>>> [    5.236786] acpi device:19: Error installing notify handler
> > > >>>>> [    5.236786] acpi device:1a: Error installing notify handler
> > > >>>>> [    5.236787] acpi device:1b: Error installing notify handler
> > > >>>>> [    5.236788] acpi device:1c: Error installing notify handler
> > > >>>>>
> > > >>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
> > > >>>>> Video device while it is not.
> > > >>>>>
> > > >>>>> The seems like a regression caused by the change that converts the
> > > >>>>> ACPI
> > > >>>>> video device to a platform device (commit: 02c057ddefef5).
> > > >>>>>
> > > >>>>> Issue is not observed in 6.19-rc6, and also when this change is
> > > >>>>> reverted
> > > >>>>> in 7.0-rc2.
> > > >>>>>
> > > >>>>> I really appreciate your inputs on addressing this issue and
> > > >>>>> helping us
> > > >>>>> make progress on 7.0 rc2.
> > > >>>>>
> > > >>>>> Steps followed to reproduce the issue:
> > > >>>>>
> > > >>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> > > >>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> > > >>>>> avoid kernel panic found in v7.0-rc2)
> > > >>>>> 3. Build kernel with:
> > > >>>>>       - CONFIG_AMD_ISP_PLATFORM=y
> > > >>>>>       - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> > > >>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> > > >>>>> 5. Boot system to see the failures
> > > >>>>>
> > > >>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-
> > > >>>>> Bin.Du@amd.com/
> > > >>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> > > >>>>> amdgpu/isp_v4_1_1.c#L132
> > > >>>>>
> > > >>>>> Thanks,
> > > >>>>> Pratap
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>
> > > >>>> It's a bit weird to see it even probe in this path in the first place.
> > > >>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> > > >>>> right to me.
> > > >>>>
> > > >>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> > > >>>> ends up matching).
> > > >>>>
> > > >>>> Would a sensible solution be to reject mfd device types in
> > > >>>> acpi_video_bus_probe()?
> > > >>>
> > > >>> Every platform device with LNXVIDEO in the device ID list will be
> > > >>> matched and so probed.
> > > >>>
> > > >>> I'm wondering how those devices get that ID though.
> > > >>
> > > >> Yeah me too.  I was surprised an MFD device got it.
> > > >>
> > > >> Pratap - can you figure this out before we go too far in this path?
> > > >>
> > > > yes, MFD child devices in this case have the device ID as that of parent
> > > > (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the
> > > > MFD child devices are inheriting the parent's ACPI companion device and
> > > > this is resulting in having the same parent's ACPI device ID.
> > > >
> > > > device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > > > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> > > >
> > > >> If they really shouldn't have LNXVIDEO fixing that may be a better
> > > >> solution.
> > > >>
> > > > AMD ISP related MFD devices are using the same LNXVIDEO device ID even
> > > > on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP
> > > > device probe works and also camera works on 7.0-rc2 if I avoid
> > > > inheriting ACPI companion of the parent (GPU) in the mfd-core.c
> > > >
> > > > // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> > > > https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> > > >
> > > > But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to
> > > > be root caused.
> > > >
> > >
> > > Possible cause may be.
> > > 1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was
> > > registered as an acpi_driver (static struct acpi_driver acpi_video_bus)
> > > ,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct
> > > acpi_device objects in the ACPI namespace. MFD children of GFX
> > > (amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform
> > > devices on the platform bus, they are completely invisible to
> > > acpi_driver, so there is no chance of the ACPI video driver matching an
> > > MFD child.
> > > 2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was
> > > converted to a platform_driver (static struct platform_driver
> > > acpi_video_bus), it lives on the platform bus. When the kernel registers
> > > a new platform device, it checks ALL registered platform drivers to see
> > > if any match. The matching logic for acpi_match_table works like this:
> > > - Get the platform device's ACPI companion (ACPI_COMPANION(dev))
> > > - Check if the companion's HID/CID matches any entry in acpi_match_table
> > > - If yes, the driver probes the device
> >
> > It does, but then the probe fails.  This is the problem that has been
> > reported to start with.
> 
> I guess I know what's going on.
> 
> Every device that shares an ACPI companion with the ACPI video bus
> device advertises itself as "LNXVIDEO", so udev looks for a module
> matching that device ID and since the ACPI video driver is loaded, it
> will not attempt to load anything else.
> 
> It may be viable to use an auxiliary device for ACPI video bus device
> representation, let me have a look at that.

So appended is a patch that works for me.

Please test it and let me know if it helps.

---
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Subject: [PATCH v1] ACPI: video: Switch over to auxiliary bus type

Commit 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
switched over the ACPI video bus driver from an ACPI driver to a platform
driver, but that change introduced an unwanted and unexpected side effect.
Namely, on some systems, the ACPI device object of the ACPI video bus
device is an ACPI companion of multiple platform devices and, after
adding video_device_ids[] as an acpi_match_table to the acpi_video_bus
platform driver, all of those devices started to match that driver and
its probe callback is invoked for all of them (it fails, but it leaves
confusing message in the log).  Moreover, the MODULE_DEVICE_TABLE()
of the ACPI video driver module matches all of the devices sharing the
ACPI companion with the ACPI video bus device, so registering them does
not cause any other modules to be loaded, so they are only probed
against the ACPI video bus platform driver.

To address this, make the core ACPI device enumeration code create an
auxiliary device for the ACPI video bus device object instead of a
platform device and switch over the ACPI video bus driver (once again)
to an auxiliary driver.

Auxiliary driver generally is a better match for ACPI video bus than
platform driver, among other things because the ACPI video bus device
does not require any resources to be allocated for it during
enumeration.  It also allows the ACPI video bus driver to stop abusing
device matching based on ACPI device IDs and it allows a special case
to be dropped from acpi_create_platform_device() because that function
need not worry about the ACPI video bus device any more.

Fixes: 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/acpi_platform.c |    2 -
 drivers/acpi/acpi_video.c    |   45 ++++++++++++++++++++---------------------
 drivers/acpi/scan.c          |   47 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 70 insertions(+), 24 deletions(-)

--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -135,7 +135,7 @@ struct platform_device *acpi_create_plat
 		}
 	}
 
-	if (adev->device_type == ACPI_BUS_TYPE_DEVICE && !adev->pnp.type.backlight) {
+	if (adev->device_type == ACPI_BUS_TYPE_DEVICE) {
 		LIST_HEAD(resource_list);
 
 		count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -9,6 +9,7 @@
 
 #define pr_fmt(fmt) "ACPI: video: " fmt
 
+#include <linux/auxiliary_bus.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -21,7 +22,6 @@
 #include <linux/sort.h>
 #include <linux/pci.h>
 #include <linux/pci_ids.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/dmi.h>
 #include <linux/suspend.h>
@@ -77,8 +77,9 @@ static int register_count;
 static DEFINE_MUTEX(register_count_mutex);
 static DEFINE_MUTEX(video_list_lock);
 static LIST_HEAD(video_bus_head);
-static int acpi_video_bus_probe(struct platform_device *pdev);
-static void acpi_video_bus_remove(struct platform_device *pdev);
+static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
+				const struct auxiliary_device_id *id);
+static void acpi_video_bus_remove(struct auxiliary_device *aux);
 static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data);
 
 /*
@@ -93,19 +94,16 @@ enum acpi_video_level_idx {
 	ACPI_VIDEO_FIRST_LEVEL,		/* actual supported levels begin here */
 };
 
-static const struct acpi_device_id video_device_ids[] = {
-	{ACPI_VIDEO_HID, 0},
-	{"", 0},
+static const struct auxiliary_device_id video_bus_auxiliary_id_table[] = {
+	{ .name = "acpi.video_bus" },
+	{},
 };
-MODULE_DEVICE_TABLE(acpi, video_device_ids);
+MODULE_DEVICE_TABLE(auxiliary, video_bus_auxiliary_id_table);
 
-static struct platform_driver acpi_video_bus = {
+static struct auxiliary_driver acpi_video_bus = {
 	.probe = acpi_video_bus_probe,
 	.remove = acpi_video_bus_remove,
-	.driver = {
-		.name = "acpi-video",
-		.acpi_match_table = video_device_ids,
-	},
+	.id_table = video_bus_auxiliary_id_table,
 };
 
 struct acpi_video_bus_flags {
@@ -1885,7 +1883,7 @@ static void acpi_video_dev_add_notify_ha
 }
 
 static int acpi_video_bus_add_notify_handler(struct acpi_video_bus *video,
-					     struct platform_device *pdev)
+					     struct device *parent)
 {
 	struct input_dev *input;
 	struct acpi_video_device *dev;
@@ -1908,7 +1906,7 @@ static int acpi_video_bus_add_notify_han
 	input->phys = video->phys;
 	input->id.bustype = BUS_HOST;
 	input->id.product = 0x06;
-	input->dev.parent = &pdev->dev;
+	input->dev.parent = parent;
 	input->evbit[0] = BIT(EV_KEY);
 	set_bit(KEY_SWITCHVIDEOMODE, input->keybit);
 	set_bit(KEY_VIDEO_NEXT, input->keybit);
@@ -1980,9 +1978,10 @@ static int acpi_video_bus_put_devices(st
 
 static int instance;
 
-static int acpi_video_bus_probe(struct platform_device *pdev)
+static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
+				const struct auxiliary_device_id *id_unused)
 {
-	struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
+	struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
 	struct acpi_video_bus *video;
 	bool auto_detect;
 	int error;
@@ -2019,7 +2018,7 @@ static int acpi_video_bus_probe(struct p
 		instance++;
 	}
 
-	platform_set_drvdata(pdev, video);
+	auxiliary_set_drvdata(aux_dev, video);
 
 	video->device = device;
 	strscpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
@@ -2068,7 +2067,7 @@ static int acpi_video_bus_probe(struct p
 	    !auto_detect)
 		acpi_video_bus_register_backlight(video);
 
-	error = acpi_video_bus_add_notify_handler(video, pdev);
+	error = acpi_video_bus_add_notify_handler(video, &aux_dev->dev);
 	if (error)
 		goto err_del;
 
@@ -2096,10 +2095,10 @@ err_free_video:
 	return error;
 }
 
-static void acpi_video_bus_remove(struct platform_device *pdev)
+static void acpi_video_bus_remove(struct auxiliary_device *aux_dev)
 {
-	struct acpi_video_bus *video = platform_get_drvdata(pdev);
-	struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
+	struct acpi_video_bus *video = auxiliary_get_drvdata(aux_dev);
+	struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
 
 	acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
 				       acpi_video_bus_notify);
@@ -2163,7 +2162,7 @@ int acpi_video_register(void)
 
 	dmi_check_system(video_dmi_table);
 
-	ret = platform_driver_register(&acpi_video_bus);
+	ret = auxiliary_driver_register(&acpi_video_bus);
 	if (ret)
 		goto leave;
 
@@ -2183,7 +2182,7 @@ void acpi_video_unregister(void)
 {
 	mutex_lock(&register_count_mutex);
 	if (register_count) {
-		platform_driver_unregister(&acpi_video_bus);
+		auxiliary_driver_unregister(&acpi_video_bus);
 		register_count = 0;
 		may_report_brightness_keys = false;
 	}
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -6,6 +6,7 @@
 #define pr_fmt(fmt) "ACPI: " fmt
 
 #include <linux/async.h>
+#include <linux/auxiliary_bus.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/slab.h>
@@ -2192,6 +2193,46 @@ static acpi_status acpi_bus_check_add_2(
 	return acpi_bus_check_add(handle, false, (struct acpi_device **)ret_p);
 }
 
+static void acpi_video_bus_device_release(struct device *dev)
+{
+	struct auxiliary_device *aux_dev = to_auxiliary_dev(dev);
+
+	kfree(aux_dev);
+}
+
+static void acpi_create_video_bus_device(struct acpi_device *adev,
+					 struct acpi_device *parent)
+{
+	struct auxiliary_device *aux_dev;
+	static unsigned int aux_dev_id;
+
+	aux_dev = kzalloc_obj(*aux_dev);
+	if (!aux_dev)
+		return;
+
+	aux_dev->id = aux_dev_id++;
+	aux_dev->name = "video_bus";
+	aux_dev->dev.parent = acpi_get_first_physical_node(parent);
+	if (!aux_dev->dev.parent)
+		goto err;
+
+	aux_dev->dev.release = acpi_video_bus_device_release;
+
+	if (auxiliary_device_init(aux_dev))
+		goto err;
+
+	ACPI_COMPANION_SET(&aux_dev->dev, adev);
+	if (__auxiliary_device_add(aux_dev, "acpi")) {
+		auxiliary_device_uninit(aux_dev);
+		goto err;
+	}
+
+	return;
+
+err:
+	kfree(aux_dev);
+}
+
 struct acpi_scan_system_dev {
 	struct list_head node;
 	struct acpi_device *adev;
@@ -2229,6 +2270,12 @@ static void acpi_default_enumeration(str
 			sd->adev = device;
 			list_add_tail(&sd->node, &acpi_scan_system_dev_list);
 		}
+	} else if (device->pnp.type.backlight) {
+		struct acpi_device *parent;
+
+		parent = acpi_dev_parent(device);
+		if (parent)
+			acpi_create_video_bus_device(device, parent);
 	} else {
 		/* For a regular device object, create a platform device. */
 		acpi_create_platform_device(device, NULL);





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v1] ACPI: video: Switch over to auxiliary bus type
  2026-03-09 16:01               ` [PATCH v1] ACPI: video: Switch over to auxiliary bus type Rafael J. Wysocki
@ 2026-03-09 20:24                 ` Nirujogi, Pratap
  2026-03-09 20:35                   ` Rafael J. Wysocki
  0 siblings, 1 reply; 13+ messages in thread
From: Nirujogi, Pratap @ 2026-03-09 20:24 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Du, Bin, Mario Limonciello, W_Armin, benjamin.chan, king.li,
	linux-acpi, linux-kernel, regressions



On 3/9/2026 12:01 PM, Rafael J. Wysocki wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> 
> 
> On Monday, March 9, 2026 1:23:35 PM CET Rafael J. Wysocki wrote:
>> On Mon, Mar 9, 2026 at 12:58 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
>>>
>>> On Mon, Mar 9, 2026 at 9:11 AM Du, Bin <bin.du@amd.com> wrote:
>>>>
>>>>
>>>>
>>>> On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
>>>>>
>>>>>
>>>>> On 3/6/2026 7:45 AM, Mario Limonciello wrote:
>>>>>> Caution: This message originated from an External Source. Use proper
>>>>>> caution when opening attachments, clicking links, or responding.
>>>>>>
>>>>>>
>>>>>> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
>>>>>>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
>>>>>>> <superm1@kernel.org> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
>>>>>>>>> Hi Rafael,
>>>>>>>>>
>>>>>>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
>>>>>>>>> errors when created via mfd_add_hotplug_devices.
>>>>>>>>>
>>>>>>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
>>>>>>>>> no  post: no)
>>>>>>>>> [    5.236744] input: Video Bus as /devices/
>>>>>>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/
>>>>>>>>> input21
>>>>>>>>> [    5.236779] acpi device:14: Error installing notify handler
>>>>>>>>> [    5.236782] acpi device:15: Error installing notify handler
>>>>>>>>> [    5.236783] acpi device:16: Error installing notify handler
>>>>>>>>> [    5.236784] acpi device:17: Error installing notify handler
>>>>>>>>> [    5.236785] acpi device:18: Error installing notify handler
>>>>>>>>> [    5.236786] acpi device:19: Error installing notify handler
>>>>>>>>> [    5.236786] acpi device:1a: Error installing notify handler
>>>>>>>>> [    5.236787] acpi device:1b: Error installing notify handler
>>>>>>>>> [    5.236788] acpi device:1c: Error installing notify handler
>>>>>>>>>
>>>>>>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
>>>>>>>>> Video device while it is not.
>>>>>>>>>
>>>>>>>>> The seems like a regression caused by the change that converts the
>>>>>>>>> ACPI
>>>>>>>>> video device to a platform device (commit: 02c057ddefef5).
>>>>>>>>>
>>>>>>>>> Issue is not observed in 6.19-rc6, and also when this change is
>>>>>>>>> reverted
>>>>>>>>> in 7.0-rc2.
>>>>>>>>>
>>>>>>>>> I really appreciate your inputs on addressing this issue and
>>>>>>>>> helping us
>>>>>>>>> make progress on 7.0 rc2.
>>>>>>>>>
>>>>>>>>> Steps followed to reproduce the issue:
>>>>>>>>>
>>>>>>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
>>>>>>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
>>>>>>>>> avoid kernel panic found in v7.0-rc2)
>>>>>>>>> 3. Build kernel with:
>>>>>>>>>        - CONFIG_AMD_ISP_PLATFORM=y
>>>>>>>>>        - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
>>>>>>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
>>>>>>>>> 5. Boot system to see the failures
>>>>>>>>>
>>>>>>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-
>>>>>>>>> Bin.Du@amd.com/
>>>>>>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
>>>>>>>>> amdgpu/isp_v4_1_1.c#L132
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Pratap
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> It's a bit weird to see it even probe in this path in the first place.
>>>>>>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
>>>>>>>> right to me.
>>>>>>>>
>>>>>>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
>>>>>>>> ends up matching).
>>>>>>>>
>>>>>>>> Would a sensible solution be to reject mfd device types in
>>>>>>>> acpi_video_bus_probe()?
>>>>>>>
>>>>>>> Every platform device with LNXVIDEO in the device ID list will be
>>>>>>> matched and so probed.
>>>>>>>
>>>>>>> I'm wondering how those devices get that ID though.
>>>>>>
>>>>>> Yeah me too.  I was surprised an MFD device got it.
>>>>>>
>>>>>> Pratap - can you figure this out before we go too far in this path?
>>>>>>
>>>>> yes, MFD child devices in this case have the device ID as that of parent
>>>>> (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the
>>>>> MFD child devices are inheriting the parent's ACPI companion device and
>>>>> this is resulting in having the same parent's ACPI device ID.
>>>>>
>>>>> device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
>>>>> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
>>>>>
>>>>>> If they really shouldn't have LNXVIDEO fixing that may be a better
>>>>>> solution.
>>>>>>
>>>>> AMD ISP related MFD devices are using the same LNXVIDEO device ID even
>>>>> on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP
>>>>> device probe works and also camera works on 7.0-rc2 if I avoid
>>>>> inheriting ACPI companion of the parent (GPU) in the mfd-core.c
>>>>>
>>>>> // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
>>>>> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
>>>>>
>>>>> But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to
>>>>> be root caused.
>>>>>
>>>>
>>>> Possible cause may be.
>>>> 1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was
>>>> registered as an acpi_driver (static struct acpi_driver acpi_video_bus)
>>>> ,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct
>>>> acpi_device objects in the ACPI namespace. MFD children of GFX
>>>> (amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform
>>>> devices on the platform bus, they are completely invisible to
>>>> acpi_driver, so there is no chance of the ACPI video driver matching an
>>>> MFD child.
>>>> 2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was
>>>> converted to a platform_driver (static struct platform_driver
>>>> acpi_video_bus), it lives on the platform bus. When the kernel registers
>>>> a new platform device, it checks ALL registered platform drivers to see
>>>> if any match. The matching logic for acpi_match_table works like this:
>>>> - Get the platform device's ACPI companion (ACPI_COMPANION(dev))
>>>> - Check if the companion's HID/CID matches any entry in acpi_match_table
>>>> - If yes, the driver probes the device
>>>
>>> It does, but then the probe fails.  This is the problem that has been
>>> reported to start with.
>>
>> I guess I know what's going on.
>>
>> Every device that shares an ACPI companion with the ACPI video bus
>> device advertises itself as "LNXVIDEO", so udev looks for a module
>> matching that device ID and since the ACPI video driver is loaded, it
>> will not attempt to load anything else.
>>
>> It may be viable to use an auxiliary device for ACPI video bus device
>> representation, let me have a look at that.
> 
> So appended is a patch that works for me.
> 
> Please test it and let me know if it helps.
> 
Thanks Rafael. With your latest patch, acpi_video_bus_probe() is no 
longer called for ISP MFD child devices, which is good.

Tested-by: pratap.nirujogi@amd.com

However, automatic modprobe of ISP MFD devices is still an issue. This 
requires additional changes outside acpi driver (either in amdgpu or 
mfd-core) to fix it. We'll submit a separate patch to address this issue.

Thanks,
Pratap

> ---
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Subject: [PATCH v1] ACPI: video: Switch over to auxiliary bus type
> 
> Commit 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
> switched over the ACPI video bus driver from an ACPI driver to a platform
> driver, but that change introduced an unwanted and unexpected side effect.
> Namely, on some systems, the ACPI device object of the ACPI video bus
> device is an ACPI companion of multiple platform devices and, after
> adding video_device_ids[] as an acpi_match_table to the acpi_video_bus
> platform driver, all of those devices started to match that driver and
> its probe callback is invoked for all of them (it fails, but it leaves
> confusing message in the log).  Moreover, the MODULE_DEVICE_TABLE()
> of the ACPI video driver module matches all of the devices sharing the
> ACPI companion with the ACPI video bus device, so registering them does
> not cause any other modules to be loaded, so they are only probed
> against the ACPI video bus platform driver.
> 
> To address this, make the core ACPI device enumeration code create an
> auxiliary device for the ACPI video bus device object instead of a
> platform device and switch over the ACPI video bus driver (once again)
> to an auxiliary driver.
> 
> Auxiliary driver generally is a better match for ACPI video bus than
> platform driver, among other things because the ACPI video bus device
> does not require any resources to be allocated for it during
> enumeration.  It also allows the ACPI video bus driver to stop abusing
> device matching based on ACPI device IDs and it allows a special case
> to be dropped from acpi_create_platform_device() because that function
> need not worry about the ACPI video bus device any more.
> 
> Fixes: 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>   drivers/acpi/acpi_platform.c |    2 -
>   drivers/acpi/acpi_video.c    |   45 ++++++++++++++++++++---------------------
>   drivers/acpi/scan.c          |   47 +++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 70 insertions(+), 24 deletions(-)
> 
> --- a/drivers/acpi/acpi_platform.c
> +++ b/drivers/acpi/acpi_platform.c
> @@ -135,7 +135,7 @@ struct platform_device *acpi_create_plat
>                  }
>          }
> 
> -       if (adev->device_type == ACPI_BUS_TYPE_DEVICE && !adev->pnp.type.backlight) {
> +       if (adev->device_type == ACPI_BUS_TYPE_DEVICE) {
>                  LIST_HEAD(resource_list);
> 
>                  count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
> --- a/drivers/acpi/acpi_video.c
> +++ b/drivers/acpi/acpi_video.c
> @@ -9,6 +9,7 @@
> 
>   #define pr_fmt(fmt) "ACPI: video: " fmt
> 
> +#include <linux/auxiliary_bus.h>
>   #include <linux/kernel.h>
>   #include <linux/module.h>
>   #include <linux/init.h>
> @@ -21,7 +22,6 @@
>   #include <linux/sort.h>
>   #include <linux/pci.h>
>   #include <linux/pci_ids.h>
> -#include <linux/platform_device.h>
>   #include <linux/slab.h>
>   #include <linux/dmi.h>
>   #include <linux/suspend.h>
> @@ -77,8 +77,9 @@ static int register_count;
>   static DEFINE_MUTEX(register_count_mutex);
>   static DEFINE_MUTEX(video_list_lock);
>   static LIST_HEAD(video_bus_head);
> -static int acpi_video_bus_probe(struct platform_device *pdev);
> -static void acpi_video_bus_remove(struct platform_device *pdev);
> +static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
> +                               const struct auxiliary_device_id *id);
> +static void acpi_video_bus_remove(struct auxiliary_device *aux);
>   static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data);
> 
>   /*
> @@ -93,19 +94,16 @@ enum acpi_video_level_idx {
>          ACPI_VIDEO_FIRST_LEVEL,         /* actual supported levels begin here */
>   };
> 
> -static const struct acpi_device_id video_device_ids[] = {
> -       {ACPI_VIDEO_HID, 0},
> -       {"", 0},
> +static const struct auxiliary_device_id video_bus_auxiliary_id_table[] = {
> +       { .name = "acpi.video_bus" },
> +       {},
>   };
> -MODULE_DEVICE_TABLE(acpi, video_device_ids);
> +MODULE_DEVICE_TABLE(auxiliary, video_bus_auxiliary_id_table);
> 
> -static struct platform_driver acpi_video_bus = {
> +static struct auxiliary_driver acpi_video_bus = {
>          .probe = acpi_video_bus_probe,
>          .remove = acpi_video_bus_remove,
> -       .driver = {
> -               .name = "acpi-video",
> -               .acpi_match_table = video_device_ids,
> -       },
> +       .id_table = video_bus_auxiliary_id_table,
>   };
> 
>   struct acpi_video_bus_flags {
> @@ -1885,7 +1883,7 @@ static void acpi_video_dev_add_notify_ha
>   }
> 
>   static int acpi_video_bus_add_notify_handler(struct acpi_video_bus *video,
> -                                            struct platform_device *pdev)
> +                                            struct device *parent)
>   {
>          struct input_dev *input;
>          struct acpi_video_device *dev;
> @@ -1908,7 +1906,7 @@ static int acpi_video_bus_add_notify_han
>          input->phys = video->phys;
>          input->id.bustype = BUS_HOST;
>          input->id.product = 0x06;
> -       input->dev.parent = &pdev->dev;
> +       input->dev.parent = parent;
>          input->evbit[0] = BIT(EV_KEY);
>          set_bit(KEY_SWITCHVIDEOMODE, input->keybit);
>          set_bit(KEY_VIDEO_NEXT, input->keybit);
> @@ -1980,9 +1978,10 @@ static int acpi_video_bus_put_devices(st
> 
>   static int instance;
> 
> -static int acpi_video_bus_probe(struct platform_device *pdev)
> +static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
> +                               const struct auxiliary_device_id *id_unused)
>   {
> -       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
> +       struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
>          struct acpi_video_bus *video;
>          bool auto_detect;
>          int error;
> @@ -2019,7 +2018,7 @@ static int acpi_video_bus_probe(struct p
>                  instance++;
>          }
> 
> -       platform_set_drvdata(pdev, video);
> +       auxiliary_set_drvdata(aux_dev, video);
> 
>          video->device = device;
>          strscpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
> @@ -2068,7 +2067,7 @@ static int acpi_video_bus_probe(struct p
>              !auto_detect)
>                  acpi_video_bus_register_backlight(video);
> 
> -       error = acpi_video_bus_add_notify_handler(video, pdev);
> +       error = acpi_video_bus_add_notify_handler(video, &aux_dev->dev);
>          if (error)
>                  goto err_del;
> 
> @@ -2096,10 +2095,10 @@ err_free_video:
>          return error;
>   }
> 
> -static void acpi_video_bus_remove(struct platform_device *pdev)
> +static void acpi_video_bus_remove(struct auxiliary_device *aux_dev)
>   {
> -       struct acpi_video_bus *video = platform_get_drvdata(pdev);
> -       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
> +       struct acpi_video_bus *video = auxiliary_get_drvdata(aux_dev);
> +       struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
> 
>          acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
>                                         acpi_video_bus_notify);
> @@ -2163,7 +2162,7 @@ int acpi_video_register(void)
> 
>          dmi_check_system(video_dmi_table);
> 
> -       ret = platform_driver_register(&acpi_video_bus);
> +       ret = auxiliary_driver_register(&acpi_video_bus);
>          if (ret)
>                  goto leave;
> 
> @@ -2183,7 +2182,7 @@ void acpi_video_unregister(void)
>   {
>          mutex_lock(&register_count_mutex);
>          if (register_count) {
> -               platform_driver_unregister(&acpi_video_bus);
> +               auxiliary_driver_unregister(&acpi_video_bus);
>                  register_count = 0;
>                  may_report_brightness_keys = false;
>          }
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -6,6 +6,7 @@
>   #define pr_fmt(fmt) "ACPI: " fmt
> 
>   #include <linux/async.h>
> +#include <linux/auxiliary_bus.h>
>   #include <linux/module.h>
>   #include <linux/init.h>
>   #include <linux/slab.h>
> @@ -2192,6 +2193,46 @@ static acpi_status acpi_bus_check_add_2(
>          return acpi_bus_check_add(handle, false, (struct acpi_device **)ret_p);
>   }
> 
> +static void acpi_video_bus_device_release(struct device *dev)
> +{
> +       struct auxiliary_device *aux_dev = to_auxiliary_dev(dev);
> +
> +       kfree(aux_dev);
> +}
> +
> +static void acpi_create_video_bus_device(struct acpi_device *adev,
> +                                        struct acpi_device *parent)
> +{
> +       struct auxiliary_device *aux_dev;
> +       static unsigned int aux_dev_id;
> +
> +       aux_dev = kzalloc_obj(*aux_dev);
> +       if (!aux_dev)
> +               return;
> +
> +       aux_dev->id = aux_dev_id++;
> +       aux_dev->name = "video_bus";
> +       aux_dev->dev.parent = acpi_get_first_physical_node(parent);
> +       if (!aux_dev->dev.parent)
> +               goto err;
> +
> +       aux_dev->dev.release = acpi_video_bus_device_release;
> +
> +       if (auxiliary_device_init(aux_dev))
> +               goto err;
> +
> +       ACPI_COMPANION_SET(&aux_dev->dev, adev);
> +       if (__auxiliary_device_add(aux_dev, "acpi")) {
> +               auxiliary_device_uninit(aux_dev);
> +               goto err;
> +       }
> +
> +       return;
> +
> +err:
> +       kfree(aux_dev);
> +}
> +
>   struct acpi_scan_system_dev {
>          struct list_head node;
>          struct acpi_device *adev;
> @@ -2229,6 +2270,12 @@ static void acpi_default_enumeration(str
>                          sd->adev = device;
>                          list_add_tail(&sd->node, &acpi_scan_system_dev_list);
>                  }
> +       } else if (device->pnp.type.backlight) {
> +               struct acpi_device *parent;
> +
> +               parent = acpi_dev_parent(device);
> +               if (parent)
> +                       acpi_create_video_bus_device(device, parent);
>          } else {
>                  /* For a regular device object, create a platform device. */
>                  acpi_create_platform_device(device, NULL);
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v1] ACPI: video: Switch over to auxiliary bus type
  2026-03-09 20:24                 ` Nirujogi, Pratap
@ 2026-03-09 20:35                   ` Rafael J. Wysocki
  0 siblings, 0 replies; 13+ messages in thread
From: Rafael J. Wysocki @ 2026-03-09 20:35 UTC (permalink / raw)
  To: Nirujogi, Pratap
  Cc: Rafael J. Wysocki, Du, Bin, Mario Limonciello, W_Armin,
	benjamin.chan, king.li, linux-acpi, linux-kernel, regressions

On Mon, Mar 9, 2026 at 9:24 PM Nirujogi, Pratap <pnirujog@amd.com> wrote:
>
>
>
> On 3/9/2026 12:01 PM, Rafael J. Wysocki wrote:
> > Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> >
> >
> > On Monday, March 9, 2026 1:23:35 PM CET Rafael J. Wysocki wrote:
> >> On Mon, Mar 9, 2026 at 12:58 PM Rafael J. Wysocki <rafael@kernel.org> wrote:
> >>>
> >>> On Mon, Mar 9, 2026 at 9:11 AM Du, Bin <bin.du@amd.com> wrote:
> >>>>
> >>>>
> >>>>
> >>>> On 3/9/2026 11:52 AM, Nirujogi, Pratap wrote:
> >>>>>
> >>>>>
> >>>>> On 3/6/2026 7:45 AM, Mario Limonciello wrote:
> >>>>>> Caution: This message originated from an External Source. Use proper
> >>>>>> caution when opening attachments, clicking links, or responding.
> >>>>>>
> >>>>>>
> >>>>>> On 3/6/26 6:01 AM, Rafael J. Wysocki wrote:
> >>>>>>> On Fri, Mar 6, 2026 at 1:35 AM Mario Limonciello (AMD) (kernel.org)
> >>>>>>> <superm1@kernel.org> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 3/5/2026 5:11 PM, Nirujogi, Pratap wrote:
> >>>>>>>>> Hi Rafael,
> >>>>>>>>>
> >>>>>>>>> In kernel version 7.0-rc2, the AMDISP device reports the following
> >>>>>>>>> errors when created via mfd_add_hotplug_devices.
> >>>>>>>>>
> >>>>>>>>> [    5.236645] ACPI: video: Video Device [GFX0] (multi-head: yes  rom:
> >>>>>>>>> no  post: no)
> >>>>>>>>> [    5.236744] input: Video Bus as /devices/
> >>>>>>>>> pci0000:00/0000:00:08.1/0000:c3:00.0/amd_isp_capture.1.auto/input/
> >>>>>>>>> input21
> >>>>>>>>> [    5.236779] acpi device:14: Error installing notify handler
> >>>>>>>>> [    5.236782] acpi device:15: Error installing notify handler
> >>>>>>>>> [    5.236783] acpi device:16: Error installing notify handler
> >>>>>>>>> [    5.236784] acpi device:17: Error installing notify handler
> >>>>>>>>> [    5.236785] acpi device:18: Error installing notify handler
> >>>>>>>>> [    5.236786] acpi device:19: Error installing notify handler
> >>>>>>>>> [    5.236786] acpi device:1a: Error installing notify handler
> >>>>>>>>> [    5.236787] acpi device:1b: Error installing notify handler
> >>>>>>>>> [    5.236788] acpi device:1c: Error installing notify handler
> >>>>>>>>>
> >>>>>>>>> These failures indicate AMDISP device is incorrectly detected as ACPI
> >>>>>>>>> Video device while it is not.
> >>>>>>>>>
> >>>>>>>>> The seems like a regression caused by the change that converts the
> >>>>>>>>> ACPI
> >>>>>>>>> video device to a platform device (commit: 02c057ddefef5).
> >>>>>>>>>
> >>>>>>>>> Issue is not observed in 6.19-rc6, and also when this change is
> >>>>>>>>> reverted
> >>>>>>>>> in 7.0-rc2.
> >>>>>>>>>
> >>>>>>>>> I really appreciate your inputs on addressing this issue and
> >>>>>>>>> helping us
> >>>>>>>>> make progress on 7.0 rc2.
> >>>>>>>>>
> >>>>>>>>> Steps followed to reproduce the issue:
> >>>>>>>>>
> >>>>>>>>> 1. Apply AMDISP v9 patch series [1] on top of kernel v7.0-rc2
> >>>>>>>>> 2. Add NULL check for “dev->type” in isp_genpd_add_device() [2] (to
> >>>>>>>>> avoid kernel panic found in v7.0-rc2)
> >>>>>>>>> 3. Build kernel with:
> >>>>>>>>>        - CONFIG_AMD_ISP_PLATFORM=y
> >>>>>>>>>        - CONFIG_VIDEO_AMD_ISP4_CAPTURE=m
> >>>>>>>>> 4. Install kernel on AMDISP supported system (HP ZBook Ultra G1a)
> >>>>>>>>> 5. Boot system to see the failures
> >>>>>>>>>
> >>>>>>>>> [1] https://lore.kernel.org/all/20260302073020.148277-1-
> >>>>>>>>> Bin.Du@amd.com/
> >>>>>>>>> [2] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/amd/
> >>>>>>>>> amdgpu/isp_v4_1_1.c#L132
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>> Pratap
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>> It's a bit weird to see it even probe in this path in the first place.
> >>>>>>>> acpi_video_bus_probe() getting called with the mfd device doesn't seem
> >>>>>>>> right to me.
> >>>>>>>>
> >>>>>>>> I wonder if it's because ISP is an MFD device of GPU (and thus LNXVIDEO
> >>>>>>>> ends up matching).
> >>>>>>>>
> >>>>>>>> Would a sensible solution be to reject mfd device types in
> >>>>>>>> acpi_video_bus_probe()?
> >>>>>>>
> >>>>>>> Every platform device with LNXVIDEO in the device ID list will be
> >>>>>>> matched and so probed.
> >>>>>>>
> >>>>>>> I'm wondering how those devices get that ID though.
> >>>>>>
> >>>>>> Yeah me too.  I was surprised an MFD device got it.
> >>>>>>
> >>>>>> Pratap - can you figure this out before we go too far in this path?
> >>>>>>
> >>>>> yes, MFD child devices in this case have the device ID as that of parent
> >>>>> (GPU) i.e. LNXVIDEO. Its because when no acpi_match is specified, the
> >>>>> MFD child devices are inheriting the parent's ACPI companion device and
> >>>>> this is resulting in having the same parent's ACPI device ID.
> >>>>>
> >>>>> device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> >>>>> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> >>>>>
> >>>>>> If they really shouldn't have LNXVIDEO fixing that may be a better
> >>>>>> solution.
> >>>>>>
> >>>>> AMD ISP related MFD devices are using the same LNXVIDEO device ID even
> >>>>> on 6.19-rc4, no issues observed earlier. I can confirm automatic AMD ISP
> >>>>> device probe works and also camera works on 7.0-rc2 if I avoid
> >>>>> inheriting ACPI companion of the parent (GPU) in the mfd-core.c
> >>>>>
> >>>>> // device_set_node(&pdev->dev, acpi_fwnode_handle(adev ?: parent));
> >>>>> https://github.com/torvalds/linux/blob/master/drivers/mfd/mfd-core.c#L91
> >>>>>
> >>>>> But why this is an issue on 7.0-rc2 while it works on 6.19-rc4 needs to
> >>>>> be root caused.
> >>>>>
> >>>>
> >>>> Possible cause may be.
> >>>> 1. On 6.x (without commit 02c057ddefef5), the ACPI video driver was
> >>>> registered as an acpi_driver (static struct acpi_driver acpi_video_bus)
> >>>> ,  it lives on the ACPI bus (acpi_bus_type). It only binds to struct
> >>>> acpi_device objects in the ACPI namespace. MFD children of GFX
> >>>> (amd_isp_capture, amd_isp_i2c_designware, amdisp-pinctrl) are platform
> >>>> devices on the platform bus, they are completely invisible to
> >>>> acpi_driver, so there is no chance of the ACPI video driver matching an
> >>>> MFD child.
> >>>> 2. On 7.0 (with commit 02c057ddefef5), the ACPI video driver was
> >>>> converted to a platform_driver (static struct platform_driver
> >>>> acpi_video_bus), it lives on the platform bus. When the kernel registers
> >>>> a new platform device, it checks ALL registered platform drivers to see
> >>>> if any match. The matching logic for acpi_match_table works like this:
> >>>> - Get the platform device's ACPI companion (ACPI_COMPANION(dev))
> >>>> - Check if the companion's HID/CID matches any entry in acpi_match_table
> >>>> - If yes, the driver probes the device
> >>>
> >>> It does, but then the probe fails.  This is the problem that has been
> >>> reported to start with.
> >>
> >> I guess I know what's going on.
> >>
> >> Every device that shares an ACPI companion with the ACPI video bus
> >> device advertises itself as "LNXVIDEO", so udev looks for a module
> >> matching that device ID and since the ACPI video driver is loaded, it
> >> will not attempt to load anything else.
> >>
> >> It may be viable to use an auxiliary device for ACPI video bus device
> >> representation, let me have a look at that.
> >
> > So appended is a patch that works for me.
> >
> > Please test it and let me know if it helps.
> >
> Thanks Rafael. With your latest patch, acpi_video_bus_probe() is no
> longer called for ISP MFD child devices, which is good.
>
> Tested-by: pratap.nirujogi@amd.com

Thanks for the confirmation!

> However, automatic modprobe of ISP MFD devices is still an issue. This
> requires additional changes outside acpi driver (either in amdgpu or
> mfd-core) to fix it. We'll submit a separate patch to address this issue.

If you need help with this, please let me know.


> > ---
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > Subject: [PATCH v1] ACPI: video: Switch over to auxiliary bus type
> >
> > Commit 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
> > switched over the ACPI video bus driver from an ACPI driver to a platform
> > driver, but that change introduced an unwanted and unexpected side effect.
> > Namely, on some systems, the ACPI device object of the ACPI video bus
> > device is an ACPI companion of multiple platform devices and, after
> > adding video_device_ids[] as an acpi_match_table to the acpi_video_bus
> > platform driver, all of those devices started to match that driver and
> > its probe callback is invoked for all of them (it fails, but it leaves
> > confusing message in the log).  Moreover, the MODULE_DEVICE_TABLE()
> > of the ACPI video driver module matches all of the devices sharing the
> > ACPI companion with the ACPI video bus device, so registering them does
> > not cause any other modules to be loaded, so they are only probed
> > against the ACPI video bus platform driver.
> >
> > To address this, make the core ACPI device enumeration code create an
> > auxiliary device for the ACPI video bus device object instead of a
> > platform device and switch over the ACPI video bus driver (once again)
> > to an auxiliary driver.
> >
> > Auxiliary driver generally is a better match for ACPI video bus than
> > platform driver, among other things because the ACPI video bus device
> > does not require any resources to be allocated for it during
> > enumeration.  It also allows the ACPI video bus driver to stop abusing
> > device matching based on ACPI device IDs and it allows a special case
> > to be dropped from acpi_create_platform_device() because that function
> > need not worry about the ACPI video bus device any more.
> >
> > Fixes: 02c057ddefef ("ACPI: video: Convert the driver to a platform one")
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > ---
> >   drivers/acpi/acpi_platform.c |    2 -
> >   drivers/acpi/acpi_video.c    |   45 ++++++++++++++++++++---------------------
> >   drivers/acpi/scan.c          |   47 +++++++++++++++++++++++++++++++++++++++++++
> >   3 files changed, 70 insertions(+), 24 deletions(-)
> >
> > --- a/drivers/acpi/acpi_platform.c
> > +++ b/drivers/acpi/acpi_platform.c
> > @@ -135,7 +135,7 @@ struct platform_device *acpi_create_plat
> >                  }
> >          }
> >
> > -       if (adev->device_type == ACPI_BUS_TYPE_DEVICE && !adev->pnp.type.backlight) {
> > +       if (adev->device_type == ACPI_BUS_TYPE_DEVICE) {
> >                  LIST_HEAD(resource_list);
> >
> >                  count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
> > --- a/drivers/acpi/acpi_video.c
> > +++ b/drivers/acpi/acpi_video.c
> > @@ -9,6 +9,7 @@
> >
> >   #define pr_fmt(fmt) "ACPI: video: " fmt
> >
> > +#include <linux/auxiliary_bus.h>
> >   #include <linux/kernel.h>
> >   #include <linux/module.h>
> >   #include <linux/init.h>
> > @@ -21,7 +22,6 @@
> >   #include <linux/sort.h>
> >   #include <linux/pci.h>
> >   #include <linux/pci_ids.h>
> > -#include <linux/platform_device.h>
> >   #include <linux/slab.h>
> >   #include <linux/dmi.h>
> >   #include <linux/suspend.h>
> > @@ -77,8 +77,9 @@ static int register_count;
> >   static DEFINE_MUTEX(register_count_mutex);
> >   static DEFINE_MUTEX(video_list_lock);
> >   static LIST_HEAD(video_bus_head);
> > -static int acpi_video_bus_probe(struct platform_device *pdev);
> > -static void acpi_video_bus_remove(struct platform_device *pdev);
> > +static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
> > +                               const struct auxiliary_device_id *id);
> > +static void acpi_video_bus_remove(struct auxiliary_device *aux);
> >   static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data);
> >
> >   /*
> > @@ -93,19 +94,16 @@ enum acpi_video_level_idx {
> >          ACPI_VIDEO_FIRST_LEVEL,         /* actual supported levels begin here */
> >   };
> >
> > -static const struct acpi_device_id video_device_ids[] = {
> > -       {ACPI_VIDEO_HID, 0},
> > -       {"", 0},
> > +static const struct auxiliary_device_id video_bus_auxiliary_id_table[] = {
> > +       { .name = "acpi.video_bus" },
> > +       {},
> >   };
> > -MODULE_DEVICE_TABLE(acpi, video_device_ids);
> > +MODULE_DEVICE_TABLE(auxiliary, video_bus_auxiliary_id_table);
> >
> > -static struct platform_driver acpi_video_bus = {
> > +static struct auxiliary_driver acpi_video_bus = {
> >          .probe = acpi_video_bus_probe,
> >          .remove = acpi_video_bus_remove,
> > -       .driver = {
> > -               .name = "acpi-video",
> > -               .acpi_match_table = video_device_ids,
> > -       },
> > +       .id_table = video_bus_auxiliary_id_table,
> >   };
> >
> >   struct acpi_video_bus_flags {
> > @@ -1885,7 +1883,7 @@ static void acpi_video_dev_add_notify_ha
> >   }
> >
> >   static int acpi_video_bus_add_notify_handler(struct acpi_video_bus *video,
> > -                                            struct platform_device *pdev)
> > +                                            struct device *parent)
> >   {
> >          struct input_dev *input;
> >          struct acpi_video_device *dev;
> > @@ -1908,7 +1906,7 @@ static int acpi_video_bus_add_notify_han
> >          input->phys = video->phys;
> >          input->id.bustype = BUS_HOST;
> >          input->id.product = 0x06;
> > -       input->dev.parent = &pdev->dev;
> > +       input->dev.parent = parent;
> >          input->evbit[0] = BIT(EV_KEY);
> >          set_bit(KEY_SWITCHVIDEOMODE, input->keybit);
> >          set_bit(KEY_VIDEO_NEXT, input->keybit);
> > @@ -1980,9 +1978,10 @@ static int acpi_video_bus_put_devices(st
> >
> >   static int instance;
> >
> > -static int acpi_video_bus_probe(struct platform_device *pdev)
> > +static int acpi_video_bus_probe(struct auxiliary_device *aux_dev,
> > +                               const struct auxiliary_device_id *id_unused)
> >   {
> > -       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
> > +       struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
> >          struct acpi_video_bus *video;
> >          bool auto_detect;
> >          int error;
> > @@ -2019,7 +2018,7 @@ static int acpi_video_bus_probe(struct p
> >                  instance++;
> >          }
> >
> > -       platform_set_drvdata(pdev, video);
> > +       auxiliary_set_drvdata(aux_dev, video);
> >
> >          video->device = device;
> >          strscpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
> > @@ -2068,7 +2067,7 @@ static int acpi_video_bus_probe(struct p
> >              !auto_detect)
> >                  acpi_video_bus_register_backlight(video);
> >
> > -       error = acpi_video_bus_add_notify_handler(video, pdev);
> > +       error = acpi_video_bus_add_notify_handler(video, &aux_dev->dev);
> >          if (error)
> >                  goto err_del;
> >
> > @@ -2096,10 +2095,10 @@ err_free_video:
> >          return error;
> >   }
> >
> > -static void acpi_video_bus_remove(struct platform_device *pdev)
> > +static void acpi_video_bus_remove(struct auxiliary_device *aux_dev)
> >   {
> > -       struct acpi_video_bus *video = platform_get_drvdata(pdev);
> > -       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
> > +       struct acpi_video_bus *video = auxiliary_get_drvdata(aux_dev);
> > +       struct acpi_device *device = ACPI_COMPANION(&aux_dev->dev);
> >
> >          acpi_dev_remove_notify_handler(device, ACPI_DEVICE_NOTIFY,
> >                                         acpi_video_bus_notify);
> > @@ -2163,7 +2162,7 @@ int acpi_video_register(void)
> >
> >          dmi_check_system(video_dmi_table);
> >
> > -       ret = platform_driver_register(&acpi_video_bus);
> > +       ret = auxiliary_driver_register(&acpi_video_bus);
> >          if (ret)
> >                  goto leave;
> >
> > @@ -2183,7 +2182,7 @@ void acpi_video_unregister(void)
> >   {
> >          mutex_lock(&register_count_mutex);
> >          if (register_count) {
> > -               platform_driver_unregister(&acpi_video_bus);
> > +               auxiliary_driver_unregister(&acpi_video_bus);
> >                  register_count = 0;
> >                  may_report_brightness_keys = false;
> >          }
> > --- a/drivers/acpi/scan.c
> > +++ b/drivers/acpi/scan.c
> > @@ -6,6 +6,7 @@
> >   #define pr_fmt(fmt) "ACPI: " fmt
> >
> >   #include <linux/async.h>
> > +#include <linux/auxiliary_bus.h>
> >   #include <linux/module.h>
> >   #include <linux/init.h>
> >   #include <linux/slab.h>
> > @@ -2192,6 +2193,46 @@ static acpi_status acpi_bus_check_add_2(
> >          return acpi_bus_check_add(handle, false, (struct acpi_device **)ret_p);
> >   }
> >
> > +static void acpi_video_bus_device_release(struct device *dev)
> > +{
> > +       struct auxiliary_device *aux_dev = to_auxiliary_dev(dev);
> > +
> > +       kfree(aux_dev);
> > +}
> > +
> > +static void acpi_create_video_bus_device(struct acpi_device *adev,
> > +                                        struct acpi_device *parent)
> > +{
> > +       struct auxiliary_device *aux_dev;
> > +       static unsigned int aux_dev_id;
> > +
> > +       aux_dev = kzalloc_obj(*aux_dev);
> > +       if (!aux_dev)
> > +               return;
> > +
> > +       aux_dev->id = aux_dev_id++;
> > +       aux_dev->name = "video_bus";
> > +       aux_dev->dev.parent = acpi_get_first_physical_node(parent);
> > +       if (!aux_dev->dev.parent)
> > +               goto err;
> > +
> > +       aux_dev->dev.release = acpi_video_bus_device_release;
> > +
> > +       if (auxiliary_device_init(aux_dev))
> > +               goto err;
> > +
> > +       ACPI_COMPANION_SET(&aux_dev->dev, adev);
> > +       if (__auxiliary_device_add(aux_dev, "acpi")) {
> > +               auxiliary_device_uninit(aux_dev);
> > +               goto err;
> > +       }
> > +
> > +       return;
> > +
> > +err:
> > +       kfree(aux_dev);
> > +}
> > +
> >   struct acpi_scan_system_dev {
> >          struct list_head node;
> >          struct acpi_device *adev;
> > @@ -2229,6 +2270,12 @@ static void acpi_default_enumeration(str
> >                          sd->adev = device;
> >                          list_add_tail(&sd->node, &acpi_scan_system_dev_list);
> >                  }
> > +       } else if (device->pnp.type.backlight) {
> > +               struct acpi_device *parent;
> > +
> > +               parent = acpi_dev_parent(device);
> > +               if (parent)
> > +                       acpi_create_video_bus_device(device, parent);
> >          } else {
> >                  /* For a regular device object, create a platform device. */
> >                  acpi_create_platform_device(device, NULL);
> >
> >
> >
> >
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2026-03-09 20:35 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-05 23:11 [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Nirujogi, Pratap
2026-03-06  0:35 ` Mario Limonciello (AMD) (kernel.org)
2026-03-06 12:01   ` Rafael J. Wysocki
2026-03-06 12:45     ` Mario Limonciello
2026-03-06 13:28       ` Rafael J. Wysocki
2026-03-09  3:52       ` Nirujogi, Pratap
2026-03-09  8:11         ` Du, Bin
2026-03-09 11:58           ` Rafael J. Wysocki
2026-03-09 12:23             ` Rafael J. Wysocki
2026-03-09 16:01               ` [PATCH v1] ACPI: video: Switch over to auxiliary bus type Rafael J. Wysocki
2026-03-09 20:24                 ` Nirujogi, Pratap
2026-03-09 20:35                   ` Rafael J. Wysocki
2026-03-06 12:10 ` [REGRESSION] AMDISP failure with kernel v7.0-rc2 due to Commit: 02c057ddefef5 Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox