summaryrefslogtreecommitdiff
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorDoug Zobel <dzobel1@motorola.com>2013-11-15 14:29:07 -0600
committerJames Wylder <jwylder@motorola.com>2014-03-05 17:46:52 -0600
commitd2a782003a6047da120a33e6f8ee6fd33bb825d6 (patch)
tree8d20bd4ecda62a06e98993c4108456bc1acb0d0b /arch/arm/kernel
parent32fd2d36d2464056d4522a9c02797b7c2b2e884f (diff)
downloadolio-linux-3.10-d2a782003a6047da120a33e6f8ee6fd33bb825d6.tar.xz
olio-linux-3.10-d2a782003a6047da120a33e6f8ee6fd33bb825d6.zip
CW integration and minnow bringup
* create minnow machine type * create Android makefile * add pre-commit syntax check * enable -Werror * Add drivers: CPCAP, TPS65xxx, m4sensorhub, atmxt, lm3535, usb gadget, minnow display, TI 12xx wireless Change-Id: I7962f5e1256715f2452aed5a62a4f2f2383d5046
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/atags.h2
-rw-r--r--arch/arm/kernel/atags_parse.c23
-rw-r--r--arch/arm/kernel/setup.c11
3 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/kernel/atags.h b/arch/arm/kernel/atags.h
index 9edc9692332..dc34649d87d 100644
--- a/arch/arm/kernel/atags.h
+++ b/arch/arm/kernel/atags.h
@@ -6,6 +6,8 @@ static inline void save_atags(struct tag *tags) { }
void convert_to_tag_list(struct tag *tags);
+extern u32 flat_dev_tree_address; /* 32bit physical address */
+
#ifdef CONFIG_ATAGS
struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr);
#else
diff --git a/arch/arm/kernel/atags_parse.c b/arch/arm/kernel/atags_parse.c
index 14512e6931d..44b65f47500 100644
--- a/arch/arm/kernel/atags_parse.c
+++ b/arch/arm/kernel/atags_parse.c
@@ -139,6 +139,29 @@ static int __init parse_tag_cmdline(const struct tag *tag)
__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
+u32 flat_dev_tree_address; /* 32bit physical address */
+
+#ifdef CONFIG_MACH_MINNOW
+/* process Motorola device tree */
+static int __init parse_tag_flat_dev_tree_address(const struct tag *tag)
+{
+ printk(KERN_INFO "flat_dev_tree tag == 0x%08x\n",
+ ATAG_FLAT_DEV_TREE_ADDRESS);
+ printk(KERN_INFO "flat_dev_tree_address (phys) == 0x%08x\n",
+ tag->u.flat_dev_tree.address);
+ printk(KERN_INFO "flat_dev_tree_address (virt) == 0x%p\n",
+ phys_to_virt(tag->u.flat_dev_tree.address));
+ printk(KERN_INFO "flat_dev_tree_size == 0x%08x\n",
+ tag->u.flat_dev_tree.size);
+
+ flat_dev_tree_address = tag->u.flat_dev_tree.address;
+ return 0;
+}
+
+__tagtable(ATAG_FLAT_DEV_TREE_ADDRESS, parse_tag_flat_dev_tree_address);
+
+#endif /* CONFIG_MACH_MINNOW */
+
/*
* Scan the tag table for this tag, and call its parse function.
* The tag table is built by the linker from all the __tagtable
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index b4b1d397592..c698698efd4 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -788,6 +788,17 @@ void __init setup_arch(char **cmdline_p)
arm_memblock_init(&meminfo, mdesc);
paging_init(mdesc);
+
+#ifdef CONFIG_MACH_MINNOW
+ if (flat_dev_tree_address) {
+ struct boot_param_header *dt =
+ phys_to_virt(flat_dev_tree_address);
+ if (be32_to_cpu(dt->magic) == OF_DT_HEADER) {
+ pr_info("Use ATAG dev_tree from this point.\n");
+ initial_boot_params = dt;
+ }
+ }
+#endif
request_standard_resources(mdesc);
if (mdesc->restart)