From: Ian Campbell <ian.campbell@citrix.com>
To: xen-devel@lists.xen.org
Cc: julien.grall@linaro.org, tim@xen.org,
Ian Campbell <ian.campbell@citrix.com>,
stefano.stabellini@eu.citrix.com
Subject: [PATCH v3 08/10] xen: arm: support bootmodule type detection by ordering
Date: Fri, 18 Jul 2014 14:08:18 +0100 [thread overview]
Message-ID: <1405688900-11769-8-git-send-email-ian.campbell@citrix.com> (raw)
In-Reply-To: <1405688876.491.10.camel@kazak.uk.xensource.com>
Assign modules types based on the order in which they are defined in the FDT.
This is supported only for the dom0 kernel and ramdisk when given as the first
and second modules respectively, similar to how
http://wiki.xen.org/wiki?title=Xen_ARM_with_Virtualization_Extensions/Multiboot&oldid=11824
defined the default types from the bootloader side.
This is compatible with how Xen interprets the modules with x86 multiboot and I
think simplifies things for bootloaders which now need not contain similar
guessing code if they only care about the most basic case.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
v2: Don't rely on enum ordering for guessing
---
xen/arch/arm/bootfdt.c | 17 +++++++++++++++--
xen/arch/arm/setup.c | 14 ++++++++++++++
xen/include/asm-arm/setup.h | 1 +
3 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index ce7fdf2..e100233 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -165,6 +165,7 @@ static void __init process_multiboot_node(const void *fdt, int node,
const char *name,
u32 address_cells, u32 size_cells)
{
+ static int kind_guess = 0;
const struct fdt_property *prop;
const __be32 *cell;
bootmodule_kind kind;
@@ -181,7 +182,18 @@ static void __init process_multiboot_node(const void *fdt, int node,
else if ( fdt_node_check_compatible(fdt, node, "xen,xsm-policy") == 0 )
kind = BOOTMOD_XSM;
else
- panic("%s not a known xen multiboot type\n", name);
+ kind = BOOTMOD_UNKNOWN;
+
+ /* Guess that first two unknown are kernel and ramdisk respectively. */
+ if ( kind == BOOTMOD_UNKNOWN )
+ {
+ switch ( kind_guess++ )
+ {
+ case 0: kind = BOOTMOD_KERNEL; break;
+ case 1: kind = BOOTMOD_RAMDISK; break;
+ default: break;
+ }
+ }
prop = fdt_get_property(fdt, node, "reg", &len);
if ( !prop )
@@ -281,10 +293,11 @@ static void __init early_print_info(void)
mi->bank[i].start + mi->bank[i].size - 1);
printk("\n");
for ( i = 0 ; i < mods->nr_mods; i++ )
- printk("MODULE[%d]: %"PRIpaddr" - %"PRIpaddr" %s\n",
+ printk("MODULE[%d]: %"PRIpaddr" - %"PRIpaddr" %-12s %s\n",
i,
mods->module[i].start,
mods->module[i].start + mods->module[i].size,
+ boot_module_kind_as_string(mods->module[i].kind),
mods->module[i].cmdline);
nr_rsvd = fdt_num_mem_rsv(device_tree_flattened);
for ( i = 0; i < nr_rsvd; i++ )
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 0cbe552..e53e491 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -223,6 +223,20 @@ struct bootmodule * __init boot_module_find_by_kind(bootmodule_kind kind)
return NULL;
}
+const char * __init boot_module_kind_as_string(bootmodule_kind kind)
+{
+ switch ( kind )
+ {
+ case BOOTMOD_XEN: return "Xen";
+ case BOOTMOD_FDT: return "Device Tree";
+ case BOOTMOD_KERNEL: return "Kernel";
+ case BOOTMOD_RAMDISK: return "Ramdisk";
+ case BOOTMOD_XSM: return "XSM";
+ case BOOTMOD_UNKNOWN: return "Unknown";
+ default: BUG();
+ }
+}
+
void __init discard_initial_modules(void)
{
struct bootmodules *mi = &bootinfo.modules;
diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
index e2e18c3..36e5704 100644
--- a/xen/include/asm-arm/setup.h
+++ b/xen/include/asm-arm/setup.h
@@ -64,6 +64,7 @@ struct bootmodule *add_boot_module(bootmodule_kind kind,
paddr_t start, paddr_t size,
const char *cmdline);
struct bootmodule *boot_module_find_by_kind(bootmodule_kind kind);
+const char * __init boot_module_kind_as_string(bootmodule_kind kind);
#endif
/*
--
1.7.10.4
next prev parent reply other threads:[~2014-07-18 13:08 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-18 13:07 [PATCH v3 00/10] xen: arm: Refactor/improve early DT parsing and multiboot module support Ian Campbell
2014-07-18 13:08 ` [PATCH v3 01/10] xen: arm: implement generic multiboot compatibility strings Ian Campbell
2014-07-18 13:08 ` [PATCH v3 02/10] xen: arm: /chosen/module@N/bootargs bootprotcol node is not deprecated Ian Campbell
2014-07-18 13:08 ` [PATCH v3 03/10] xen: arm: prefer typesafe max()/min() over MAX()/MIN() Ian Campbell
2014-07-18 13:08 ` [PATCH v3 04/10] xen: arm: rename early_info structs Ian Campbell
2014-07-18 13:08 ` [PATCH v3 05/10] xen: arm: move boot time fdt parsing into separate file Ian Campbell
2014-07-18 13:08 ` [PATCH v3 06/10] xen: arm: move device_tree_bootargs to bootfdt.c, renaming to boot_fdt_cmdline Ian Campbell
2014-07-18 13:08 ` [PATCH v3 07/10] xen: arm: store per-boot module type instead of relying on index Ian Campbell
2014-07-18 20:52 ` Julien Grall
2014-07-18 13:08 ` Ian Campbell [this message]
2014-07-18 21:02 ` [PATCH v3 08/10] xen: arm: support bootmodule type detection by ordering Julien Grall
2014-07-21 10:18 ` Ian Campbell
2014-07-18 13:08 ` [PATCH v3 09/10] xen: arm: update multiboot device tree bindings Ian Campbell
2014-07-18 21:03 ` Julien Grall
2014-07-21 11:45 ` Ian Campbell
2014-07-21 11:53 ` Julien Grall
2014-07-21 12:18 ` Ian Campbell
2014-07-21 12:23 ` Julien Grall
2014-07-21 12:26 ` Ian Campbell
2014-07-21 12:34 ` Julien Grall
2014-07-24 14:30 ` Ian Campbell
2014-07-24 14:33 ` Julien Grall
2014-07-24 15:12 ` Ian Campbell
2014-07-18 13:08 ` [PATCH v3 10/10] xen: arm: Only lookup kernel bootmodule once while building dom0 dtb Ian Campbell
2014-07-18 21:06 ` Julien Grall
2014-07-21 10:20 ` Ian Campbell
2014-07-21 11:48 ` [PATCH v3 00/10] xen: arm: Refactor/improve early DT parsing and multiboot module support Ian Campbell
2014-07-22 3:20 ` Fu Wei
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=1405688900-11769-8-git-send-email-ian.campbell@citrix.com \
--to=ian.campbell@citrix.com \
--cc=julien.grall@linaro.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--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 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).