Merge tag 'dt-for-linus' of git://git.secretlab.ca/git/linux
Pull devicetree changes from Grant Likely:
"Updates to devicetree core code. This branch contains the following
notable changes:
- add reserved memory binding
- make struct device_node a kobject and remove legacy
/proc/device-tree
- ePAPR conformance fixes
- update in-kernel DTC copy to version v1.4.0
- preparatory changes for dynamic device tree overlays
- minor bug fixes and documentation changes
The most significant change in this branch is the conversion of struct
device_node to be a kobject that is exposed via sysfs and removal of
the old /proc/device-tree code. This simplifies the device tree
handling code and tightens up the lifecycle on device tree nodes.
[updated: added fix for dangling select PROC_DEVICETREE]"
* tag 'dt-for-linus' of git://git.secretlab.ca/git/linux: (29 commits)
dt: Remove dangling "select PROC_DEVICETREE"
of: Add support for ePAPR "stdout-path" property
of: device_node kobject lifecycle fixes
of: only scan for reserved mem when fdt present
powerpc: add support for reserved memory defined by device tree
arm64: add support for reserved memory defined by device tree
of: add missing major vendors
of: add vendor prefix for SMSC
of: remove /proc/device-tree
of/selftest: Add self tests for manipulation of properties
of: Make device nodes kobjects so they show up in sysfs
arm: add support for reserved memory defined by device tree
drivers: of: add support for custom reserved memory drivers
drivers: of: add initialization code for dynamic reserved memory
drivers: of: add initialization code for static reserved memory
of: document bindings for reserved-memory nodes
Revert "of: fix of_update_property()"
kbuild: dtbs_install: new make target
ARM: mvebu: Allows to get the SoC ID even without PCI enabled
of: Allows to use the PCI translator without the PCI core
...
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/topology.h>
|
||||
@@ -37,6 +37,7 @@ struct property {
|
||||
struct property *next;
|
||||
unsigned long _flags;
|
||||
unsigned int unique_id;
|
||||
struct bin_attribute attr;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPARC)
|
||||
@@ -56,8 +57,7 @@ struct device_node {
|
||||
struct device_node *sibling;
|
||||
struct device_node *next; /* next device of same type */
|
||||
struct device_node *allnext; /* next in list of all nodes */
|
||||
struct proc_dir_entry *pde; /* this node's proc directory */
|
||||
struct kref kref;
|
||||
struct kobject kobj;
|
||||
unsigned long _flags;
|
||||
void *data;
|
||||
#if defined(CONFIG_SPARC)
|
||||
@@ -67,13 +67,34 @@ struct device_node {
|
||||
#endif
|
||||
};
|
||||
|
||||
#define MAX_PHANDLE_ARGS 8
|
||||
#define MAX_PHANDLE_ARGS 16
|
||||
struct of_phandle_args {
|
||||
struct device_node *np;
|
||||
int args_count;
|
||||
uint32_t args[MAX_PHANDLE_ARGS];
|
||||
};
|
||||
|
||||
extern int of_node_add(struct device_node *node);
|
||||
|
||||
/* initialize a node */
|
||||
extern struct kobj_type of_node_ktype;
|
||||
static inline void of_node_init(struct device_node *node)
|
||||
{
|
||||
kobject_init(&node->kobj, &of_node_ktype);
|
||||
}
|
||||
|
||||
/* true when node is initialized */
|
||||
static inline int of_node_is_initialized(struct device_node *node)
|
||||
{
|
||||
return node && node->kobj.state_initialized;
|
||||
}
|
||||
|
||||
/* true when node is attached (i.e. present on sysfs) */
|
||||
static inline int of_node_is_attached(struct device_node *node)
|
||||
{
|
||||
return node && node->kobj.state_in_sysfs;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF_DYNAMIC
|
||||
extern struct device_node *of_node_get(struct device_node *node);
|
||||
extern void of_node_put(struct device_node *node);
|
||||
@@ -114,6 +135,26 @@ static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
|
||||
set_bit(flag, &n->_flags);
|
||||
}
|
||||
|
||||
static inline void of_node_clear_flag(struct device_node *n, unsigned long flag)
|
||||
{
|
||||
clear_bit(flag, &n->_flags);
|
||||
}
|
||||
|
||||
static inline int of_property_check_flag(struct property *p, unsigned long flag)
|
||||
{
|
||||
return test_bit(flag, &p->_flags);
|
||||
}
|
||||
|
||||
static inline void of_property_set_flag(struct property *p, unsigned long flag)
|
||||
{
|
||||
set_bit(flag, &p->_flags);
|
||||
}
|
||||
|
||||
static inline void of_property_clear_flag(struct property *p, unsigned long flag)
|
||||
{
|
||||
clear_bit(flag, &p->_flags);
|
||||
}
|
||||
|
||||
extern struct device_node *of_find_all_nodes(struct device_node *prev);
|
||||
|
||||
/*
|
||||
@@ -167,6 +208,8 @@ static inline const char *of_node_full_name(const struct device_node *np)
|
||||
return np ? np->full_name : "<no-node>";
|
||||
}
|
||||
|
||||
#define for_each_of_allnodes(dn) \
|
||||
for (dn = of_allnodes; dn; dn = dn->allnext)
|
||||
extern struct device_node *of_find_node_by_name(struct device_node *from,
|
||||
const char *name);
|
||||
extern struct device_node *of_find_node_by_type(struct device_node *from,
|
||||
@@ -709,14 +752,4 @@ static inline int of_get_available_child_count(const struct device_node *np)
|
||||
return num;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PROC_FS) && defined(CONFIG_PROC_DEVICETREE)
|
||||
extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *);
|
||||
extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop);
|
||||
extern void proc_device_tree_remove_prop(struct proc_dir_entry *pde,
|
||||
struct property *prop);
|
||||
extern void proc_device_tree_update_prop(struct proc_dir_entry *pde,
|
||||
struct property *newprop,
|
||||
struct property *oldprop);
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_OF_H */
|
||||
|
||||
Reference in New Issue
Block a user