From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linuxppc-dev@ozlabs.org
Subject: [PATCH 01/41] dt: Add of_device_compatible_match()
Date: Tue, 5 Jul 2016 15:03:37 +1000 [thread overview]
Message-ID: <1467695057-12431-2-git-send-email-benh@kernel.crashing.org> (raw)
In-Reply-To: <1467695057-12431-1-git-send-email-benh@kernel.crashing.org>
This provides an equivalent of of_fdt_match() for non-flat trees.
This is more practical than matching an array of of_device_id structs
when converting a bunch of existing users of of_fdt_match().
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
drivers/of/base.c | 22 ++++++++++++++++++++++
include/linux/of.h | 2 ++
2 files changed, 24 insertions(+)
diff --git a/drivers/of/base.c b/drivers/of/base.c
index ebf84e3..429c594 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -493,6 +493,28 @@ int of_device_is_compatible(const struct device_node *device,
}
EXPORT_SYMBOL(of_device_is_compatible);
+/** Checks if the device is compatible with any of the entries in
+ * a NULL terminated array of strings. Returns the best match
+ * score or 0.
+ */
+int of_device_compatible_match(struct device_node *device,
+ const char *const *compat)
+{
+ unsigned int tmp, score = 0;
+
+ if (!compat)
+ return 0;
+
+ while (*compat) {
+ tmp = of_device_is_compatible(device, *compat);
+ if (tmp && (score == 0 || (tmp < score)))
+ score = tmp;
+ compat++;
+ }
+
+ return score;
+}
+
/**
* of_machine_is_compatible - Test root of device tree for a given compatible value
* @compat: compatible string to look for in root node's compatible property.
diff --git a/include/linux/of.h b/include/linux/of.h
index 74eb28c..33c184d 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -324,6 +324,8 @@ extern int of_property_read_string_helper(const struct device_node *np,
const char **out_strs, size_t sz, int index);
extern int of_device_is_compatible(const struct device_node *device,
const char *);
+extern int of_device_compatible_match(struct device_node *device,
+ const char *const *compat);
extern bool of_device_is_available(const struct device_node *device);
extern bool of_device_is_big_endian(const struct device_node *device);
extern const void *of_get_property(const struct device_node *node,
--
2.7.4
next prev parent reply other threads:[~2016-07-05 5:04 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-05 5:03 [PATCH v2 00/41] Reorganize setup code and merge 32 and 64-bit setup_arch() Benjamin Herrenschmidt
2016-07-05 5:03 ` Benjamin Herrenschmidt [this message]
2016-07-05 5:03 ` [PATCH 02/41] drm: Fix broken use of _PAGE_NO_CACHE on powerpc Benjamin Herrenschmidt
2016-07-07 12:38 ` Michael Ellerman
2016-07-07 13:04 ` Benjamin Herrenschmidt
2016-07-05 5:03 ` [PATCH 03/41] powerpc/prom_init: PTRRELOC is not needed Benjamin Herrenschmidt
2016-07-05 5:03 ` [PATCH 04/41] powerpc: Make PTRRELOC() 32-bit only Benjamin Herrenschmidt
2016-07-05 5:03 ` [PATCH 05/41] powerpc: Factor do_feature_fixup calls Benjamin Herrenschmidt
2016-07-21 11:09 ` [05/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 06/41] powerpc: Move 64-bit feature fixup earlier Benjamin Herrenschmidt
2016-07-21 11:09 ` [06/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 07/41] powerpc: Move 64-bit memory reserves to setup_arch() Benjamin Herrenschmidt
2016-07-21 11:09 ` [07/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 08/41] powerpc: Move epapr_paravirt_early_init() to early_init_devtree() Benjamin Herrenschmidt
2016-07-15 10:53 ` [08/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 09/41] powerpc: Update obsolete comments in setup_32.c about entry conditions Benjamin Herrenschmidt
2016-07-15 10:53 ` [09/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 10/41] powerpc: Add comment explaining the purpose of setup_kdump_trampoline() Benjamin Herrenschmidt
2016-07-15 10:53 ` [10/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 11/41] powerpc/dart: Use a cachable DART Benjamin Herrenschmidt
2016-07-21 11:09 ` [11/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 12/41] powerpc: Move FW feature probing out of pseries probe() Benjamin Herrenschmidt
2016-07-21 11:09 ` [12/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 13/41] powerpc: Put exception configuration in a common place Benjamin Herrenschmidt
2016-07-21 11:09 ` [13/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 14/41] powerpc/pmac: Remove early allocation of the SMU command buffer Benjamin Herrenschmidt
2016-07-21 11:09 ` [14/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 15/41] powerpc/64: Move MMU backend selection out of platform code Benjamin Herrenschmidt
2016-07-21 11:09 ` [15/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 16/41] powerpc/pasemi: Remove IOBMAP allocation from platform probe() Benjamin Herrenschmidt
2016-07-21 11:09 ` [16/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 17/41] powerpc/mm/hash: Don't use machine_is() early during boot Benjamin Herrenschmidt
2016-07-21 11:09 ` [17/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 18/41] powerpc/rtas: Don't test for machine type in rtas_initialize() Benjamin Herrenschmidt
2016-07-15 10:53 ` [18/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 19/41] powerpc: Don't test for machine type in smp_setup_cpu_maps() Benjamin Herrenschmidt
2016-07-15 10:53 ` [19/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 20/41] powerpc/mm/hash64: Don't test for machine type to detect HEA special case Benjamin Herrenschmidt
2016-07-21 11:09 ` [20/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 21/41] powerpc/pmac: Remove spurrious machine type test Benjamin Herrenschmidt
2016-07-21 11:09 ` [21/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 22/41] powerpc/mm: Move hash table ops to a separate structure Benjamin Herrenschmidt
2016-07-21 11:09 ` [22/41] " Michael Ellerman
2016-07-05 5:03 ` [PATCH 23/41] powerpc: Ensure that ppc_md is empty before probing for machine type Benjamin Herrenschmidt
2016-07-21 11:09 ` [23/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 24/41] powerpc: Move 64-bit probe_machine() to later in the boot process Benjamin Herrenschmidt
2016-07-21 11:09 ` [24/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 25/41] powerpc/cell: Don't use flat device-tree after boot Benjamin Herrenschmidt
2016-07-15 10:53 ` [25/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 26/41] powerpc/85xx/ge_imp3a: Don't use the " Benjamin Herrenschmidt
2016-07-15 10:53 ` [26/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 27/41] powerpc/85xx/mpc85xx_ds: " Benjamin Herrenschmidt
2016-07-15 10:53 ` [27/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 28/41] powerpc/85xx/mpc85xx_rdb: " Benjamin Herrenschmidt
2016-07-15 10:53 ` [28/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 29/41] powerpc: Move 32-bit probe() machine to later in the boot process Benjamin Herrenschmidt
2016-07-21 11:09 ` [29/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 30/41] powerpc: Get rid of ppc_md.init_early() Benjamin Herrenschmidt
2016-07-21 11:09 ` [30/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 31/41] powerpc/64: Move the boot time info banner to a separate function Benjamin Herrenschmidt
2016-07-21 11:09 ` [31/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 32/41] powerpc/64: Move setting of {i, d}cache_bsize to initialize_cache_info() Benjamin Herrenschmidt
2016-07-21 11:09 ` [32/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 33/41] powerpc/64: Move the content of setup_system() to setup_arch() Benjamin Herrenschmidt
2016-07-21 11:09 ` [33/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 34/41] powerpc/32: Move cache info inits to a separate function Benjamin Herrenschmidt
2016-07-21 11:09 ` [34/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 35/41] powerpc: Re-order the call to smp_setup_cpu_maps() Benjamin Herrenschmidt
2016-07-21 11:09 ` [35/41] " Michael Ellerman
2016-07-05 5:04 ` [PATCH 36/41] powerpc: Re-order setup_panic() Benjamin Herrenschmidt
2016-07-05 5:17 ` Benjamin Herrenschmidt
2016-07-21 11:09 ` [36/41] " Michael Ellerman
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=1467695057-12431-2-git-send-email-benh@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.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).