[U-Boot] ARMv8: Use U-Boot to boot Xen?

Ian Campbell ijc at hellion.org.uk
Fri Jan 29 17:23:19 CET 2016


On Fri, 2016-01-29 at 16:54 +0100, Dirk Behme wrote:
> On 29.01.2016 10:18, Ian Campbell wrote:
> > On Fri, 2016-01-29 at 12:04 +0800, Peng Fan wrote:
> > > Hi Dirk,
> > > 
> > > Cc Ian xen experts.
> > > 
> > > On Thu, Jan 28, 2016 at 08:06:30PM +0100, Dirk Behme wrote:
> > > > Hi,
> > > > 
> > > > are there any U-Boot examples/patches to boot Xen on an
> > > > ARMv8/aarch64
> > > > system?
> > > > 
> > > > I've found
> > > > 
> > > > http://lists.denx.de/pipermail/u-boot/2015-October/230077.html
> > > > 
> > > > what might be helpful.
> > > > 
> > > > But maybe I missed anything else?
> > > 
> > > I guess you are asking steps how to boot xen using uboot?
> > > 
> > > You may need to take this:
> > > http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions
> > 
> > Indeed.
> > 
> > In addition one AArch64 system which uses u-boot and which has concrete
> > instructions is the APM X-Gene/Mustang:
> >      http://wiki.xen.org/wiki/Xen_ARM_with_Virtualization_Extensions/AP
> > MXGeneMustang
> > which would likely be helpful.
> 
> 
> Yes, that page is very helpful, thanks!
> 
> But I think it misses one information, or most probably the 
> configuration on that board is different. Above page just do a 'run 
> xen_run' which in the end does the necessary tftp loading and finally 
> the bootm to start Xen.
> 
> So I'd assume that on that board U-Boot runs at EL3 or EL2 (?).
> 
> In my environment, U-Boot runs at EL1. I.e. after loading Xen by tftp 
> I somehow need to switch to EL2 to be able to start Xen.

Once you are in EL1 you cannot get back to EL2 (or EL3) without support
from a lower level firmware running in those exception levels. If you have
no such underlying firmware then you should arrange for u-boot to run at
EL3.

> 
> And this is what I think I miss. How to switch from U-Boot running at 
> EL1 to hypervisor mode EL2? Therefore I'd think that
> 
> http://lists.denx.de/pipermail/u-boot/2015-October/230077.html

You need to arrange for U-boot to run in EL3 and enter the "kernel" (Xen in
this case) in NS EL2. This likely means implementing the PSCI interface for
the kernel to use to manage CPUs.

If you were running on a 32-bit system I would direct you towards the
CONFIG_ARMV7_PSCI, CONFIG_ARMV7_NONSEC and ARMV7_VIRT u-boot options (which
in turn would require your platform code to provide some support). I'm not
sure what the equivalent for 64-bit is, sorry.

The link you post is, AFAICT, about the other end i.e. allowing u-boot to
talk to an existing secure world firmware beneath it.

Ian.


More information about the U-Boot mailing list