From: Rob Herring <robherring2@gmail.com>
To: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Cc: Grant Likely <grant.likely@linaro.org>,
Rob Herring <rob.herring@calxeda.com>
Subject: [PATCH 23/28] of: introduce common FDT machine related functions
Date: Mon, 16 Sep 2013 18:09:19 -0500 [thread overview]
Message-ID: <1379372965-22359-24-git-send-email-robherring2@gmail.com> (raw)
In-Reply-To: <1379372965-22359-1-git-send-email-robherring2@gmail.com>
From: Rob Herring <rob.herring@calxeda.com>
Introduce common of_flat_dt_match_machine and
of_flat_dt_get_machine_name functions to unify architectures' handling
of machine level model and compatible properties.
Several architectures match the root compatible string with an arch
specific list of machine descriptors duplicating the same search
algorithm. Create a common implementation with a simple architecture
specific hook to iterate over each machine's match table.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: Grant Likely <grant.likely@linaro.org>
---
drivers/of/fdt.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/of_fdt.h | 4 ++++
2 files changed, 64 insertions(+)
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 83cdeb5..e21d1dc 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -619,6 +619,66 @@ int __init of_scan_flat_dt_by_path(const char *path,
return ret;
}
+const char *of_flat_dt_get_machine_name(void)
+{
+ const char *name;
+ unsigned long dt_root = of_get_flat_dt_root();
+
+ name = of_get_flat_dt_prop(dt_root, "model", NULL);
+ if (!name)
+ name = of_get_flat_dt_prop(dt_root, "compatible", NULL);
+ return name;
+}
+
+/**
+ * of_flat_dt_match_machine - Iterate match tables to find matching machine.
+ *
+ * @default_match: A machine specific ptr to return in case of no match.
+ * @get_next_compat: callback function to return next compatible match table.
+ *
+ * Iterate through machine match tables to find the best match for the machine
+ * compatible string in the FDT.
+ */
+void * __init of_flat_dt_match_machine(void *default_match,
+ void * (*get_next_compat)(const char * const**))
+{
+ void *data = NULL;
+ void *best_data = default_match;
+ const char *const *compat;
+ unsigned long dt_root;
+ unsigned int best_score = ~1, score = 0;
+
+ dt_root = of_get_flat_dt_root();
+ while ((data = get_next_compat(&compat))) {
+ score = of_flat_dt_match(dt_root, compat);
+ if (score > 0 && score < best_score) {
+ best_data = data;
+ best_score = score;
+ }
+ }
+ if (!best_data) {
+ const char *prop;
+ long size;
+
+ pr_err("\n unrecognized device tree list:\n[ ");
+
+ prop = of_get_flat_dt_prop(dt_root, "compatible", &size);
+ if (prop) {
+ while (size > 0) {
+ printk("'%s' ", prop);
+ size -= strlen(prop) + 1;
+ prop += strlen(prop) + 1;
+ }
+ }
+ printk("]\n\n");
+ return NULL;
+ }
+
+ pr_info("Machine model: %s\n", of_flat_dt_get_machine_name());
+
+ return best_data;
+}
+
#ifdef CONFIG_BLK_DEV_INITRD
/**
* early_init_dt_check_for_initrd - Decode initrd location from flat tree
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index b365f5a..985a744 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -108,6 +108,10 @@ extern int early_init_dt_scan_root(unsigned long node, const char *uname,
extern bool early_init_dt_scan(void *params);
+const char *of_flat_dt_get_machine_name(void);
+extern void *of_flat_dt_match_machine(void *default_match,
+ void * (*get_next_compat)(const char * const**));
+
/* Other Prototypes */
extern void unflatten_device_tree(void);
extern void unflatten_and_copy_device_tree(void);
--
1.8.1.2
next prev parent reply other threads:[~2013-09-16 23:09 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-16 23:08 [PATCH 00/28] Early flattened DT init consolidation Rob Herring
2013-09-16 23:08 ` [PATCH 01/28] c6x: use boot_command_line instead of private c6x_command_line Rob Herring
2013-09-18 3:07 ` Grant Likely
2013-09-18 13:35 ` Mark Salter
2013-09-16 23:08 ` [PATCH 02/28] openrisc: use boot_command_line instead of private cmd_line Rob Herring
[not found] ` <1379372965-22359-1-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-16 23:08 ` [PATCH 03/28] of: create unflatten_and_copy_device_tree Rob Herring
2013-09-18 3:15 ` Grant Likely
2013-09-16 23:09 ` [PATCH 04/28] arc: use unflatten_and_copy_device_tree Rob Herring
2013-09-17 5:27 ` Vineet Gupta
2013-09-16 23:09 ` [PATCH 05/28] openrisc: " Rob Herring
2013-09-16 23:09 ` [PATCH 06/28] x86: " Rob Herring
2013-09-16 23:09 ` [PATCH 07/28] xtensa: " Rob Herring
[not found] ` <1379372965-22359-8-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-23 10:52 ` Max Filippov
2013-09-16 23:09 ` [PATCH 08/28] metag: " Rob Herring
2013-09-16 23:09 ` [PATCH 09/28] of: Introduce common early_init_dt_scan Rob Herring
[not found] ` <1379372965-22359-10-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 5:46 ` Vineet Gupta
2013-09-18 3:24 ` Grant Likely
2013-09-16 23:09 ` [PATCH 10/28] arc: use early_init_dt_scan Rob Herring
2013-09-17 6:37 ` Vineet Gupta
2013-09-16 23:09 ` [PATCH 11/28] arm: " Rob Herring
2013-09-16 23:09 ` [PATCH 12/28] arm64: " Rob Herring
[not found] ` <1379372965-22359-13-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 8:43 ` Catalin Marinas
2013-09-16 23:09 ` [PATCH 13/28] c6x: " Rob Herring
[not found] ` <1379372965-22359-14-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 12:00 ` Mark Salter
2013-09-16 23:09 ` [PATCH 14/28] microblaze: " Rob Herring
2013-09-17 13:05 ` Michal Simek
2013-09-16 23:09 ` [PATCH 15/28] mips: " Rob Herring
2013-09-17 4:32 ` John Crispin
2013-09-16 23:09 ` [PATCH 16/28] openrisc: " Rob Herring
2013-09-16 23:09 ` [PATCH 17/28] xtensa: " Rob Herring
[not found] ` <1379372965-22359-18-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-23 10:53 ` Max Filippov
2013-09-16 23:09 ` [PATCH 18/28] of: create default early_init_dt_add_memory_arch Rob Herring
2013-09-17 8:46 ` Catalin Marinas
[not found] ` <DDB72C85-45A3-40FC-9108-7B56F6C5BC5B-5wv7dgnIgG8@public.gmane.org>
2013-09-17 13:01 ` Rob Herring
2013-09-17 15:28 ` Catalin Marinas
2013-09-18 3:33 ` Grant Likely
[not found] ` <20130918033358.51CA1C42C9E-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-09-18 15:09 ` Rob Herring
2013-09-22 12:16 ` Grant Likely
2013-09-16 23:09 ` [PATCH 19/28] arm: set initrd_start/initrd_end for fdt scan Rob Herring
2013-09-18 3:36 ` Grant Likely
2013-09-16 23:09 ` [PATCH 20/28] arm64: " Rob Herring
[not found] ` <1379372965-22359-21-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 8:50 ` Catalin Marinas
2013-09-18 3:36 ` Grant Likely
2013-09-16 23:09 ` [PATCH 21/28] of: remove early_init_dt_setup_initrd_arch Rob Herring
2013-09-17 6:45 ` Vineet Gupta
2013-09-18 3:39 ` Grant Likely
2013-09-16 23:09 ` [PATCH 22/28] openrisc: remove unnecessary prom.c includes Rob Herring
2013-09-16 23:09 ` Rob Herring [this message]
[not found] ` <1379372965-22359-24-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 3:44 ` [PATCH 23/28] of: introduce common FDT machine related functions Grant Likely
2013-10-04 18:49 ` Grant Likely
2013-09-16 23:09 ` [PATCH 24/28] arc: use common of_flat_dt_match_machine Rob Herring
2013-09-17 6:50 ` Vineet Gupta
2013-09-16 23:09 ` [PATCH 25/28] arm: " Rob Herring
2013-09-16 23:09 ` [PATCH 26/28] arm64: use common of_flat_dt_get_machine_name Rob Herring
[not found] ` <1379372965-22359-27-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 8:53 ` Catalin Marinas
2013-09-16 23:09 ` [PATCH 27/28] metag: use common of_flat_dt_match_machine Rob Herring
2013-09-16 23:09 ` [PATCH 28/28] mips: use common of_flat_dt_get_machine_name Rob Herring
[not found] ` <1379372965-22359-29-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-17 4:32 ` John Crispin
2013-09-23 9:58 ` [PATCH 00/28] Early flattened DT init consolidation James Hogan
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=1379372965-22359-24-git-send-email-robherring2@gmail.com \
--to=robherring2@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=grant.likely@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rob.herring@calxeda.com \
/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).