Commit eef121f4 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'devicetree-fixes-for-4.4-rc4' of...

Merge tag 'devicetree-fixes-for-4.4-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull DT fixes from Rob Herring:
 "I think this should be all for 4.4:

   - Fix incorrect warning about overlapping memory regions

   - Export of_irq_find_parent again which was made static in 4.4, but
     has users pending for 4.5.

   - Fix of_msi_map_rid declaration location

   - Fix re-entrancy for of_fdt_unflatten_tree

   - Clean-up of phys_addr_t printks"

* tag 'devicetree-fixes-for-4.4-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
  of/irq: move of_msi_map_rid declaration to the correct ifdef section
  of/irq: Export of_irq_find_parent again
  of/fdt: Add mutex protection for calls to __unflatten_device_tree()
  of/address: fix typo in comment block of of_translate_one()
  of: do not use 0x in front of %pa
  of: Fix comparison of reserved memory regions
parents abb7e2b3 eaddb572
...@@ -485,9 +485,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, ...@@ -485,9 +485,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
int rone; int rone;
u64 offset = OF_BAD_ADDR; u64 offset = OF_BAD_ADDR;
/* Normally, an absence of a "ranges" property means we are /*
* Normally, an absence of a "ranges" property means we are
* crossing a non-translatable boundary, and thus the addresses * crossing a non-translatable boundary, and thus the addresses
* below the current not cannot be converted to CPU physical ones. * below the current cannot be converted to CPU physical ones.
* Unfortunately, while this is very clear in the spec, it's not * Unfortunately, while this is very clear in the spec, it's not
* what Apple understood, and they do have things like /uni-n or * what Apple understood, and they do have things like /uni-n or
* /ht nodes with no "ranges" property and a lot of perfectly * /ht nodes with no "ranges" property and a lot of perfectly
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/mutex.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_fdt.h> #include <linux/of_fdt.h>
#include <linux/of_reserved_mem.h> #include <linux/of_reserved_mem.h>
...@@ -436,6 +437,8 @@ static void *kernel_tree_alloc(u64 size, u64 align) ...@@ -436,6 +437,8 @@ static void *kernel_tree_alloc(u64 size, u64 align)
return kzalloc(size, GFP_KERNEL); return kzalloc(size, GFP_KERNEL);
} }
static DEFINE_MUTEX(of_fdt_unflatten_mutex);
/** /**
* of_fdt_unflatten_tree - create tree of device_nodes from flat blob * of_fdt_unflatten_tree - create tree of device_nodes from flat blob
* *
...@@ -447,7 +450,9 @@ static void *kernel_tree_alloc(u64 size, u64 align) ...@@ -447,7 +450,9 @@ static void *kernel_tree_alloc(u64 size, u64 align)
void of_fdt_unflatten_tree(const unsigned long *blob, void of_fdt_unflatten_tree(const unsigned long *blob,
struct device_node **mynodes) struct device_node **mynodes)
{ {
mutex_lock(&of_fdt_unflatten_mutex);
__unflatten_device_tree(blob, mynodes, &kernel_tree_alloc); __unflatten_device_tree(blob, mynodes, &kernel_tree_alloc);
mutex_unlock(&of_fdt_unflatten_mutex);
} }
EXPORT_SYMBOL_GPL(of_fdt_unflatten_tree); EXPORT_SYMBOL_GPL(of_fdt_unflatten_tree);
...@@ -1041,7 +1046,7 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size) ...@@ -1041,7 +1046,7 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base, int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
phys_addr_t size, bool nomap) phys_addr_t size, bool nomap)
{ {
pr_err("Reserved memory not supported, ignoring range 0x%pa - 0x%pa%s\n", pr_err("Reserved memory not supported, ignoring range %pa - %pa%s\n",
&base, &size, nomap ? " (nomap)" : ""); &base, &size, nomap ? " (nomap)" : "");
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -53,7 +53,7 @@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map); ...@@ -53,7 +53,7 @@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map);
* Returns a pointer to the interrupt parent node, or NULL if the interrupt * Returns a pointer to the interrupt parent node, or NULL if the interrupt
* parent could not be determined. * parent could not be determined.
*/ */
static struct device_node *of_irq_find_parent(struct device_node *child) struct device_node *of_irq_find_parent(struct device_node *child)
{ {
struct device_node *p; struct device_node *p;
const __be32 *parp; const __be32 *parp;
...@@ -77,6 +77,7 @@ static struct device_node *of_irq_find_parent(struct device_node *child) ...@@ -77,6 +77,7 @@ static struct device_node *of_irq_find_parent(struct device_node *child)
return p; return p;
} }
EXPORT_SYMBOL_GPL(of_irq_find_parent);
/** /**
* of_irq_parse_raw - Low level interrupt tree parsing * of_irq_parse_raw - Low level interrupt tree parsing
......
...@@ -206,7 +206,13 @@ static int __init __rmem_cmp(const void *a, const void *b) ...@@ -206,7 +206,13 @@ static int __init __rmem_cmp(const void *a, const void *b)
{ {
const struct reserved_mem *ra = a, *rb = b; const struct reserved_mem *ra = a, *rb = b;
return ra->base - rb->base; if (ra->base < rb->base)
return -1;
if (ra->base > rb->base)
return 1;
return 0;
} }
static void __init __rmem_check_for_overlap(void) static void __init __rmem_check_for_overlap(void)
......
...@@ -46,12 +46,14 @@ extern int of_irq_get(struct device_node *dev, int index); ...@@ -46,12 +46,14 @@ extern int of_irq_get(struct device_node *dev, int index);
extern int of_irq_get_byname(struct device_node *dev, const char *name); extern int of_irq_get_byname(struct device_node *dev, const char *name);
extern int of_irq_to_resource_table(struct device_node *dev, extern int of_irq_to_resource_table(struct device_node *dev,
struct resource *res, int nr_irqs); struct resource *res, int nr_irqs);
extern struct device_node *of_irq_find_parent(struct device_node *child);
extern struct irq_domain *of_msi_get_domain(struct device *dev, extern struct irq_domain *of_msi_get_domain(struct device *dev,
struct device_node *np, struct device_node *np,
enum irq_domain_bus_token token); enum irq_domain_bus_token token);
extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev, extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev,
u32 rid); u32 rid);
extern void of_msi_configure(struct device *dev, struct device_node *np); extern void of_msi_configure(struct device *dev, struct device_node *np);
u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in);
#else #else
static inline int of_irq_count(struct device_node *dev) static inline int of_irq_count(struct device_node *dev)
{ {
...@@ -70,6 +72,11 @@ static inline int of_irq_to_resource_table(struct device_node *dev, ...@@ -70,6 +72,11 @@ static inline int of_irq_to_resource_table(struct device_node *dev,
{ {
return 0; return 0;
} }
static inline void *of_irq_find_parent(struct device_node *child)
{
return NULL;
}
static inline struct irq_domain *of_msi_get_domain(struct device *dev, static inline struct irq_domain *of_msi_get_domain(struct device *dev,
struct device_node *np, struct device_node *np,
enum irq_domain_bus_token token) enum irq_domain_bus_token token)
...@@ -84,6 +91,11 @@ static inline struct irq_domain *of_msi_map_get_device_domain(struct device *dev ...@@ -84,6 +91,11 @@ static inline struct irq_domain *of_msi_map_get_device_domain(struct device *dev
static inline void of_msi_configure(struct device *dev, struct device_node *np) static inline void of_msi_configure(struct device *dev, struct device_node *np)
{ {
} }
static inline u32 of_msi_map_rid(struct device *dev,
struct device_node *msi_np, u32 rid_in)
{
return rid_in;
}
#endif #endif
#if defined(CONFIG_OF_IRQ) || defined(CONFIG_SPARC) #if defined(CONFIG_OF_IRQ) || defined(CONFIG_SPARC)
...@@ -93,7 +105,6 @@ static inline void of_msi_configure(struct device *dev, struct device_node *np) ...@@ -93,7 +105,6 @@ static inline void of_msi_configure(struct device *dev, struct device_node *np)
* so declare it here regardless of the CONFIG_OF_IRQ setting. * so declare it here regardless of the CONFIG_OF_IRQ setting.
*/ */
extern unsigned int irq_of_parse_and_map(struct device_node *node, int index); extern unsigned int irq_of_parse_and_map(struct device_node *node, int index);
u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in);
#else /* !CONFIG_OF && !CONFIG_SPARC */ #else /* !CONFIG_OF && !CONFIG_SPARC */
static inline unsigned int irq_of_parse_and_map(struct device_node *dev, static inline unsigned int irq_of_parse_and_map(struct device_node *dev,
...@@ -101,12 +112,6 @@ static inline unsigned int irq_of_parse_and_map(struct device_node *dev, ...@@ -101,12 +112,6 @@ static inline unsigned int irq_of_parse_and_map(struct device_node *dev,
{ {
return 0; return 0;
} }
static inline u32 of_msi_map_rid(struct device *dev,
struct device_node *msi_np, u32 rid_in)
{
return rid_in;
}
#endif /* !CONFIG_OF */ #endif /* !CONFIG_OF */
#endif /* __OF_IRQ_H */ #endif /* __OF_IRQ_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment