* [PATCH v2 0/4] ARM: Support initrd loading @ 2013-09-26 12:56 Julien Grall 2013-09-26 12:56 ` [PATCH v2 1/4] xen/arm: Add macro MB Julien Grall ` (3 more replies) 0 siblings, 4 replies; 16+ messages in thread From: Julien Grall @ 2013-09-26 12:56 UTC (permalink / raw) To: xen-devel Cc: patches, Julien Grall, ian.campbell, andre.przywara, stefano.stabellini Hi, This is the second version of this small patch series. It adds support to load initrd in dom0 for ARM. All the changes can be found in each patch. Cheers, Julien Grall (4): xen/arm: Add macro MB xen/arm: Add macro ALIGN xen/arm: Add support to load initrd in dom0 xen/dts: Support Linux initrd DT bindings xen/arch/arm/domain_build.c | 101 ++++++++++++++++++++++++++++++++++++------ xen/arch/arm/kernel.c | 20 +++++---- xen/arch/arm/kernel.h | 2 + xen/common/device_tree.c | 27 ++++++++++- xen/include/asm-arm/config.h | 5 +++ 5 files changed, 132 insertions(+), 23 deletions(-) -- 1.7.10.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 12:56 [PATCH v2 0/4] ARM: Support initrd loading Julien Grall @ 2013-09-26 12:56 ` Julien Grall 2013-09-26 14:32 ` Ian Campbell 2013-09-26 12:56 ` [PATCH v2 2/4] xen/arm: Add macro ALIGN Julien Grall ` (2 subsequent siblings) 3 siblings, 1 reply; 16+ messages in thread From: Julien Grall @ 2013-09-26 12:56 UTC (permalink / raw) To: xen-devel Cc: patches, Julien Grall, ian.campbell, andre.przywara, stefano.stabellini Signed-off-by: Julien Grall <julien.grall@linaro.org> --- xen/include/asm-arm/config.h | 1 + 1 file changed, 1 insertion(+) diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h index 604088e..2cea1ba 100644 --- a/xen/include/asm-arm/config.h +++ b/xen/include/asm-arm/config.h @@ -119,6 +119,7 @@ #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) #define HYPERVISOR_VIRT_START XEN_VIRT_START +#define MB(_mb) (_AC(_mb, UL) << 20) #ifdef CONFIG_ARM_32 -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 12:56 ` [PATCH v2 1/4] xen/arm: Add macro MB Julien Grall @ 2013-09-26 14:32 ` Ian Campbell 2013-09-26 15:26 ` Julien Grall 0 siblings, 1 reply; 16+ messages in thread From: Ian Campbell @ 2013-09-26 14:32 UTC (permalink / raw) To: Julien Grall; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > Signed-off-by: Julien Grall <julien.grall@linaro.org> > --- > xen/include/asm-arm/config.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h > index 604088e..2cea1ba 100644 > --- a/xen/include/asm-arm/config.h > +++ b/xen/include/asm-arm/config.h > @@ -119,6 +119,7 @@ > #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) > > #define HYPERVISOR_VIRT_START XEN_VIRT_START > +#define MB(_mb) (_AC(_mb, UL) << 20) Can you move the GB here too for consistency. In fact it would be worth considering moving this to xen/include/xen/config.h and consolidating the x86 version too. Thanks, Ian. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 14:32 ` Ian Campbell @ 2013-09-26 15:26 ` Julien Grall 2013-09-26 15:30 ` Ian Campbell 0 siblings, 1 reply; 16+ messages in thread From: Julien Grall @ 2013-09-26 15:26 UTC (permalink / raw) To: Ian Campbell; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On 09/26/2013 03:32 PM, Ian Campbell wrote: > On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: >> Signed-off-by: Julien Grall <julien.grall@linaro.org> >> --- >> xen/include/asm-arm/config.h | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h >> index 604088e..2cea1ba 100644 >> --- a/xen/include/asm-arm/config.h >> +++ b/xen/include/asm-arm/config.h >> @@ -119,6 +119,7 @@ >> #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) >> >> #define HYPERVISOR_VIRT_START XEN_VIRT_START >> +#define MB(_mb) (_AC(_mb, UL) << 20) > > Can you move the GB here too for consistency. > > In fact it would be worth considering moving this to > xen/include/xen/config.h and consolidating the x86 version too. I will do. I'm wondering, do we need to use ULL instead of UL in GB and MB? -- Julien Grall ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 15:26 ` Julien Grall @ 2013-09-26 15:30 ` Ian Campbell 2013-09-26 15:32 ` Julien Grall 0 siblings, 1 reply; 16+ messages in thread From: Ian Campbell @ 2013-09-26 15:30 UTC (permalink / raw) To: Julien Grall; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On Thu, 2013-09-26 at 16:26 +0100, Julien Grall wrote: > On 09/26/2013 03:32 PM, Ian Campbell wrote: > > On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > >> Signed-off-by: Julien Grall <julien.grall@linaro.org> > >> --- > >> xen/include/asm-arm/config.h | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h > >> index 604088e..2cea1ba 100644 > >> --- a/xen/include/asm-arm/config.h > >> +++ b/xen/include/asm-arm/config.h > >> @@ -119,6 +119,7 @@ > >> #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) > >> > >> #define HYPERVISOR_VIRT_START XEN_VIRT_START > >> +#define MB(_mb) (_AC(_mb, UL) << 20) > > > > Can you move the GB here too for consistency. > > > > In fact it would be worth considering moving this to > > xen/include/xen/config.h and consolidating the x86 version too. > > I will do. Thanks. > I'm wondering, do we need to use ULL instead of UL in GB and MB? Is it used with a paddr_t anywhere? If it's just vaddr then UL is fine. Ian. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 15:30 ` Ian Campbell @ 2013-09-26 15:32 ` Julien Grall 2013-09-26 15:52 ` Ian Campbell 0 siblings, 1 reply; 16+ messages in thread From: Julien Grall @ 2013-09-26 15:32 UTC (permalink / raw) To: Ian Campbell; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On 09/26/2013 04:30 PM, Ian Campbell wrote: > On Thu, 2013-09-26 at 16:26 +0100, Julien Grall wrote: >> On 09/26/2013 03:32 PM, Ian Campbell wrote: >>> On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: >>>> Signed-off-by: Julien Grall <julien.grall@linaro.org> >>>> --- >>>> xen/include/asm-arm/config.h | 1 + >>>> 1 file changed, 1 insertion(+) >>>> >>>> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h >>>> index 604088e..2cea1ba 100644 >>>> --- a/xen/include/asm-arm/config.h >>>> +++ b/xen/include/asm-arm/config.h >>>> @@ -119,6 +119,7 @@ >>>> #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) >>>> >>>> #define HYPERVISOR_VIRT_START XEN_VIRT_START >>>> +#define MB(_mb) (_AC(_mb, UL) << 20) >>> >>> Can you move the GB here too for consistency. >>> >>> In fact it would be worth considering moving this to >>> xen/include/xen/config.h and consolidating the x86 version too. >> >> I will do. > > Thanks. > >> I'm wondering, do we need to use ULL instead of UL in GB and MB? > > Is it used with a paddr_t anywhere? If it's just vaddr then UL is fine. MB will be used with paddr_t. GB not yet, but it could be used to replace 0x1...ULL in a such patch: http://permalink.gmane.org/gmane.comp.emulators.xen.devel/172128 -- Julien Grall ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/4] xen/arm: Add macro MB 2013-09-26 15:32 ` Julien Grall @ 2013-09-26 15:52 ` Ian Campbell 0 siblings, 0 replies; 16+ messages in thread From: Ian Campbell @ 2013-09-26 15:52 UTC (permalink / raw) To: Julien Grall; +Cc: patches, xen-devel, andre.przywara, stefano.stabellini On Thu, 2013-09-26 at 16:32 +0100, Julien Grall wrote: > On 09/26/2013 04:30 PM, Ian Campbell wrote: > > On Thu, 2013-09-26 at 16:26 +0100, Julien Grall wrote: > >> On 09/26/2013 03:32 PM, Ian Campbell wrote: > >>> On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > >>>> Signed-off-by: Julien Grall <julien.grall@linaro.org> > >>>> --- > >>>> xen/include/asm-arm/config.h | 1 + > >>>> 1 file changed, 1 insertion(+) > >>>> > >>>> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h > >>>> index 604088e..2cea1ba 100644 > >>>> --- a/xen/include/asm-arm/config.h > >>>> +++ b/xen/include/asm-arm/config.h > >>>> @@ -119,6 +119,7 @@ > >>>> #define BOOT_MISC_VIRT_START _AT(vaddr_t,0x00600000) > >>>> > >>>> #define HYPERVISOR_VIRT_START XEN_VIRT_START > >>>> +#define MB(_mb) (_AC(_mb, UL) << 20) > >>> > >>> Can you move the GB here too for consistency. > >>> > >>> In fact it would be worth considering moving this to > >>> xen/include/xen/config.h and consolidating the x86 version too. > >> > >> I will do. > > > > Thanks. > > > >> I'm wondering, do we need to use ULL instead of UL in GB and MB? > > > > Is it used with a paddr_t anywhere? If it's just vaddr then UL is fine. > > MB will be used with paddr_t. GB not yet, but it could be used to > replace 0x1...ULL in a such patch: > http://permalink.gmane.org/gmane.comp.emulators.xen.devel/172128 > OK, maybe give it a go. I don't think there will be any critical places which would be badly impacted on 32-bit from having to use two registers etc where one would do. My only other concern would be assignments complaining about being truncated and the ball of wool effect fixing them all up -- but it quickly be obvious to you if this is going to be a problem! Ian. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 12:56 [PATCH v2 0/4] ARM: Support initrd loading Julien Grall 2013-09-26 12:56 ` [PATCH v2 1/4] xen/arm: Add macro MB Julien Grall @ 2013-09-26 12:56 ` Julien Grall 2013-09-26 14:30 ` Ian Campbell 2013-09-26 12:56 ` [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 Julien Grall 2013-09-26 12:56 ` [PATCH v2 4/4] xen/dts: Support Linux initrd DT bindings Julien Grall 3 siblings, 1 reply; 16+ messages in thread From: Julien Grall @ 2013-09-26 12:56 UTC (permalink / raw) To: xen-devel Cc: patches, Julien Grall, ian.campbell, andre.przywara, stefano.stabellini Signed-off-by: Julien Grall <julien.grall@linaro.org> --- xen/common/device_tree.c | 2 -- xen/include/asm-arm/config.h | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 9a16650..32cbb1e 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -65,8 +65,6 @@ static LIST_HEAD(aliases_lookup); printk(fmt, ## __VA_ARGS__); \ } while (0) -#define ALIGN(x, a) ((x + (a) - 1) & ~((a) - 1)); - // #define DEBUG_DT #ifdef DEBUG_DT diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h index 2cea1ba..35f3b29 100644 --- a/xen/include/asm-arm/config.h +++ b/xen/include/asm-arm/config.h @@ -186,6 +186,10 @@ #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) #ifndef __ASSEMBLY__ +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) +#endif + +#ifndef __ASSEMBLY__ extern unsigned long xen_phys_start; extern unsigned long xenheap_phys_end; extern unsigned long frametable_virt_end; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 12:56 ` [PATCH v2 2/4] xen/arm: Add macro ALIGN Julien Grall @ 2013-09-26 14:30 ` Ian Campbell 2013-09-26 14:34 ` Andrew Cooper 0 siblings, 1 reply; 16+ messages in thread From: Ian Campbell @ 2013-09-26 14:30 UTC (permalink / raw) To: Julien Grall; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h > index 2cea1ba..35f3b29 100644 > --- a/xen/include/asm-arm/config.h > +++ b/xen/include/asm-arm/config.h > @@ -186,6 +186,10 @@ > #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) > > #ifndef __ASSEMBLY__ > +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) Seems like there ought to be a place under include/xen where this would fit. xen/include/xen/lib.h I reckon. > +#endif > + > +#ifndef __ASSEMBLY__ > extern unsigned long xen_phys_start; > extern unsigned long xenheap_phys_end; > extern unsigned long frametable_virt_end; ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 14:30 ` Ian Campbell @ 2013-09-26 14:34 ` Andrew Cooper 2013-09-26 14:38 ` Ian Campbell 0 siblings, 1 reply; 16+ messages in thread From: Andrew Cooper @ 2013-09-26 14:34 UTC (permalink / raw) To: Ian Campbell Cc: Julien Grall, xen-devel, patches, andre.przywara, stefano.stabellini On 26/09/13 15:30, Ian Campbell wrote: > On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > >> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h >> index 2cea1ba..35f3b29 100644 >> --- a/xen/include/asm-arm/config.h >> +++ b/xen/include/asm-arm/config.h >> @@ -186,6 +186,10 @@ >> #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) >> >> #ifndef __ASSEMBLY__ >> +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) > Seems like there ought to be a place under include/xen where this would > fit. > > xen/include/xen/lib.h I reckon. Except x86 has #define ALIGN _ALIGN which will surely cause problems? ~Andrew ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 14:34 ` Andrew Cooper @ 2013-09-26 14:38 ` Ian Campbell 2013-09-26 14:41 ` Andrew Cooper 2013-09-26 15:26 ` Julien Grall 0 siblings, 2 replies; 16+ messages in thread From: Ian Campbell @ 2013-09-26 14:38 UTC (permalink / raw) To: Andrew Cooper Cc: Julien Grall, xen-devel, patches, andre.przywara, stefano.stabellini On Thu, 2013-09-26 at 15:34 +0100, Andrew Cooper wrote: > On 26/09/13 15:30, Ian Campbell wrote: > > On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > > > >> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h > >> index 2cea1ba..35f3b29 100644 > >> --- a/xen/include/asm-arm/config.h > >> +++ b/xen/include/asm-arm/config.h > >> @@ -186,6 +186,10 @@ > >> #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) > >> > >> #ifndef __ASSEMBLY__ > >> +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) > > Seems like there ought to be a place under include/xen where this would > > fit. > > > > xen/include/xen/lib.h I reckon. > > Except x86 has #define ALIGN _ALIGN which will surely cause problems? ARM has this too (assuming you meant __ALIGN, can't find the other), but in both cases it is only the #ifdef __ASSEMBLY__, whereas this adds a non-asm version. Could avoid any confusion by naming this version ROUNDUP. xen/common/xmalloc_tlsf.c has ROUNDUP_PAGE already too BTW. Ian. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 14:38 ` Ian Campbell @ 2013-09-26 14:41 ` Andrew Cooper 2013-09-26 15:26 ` Julien Grall 1 sibling, 0 replies; 16+ messages in thread From: Andrew Cooper @ 2013-09-26 14:41 UTC (permalink / raw) To: Ian Campbell Cc: Julien Grall, xen-devel, patches, andre.przywara, stefano.stabellini On 26/09/13 15:38, Ian Campbell wrote: > On Thu, 2013-09-26 at 15:34 +0100, Andrew Cooper wrote: >> On 26/09/13 15:30, Ian Campbell wrote: >>> On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: >>> >>>> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h >>>> index 2cea1ba..35f3b29 100644 >>>> --- a/xen/include/asm-arm/config.h >>>> +++ b/xen/include/asm-arm/config.h >>>> @@ -186,6 +186,10 @@ >>>> #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) >>>> >>>> #ifndef __ASSEMBLY__ >>>> +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) >>> Seems like there ought to be a place under include/xen where this would >>> fit. >>> >>> xen/include/xen/lib.h I reckon. >> Except x86 has #define ALIGN _ALIGN which will surely cause problems? > ARM has this too (assuming you meant __ALIGN, can't find the other), but > in both cases it is only the #ifdef __ASSEMBLY__, whereas this adds a > non-asm version. > > Could avoid any confusion by naming this version ROUNDUP. > > xen/common/xmalloc_tlsf.c has ROUNDUP_PAGE already too BTW. > > Ian. > That seems like a sensible way forward. ~Andrew ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/4] xen/arm: Add macro ALIGN 2013-09-26 14:38 ` Ian Campbell 2013-09-26 14:41 ` Andrew Cooper @ 2013-09-26 15:26 ` Julien Grall 1 sibling, 0 replies; 16+ messages in thread From: Julien Grall @ 2013-09-26 15:26 UTC (permalink / raw) To: Ian Campbell Cc: Andrew Cooper, patches, xen-devel, andre.przywara, stefano.stabellini On 09/26/2013 03:38 PM, Ian Campbell wrote: > On Thu, 2013-09-26 at 15:34 +0100, Andrew Cooper wrote: >> On 26/09/13 15:30, Ian Campbell wrote: >>> On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: >>> >>>> diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h >>>> index 2cea1ba..35f3b29 100644 >>>> --- a/xen/include/asm-arm/config.h >>>> +++ b/xen/include/asm-arm/config.h >>>> @@ -186,6 +186,10 @@ >>>> #define STACK_SIZE (PAGE_SIZE << STACK_ORDER) >>>> >>>> #ifndef __ASSEMBLY__ >>>> +#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1)) >>> Seems like there ought to be a place under include/xen where this would >>> fit. >>> >>> xen/include/xen/lib.h I reckon. >> >> Except x86 has #define ALIGN _ALIGN which will surely cause problems? > > ARM has this too (assuming you meant __ALIGN, can't find the other), but > in both cases it is only the #ifdef __ASSEMBLY__, whereas this adds a > non-asm version. > > Could avoid any confusion by naming this version ROUNDUP. I will rename it on the next patch series. > xen/common/xmalloc_tlsf.c has ROUNDUP_PAGE already too BTW. > > Ian. > -- Julien Grall ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 2013-09-26 12:56 [PATCH v2 0/4] ARM: Support initrd loading Julien Grall 2013-09-26 12:56 ` [PATCH v2 1/4] xen/arm: Add macro MB Julien Grall 2013-09-26 12:56 ` [PATCH v2 2/4] xen/arm: Add macro ALIGN Julien Grall @ 2013-09-26 12:56 ` Julien Grall 2013-09-26 14:34 ` Ian Campbell 2013-09-26 12:56 ` [PATCH v2 4/4] xen/dts: Support Linux initrd DT bindings Julien Grall 3 siblings, 1 reply; 16+ messages in thread From: Julien Grall @ 2013-09-26 12:56 UTC (permalink / raw) To: xen-devel Cc: patches, Julien Grall, ian.campbell, andre.przywara, stefano.stabellini Signed-off-by: Julien Grall <julien.grall@linaro.org> --- Changes in v2: - Align the initrd and DTB length to 2MB --- xen/arch/arm/domain_build.c | 101 +++++++++++++++++++++++++++++++++++++------ xen/arch/arm/kernel.c | 20 +++++---- xen/arch/arm/kernel.h | 2 + 3 files changed, 102 insertions(+), 21 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index b8c8a5d..7fc597f 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -163,12 +163,16 @@ static int write_properties(struct domain *d, struct kernel_info *kinfo, * * * remember xen,dom0-bootargs if we don't already have * bootargs (from module #1, above). - * * remove bootargs, xen,dom0-bootargs and xen,xen-bootargs. + * * remove bootargs, xen,dom0-bootargs, xen,xen-bootargs, + * linux,initrd-start and linux,initrd-end. */ if ( dt_node_path_is_equal(np, "/chosen") ) { - if ( dt_property_name_is_equal(pp, "xen,xen-bootargs") ) + if ( dt_property_name_is_equal(pp, "xen,xen-bootargs") || + dt_property_name_is_equal(pp, "linux,initrd-start") || + dt_property_name_is_equal(pp, "linux,initrd-end") ) continue; + if ( dt_property_name_is_equal(pp, "xen,dom0-bootargs") ) { had_dom0_bootargs = 1; @@ -214,12 +218,22 @@ static int write_properties(struct domain *d, struct kernel_info *kinfo, strlen(bootargs) + 1); if ( res ) return res; - } - /* - * XXX should populate /chosen/linux,initrd-{start,end} here if we - * have module[2] - */ + /* + * If the bootloader provides an initrd, we must create a placeholder + * for the initrd properties. The values will be replaced later. + */ + if ( early_info.modules.module[MOD_INITRD].size ) + { + res = fdt_property_cell(kinfo->fdt, "linux,initrd-start", 0); + if ( res ) + return res; + + res = fdt_property_cell(kinfo->fdt, "linux,initrd-end", 0); + if ( res ) + return res; + } + } return 0; } @@ -779,6 +793,8 @@ static int prepare_dtb(struct domain *d, struct kernel_info *kinfo) int new_size; int ret; paddr_t end; + paddr_t initrd_len; + paddr_t dtb_len; ASSERT(dt_host && (dt_host->sibling == NULL)); @@ -805,8 +821,10 @@ static int prepare_dtb(struct domain *d, struct kernel_info *kinfo) if ( ret < 0 ) goto err; - /* Actual new size */ - new_size = fdt_totalsize(kinfo->fdt); + /* Align DTB and initrd size to 2Mb. Linux only requires 4 byte alignment */ + initrd_len = ALIGN(early_info.modules.module[MOD_INITRD].size, MB(2)); + dtb_len = ALIGN(fdt_totalsize(kinfo->fdt), MB(2)); + new_size = initrd_len + dtb_len; /* * DTB must be loaded such that it does not conflict with the @@ -815,14 +833,14 @@ static int prepare_dtb(struct domain *d, struct kernel_info *kinfo) * the recommendation in Documentation/arm64/booting.txt is below * 512MB. Place at 128MB, (or, if we have less RAM, as high as * possible) in order to satisfy both. + * If the bootloader provides an initrd, it will be loaded just + * after the DTB. */ end = kinfo->mem.bank[0].start + kinfo->mem.bank[0].size; end = MIN(kinfo->mem.bank[0].start + (128<<20) + new_size, end); - kinfo->dtb_paddr = end - new_size; - - /* Align the address to 2Mb. Linux only requires 4 byte alignment */ - kinfo->dtb_paddr &= ~((2 << 20) - 1); + kinfo->initrd_paddr = end - initrd_len; + kinfo->dtb_paddr = kinfo->initrd_paddr - dtb_len; if ( kinfo->dtb_paddr < kinfo->mem.bank[0].start || kinfo->mem.bank[0].start + new_size > end ) @@ -855,6 +873,61 @@ static void dtb_load(struct kernel_info *kinfo) xfree(kinfo->fdt); } +static void initrd_load(struct kernel_info *kinfo) +{ + paddr_t load_addr = kinfo->initrd_paddr; + paddr_t paddr = early_info.modules.module[MOD_INITRD].start; + paddr_t len = early_info.modules.module[MOD_INITRD].size; + unsigned long offs; + int node; + int res; + + if ( !len ) + return; + + printk("Loading dom0 initrd from %"PRIpaddr" to 0x%"PRIpaddr"-0x%"PRIpaddr"\n", + paddr, load_addr, load_addr + len); + + /* Fix up linux,initrd-start and linux,initrd-end in /chosen */ + node = fdt_path_offset(kinfo->fdt, "/chosen"); + if ( node < 0 ) + panic("Cannot find the /chosen node"); + + res = fdt_setprop_inplace_cell(kinfo->fdt, node, "linux,initrd-start", + load_addr); + if ( res ) + panic("Cannot fix up \"linux,initrd-start\" property\n"); + + res = fdt_setprop_inplace_cell(kinfo->fdt, node, "linux,initrd-end", + load_addr + len); + if ( res ) + panic("Cannot fix up \"linux,initrd-end\" property\n"); + + for ( offs = 0; offs < len; ) + { + int rc; + paddr_t s, l, ma; + void *dst; + + s = offs & ~PAGE_MASK; + l = min(PAGE_SIZE - s, len); + + rc = gvirt_to_maddr(load_addr + offs, &ma); + if ( rc ) + { + panic("\nUnable to translate guest address\n"); + return; + } + + dst = map_domain_page(ma>>PAGE_SHIFT); + + copy_from_paddr(dst + s, paddr + offs, l, BUFFERABLE); + + unmap_domain_page(dst); + offs += l; + } +} + int construct_dom0(struct domain *d) { struct kernel_info kinfo = {}; @@ -891,6 +964,8 @@ int construct_dom0(struct domain *d) p2m_load_VTTBR(d); kernel_load(&kinfo); + /* initrd_load will fix up the fdt, so call it before dtb_load */ + initrd_load(&kinfo); dtb_load(&kinfo); discard_initial_modules(); diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c index 7a91d60..bd59d74 100644 --- a/xen/arch/arm/kernel.c +++ b/xen/arch/arm/kernel.c @@ -71,15 +71,22 @@ static void kernel_zimage_check_overlap(struct kernel_info *info) { paddr_t zimage_start = info->zimage.load_addr; paddr_t zimage_end = info->zimage.load_addr + info->zimage.len; - paddr_t dtb_start = info->dtb_paddr; - paddr_t dtb_end = info->dtb_paddr + fdt_totalsize(info->fdt); + paddr_t start = info->dtb_paddr; + paddr_t end; - if ( (dtb_start > zimage_end) || (dtb_end < zimage_start) ) + end = info->initrd_paddr + early_info.modules.module[MOD_INITRD].size; + + /* + * In the dom0 memory, the initrd will be just after the DTB. So we + * only need to check if the zImage range will overlap the + * DTB-initrd range. + */ + if ( (start > zimage_end) || (end < zimage_start) ) return; panic(XENLOG_ERR "The kernel(0x%"PRIpaddr"-0x%"PRIpaddr - ") is overlapping the DTB(0x%"PRIpaddr"-0x%"PRIpaddr")\n", - zimage_start, zimage_end, dtb_start, dtb_end); + ") is overlapping the DTB-initrd(0x%"PRIpaddr"-0x%"PRIpaddr")\n", + zimage_start, zimage_end, start, end); } static void kernel_zimage_load(struct kernel_info *info) @@ -328,9 +335,6 @@ int kernel_prepare(struct kernel_info *info) paddr_t start, size; - if ( early_info.modules.nr_mods > MOD_INITRD ) - panic("Cannot handle dom0 initrd yet\n"); - if ( early_info.modules.nr_mods < MOD_KERNEL ) { printk("No boot modules found, trying flash\n"); diff --git a/xen/arch/arm/kernel.h b/xen/arch/arm/kernel.h index c900e74..debf590 100644 --- a/xen/arch/arm/kernel.h +++ b/xen/arch/arm/kernel.h @@ -21,6 +21,8 @@ struct kernel_info { paddr_t dtb_paddr; paddr_t entry; + paddr_t initrd_paddr; + void *kernel_img; unsigned kernel_order; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 2013-09-26 12:56 ` [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 Julien Grall @ 2013-09-26 14:34 ` Ian Campbell 0 siblings, 0 replies; 16+ messages in thread From: Ian Campbell @ 2013-09-26 14:34 UTC (permalink / raw) To: Julien Grall; +Cc: stefano.stabellini, andre.przywara, patches, xen-devel On Thu, 2013-09-26 at 13:56 +0100, Julien Grall wrote: > Signed-off-by: Julien Grall <julien.grall@linaro.org> Acked-by: Ian Campbell <ian.campbell@citrix.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 4/4] xen/dts: Support Linux initrd DT bindings 2013-09-26 12:56 [PATCH v2 0/4] ARM: Support initrd loading Julien Grall ` (2 preceding siblings ...) 2013-09-26 12:56 ` [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 Julien Grall @ 2013-09-26 12:56 ` Julien Grall 3 siblings, 0 replies; 16+ messages in thread From: Julien Grall @ 2013-09-26 12:56 UTC (permalink / raw) To: xen-devel Cc: patches, Julien Grall, ian.campbell, andre.przywara, stefano.stabellini Linux uses the property linux,initrd-start and linux,initrd-end to know where the initrd lives in memory. Signed-off-by: Julien Grall <julien.grall@linaro.org> Acked-by: Ian Campbell <ian.campbell@citrix.com> --- xen/common/device_tree.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 32cbb1e..8154eaf 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -380,6 +380,29 @@ static void __init process_multiboot_node(const void *fdt, int node, early_info.modules.nr_mods = nr; } +static void __init process_chosen_node(const void *fdt, int node, + const char *name, + u32 address_cells, u32 size_cells) +{ + struct dt_mb_module *mod = &early_info.modules.module[MOD_INITRD]; + u32 start, end; + + dt_printk("Checking for initrd in /chosen\n"); + + start = device_tree_get_u32(fdt, node, "linux,initrd-start", 0); + end = device_tree_get_u32(fdt, node, "linux,initrd-end", 0); + + if ( !start || !end || (start >= end) ) + return; + + dt_printk("Initrd 0x%x-0x%x\n", start, end); + + mod->start = start; + mod->size = end - start; + + early_info.modules.nr_mods = MAX(MOD_INITRD, early_info.modules.nr_mods); +} + static int __init early_scan_node(const void *fdt, int node, const char *name, int depth, u32 address_cells, u32 size_cells, @@ -389,6 +412,8 @@ static int __init early_scan_node(const void *fdt, process_memory_node(fdt, node, name, address_cells, size_cells); else if ( device_tree_node_compatible(fdt, node, "xen,multiboot-module" ) ) process_multiboot_node(fdt, node, name, address_cells, size_cells); + else if ( depth == 1 && device_tree_node_matches(fdt, node, "chosen") ) + process_chosen_node(fdt, node, name, address_cells, size_cells); return 0; } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2013-09-26 15:52 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-09-26 12:56 [PATCH v2 0/4] ARM: Support initrd loading Julien Grall 2013-09-26 12:56 ` [PATCH v2 1/4] xen/arm: Add macro MB Julien Grall 2013-09-26 14:32 ` Ian Campbell 2013-09-26 15:26 ` Julien Grall 2013-09-26 15:30 ` Ian Campbell 2013-09-26 15:32 ` Julien Grall 2013-09-26 15:52 ` Ian Campbell 2013-09-26 12:56 ` [PATCH v2 2/4] xen/arm: Add macro ALIGN Julien Grall 2013-09-26 14:30 ` Ian Campbell 2013-09-26 14:34 ` Andrew Cooper 2013-09-26 14:38 ` Ian Campbell 2013-09-26 14:41 ` Andrew Cooper 2013-09-26 15:26 ` Julien Grall 2013-09-26 12:56 ` [PATCH v2 3/4] xen/arm: Add support to load initrd in dom0 Julien Grall 2013-09-26 14:34 ` Ian Campbell 2013-09-26 12:56 ` [PATCH v2 4/4] xen/dts: Support Linux initrd DT bindings Julien Grall
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).