All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Ian Campbell <ian.campbell@citrix.com>,
	Olivier Martin <olivier.martin@arm.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	"edk2-devel@lists.sourceforge.net"
	<edk2-devel@lists.sourceforge.net>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	xen-devel@lists.xen.org, Roy Franz <roy.franz@linaro.org>,
	Ilias Biris <ilias.biris@linaro.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Christoffer Dall <christoffer.dall@linaro.org>
Subject: Re: [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe
Date: Mon, 26 Jan 2015 11:28:39 +0100	[thread overview]
Message-ID: <54C616D7.2030407__1370.66166284985$1422268291$gmane$org@redhat.com> (raw)
In-Reply-To: <CAKv+Gu9qdLjngX9j6wppT+sucCEhwDW4Cnfez2QJC5p+FAm4uw@mail.gmail.com>

On 01/26/15 10:46, Ard Biesheuvel wrote:

> So it would be sufficient to install the XENIO_PROTOCOL on the
> existing ControllerHandle containing the EFI_PCI_IO_PROTOCOL?

Yes.

Because there would be only one PCI (b,d,f) that would qualify (you'd
write up the Supported() check appropriately), there'd be only one
instance of XENIO_PROTOCOL created in the system as well.

> The
> recursion in the UEFI driver model would take care that the
> subordinate bus and devices are discovered as well?

Right. For example, when connecting all drivers to all devices, or when
connecting the device handle coming out of "XenIoMmioLib" recursively,
or when connecting the PCI (b, d, f) in question recursively, XenBusDxe
would report support for the XENIO protocol instance, then it would be
connected to it, producing a new handle with a XENBUS_PROTOCOL instance
on it for each child. (In fact XENBUS_PROTOCOL should have been called
XEN_DEVICE_PROTOCOL as I understand it, but that's water under the
bridge.) Then the individual device drivers like XenPvBlkDxe would
report support for some of those, etc.

> Well, the point here is that the Xen PCI device is only used as a
> vehicle to convey the grant table address, nothing else. After reading
> the grant table address from BAR1, no other calls into the
> EFI_PCI_IO_PROTOCOL are made at all.

I see. It should still build from the bottom up. In the PCI case, your
"chain-reaction" is ignited by PCI enumeration, and you should key off
the appropriate PCI (b,d,f) -- see above. In the MMIO case, you do the
DTB-based enumeration yourself, and start it all by calling the library
function on the appropriate register block (or grant table base
address), which then produces a new handle with XENIO_PROTOCOL on it.

It's okay that the hypercall mechanism is orthogonal, but that's an
implementation detail. It should still be hidden behind the
XENIO_PROTOCOL interface in my opinion. You can express the
orthogonality inside the implementation of XENIO_PROTOCOL, by delegating
the hypercalls to a library instance. In theory you could have four
providers of XENIO_PROTOCOL:
- a standalone driver that binds PciIo and uses the Intel hypercall
  style.
- a standalone driver that binds PciIo and uses the ARM hypercall style.
  This difference would be controlled by the library class to library
  instance resolution in the DSC file(s).
- A library that takes the grant table base address as an input
  parameter, and uses the Intel hypercall style.
- A library that takes the grant table base address as an input
  parameter, and uses the ARM hypercall style. (Obviously not
  explicitly, but by delegating hypercalls to whatever library instance
  that the hypercall library class is resolved to.)

Ad absurdum, you could use "the library that takes the grant table
address as an input parameter" *inside* your PciIo-based driver. Then,
VirtFdtDxe would scan the DTB and call the main library function
directly, whereas your *thin* PciIo-based, standalone driver would
interrogate the PCI device that it recognizes, and delegate the main
work to the library. For this the library would have to be able to take
a device handle from the caller (would be the PCI device handle in the
PCI case, and a fresh handle with just DevicePath on it in the other
case), and install XenIo on that.

If this is feasible or not should become very clear when you get that
far in coding, I think.

> Yes. I agree I need to rework that patch, but the existing
> XenHypercallLib works pretty well, I think.

Absolutely, it makes sense.

> I will proceed and split off XenIoPciDxe from XenBusDxe, which
> installs my existing XENIO_PROTOCOL on the existing ControllerHandle
> if its EFI_PCI_IO_PROTOCOL produces the correct vid/pid and BAR1 mem
> type.

Well... if you don't want to make the hypercall stuff part of the
XENIO_PROTOCOL interface, I can accept that too. My proposal above was:

                    XenBusDxe
                       |
                     XenIo
                       |
                      / \
                     /   \
          PCI vs. DTB     ARM vs. Intel hypercall Lib Instance

(Ie. XenBusDxe would depend on one abstraction (== XenIo), and XenIo
would depend on two independent abstractions, each of which would have
two possible implementations.)

But I guess the following also makes sense:

                    XenBusDxe
                   /         \
               XenIo          ARM vs. Intel hypercall Lib Instance
                 |
            PCI vs. DTB

The second architecture would keep XenIo much thinner, and it's
certainly sufficient to have only one hypercall method built into the
entire firmware -- you could decide that question at build time with a
"global" library class resolution.

Please use --stat=150 in the next version, and spoon-feed us the code in
baby bite sized patches! :)

