|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/5] xen/arm: add dom0less device assignment info to docs
On Mon, 24 Dec 2018, Julien Grall wrote:
> Hi Stefano,
>
> On 12/5/18 5:28 PM, Stefano Stabellini wrote:
> > Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx>
> > ---
> > docs/misc/arm/device-tree/booting.txt | 108
> > ++++++++++++++++++++++++++++++++++
> > 1 file changed, 108 insertions(+)
> >
> > diff --git a/docs/misc/arm/device-tree/booting.txt
> > b/docs/misc/arm/device-tree/booting.txt
> > index 317a9e9..f5aaf8f 100644
> > --- a/docs/misc/arm/device-tree/booting.txt
> > +++ b/docs/misc/arm/device-tree/booting.txt
> > @@ -226,3 +226,111 @@ chosen {
> > };
> > };
> > };
> > +
> > +
> > +Device Assignment
> > +=================
> > +
> > +Device Assignment (Passthrough) is supported by adding another module,
> > +alongside the kernel and ramdisk, with the device tree fragment
> > +corresponding to the device node to assign to the guest.
> > +
> > +The dtb sub-node should have the following properties:
> > +
> > +- compatible
> > +
> > + "multiboot,dtb"
>
> I would prefer "multiboot,device-tree"
I renamed it
> > +
> > +- reg
> > +
> > + Specifies the physical address of the device tree binary fragment
> > + RAM and its length.
> > +
> > +As an example:
> > +
> > + module@0xc000000 {
> > + compatible = "multiboot,dtb", "multiboot,module";
> > + reg = <0x0 0xc000000 0xffffff>;
> > + };
> > +
> > +The DTB fragment (loaded in memory at 0xc000000 in the example above)
> > +should follow the convention explained in docs/misc/arm/passthrough.txt.
> > +The DTB fragment will be added to the guest device tree, so that the
> > +guest kernel will be able to discover the device.
> > +
> > +In addition, the following properties for each device node in the device
> > +tree fragment will be used for the device assignment setup:
> > +
> > +- reg
> > +
> > + The reg property specifying the address and size of the device memory.
> > + The device memory will be automatically mapped to the guest domain
> > + with a 1:1 mapping (pseudo-physical address == physical address).
>
> As said in a previous patch, I don't think this is correct to impose 1:1. The
> user is neither in control of the HW memory map nor the Guest memory map. So
> not many people are going to be able to use it without hacking Xen.
Yes, I'll fix this (and a couple of other issues) by introducing a new
"xen,reg" property, instead of trying to reuse the existing reg
property.
> > +
> > +- interrupts
> > +
> > + The interrupts property specifies the interrupt of the device. They
> > + are automatically routed to the guest domain with virtual irqs ==
> > + physical irqs.
> > +
> > +- interrupt-parent
> > +
> > + It contains a reference to the interrupt controller node. It should be
> > + 65000, corresponding to GUEST_PHANDLE_GIC.
>
> We managed to get away in the toolstack with this property. So why do you need
> it for the hypervisor? Furthermore, this would forbid to passthrough any other
> interrupt controller to the guest.
The toolstack does use GUEST_PHANDLE_GIC today for passthrough
interrupts, see tools/libxl/libxl_arm.c:make_root_properties and
docs/misc/arm/passthrough.txt:
* The interrupt-parent property will be added by the toolstack in the
root node;
interrupt-parent always points to the guest GIC node, for virtual
interrupts such as the vuart, as well as physical passthrough
interrupts. Also see tools/libxl/libxl_arm.c:fdt_property_interrupts and
tools/libxl/libxl_arm.c:make_gicv2_node.
I don't think the scenario you are describing is supported today.
> > +
> > +- path
> > +
> > + A new string property named "path" holds the path in the host device
> > + tree to the corresponding device node.
>
> This name is too generic. Please prepend "xen,"
OK, no prob
> > +
> > +The following is a real-world example of a device tree fragment for the
> > +network card on Xilinx MPSoC boards:
> > +
> > +/dts-v1/;
> > +
> > +/ {
> > + #address-cells = <0x2>;
> > + #size-cells = <0x1>;
> > +
> > + passthrough {
> > + compatible = "simple-bus";
> > + ranges;
> > + #address-cells = <0x2>;
> > + #size-cells = <0x1>;
> > +
> > + misc_clk {
> > + #clock-cells = <0x0>;
> > + clock-frequency = <0x7735940>;
> > + compatible = "fixed-clock";
> > + linux,phandle = <0x1>;
> > + phandle = <0x1>;
> > + };
> > +
> > + ethernet@ff0e0000 {
> > + compatible = "cdns,zynqmp-gem";
> > + status = "okay";
> > + interrupt-parent = <0xfde8>;
> > + interrupts = <0x0 0x3f 0x4 0x0 0x3f 0x4>;
> > + reg = <0x0 0xff0e0000 0x1000>;
> > + clock-names = "pclk", "hclk", "tx_clk", "rx_clk";
> > + #address-cells = <0x1>;
> > + #size-cells = <0x0>;
> > + clocks = <0x1 0x1 0x1 0x1>;
> > + phy-mode = "rgmii-id";
> > + xlnx,ptp-enet-clock = <0x0>;
> > + local-mac-address = [00 0a 35 00 22 01];
> > + phy-handle = <0x2>;
> > + path = "/amba/ethernet@ff0e0000";
> > +
> > + phy@c {
> > + reg = <0xc>;
> > + ti,rx-internal-delay = <0x8>;
> > + ti,tx-internal-delay = <0xa>;
> > + ti,fifo-depth = <0x1>;
> > + ti,rxctrl-strap-worka;
> > + linux,phandle = <0x2>;
> > + phandle = <0x2>;
> > + };
> > + };
> > + };
> > +};
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |