From: "Michael S. Tsirkin" <mst@redhat.com>
To: vit9696 <vit9696@protonmail.com>
Cc: Igor Mammedov <imammedo@redhat.com>,
mhaeuser@posteo.de, Laszlo Ersek <lersek@redhat.com>,
qemu devel list <qemu-devel@nongnu.org>
Subject: Re: OVMF and PCI0 UID
Date: Thu, 30 Jul 2020 11:59:18 -0400 [thread overview]
Message-ID: <20200730115902-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <YOYfNLw-NvrJb0_cXoe66EsssRZYv1T099QNHtlpvktzBndo6yIfecUZ2XeybP7TBaibMAyDxa_jZV-2ZVytTDTTvE_dFjRkmolDYi_8Hjs=@protonmail.com>
Thanks, I sent the patches on the list now!
On Wed, Jul 22, 2020 at 01:53:23PM +0000, vit9696 via wrote:
> Hello,
>
> We can confirm that the suggested change to zero UIDs resolves the problem. It
> will be great if you could handle the rest as you see fit. Thank you!
>
> Best regards,
> Vitaly
>
>
> В вт, июля 21, 2020 в 12:24, vit9696 <vit9696@protonmail.com> пишет:
>
> Thank you, we will provide an update whether this solves the problem.
>
> Besides, this is not the only case where UIDs are wrong for the PCI bus.
> In hw/arm/virt-acpi-build.c there is the following code:
>
> Aml *dev = aml_device("%s", "PCI0");
> aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A08")));
> aml_append(dev, aml_name_decl("_CID", aml_string("PNP0A03")));
> aml_append(dev, aml_name_decl("_SEG", aml_int(0)));
> aml_append(dev, aml_name_decl("_BBN", aml_int(0)));
> aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> aml_append(dev, aml_name_decl("_UID", aml_string("PCI0")));
> aml_append(dev, aml_name_decl("_STR", aml_unicode("PCIe 0 Device")));
> aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
>
> https://github.com/qemu/qemu/blob/2c1fb4d/hw/arm/virt-acpi-build.c#
> L168-L175
>
> It makes UID on ARM builds a string, which is certainly not expected. We do
> not have ARM test setups, but I hope this can be useful too.
>
> Best wishes,
> Vitaly
>
>
> 21 июля 2020 г., в 09:58, Michael S. Tsirkin <mst@redhat.com> написал
> (а):
>
>
> On Mon, Jul 20, 2020 at 11:25:58PM +0200, Laszlo Ersek wrote:
>
> Hi Vitaly,
>
> adding Igor, Michael, Marcel, and qemu-devel.
>
> On 07/20/20 11:06, vit9696 wrote:
>
> Hello,
>
> I discovered an issue with inconsistent QEMU/OVMF device paths,
> and
> while I am unsure whether directing this e-mail is appropriate
> to you,
> I believe that you likely have the contacts you could forward
> this
> e-mail to.
>
> macOS uses ACPI UIDs to build the DevicePath for NVRAM boot
> options,
> while OVMF firmware gets them via an internal channel through
> QEMU.
> Due to a bug in QEMU (or OVMF) currently UEFI firmware and ACPI
> have
> different values, and this makes the underlying operating
> system
> unable to report its boot option.
>
> The particular node in question is the primary PciRoot (PCI0 in
> ACPI),
> which for some reason gets assigned 1 in ACPI UID and 0 in the
> DevicePath. To me this looks like a bug here:
> https://github.com/qemu/qemu/blob/8f06f22/hw/i386/acpi-build.c#
> L1511-L1515
> Which does not correspond to the primary PCI identifier here:
> https://github.com/qemu/qemu/blob/5a79d10/hw/pci/pci.c#
> L160-L162
>
> Reference with the device paths, OVMF startup logs, and ACPI
> table
> dumps (SysReport):
> https://github.com/acidanthera/bugtracker/issues/1050
>
> Would you be able to forward this to the right people or
> perhaps keep
> an eye on the issue itself?
>
>
> I think you are right.
>
> In UEFI v2.8, section "10.4.2 Rules with ACPI _HID and _UID" ends
> with
> the paragraph,
>
> Root PCI bridges will use the plug and play ID of PNP0A03, This
> will
> be stored in the ACPI Device Path _HID field, or in the Expanded
> ACPI Device Path _CID field to match the ACPI name space. The
> _UID
> in the ACPI Device Path structure must match the _UID in the
> ACPI
> name space.
>
> (See especially the last sentence.)
>
> Considering *extra* root bridges / root buses (with bus number >
> 0),
> QEMU's ACPI generator actually does the right thing; since QEMU
> commit
> c96d9286a6d7 ("i386/acpi-build: more traditional _UID and _HID for
> PXB
> root buses", 2015-06-11).
>
> However, the _UID values for root bridge zero (on both i440fx and
> q35)
> have always been "wrong" (from UEFI perspective), going back in
> QEMU to
> commit 74523b850189 ("i386: add ACPI table files from seabios",
> 2013-10-14).
>
> Even in SeaBIOS, these _UID values have always been 1; see commit
> a4d357638c57 ("Port rombios32 code from bochs-bios.", 2008-03-08)
> for
> i440fx, and commit ecbe3fd61511 ("seabios: q35: add dsdt",
> 2012-12-01)
> for q35.
>
> Does the following patch work for you? (I can see you proposed the
> same
> in
> <https://github.com/acidanthera/bugtracker/issues/1050
> issuecomment-660734139>)
>
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index b7bcbbbb2a35..7a5a8b3521b0 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -1496,9 +1496,9 @@ build_dsdt(GArray *table_data, BIOSLinker
> *linker,
> sb_scope = aml_scope("_SB");
> dev = aml_device("PCI0");
> aml_append(dev, aml_name_decl("_HID", aml_eisaid
> ("PNP0A03")));
> aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> - aml_append(dev, aml_name_decl("_UID", aml_int(1)));
> + aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> aml_append(sb_scope, dev);
> aml_append(dsdt, sb_scope);
>
> build_hpet_aml(dsdt);
> @@ -1511,9 +1511,9 @@ build_dsdt(GArray *table_data, BIOSLinker
> *linker,
> dev = aml_device("PCI0");
> aml_append(dev, aml_name_decl("_HID", aml_eisaid
> ("PNP0A08")));
> aml_append(dev, aml_name_decl("_CID", aml_eisaid
> ("PNP0A03")));
> aml_append(dev, aml_name_decl("_ADR", aml_int(0)));
> - aml_append(dev, aml_name_decl("_UID", aml_int(1)));
> + aml_append(dev, aml_name_decl("_UID", aml_int(0)));
> aml_append(dev, build_q35_osc_method());
> aml_append(sb_scope, dev);
> aml_append(dsdt, sb_scope);
>
>
> If it does, I suggest submitting the above patch to qemu-devel, and
> /or
> filing a bug for upstream QEMU at <https://bugs.launchpad.net/qemu/
> >.
>
>
> Or even just reporting whether the above helps you, we can
> take it from there.
>
>
> (Note: I didn't even compile the above change.)
>
> Thanks
> Laszlo
>
>
>
>
>
prev parent reply other threads:[~2020-07-30 16:02 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <56E4DCD4-DBA1-4A41-8568-1CBBB37ED320@protonmail.com>
2020-07-20 21:25 ` OVMF and PCI0 UID Laszlo Ersek
2020-07-21 6:58 ` Michael S. Tsirkin
2020-07-21 9:24 ` vit9696
2020-07-22 13:53 ` vit9696 via
2020-07-30 15:59 ` Michael S. Tsirkin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200730115902-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=imammedo@redhat.com \
--cc=lersek@redhat.com \
--cc=mhaeuser@posteo.de \
--cc=qemu-devel@nongnu.org \
--cc=vit9696@protonmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.