Thanks
Laszlo

  parent reply	other threads:[~2015-01-26 10:28 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1422025390-8036-1-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 15:02 ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 07/21] ArmPlatformPkg/PrePi: factor out FixedPcdGetXX() and ArmIsMpCore() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 08/21] ArmPlatformPkg/PrePi: add a relocatable version of PrePi Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 16/21] Ovmf/Xen: add ARM and AArch64 support to XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 18/21] Ovmf/Xen: implement dummy RealTimeClockLib for Xen Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 19/21] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 21/21] ArmVirtualizationPkg: add platform description for Xen guests Ard Biesheuvel
     [not found] ` <1422025390-8036-14-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:24   ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Stefano Stabellini
2015-01-24  0:02     ` Laszlo Ersek
     [not found] ` <1422025390-8036-16-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:41   ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Stefano Stabellini
2015-01-23 19:00     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-18-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:54   ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Stefano Stabellini
2015-01-23 19:19     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu8fE6xirv0U-T_e0SrQx_x0-STMo-rfUedO=xsnSa+X2A@mail.gmail.com>
2015-01-26 11:22       ` Stefano Stabellini
     [not found] ` <1422025390-8036-21-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:03   ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Stefano Stabellini
2015-01-23 19:22     ` Ard Biesheuvel
2015-01-23 19:08 ` [PATCH v1 00/21] Xen/ARM guest support Laszlo Ersek
     [not found] ` <1422025390-8036-2-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Olivier Martin
2015-01-23 19:17   ` Laszlo Ersek
     [not found] ` <1422025390-8036-3-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Olivier Martin
2015-01-23 19:20   ` Laszlo Ersek
     [not found] ` <1422025390-8036-4-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:59   ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Olivier Martin
2015-01-23 19:38   ` Laszlo Ersek
     [not found]   ` <54C2A34B.8010507@redhat.com>
2015-01-26 10:57     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu_qDfxACEqoxbW2h84R4kd2Eng8oNo6J4sU=5OuH=ELEA@mail.gmail.com>
2015-01-26 11:11       ` Laszlo Ersek
     [not found] ` <1422025390-8036-10-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:59   ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Laszlo Ersek
     [not found]   ` <54C2B619.7060800@redhat.com>
2015-01-26 11:35     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-11-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 21:09   ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Laszlo Ersek
     [not found] ` <1422025390-8036-12-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:07   ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Stefano Stabellini
2015-01-23 23:54   ` Laszlo Ersek
     [not found] ` <1422025390-8036-13-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:14   ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Stefano Stabellini
2015-01-24  0:00   ` Laszlo Ersek
     [not found] ` <1422025390-8036-15-git-send-email-ard.biesheuvel@linaro.org>
2015-01-26  9:27   ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Laszlo Ersek
     [not found]   ` <54C60883.8030706@redhat.com>
2015-01-26  9:46     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9qdLjngX9j6wppT+sucCEhwDW4Cnfez2QJC5p+FAm4uw@mail.gmail.com>
2015-01-26 10:28       ` Laszlo Ersek [this message]
     [not found]       ` <54C616D7.2030407@redhat.com>
2015-01-26 13:52         ` Ard Biesheuvel
     [not found]         ` <CAKv+Gu_6zrybkQ_zFghuh8s7odSeC=swLvbx41ukd9LJdx0x8w@mail.gmail.com>
2015-01-26 14:10           ` Laszlo Ersek
     [not found]           ` <54C64AED.8030800@redhat.com>
2015-01-26 14:19             ` Ard Biesheuvel
     [not found] ` <1422025390-8036-5-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:44   ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Laszlo Ersek
2015-01-26 10:54   ` Olivier Martin
     [not found] ` <1422025390-8036-6-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:22   ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Laszlo Ersek
2015-01-26 11:08   ` Olivier Martin
     [not found] ` <1422025390-8036-7-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 23:52   ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Laszlo Ersek
2015-01-26 11:47   ` Olivier Martin
     [not found]   ` <54c6294f.8638e50a.7237.ffffa2f5SMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-26 11:48     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9ZDwbZ+O+JPAm44_FbjEYXcTK+yn5=7U4Cn88niLqJOA@mail.gmail.com>
2015-01-26 11:51       ` Olivier Martin

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='54C616D7.2030407__1370.66166284985$1422268291$gmane$org@redhat.com' \
    --to=lersek@redhat.com \
    --cc=anthony.perard@citrix.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=christoffer.dall@linaro.org \
    --cc=edk2-devel@lists.sourceforge.net \
    --cc=ian.campbell@citrix.com \
    --cc=ilias.biris@linaro.org \
    --cc=leif.lindholm@linaro.org \
    --cc=olivier.martin@arm.com \
    --cc=roy.franz@linaro.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xen.org \
    /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.