提交 90735c99 编写于 作者: L Linus Torvalds

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

Pull DeviceTree fixes from Rob Herring:

 - fix unflatten_dt_nodes when dad parameter is set.

 - add vendor prefixes for TechNexion and UniWest

 - documentation fix for Marvell BT

 - OF IRQ kerneldoc fixes

 - restrict CMA alignment adjustments to non dma-coherent

 - a couple of warning fixes in reserved-memory code

 - DT maintainers updates

* tag 'devicetree-fixes-for-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
  drivers: of: add definition of early_init_dt_alloc_reserved_memory_arch
  drivers/of: Fix depth for sub-tree blob in unflatten_dt_nodes()
  drivers: of: Fix of_pci.h header guard
  dt-bindings: Add vendor prefix for TechNexion
  of: add vendor prefix for UniWest
  dt: bindings: fix documentation for MARVELL's bt-sd8xxx wireless device
  of: add missing const for of_parse_phandle_with_args() in !CONFIG_OF
  of: silence warnings due to max() usage
  drivers: of: of_reserved_mem: fixup the CMA alignment not to affect dma-coherent
  of: irq: fix of_irq_get[_byname]() kernel-doc
  MAINTAINERS: DeviceTree maintainer updates
...@@ -13,10 +13,10 @@ Optional properties: ...@@ -13,10 +13,10 @@ Optional properties:
initialization. This is an array of 28 values(u8). initialization. This is an array of 28 values(u8).
- marvell,wakeup-pin: It represents wakeup pin number of the bluetooth chip. - marvell,wakeup-pin: It represents wakeup pin number of the bluetooth chip.
firmware will use the pin to wakeup host system. firmware will use the pin to wakeup host system (u16).
- marvell,wakeup-gap-ms: wakeup gap represents wakeup latency of the host - marvell,wakeup-gap-ms: wakeup gap represents wakeup latency of the host
platform. The value will be configured to firmware. This platform. The value will be configured to firmware. This
is needed to work chip's sleep feature as expected. is needed to work chip's sleep feature as expected (u16).
- interrupt-parent: phandle of the parent interrupt controller - interrupt-parent: phandle of the parent interrupt controller
- interrupts : interrupt pin number to the cpu. Driver will request an irq based - interrupts : interrupt pin number to the cpu. Driver will request an irq based
on this interrupt number. During system suspend, the irq will be on this interrupt number. During system suspend, the irq will be
...@@ -50,7 +50,7 @@ calibration data is also available in below example. ...@@ -50,7 +50,7 @@ calibration data is also available in below example.
0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02 0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02
0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0xf0 0x00>; 0x00 0x00 0xf0 0x00>;
marvell,wakeup-pin = <0x0d>; marvell,wakeup-pin = /bits/ 16 <0x0d>;
marvell,wakeup-gap-ms = <0x64>; marvell,wakeup-gap-ms = /bits/ 16 <0x64>;
}; };
}; };
...@@ -255,6 +255,7 @@ synology Synology, Inc. ...@@ -255,6 +255,7 @@ synology Synology, Inc.
SUNW Sun Microsystems, Inc SUNW Sun Microsystems, Inc
tbs TBS Technologies tbs TBS Technologies
tcl Toby Churchill Ltd. tcl Toby Churchill Ltd.
technexion TechNexion
technologic Technologic Systems technologic Technologic Systems
thine THine Electronics, Inc. thine THine Electronics, Inc.
ti Texas Instruments ti Texas Instruments
...@@ -269,6 +270,7 @@ tronsmart Tronsmart ...@@ -269,6 +270,7 @@ tronsmart Tronsmart
truly Truly Semiconductors Limited truly Truly Semiconductors Limited
tyan Tyan Computer Corporation tyan Tyan Computer Corporation
upisemi uPI Semiconductor Corp. upisemi uPI Semiconductor Corp.
uniwest United Western Technologies Corp (UniWest)
urt United Radiant Technology Corporation urt United Radiant Technology Corporation
usi Universal Scientific Industrial Co., Ltd. usi Universal Scientific Industrial Co., Ltd.
v3 V3 Semiconductor v3 V3 Semiconductor
......
...@@ -8407,10 +8407,9 @@ F: drivers/i2c/busses/i2c-ocores.c ...@@ -8407,10 +8407,9 @@ F: drivers/i2c/busses/i2c-ocores.c
OPEN FIRMWARE AND FLATTENED DEVICE TREE OPEN FIRMWARE AND FLATTENED DEVICE TREE
M: Rob Herring <robh+dt@kernel.org> M: Rob Herring <robh+dt@kernel.org>
M: Frank Rowand <frowand.list@gmail.com> M: Frank Rowand <frowand.list@gmail.com>
M: Grant Likely <grant.likely@linaro.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
W: http://www.devicetree.org/ W: http://www.devicetree.org/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
S: Maintained S: Maintained
F: drivers/of/ F: drivers/of/
F: include/linux/of*.h F: include/linux/of*.h
...@@ -8418,12 +8417,10 @@ F: scripts/dtc/ ...@@ -8418,12 +8417,10 @@ F: scripts/dtc/
OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
M: Rob Herring <robh+dt@kernel.org> M: Rob Herring <robh+dt@kernel.org>
M: Pawel Moll <pawel.moll@arm.com>
M: Mark Rutland <mark.rutland@arm.com> M: Mark Rutland <mark.rutland@arm.com>
M: Ian Campbell <ijc+devicetree@hellion.org.uk>
M: Kumar Gala <galak@codeaurora.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/
S: Maintained S: Maintained
F: Documentation/devicetree/ F: Documentation/devicetree/
F: arch/*/boot/dts/ F: arch/*/boot/dts/
......
...@@ -395,7 +395,7 @@ static int unflatten_dt_nodes(const void *blob, ...@@ -395,7 +395,7 @@ static int unflatten_dt_nodes(const void *blob,
struct device_node **nodepp) struct device_node **nodepp)
{ {
struct device_node *root; struct device_node *root;
int offset = 0, depth = 0; int offset = 0, depth = 0, initial_depth = 0;
#define FDT_MAX_DEPTH 64 #define FDT_MAX_DEPTH 64
unsigned int fpsizes[FDT_MAX_DEPTH]; unsigned int fpsizes[FDT_MAX_DEPTH];
struct device_node *nps[FDT_MAX_DEPTH]; struct device_node *nps[FDT_MAX_DEPTH];
...@@ -405,11 +405,22 @@ static int unflatten_dt_nodes(const void *blob, ...@@ -405,11 +405,22 @@ static int unflatten_dt_nodes(const void *blob,
if (nodepp) if (nodepp)
*nodepp = NULL; *nodepp = NULL;
/*
* We're unflattening device sub-tree if @dad is valid. There are
* possibly multiple nodes in the first level of depth. We need
* set @depth to 1 to make fdt_next_node() happy as it bails
* immediately when negative @depth is found. Otherwise, the device
* nodes except the first one won't be unflattened successfully.
*/
if (dad)
depth = initial_depth = 1;
root = dad; root = dad;
fpsizes[depth] = dad ? strlen(of_node_full_name(dad)) : 0; fpsizes[depth] = dad ? strlen(of_node_full_name(dad)) : 0;
nps[depth] = dad; nps[depth] = dad;
for (offset = 0; for (offset = 0;
offset >= 0 && depth >= 0; offset >= 0 && depth >= initial_depth;
offset = fdt_next_node(blob, offset, &depth)) { offset = fdt_next_node(blob, offset, &depth)) {
if (WARN_ON_ONCE(depth >= FDT_MAX_DEPTH)) if (WARN_ON_ONCE(depth >= FDT_MAX_DEPTH))
continue; continue;
......
...@@ -386,13 +386,13 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r) ...@@ -386,13 +386,13 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
EXPORT_SYMBOL_GPL(of_irq_to_resource); EXPORT_SYMBOL_GPL(of_irq_to_resource);
/** /**
* of_irq_get - Decode a node's IRQ and return it as a Linux irq number * of_irq_get - Decode a node's IRQ and return it as a Linux IRQ number
* @dev: pointer to device tree node * @dev: pointer to device tree node
* @index: zero-based index of the irq * @index: zero-based index of the IRQ
*
* Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain
* is not yet created.
* *
* Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or
* -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case
* of any other failure.
*/ */
int of_irq_get(struct device_node *dev, int index) int of_irq_get(struct device_node *dev, int index)
{ {
...@@ -413,12 +413,13 @@ int of_irq_get(struct device_node *dev, int index) ...@@ -413,12 +413,13 @@ int of_irq_get(struct device_node *dev, int index)
EXPORT_SYMBOL_GPL(of_irq_get); EXPORT_SYMBOL_GPL(of_irq_get);
/** /**
* of_irq_get_byname - Decode a node's IRQ and return it as a Linux irq number * of_irq_get_byname - Decode a node's IRQ and return it as a Linux IRQ number
* @dev: pointer to device tree node * @dev: pointer to device tree node
* @name: irq name * @name: IRQ name
* *
* Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain * Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or
* is not yet created, or error code in case of any other failure. * -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case
* of any other failure.
*/ */
int of_irq_get_byname(struct device_node *dev, const char *name) int of_irq_get_byname(struct device_node *dev, const char *name)
{ {
......
...@@ -127,8 +127,15 @@ static int __init __reserved_mem_alloc_size(unsigned long node, ...@@ -127,8 +127,15 @@ static int __init __reserved_mem_alloc_size(unsigned long node,
} }
/* Need adjust the alignment to satisfy the CMA requirement */ /* Need adjust the alignment to satisfy the CMA requirement */
if (IS_ENABLED(CONFIG_CMA) && of_flat_dt_is_compatible(node, "shared-dma-pool")) if (IS_ENABLED(CONFIG_CMA)
align = max(align, (phys_addr_t)PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order)); && of_flat_dt_is_compatible(node, "shared-dma-pool")
&& of_get_flat_dt_prop(node, "reusable", NULL)
&& !of_get_flat_dt_prop(node, "no-map", NULL)) {
unsigned long order =
max_t(unsigned long, MAX_ORDER - 1, pageblock_order);
align = max(align, (phys_addr_t)PAGE_SIZE << order);
}
prop = of_get_flat_dt_prop(node, "alloc-ranges", &len); prop = of_get_flat_dt_prop(node, "alloc-ranges", &len);
if (prop) { if (prop) {
......
...@@ -614,7 +614,7 @@ static inline struct device_node *of_parse_phandle(const struct device_node *np, ...@@ -614,7 +614,7 @@ static inline struct device_node *of_parse_phandle(const struct device_node *np,
return NULL; return NULL;
} }
static inline int of_parse_phandle_with_args(struct device_node *np, static inline int of_parse_phandle_with_args(const struct device_node *np,
const char *list_name, const char *list_name,
const char *cells_name, const char *cells_name,
int index, int index,
......
...@@ -8,7 +8,7 @@ struct pci_dev; ...@@ -8,7 +8,7 @@ struct pci_dev;
struct of_phandle_args; struct of_phandle_args;
struct device_node; struct device_node;
#ifdef CONFIG_OF #ifdef CONFIG_OF_PCI
int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq); int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq);
struct device_node *of_pci_find_child_device(struct device_node *parent, struct device_node *of_pci_find_child_device(struct device_node *parent,
unsigned int devfn); unsigned int devfn);
......
...@@ -31,6 +31,13 @@ typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); ...@@ -31,6 +31,13 @@ typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem);
int of_reserved_mem_device_init(struct device *dev); int of_reserved_mem_device_init(struct device *dev);
void of_reserved_mem_device_release(struct device *dev); void of_reserved_mem_device_release(struct device *dev);
int early_init_dt_alloc_reserved_memory_arch(phys_addr_t size,
phys_addr_t align,
phys_addr_t start,
phys_addr_t end,
bool nomap,
phys_addr_t *res_base);
void fdt_init_reserved_mem(void); void fdt_init_reserved_mem(void);
void fdt_reserved_mem_save_node(unsigned long node, const char *uname, void fdt_reserved_mem_save_node(unsigned long node, const char *uname,
phys_addr_t base, phys_addr_t size); phys_addr_t base, phys_addr_t size);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册