From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH RFC 12/15] libxc: support for arm64 Image format Date: Thu, 10 Oct 2013 16:43:54 +0100 Message-ID: <5256CB3A.8090307@linaro.org> References: <1381163944.21562.129.camel@kazak.uk.xensource.com> <1381164001-1446-12-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1381164001-1446-12-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: stefano.stabellini@eu.citrix.com, tim@xen.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org I think all the code in this patch should in an ifdef __aarch64__. On 10/07/2013 05:39 PM, Ian Campbell wrote: > Signed-off-by: Ian Campbell > --- > tools/libxc/xc_dom_armzimageloader.c | 88 ++++++++++++++++++++++++++++++++++ > 1 file changed, 88 insertions(+) > > diff --git a/tools/libxc/xc_dom_armzimageloader.c b/tools/libxc/xc_dom_armzimageloader.c > index 4e3f7ae..609d3a0 100644 > --- a/tools/libxc/xc_dom_armzimageloader.c > +++ b/tools/libxc/xc_dom_armzimageloader.c > @@ -129,6 +129,86 @@ static int xc_dom_parse_zimage32_kernel(struct xc_dom_image *dom) > } > > /* ------------------------------------------------------------ */ > +/* 64-bit zImage Support */ > +/* ------------------------------------------------------------ */ > + > +#define ZIMAGE64_MAGIC_V0 0x14000008 > +#define ZIMAGE64_MAGIC_V1 0x644d5241 /* "ARM\x64" */ > + > +/* linux/Documentation/arm64/booting.txt */ > +struct zimage64_hdr { > + uint32_t magic0; > + uint32_t res0; > + uint64_t text_offset; /* Image load offset */ > + uint64_t res1; > + uint64_t res2; > + /* zImage V1 only from here */ > + uint64_t res3; > + uint64_t res4; > + uint64_t res5; > + uint32_t magic1; > + uint32_t res6; > +}; > +static int xc_dom_probe_zimage64_kernel(struct xc_dom_image *dom) > +{ > + struct zimage64_hdr *zimage; > + > + if ( dom->kernel_blob == NULL ) > + { > + xc_dom_panic(dom->xch, XC_INTERNAL_ERROR, > + "%s: no kernel image loaded", __FUNCTION__); > + return -EINVAL; > + } > + > + if ( dom->kernel_size < sizeof(*zimage) ) > + { > + xc_dom_printf(dom->xch, "%s: kernel image too small", __FUNCTION__); > + return -EINVAL; > + } > + > + zimage = dom->kernel_blob; > + if ( zimage->magic0 != ZIMAGE64_MAGIC_V0 && > + zimage->magic1 != ZIMAGE64_MAGIC_V1 ) > + { > + xc_dom_printf(dom->xch, "%s: kernel is not an arm64 Image", __FUNCTION__); > + return -EINVAL; > + } > + > + return 0; > +} > + > +static int xc_dom_parse_zimage64_kernel(struct xc_dom_image *dom) > +{ > + struct zimage64_hdr *zimage; > + uint32_t entry_addr; > + uint64_t v_start, v_end; > + uint64_t rambase = dom->rambase_pfn << XC_PAGE_SHIFT; > + > + DOMPRINTF_CALLED(dom->xch); > + > + zimage = dom->kernel_blob; > + > + v_start = rambase + zimage->text_offset; > + v_end = v_start + dom->kernel_size; > + > + entry_addr = v_start; > + > + /* find kernel segment */ > + dom->kernel_seg.vstart = v_start; > + dom->kernel_seg.vend = v_start + dom->kernel_size; > + > + dom->parms.virt_entry = entry_addr; > + dom->parms.virt_base = rambase; > + > + dom->guest_type = "xen-3.0-aarch64"; > + DOMPRINTF("%s: %s: 0x%" PRIx64 " -> 0x%" PRIx64 "", > + __FUNCTION__, dom->guest_type, > + dom->kernel_seg.vstart, dom->kernel_seg.vend); > + > + return 0; > +} > + > +/* ------------------------------------------------------------ */ > /* Common zImage Support */ > /* ------------------------------------------------------------ */ > > @@ -163,9 +243,17 @@ static struct xc_dom_loader zimage32_loader = { > .loader = xc_dom_load_zimage_kernel, > }; > > +static struct xc_dom_loader zimage64_loader = { > + .name = "Linux zImage (ARM64)", > + .probe = xc_dom_probe_zimage64_kernel, > + .parser = xc_dom_parse_zimage64_kernel, > + .loader = xc_dom_load_zimage_kernel, > +}; > + > static void __init register_loader(void) > { > xc_dom_register_loader(&zimage32_loader); > + xc_dom_register_loader(&zimage64_loader); > } > > /* > -- Julien Grall