* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-06-28 14:34 ` [PATCH v3] " Ali Alaei
@ 2026-06-28 14:46 ` sashiko-bot
2026-07-13 17:16 ` Ali Alaei
` (2 subsequent siblings)
3 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-06-28 14:46 UTC (permalink / raw)
To: Ali Alaei; +Cc: linux-pci
> On Intel Arrow Lake-HX systems (e.g. Core Ultra 9 275HX on Acer Predator
> PH16-73), the VMD controller reports BUS_RESTRICT_CFG = 3 in the VMCONFIG
> register. The existing switch statement only handled values 0, 1, and 2,
> causing vmd_get_bus_number_start() to return -ENODEV and aborting the
> entire VMD probe. This leaves NVMe drives behind the VMD controller
> invisible to the kernel.
>
> Hardware registers (VMCAP/VMCONFIG at offsets 0x40/0x44):
> VMD 0000:00:0e.0 (8086:ad0b): VMCAP=0x000f, VMCONFIG=0x03b8
> BUS_RESTRICT_CFG(0x03b8) = (0x03b8 >> 8) & 0x3 = 3
>
> Add cfg=3 as a fallthrough to cfg=2, setting busn_start=224, which is
> the correct bus number base for this hardware.
>
> Also add a PCI_POSSIBLE_ERROR() guard after reading VMCONFIG: a failed
> config space read returns 0xFFFF, and BUS_RESTRICT_CFG(0xFFFF) = 3,
> so without this guard a removed or errored device would falsely match
> the new case 3 instead of being caught as an error.
>
> Signed-off-by: Ali Alaei <ali.alaei.tabatabaei@gmail.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260628143450.92492-1-ali.alaei.tabatabaei@gmail.com?part=1
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-06-28 14:34 ` [PATCH v3] " Ali Alaei
2026-06-28 14:46 ` sashiko-bot
@ 2026-07-13 17:16 ` Ali Alaei
2026-07-15 5:56 ` Manivannan Sadhasivam
2026-07-20 22:47 ` Bjorn Helgaas
3 siblings, 0 replies; 11+ messages in thread
From: Ali Alaei @ 2026-07-13 17:16 UTC (permalink / raw)
To: linux-pci
Cc: bhelgaas, lpieralisi, nirmal.patel, jonathan.derrick, kwilczynski,
mani, robh
Ping. Any feedback on this patch?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-06-28 14:34 ` [PATCH v3] " Ali Alaei
2026-06-28 14:46 ` sashiko-bot
2026-07-13 17:16 ` Ali Alaei
@ 2026-07-15 5:56 ` Manivannan Sadhasivam
2026-07-20 22:47 ` Bjorn Helgaas
3 siblings, 0 replies; 11+ messages in thread
From: Manivannan Sadhasivam @ 2026-07-15 5:56 UTC (permalink / raw)
To: linux-pci, Ali Alaei
Cc: bhelgaas, lpieralisi, nirmal.patel, jonathan.derrick, kwilczynski,
robh
On Sun, 28 Jun 2026 16:34:50 +0200, Ali Alaei wrote:
> On Intel Arrow Lake-HX systems (e.g. Core Ultra 9 275HX on Acer Predator
> PH16-73), the VMD controller reports BUS_RESTRICT_CFG = 3 in the VMCONFIG
> register. The existing switch statement only handled values 0, 1, and 2,
> causing vmd_get_bus_number_start() to return -ENODEV and aborting the
> entire VMD probe. This leaves NVMe drives behind the VMD controller
> invisible to the kernel.
>
> [...]
Applied, thanks!
[1/1] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
commit: 22b47bd49e45c2f8288ee6b760a6b23508d9d799
Best regards,
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-06-28 14:34 ` [PATCH v3] " Ali Alaei
` (2 preceding siblings ...)
2026-07-15 5:56 ` Manivannan Sadhasivam
@ 2026-07-20 22:47 ` Bjorn Helgaas
2026-07-21 12:47 ` Lin Mohan
2026-07-21 12:50 ` Lin Mohan
3 siblings, 2 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2026-07-20 22:47 UTC (permalink / raw)
To: Ali Alaei
Cc: linux-pci, bhelgaas, lpieralisi, nirmal.patel, jonathan.derrick,
kwilczynski, mani, robh
On Sun, Jun 28, 2026 at 04:34:50PM +0200, Ali Alaei wrote:
> On Intel Arrow Lake-HX systems (e.g. Core Ultra 9 275HX on Acer Predator
> PH16-73), the VMD controller reports BUS_RESTRICT_CFG = 3 in the VMCONFIG
> register. The existing switch statement only handled values 0, 1, and 2,
> causing vmd_get_bus_number_start() to return -ENODEV and aborting the
> entire VMD probe. This leaves NVMe drives behind the VMD controller
> invisible to the kernel.
>
> Hardware registers (VMCAP/VMCONFIG at offsets 0x40/0x44):
> VMD 0000:00:0e.0 (8086:ad0b): VMCAP=0x000f, VMCONFIG=0x03b8
> BUS_RESTRICT_CFG(0x03b8) = (0x03b8 >> 8) & 0x3 = 3
>
> Add cfg=3 as a fallthrough to cfg=2, setting busn_start=224, which is
> the correct bus number base for this hardware.
>
> Also add a PCI_POSSIBLE_ERROR() guard after reading VMCONFIG: a failed
> config space read returns 0xFFFF, and BUS_RESTRICT_CFG(0xFFFF) = 3,
> so without this guard a removed or errored device would falsely match
> the new case 3 instead of being caught as an error.
I suppose this should fix
https://bugzilla.kernel.org/show_bug.cgi?id=221136, which is a problem
on an Arrow-Lake-S system? I bcc'd the reporter, and we could add a
Reported-by: and/or Closes: tag if appropriate.
That report mentions a 8086:09ab VMD device, and it looks like this
patch addresses a 8086:ad0b device. I suppose there are lots of VMD
devices IDs that appear in lots of systems and implement this feature,
which the bugzilla suggests is called "Dynamic Bus Offset".
Given that this is apparently a new VMD mode, AFAIK there is no public
hardware spec for this, and the patch doesn't add any new code (and I
would expect a new feature to require some new code), it would really
be nice to have the Intel VMD maintainers chime in here.
> Signed-off-by: Ali Alaei <ali.alaei.tabatabaei@gmail.com>
> ---
> Changes in v3:
> - Move changelog to after '---' (was incorrectly in commit message body)
> - Add missing VMD maintainers to CC (Nirmal Patel, Jonathan Derrick)
>
> Changes in v2:
> - Add PCI_POSSIBLE_ERROR() guard after VMCONFIG read to prevent a
> failed config read (0xFFFF) from falsely matching case 3
>
> drivers/pci/controller/vmd.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> index xxxxxxx..yyyyyyy 100644
> --- a/drivers/pci/controller/vmd.c
> +++ b/drivers/pci/controller/vmd.c
> @@ -640,6 +640,8 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
> pci_read_config_word(dev, PCI_REG_VMCAP, ®);
> if (BUS_RESTRICT_CAP(reg)) {
> pci_read_config_word(dev, PCI_REG_VMCONFIG, ®);
> + if (PCI_POSSIBLE_ERROR(reg))
> + return -ENODEV;
>
> switch (BUS_RESTRICT_CFG(reg)) {
> case 0:
> @@ -651,6 +653,7 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
> case 1:
> vmd->busn_start = 128;
> break;
> + case 3:
> case 2:
> vmd->busn_start = 224;
> break;
> --
> 2.49.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-07-20 22:47 ` Bjorn Helgaas
@ 2026-07-21 12:47 ` Lin Mohan
2026-07-21 12:50 ` Lin Mohan
1 sibling, 0 replies; 11+ messages in thread
From: Lin Mohan @ 2026-07-21 12:47 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: Ali Alaei, linux-pci@vger.kernel.org
> On Jul 21, 2026, at 06:47, Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> On Sun, Jun 28, 2026 at 04:34:50PM +0200, Ali Alaei wrote:
>> On Intel Arrow Lake-HX systems (e.g. Core Ultra 9 275HX on Acer Predator
>> PH16-73), the VMD controller reports BUS_RESTRICT_CFG = 3 in the VMCONFIG
>> register. The existing switch statement only handled values 0, 1, and 2,
>> causing vmd_get_bus_number_start() to return -ENODEV and aborting the
>> entire VMD probe. This leaves NVMe drives behind the VMD controller
>> invisible to the kernel.
>>
>> Hardware registers (VMCAP/VMCONFIG at offsets 0x40/0x44):
>> VMD 0000:00:0e.0 (8086:ad0b): VMCAP=0x000f, VMCONFIG=0x03b8
>> BUS_RESTRICT_CFG(0x03b8) = (0x03b8 >> 8) & 0x3 = 3
>>
>> Add cfg=3 as a fallthrough to cfg=2, setting busn_start=224, which is
>> the correct bus number base for this hardware.
>>
>> Also add a PCI_POSSIBLE_ERROR() guard after reading VMCONFIG: a failed
>> config space read returns 0xFFFF, and BUS_RESTRICT_CFG(0xFFFF) = 3,
>> so without this guard a removed or errored device would falsely match
>> the new case 3 instead of being caught as an error.
>
> I suppose this should fix
> https://bugzilla.kernel.org/show_bug.cgi?id=221136, which is a problem
> on an Arrow-Lake-S system? I bcc'd the reporter, and we could add a
> Reported-by: and/or Closes: tag if appropriate.
>
> That report mentions a 8086:09ab VMD device, and it looks like this
> patch addresses a 8086:ad0b device. I suppose there are lots of VMD
> devices IDs that appear in lots of systems and implement this feature,
> which the bugzilla suggests is called "Dynamic Bus Offset".
>
> Given that this is apparently a new VMD mode, AFAIK there is no public
> hardware spec for this, and the patch doesn't add any new code (and I
> would expect a new feature to require some new code), it would really
> be nice to have the Intel VMD maintainers chime in here.
>
>> Signed-off-by: Ali Alaei <ali.alaei.tabatabaei@gmail.com>
>> ---
>> Changes in v3:
>> - Move changelog to after '---' (was incorrectly in commit message body)
>> - Add missing VMD maintainers to CC (Nirmal Patel, Jonathan Derrick)
>>
>> Changes in v2:
>> - Add PCI_POSSIBLE_ERROR() guard after VMCONFIG read to prevent a
>> failed config read (0xFFFF) from falsely matching case 3
>>
>> drivers/pci/controller/vmd.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
>> index xxxxxxx..yyyyyyy 100644
>> --- a/drivers/pci/controller/vmd.c
>> +++ b/drivers/pci/controller/vmd.c
>> @@ -640,6 +640,8 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
>> pci_read_config_word(dev, PCI_REG_VMCAP, ®);
>> if (BUS_RESTRICT_CAP(reg)) {
>> pci_read_config_word(dev, PCI_REG_VMCONFIG, ®);
>> + if (PCI_POSSIBLE_ERROR(reg))
>> + return -ENODEV;
>>
>> switch (BUS_RESTRICT_CFG(reg)) {
>> case 0:
>> @@ -651,6 +653,7 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
>> case 1:
>> vmd->busn_start = 128;
>> break;
>> + case 3:
>> case 2:
>> vmd->busn_start = 224;
>> break;
>> --
>> 2.49.0
Hi Bjorn,
I am Lin Mohan, the reporter of
https://bugzilla.kernel.org/show_bug.cgi?id=221137.
Since commit 22b47bd49e45 ("PCI: vmd: Handle BUS_RESTRICT_CFG value 3
for Arrow Lake-HX") has already been merged, could you please add the
following tags in a follow-up fix?
Reported-by: Lin Mohan <linmhwork@outlook.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221137
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221136
This patch fixes the same Mode 3 / Dynamic Bus Offset issue I
reported on the 8086:09ab VMD device (Arrow Lake-S).
Thanks,
Lin Mohan
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3] PCI: vmd: Handle BUS_RESTRICT_CFG value 3 for Arrow Lake-HX
2026-07-20 22:47 ` Bjorn Helgaas
2026-07-21 12:47 ` Lin Mohan
@ 2026-07-21 12:50 ` Lin Mohan
1 sibling, 0 replies; 11+ messages in thread
From: Lin Mohan @ 2026-07-21 12:50 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: Ali Alaei, linux-pci@vger.kernel.org
> On Jul 21, 2026, at 06:47, Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> On Sun, Jun 28, 2026 at 04:34:50PM +0200, Ali Alaei wrote:
>> On Intel Arrow Lake-HX systems (e.g. Core Ultra 9 275HX on Acer Predator
>> PH16-73), the VMD controller reports BUS_RESTRICT_CFG = 3 in the VMCONFIG
>> register. The existing switch statement only handled values 0, 1, and 2,
>> causing vmd_get_bus_number_start() to return -ENODEV and aborting the
>> entire VMD probe. This leaves NVMe drives behind the VMD controller
>> invisible to the kernel.
>>
>> Hardware registers (VMCAP/VMCONFIG at offsets 0x40/0x44):
>> VMD 0000:00:0e.0 (8086:ad0b): VMCAP=0x000f, VMCONFIG=0x03b8
>> BUS_RESTRICT_CFG(0x03b8) = (0x03b8 >> 8) & 0x3 = 3
>>
>> Add cfg=3 as a fallthrough to cfg=2, setting busn_start=224, which is
>> the correct bus number base for this hardware.
>>
>> Also add a PCI_POSSIBLE_ERROR() guard after reading VMCONFIG: a failed
>> config space read returns 0xFFFF, and BUS_RESTRICT_CFG(0xFFFF) = 3,
>> so without this guard a removed or errored device would falsely match
>> the new case 3 instead of being caught as an error.
>
> I suppose this should fix
> https://bugzilla.kernel.org/show_bug.cgi?id=221136, which is a problem
> on an Arrow-Lake-S system? I bcc'd the reporter, and we could add a
> Reported-by: and/or Closes: tag if appropriate.
>
> That report mentions a 8086:09ab VMD device, and it looks like this
> patch addresses a 8086:ad0b device. I suppose there are lots of VMD
> devices IDs that appear in lots of systems and implement this feature,
> which the bugzilla suggests is called "Dynamic Bus Offset".
>
> Given that this is apparently a new VMD mode, AFAIK there is no public
> hardware spec for this, and the patch doesn't add any new code (and I
> would expect a new feature to require some new code), it would really
> be nice to have the Intel VMD maintainers chime in here.
>
>> Signed-off-by: Ali Alaei <ali.alaei.tabatabaei@gmail.com>
>> ---
>> Changes in v3:
>> - Move changelog to after '---' (was incorrectly in commit message body)
>> - Add missing VMD maintainers to CC (Nirmal Patel, Jonathan Derrick)
>>
>> Changes in v2:
>> - Add PCI_POSSIBLE_ERROR() guard after VMCONFIG read to prevent a
>> failed config read (0xFFFF) from falsely matching case 3
>>
>> drivers/pci/controller/vmd.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
>> index xxxxxxx..yyyyyyy 100644
>> --- a/drivers/pci/controller/vmd.c
>> +++ b/drivers/pci/controller/vmd.c
>> @@ -640,6 +640,8 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
>> pci_read_config_word(dev, PCI_REG_VMCAP, ®);
>> if (BUS_RESTRICT_CAP(reg)) {
>> pci_read_config_word(dev, PCI_REG_VMCONFIG, ®);
>> + if (PCI_POSSIBLE_ERROR(reg))
>> + return -ENODEV;
>>
>> switch (BUS_RESTRICT_CFG(reg)) {
>> case 0:
>> @@ -651,6 +653,7 @@ static int vmd_get_bus_number_start(struct vmd_dev *vmd)
>> case 1:
>> vmd->busn_start = 128;
>> break;
>> + case 3:
>> case 2:
>> vmd->busn_start = 224;
>> break;
>> —
>> 2.49.0
Hi Bjorn,
I am Lin Mohan, the reporter of
https://bugzilla.kernel.org/show_bug.cgi?id=221137.
Since commit 22b47bd49e45 ("PCI: vmd: Handle BUS_RESTRICT_CFG value 3
for Arrow Lake-HX") has already been merged, could you please add the
following tags in a follow-up fix?
Reported-by: Lin Mohan <linmhwork@outlook.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221137
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221136
This patch fixes the same Mode 3 / Dynamic Bus Offset issue I
reported on the 8086:09ab VMD device (Arrow Lake-S).
Thanks,
Lin Mohan
^ permalink raw reply [flat|nested] 11+ messages in thread