Linux CXL
 help / color / mirror / Atom feed
* Re: [PATCH] pci-ids.rst: Add Red Hat pci-id for AMD IOMMU device
       [not found] <20250304183747.639382-1-suravee.suthikulpanit@amd.com>
@ 2025-03-10 13:57 ` Jonathan Cameron
  2025-03-11  8:08   ` Gerd Hoffmann
  0 siblings, 1 reply; 3+ messages in thread
From: Jonathan Cameron @ 2025-03-10 13:57 UTC (permalink / raw)
  To: Suravee Suthikulpanit
  Cc: qemu-devel, pbonzini, mtosatti, mst, marcel.apfelbaum, jon.grimm,
	santosh.shukla, vasant.hegde, Wei.Huang2, kraxel, bsd, berrange,
	ddutile, linux-cxl

On Tue, 4 Mar 2025 18:37:47 +0000
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> wrote:

> The QEMU-emulated AMD IOMMU PCI device is implemented based on the AMD I/O
> Virtualization Technology (IOMMU) Specification [1]. The PCI id for this
> device is platform-specific.
> 
> Currently, the QEMU-emulated AMD IOMMU device is using AMD vendor id and
> undefined device id.
> 
> Therefore, change the vendor id to Red Hat and request a new QEMU-specific
> device id.
> 
> [1] https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/specifications/48882_IOMMU.pdf
> 
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>

As a heads up, I believe we have a similar problem with a few of the CXL IDs.
The root port and type 3 device both use Intel IDs that were not reserved
for this purpose.  VID=0x8086, DID=0x7075 and DID=0x0d93

Switch ports and switch-cci are using valid Hisilicon IDs that are for
emulation of these device only and are registered in our tracker
for these IDs so won't get 'reused'.

In both those cases the driver binds on class code in Linux so an ID
change to resolve this would be fine for Linux - I can't speak for
other OS.

Jonathan




> ---
>  docs/specs/pci-ids.rst | 2 ++
>  hw/i386/amd_iommu.c    | 3 ++-
>  include/hw/pci/pci.h   | 1 +
>  3 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/docs/specs/pci-ids.rst b/docs/specs/pci-ids.rst
> index 261b0f359f..2416a70a2d 100644
> --- a/docs/specs/pci-ids.rst
> +++ b/docs/specs/pci-ids.rst
> @@ -100,6 +100,8 @@ PCI devices (other than virtio):
>    PCI UFS device (``-device ufs``)
>  1b36:0014
>    PCI RISC-V IOMMU device
> +1b36:0015
> +  PCI AMD IOMMU device (``-device amd-iommu``)
>  
>  All these devices are documented in :doc:`index`.
>  
> diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c
> index dda1a5781f..4d8564249c 100644
> --- a/hw/i386/amd_iommu.c
> +++ b/hw/i386/amd_iommu.c
> @@ -1766,7 +1766,8 @@ static void amdvi_pci_class_init(ObjectClass *klass, void *data)
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
>  
> -    k->vendor_id = PCI_VENDOR_ID_AMD;
> +    k->vendor_id = PCI_VENDOR_ID_REDHAT;
> +    k->device_id = PCI_DEVICE_ID_REDHAT_AMD_IOMMU;
>      k->class_id = 0x0806;
>      k->realize = amdvi_pci_realize;
>  
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index 4002bbeebd..da44e6673d 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -117,6 +117,7 @@ extern bool pci_available;
>  #define PCI_DEVICE_ID_REDHAT_ACPI_ERST   0x0012
>  #define PCI_DEVICE_ID_REDHAT_UFS         0x0013
>  #define PCI_DEVICE_ID_REDHAT_RISCV_IOMMU 0x0014
> +#define PCI_DEVICE_ID_REDHAT_AMD_IOMMU   0x0015
>  #define PCI_DEVICE_ID_REDHAT_QXL         0x0100
>  
>  #define FMT_PCIBUS                      PRIx64


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

* Re: [PATCH] pci-ids.rst: Add Red Hat pci-id for AMD IOMMU device
  2025-03-10 13:57 ` [PATCH] pci-ids.rst: Add Red Hat pci-id for AMD IOMMU device Jonathan Cameron
@ 2025-03-11  8:08   ` Gerd Hoffmann
  2025-03-12 18:18     ` Jonathan Cameron
  0 siblings, 1 reply; 3+ messages in thread
From: Gerd Hoffmann @ 2025-03-11  8:08 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Suravee Suthikulpanit, qemu-devel, pbonzini, mtosatti, mst,
	marcel.apfelbaum, jon.grimm, santosh.shukla, vasant.hegde,
	Wei.Huang2, bsd, berrange, ddutile, linux-cxl

  Hi,

> As a heads up, I believe we have a similar problem with a few of the CXL IDs.
> The root port and type 3 device both use Intel IDs that were not reserved
> for this purpose.  VID=0x8086, DID=0x7075 and DID=0x0d93

Essentially we have two kinds of PCI devices in qemu.

 * The ones which try to mimic existing hardware, they usually have the
   PCI ID of the device they are emulating (and use the qemu subsystem ID).
   The classic example is the cirrus vga.  There are also many intel
   chipset devices for piix4 ('pc' machine type) and ich9 ('q35' machine
   type) with intel IDs.

 * The ones which are PCI class implementations and do not need a
   specific ID for drivers to accept them.  Most of them have a
   PCI device ID from the 1b36 vendor ID range.

The former tend to be older devices (before hardware standardization was
a thing, also before we got a range from 1b36 for qemu), and the latter
tend to be newer devices.  There are also a bunch of exceptions for
historical reasons.  The ahci emulation has a ich9 id.  xhci even has
two variants (one mimicking a NEC host adapter, one with qemu device id).

So, in short, using the intel IDs is not necessarily a problem.  Depends
a bit on what kind of device we are talking about.  For PCI class
devices it usually is more useful to have a qemu ID though.

> Switch ports and switch-cci are using valid Hisilicon IDs that are for
> emulation of these device only and are registered in our tracker
> for these IDs so won't get 'reused'.

That is perfectly fine.  There is no need to change IDs, although it
makes sense to document that fact in docs/specs/pci-ids.rst

Moving them to qemu pci id range is an option too if you prefer that.
Your choice.

take care,
  Gerd


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

* Re: [PATCH] pci-ids.rst: Add Red Hat pci-id for AMD IOMMU device
  2025-03-11  8:08   ` Gerd Hoffmann
@ 2025-03-12 18:18     ` Jonathan Cameron
  0 siblings, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2025-03-12 18:18 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Suravee Suthikulpanit, qemu-devel, pbonzini, mtosatti, mst,
	marcel.apfelbaum, jon.grimm, santosh.shukla, vasant.hegde,
	Wei.Huang2, bsd, berrange, ddutile, linux-cxl

On Tue, 11 Mar 2025 09:08:06 +0100
Gerd Hoffmann <kraxel@redhat.com> wrote:

>   Hi,
> 
> > As a heads up, I believe we have a similar problem with a few of the CXL IDs.
> > The root port and type 3 device both use Intel IDs that were not reserved
> > for this purpose.  VID=0x8086, DID=0x7075 and DID=0x0d93  
> 
> Essentially we have two kinds of PCI devices in qemu.
> 
>  * The ones which try to mimic existing hardware, they usually have the
>    PCI ID of the device they are emulating (and use the qemu subsystem ID).
>    The classic example is the cirrus vga.  There are also many intel
>    chipset devices for piix4 ('pc' machine type) and ich9 ('q35' machine
>    type) with intel IDs.
> 
>  * The ones which are PCI class implementations and do not need a
>    specific ID for drivers to accept them.  Most of them have a
>    PCI device ID from the 1b36 vendor ID range.
> 
> The former tend to be older devices (before hardware standardization was
> a thing, also before we got a range from 1b36 for qemu), and the latter
> tend to be newer devices.  There are also a bunch of exceptions for
> historical reasons.  The ahci emulation has a ich9 id.  xhci even has
> two variants (one mimicking a NEC host adapter, one with qemu device id).
> 
> So, in short, using the intel IDs is not necessarily a problem.  Depends
> a bit on what kind of device we are talking about.  For PCI class
> devices it usually is more useful to have a qemu ID though.

They are not valid IDs, so they may get used in future for real
hardware of an entirely different type. We don't want these to
correspond to real hardware either because the aim is to test
out corners of the spec, so we may well implement completely different
sets of features to any real implementation.

> 
> > Switch ports and switch-cci are using valid Hisilicon IDs that are for
> > emulation of these device only and are registered in our tracker
> > for these IDs so won't get 'reused'.  
> 
> That is perfectly fine.  There is no need to change IDs, although it
> makes sense to document that fact in docs/specs/pci-ids.rst

Ah. I wasn't aware of the ID space reserved for QEMU or that doc.

We can leave the HiSilicon ones alone.  I'll sort a docs patch for
the 3 of those soon.

For the Intel ones can I have a pair for the root port and the CXL
type 3 device (so 2 IDs)?  We will probably need one shortly for
the type2 emulation test device as well.

Thanks,

Jonathan


> 
> Moving them to qemu pci id range is an option too if you prefer that.
> Your choice.
> 
> take care,
>   Gerd
> 
> 


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

end of thread, other threads:[~2025-03-12 18:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20250304183747.639382-1-suravee.suthikulpanit@amd.com>
2025-03-10 13:57 ` [PATCH] pci-ids.rst: Add Red Hat pci-id for AMD IOMMU device Jonathan Cameron
2025-03-11  8:08   ` Gerd Hoffmann
2025-03-12 18:18     ` Jonathan Cameron

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