diff mbox series

[for-4.17?] x86/pvh: report ACPI VFCT table to dom0 if present

Message ID 20221108135516.62775-1-roger.pau@citrix.com (mailing list archive)
State New, archived
Headers show
Series [for-4.17?] x86/pvh: report ACPI VFCT table to dom0 if present | expand

Commit Message

Roger Pau Monné Nov. 8, 2022, 1:55 p.m. UTC
The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
from the firmware instead of doing it on the PCI ROM on the physical
device.

As such, this needs to be available for PVH dom0 to access, or else
the GPU won't work.

Reported-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
This is a bugfix, but given PVH dom0 is still experimental I'm not
sure it would qualify for the release.  OTOH being experimental means
there are no guarantees it will work, so the change is unlikely to
make this any worse.
---
 xen/arch/x86/hvm/dom0_build.c | 1 +
 xen/include/acpi/actbl3.h     | 1 +
 2 files changed, 2 insertions(+)

Comments

Huang Rui Nov. 8, 2022, 2:42 p.m. UTC | #1
On Tue, Nov 08, 2022 at 09:55:16PM +0800, Roger Pau Monne wrote:
> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> from the firmware instead of doing it on the PCI ROM on the physical
> device.
> 
> As such, this needs to be available for PVH dom0 to access, or else
> the GPU won't work.
> 
> Reported-by: Huang Rui <ray.huang@amd.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> This is a bugfix, but given PVH dom0 is still experimental I'm not
> sure it would qualify for the release.  OTOH being experimental means
> there are no guarantees it will work, so the change is unlikely to
> make this any worse.


Yes, thanks Roger! AMD GPU needs a Video BIOS which needs to do the
initialization for hardware. We use ACPI VFCT table to expose the VBIOS rom
image even on the Xen PVH dom0, so we need to add the related signature in
Xen as well.

Acked-and-Tested-by: Huang Rui <ray.huang@amd.com>

> ---
>  xen/arch/x86/hvm/dom0_build.c | 1 +
>  xen/include/acpi/actbl3.h     | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
> index 1864d048a1..307edc6a8c 100644
> --- a/xen/arch/x86/hvm/dom0_build.c
> +++ b/xen/arch/x86/hvm/dom0_build.c
> @@ -924,6 +924,7 @@ static bool __init pvh_acpi_table_allowed(const char *sig,
>          ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_FACS, ACPI_SIG_PSDT,
>          ACPI_SIG_SSDT, ACPI_SIG_SBST, ACPI_SIG_MCFG, ACPI_SIG_SLIC,
>          ACPI_SIG_MSDM, ACPI_SIG_WDAT, ACPI_SIG_FPDT, ACPI_SIG_S3PT,
> +        ACPI_SIG_VFCT,
>      };
>      unsigned int i;
>  
> diff --git a/xen/include/acpi/actbl3.h b/xen/include/acpi/actbl3.h
> index 0a6778421f..6858d3e60f 100644
> --- a/xen/include/acpi/actbl3.h
> +++ b/xen/include/acpi/actbl3.h
> @@ -79,6 +79,7 @@
>  #define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */
>  #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
>  #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
> +#define ACPI_SIG_VFCT           "VFCT"	/* AMD Video BIOS */
>  
>  /*
>   * All tables must be byte-packed to match the ACPI specification, since
> -- 
> 2.37.3
>
Jan Beulich Nov. 8, 2022, 3:56 p.m. UTC | #2
On 08.11.2022 14:55, Roger Pau Monne wrote:
> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> from the firmware instead of doing it on the PCI ROM on the physical
> device.

I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
under Linux'es include/acpi/. I don't mind the addition that you're
doing, but there needs to be a pointer to a sufficiently "official"
spec.

Jan

> As such, this needs to be available for PVH dom0 to access, or else
> the GPU won't work.
> 
> Reported-by: Huang Rui <ray.huang@amd.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> This is a bugfix, but given PVH dom0 is still experimental I'm not
> sure it would qualify for the release.  OTOH being experimental means
> there are no guarantees it will work, so the change is unlikely to
> make this any worse.
> ---
>  xen/arch/x86/hvm/dom0_build.c | 1 +
>  xen/include/acpi/actbl3.h     | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
> index 1864d048a1..307edc6a8c 100644
> --- a/xen/arch/x86/hvm/dom0_build.c
> +++ b/xen/arch/x86/hvm/dom0_build.c
> @@ -924,6 +924,7 @@ static bool __init pvh_acpi_table_allowed(const char *sig,
>          ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_FACS, ACPI_SIG_PSDT,
>          ACPI_SIG_SSDT, ACPI_SIG_SBST, ACPI_SIG_MCFG, ACPI_SIG_SLIC,
>          ACPI_SIG_MSDM, ACPI_SIG_WDAT, ACPI_SIG_FPDT, ACPI_SIG_S3PT,
> +        ACPI_SIG_VFCT,
>      };
>      unsigned int i;
>  
> diff --git a/xen/include/acpi/actbl3.h b/xen/include/acpi/actbl3.h
> index 0a6778421f..6858d3e60f 100644
> --- a/xen/include/acpi/actbl3.h
> +++ b/xen/include/acpi/actbl3.h
> @@ -79,6 +79,7 @@
>  #define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */
>  #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
>  #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
> +#define ACPI_SIG_VFCT           "VFCT"	/* AMD Video BIOS */
>  
>  /*
>   * All tables must be byte-packed to match the ACPI specification, since
Huang Rui Nov. 8, 2022, 4:16 p.m. UTC | #3
On Tue, Nov 08, 2022 at 11:56:17PM +0800, Jan Beulich wrote:
> On 08.11.2022 14:55, Roger Pau Monne wrote:
> > The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> > from the firmware instead of doing it on the PCI ROM on the physical
> > device.
> 
> I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
> under Linux'es include/acpi/. I don't mind the addition that you're
> doing, but there needs to be a pointer to a sufficiently "official"
> spec.

Thanks! In fact, this is defined by AMD atombios (VBIOS), we have up
streamed this in the Linux kenrel. You can see more details here:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/atombios.h

Thanks,
Ray

> 
> Jan
> 
> > As such, this needs to be available for PVH dom0 to access, or else
> > the GPU won't work.
> > 
> > Reported-by: Huang Rui <ray.huang@amd.com>
> > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> > ---
> > This is a bugfix, but given PVH dom0 is still experimental I'm not
> > sure it would qualify for the release.  OTOH being experimental means
> > there are no guarantees it will work, so the change is unlikely to
> > make this any worse.
> > ---
> >  xen/arch/x86/hvm/dom0_build.c | 1 +
> >  xen/include/acpi/actbl3.h     | 1 +
> >  2 files changed, 2 insertions(+)
> > 
> > diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
> > index 1864d048a1..307edc6a8c 100644
> > --- a/xen/arch/x86/hvm/dom0_build.c
> > +++ b/xen/arch/x86/hvm/dom0_build.c
> > @@ -924,6 +924,7 @@ static bool __init pvh_acpi_table_allowed(const char *sig,
> >          ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_FACS, ACPI_SIG_PSDT,
> >          ACPI_SIG_SSDT, ACPI_SIG_SBST, ACPI_SIG_MCFG, ACPI_SIG_SLIC,
> >          ACPI_SIG_MSDM, ACPI_SIG_WDAT, ACPI_SIG_FPDT, ACPI_SIG_S3PT,
> > +        ACPI_SIG_VFCT,
> >      };
> >      unsigned int i;
> >  
> > diff --git a/xen/include/acpi/actbl3.h b/xen/include/acpi/actbl3.h
> > index 0a6778421f..6858d3e60f 100644
> > --- a/xen/include/acpi/actbl3.h
> > +++ b/xen/include/acpi/actbl3.h
> > @@ -79,6 +79,7 @@
> >  #define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */
> >  #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
> >  #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
> > +#define ACPI_SIG_VFCT           "VFCT"	/* AMD Video BIOS */
> >  
> >  /*
> >   * All tables must be byte-packed to match the ACPI specification, since
>
Roger Pau Monné Nov. 8, 2022, 4:31 p.m. UTC | #4
On Tue, Nov 08, 2022 at 04:56:17PM +0100, Jan Beulich wrote:
> On 08.11.2022 14:55, Roger Pau Monne wrote:
> > The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> > from the firmware instead of doing it on the PCI ROM on the physical
> > device.
> 
> I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
> under Linux'es include/acpi/. I don't mind the addition that you're
> doing, but there needs to be a pointer to a sufficiently "official"
> spec.

I've also asked for some kind of official spec, as I would assume it
should be in:

https://uefi.org/acpi

With the rest of tables not in the spec itself, but there's none.

I could add a link to the Linux header, but that's suboptimal IMO.

Are you fine with this as-is, or would you like me to elaborate about
the lack of an official spec in the commit description?

Thanks, Roger.
Jan Beulich Nov. 8, 2022, 4:33 p.m. UTC | #5
On 08.11.2022 17:16, Huang Rui wrote:
> On Tue, Nov 08, 2022 at 11:56:17PM +0800, Jan Beulich wrote:
>> On 08.11.2022 14:55, Roger Pau Monne wrote:
>>> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
>>> from the firmware instead of doing it on the PCI ROM on the physical
>>> device.
>>
>> I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
>> under Linux'es include/acpi/. I don't mind the addition that you're
>> doing, but there needs to be a pointer to a sufficiently "official"
>> spec.
> 
> Thanks! In fact, this is defined by AMD atombios (VBIOS), we have up
> streamed this in the Linux kenrel. You can see more details here:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/atombios.h

I can see about two dozen lines at the bottom of that file, with
effectively no helpful comments at all. I'm afraid I don't view
this as "more details", let alone something replacing a spec.
There at least needs to be enough to be sure that "VFCT" is really
firmly reserved for this and only this purpose within the overall
ACPI table name space.

Jan
Jan Beulich Nov. 8, 2022, 4:35 p.m. UTC | #6
On 08.11.2022 17:31, Roger Pau Monné wrote:
> On Tue, Nov 08, 2022 at 04:56:17PM +0100, Jan Beulich wrote:
>> On 08.11.2022 14:55, Roger Pau Monne wrote:
>>> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
>>> from the firmware instead of doing it on the PCI ROM on the physical
>>> device.
>>
>> I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
>> under Linux'es include/acpi/. I don't mind the addition that you're
>> doing, but there needs to be a pointer to a sufficiently "official"
>> spec.
> 
> I've also asked for some kind of official spec, as I would assume it
> should be in:
> 
> https://uefi.org/acpi
> 
> With the rest of tables not in the spec itself, but there's none.
> 
> I could add a link to the Linux header, but that's suboptimal IMO.
> 
> Are you fine with this as-is, or would you like me to elaborate about
> the lack of an official spec in the commit description?

A pointer to the Linux bits is better than nothing, but as just said
in reply to Ray there needs to be sufficient guarantee that "VFCT"
really isn't going to be used for something else down the road.

Jan
Roger Pau Monné Nov. 8, 2022, 4:49 p.m. UTC | #7
On Tue, Nov 08, 2022 at 05:35:04PM +0100, Jan Beulich wrote:
> On 08.11.2022 17:31, Roger Pau Monné wrote:
> > On Tue, Nov 08, 2022 at 04:56:17PM +0100, Jan Beulich wrote:
> >> On 08.11.2022 14:55, Roger Pau Monne wrote:
> >>> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> >>> from the firmware instead of doing it on the PCI ROM on the physical
> >>> device.
> >>
> >> I can't find any mention of VFCT in the ACPI 6.3 spec, nor anywhere
> >> under Linux'es include/acpi/. I don't mind the addition that you're
> >> doing, but there needs to be a pointer to a sufficiently "official"
> >> spec.
> > 
> > I've also asked for some kind of official spec, as I would assume it
> > should be in:
> > 
> > https://uefi.org/acpi
> > 
> > With the rest of tables not in the spec itself, but there's none.
> > 
> > I could add a link to the Linux header, but that's suboptimal IMO.
> > 
> > Are you fine with this as-is, or would you like me to elaborate about
> > the lack of an official spec in the commit description?
> 
> A pointer to the Linux bits is better than nothing, but as just said
> in reply to Ray there needs to be sufficient guarantee that "VFCT"
> really isn't going to be used for something else down the road.

I will leave this for the AMD folks to clarify.  I would assume AMD
has not picked a random table signature and started using it without
having it reserved with the ACPI folks.  Having that said I don't see
the signature in the table of reserved ones in the ACPI 6.5 spec
from August.

Regards, Roger.
Henry Wang Nov. 9, 2022, 2:35 a.m. UTC | #8
Hi Roger,

> -----Original Message-----
> Subject: [PATCH for-4.17?] x86/pvh: report ACPI VFCT table to dom0 if
> present
> 
> The VFCT ACPI table is used by AMD GPUs to expose the vbios ROM image
> from the firmware instead of doing it on the PCI ROM on the physical
> device.
> 
> As such, this needs to be available for PVH dom0 to access, or else
> the GPU won't work.
> 
> Reported-by: Huang Rui <ray.huang@amd.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> This is a bugfix, but given PVH dom0 is still experimental I'm not
> sure it would qualify for the release.  OTOH being experimental means
> there are no guarantees it will work, so the change is unlikely to
> make this any worse.

Following the discussion in this thread, I think this is a simple enough
patch with big enough benefit given Ray has already tested the patch.
I wouldn't block this patch for 4.17 release, but we need to make sure
Jan (the ACPI maintainer) is happy with the VFCT table information in
commit message. Then feel free to add my:

Release-acked-by: Henry Wang <Henry.Wang@arm.com>

Kind regards,
Henry
diff mbox series

Patch

diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
index 1864d048a1..307edc6a8c 100644
--- a/xen/arch/x86/hvm/dom0_build.c
+++ b/xen/arch/x86/hvm/dom0_build.c
@@ -924,6 +924,7 @@  static bool __init pvh_acpi_table_allowed(const char *sig,
         ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_FACS, ACPI_SIG_PSDT,
         ACPI_SIG_SSDT, ACPI_SIG_SBST, ACPI_SIG_MCFG, ACPI_SIG_SLIC,
         ACPI_SIG_MSDM, ACPI_SIG_WDAT, ACPI_SIG_FPDT, ACPI_SIG_S3PT,
+        ACPI_SIG_VFCT,
     };
     unsigned int i;
 
diff --git a/xen/include/acpi/actbl3.h b/xen/include/acpi/actbl3.h
index 0a6778421f..6858d3e60f 100644
--- a/xen/include/acpi/actbl3.h
+++ b/xen/include/acpi/actbl3.h
@@ -79,6 +79,7 @@ 
 #define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */
 #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
 #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */
+#define ACPI_SIG_VFCT           "VFCT"	/* AMD Video BIOS */
 
 /*
  * All tables must be byte-packed to match the ACPI specification, since