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
This commit is contained in:
@@ -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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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);
|
|||||||
* 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)
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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
|
|||||||
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)
|
|||||||
* 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,
|
|||||||
{
|
{
|
||||||
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 */
|
||||||
|
Reference in New Issue
Block a user