DeviceTree updates for 4.3:
- Adding Frank Rowand as DT maintainer in preparation for Grant's retirement. - Generic MSI binding documentation and a few other minor doc updates - Fix long standing issue with DT platorm device unregistration - Fix loop forever bug in of_find_matching_node_by_address() -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJV5hAQAAoJEMhvYp4jgsXiguMIAJippY6yiqatAQr2TcWktkUx KiN209DxPCoAFz9EeCyJ+ck0BV6xKSQf1x/ef93kynYXlQ2uWOWXW6guH8rQ5XFN 15aovQnd03PVcpzsMOSVi/ZxtyGJflxO+RBrcrJ0Vy2HaAYsMmfCiYdLAnhMmJnz Wr4W1LfYLTxchNIS1LlBUKRAeZyOx47yRVEXfNqfjbCu+bJgXDtMj7NNH3muXqVf WZIJu0XFb6UIgMPB/jDdC0Ln6FGe01HIDKQ/EpGgBm/flfSsywVH6eB06R7+EHym T6ap5pRQHXB+oxRU8bGo88Z7xEbcBhKckRT/zvs/vPuG/DfWluIVxbJpR4htJ84= =zTPm -----END PGP SIGNATURE----- Merge tag 'devicetree-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux Pull devicetree updates from Rob Herring: - added Frank Rowand as DT maintainer in preparation for Grant's retirement. - generic MSI binding documentation and a few other minor doc updates - fix long standing issue with DT platorm device unregistration - fix loop forever bug in of_find_matching_node_by_address() * tag 'devicetree-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: MAINTAINERS: Add Frank Rowand as DT maintainer mtd: nand: pxa3xx: add optional dma for pxa architecture Documentation: DT: cpsw: document missing compatible Docs: dt: add generic MSI bindings drivercore: Fix unregistration path of platform devices of/address: Don't loop forever in of_find_matching_node_by_address(). of: Add vendor prefix for JEDEC Solid State Technology Association of/platform: add function to populate default bus of: Add vendor prefix for Sharp Corporation
This commit is contained in:
commit
f1a3c0b933
135
Documentation/devicetree/bindings/interrupt-controller/msi.txt
Normal file
135
Documentation/devicetree/bindings/interrupt-controller/msi.txt
Normal file
@ -0,0 +1,135 @@
|
||||
This document describes the generic device tree binding for MSI controllers and
|
||||
their master(s).
|
||||
|
||||
Message Signaled Interrupts (MSIs) are a class of interrupts generated by a
|
||||
write to an MMIO address.
|
||||
|
||||
MSIs were originally specified by PCI (and are used with PCIe), but may also be
|
||||
used with other busses, and hence a mechanism is required to relate devices on
|
||||
those busses to the MSI controllers which they are capable of using,
|
||||
potentially including additional information.
|
||||
|
||||
MSIs are distinguished by some combination of:
|
||||
|
||||
- The doorbell (the MMIO address written to).
|
||||
|
||||
Devices may be configured by software to write to arbitrary doorbells which
|
||||
they can address. An MSI controller may feature a number of doorbells.
|
||||
|
||||
- The payload (the value written to the doorbell).
|
||||
|
||||
Devices may be configured to write an arbitrary payload chosen by software.
|
||||
MSI controllers may have restrictions on permitted payloads.
|
||||
|
||||
- Sideband information accompanying the write.
|
||||
|
||||
Typically this is neither configurable nor probeable, and depends on the path
|
||||
taken through the memory system (i.e. it is a property of the combination of
|
||||
MSI controller and device rather than a property of either in isolation).
|
||||
|
||||
|
||||
MSI controllers:
|
||||
================
|
||||
|
||||
An MSI controller signals interrupts to a CPU when a write is made to an MMIO
|
||||
address by some master. An MSI controller may feature a number of doorbells.
|
||||
|
||||
Required properties:
|
||||
--------------------
|
||||
|
||||
- msi-controller: Identifies the node as an MSI controller.
|
||||
|
||||
Optional properties:
|
||||
--------------------
|
||||
|
||||
- #msi-cells: The number of cells in an msi-specifier, required if not zero.
|
||||
|
||||
Typically this will encode information related to sideband data, and will
|
||||
not encode doorbells or payloads as these can be configured dynamically.
|
||||
|
||||
The meaning of the msi-specifier is defined by the device tree binding of
|
||||
the specific MSI controller.
|
||||
|
||||
|
||||
MSI clients
|
||||
===========
|
||||
|
||||
MSI clients are devices which generate MSIs. For each MSI they wish to
|
||||
generate, the doorbell and payload may be configured, though sideband
|
||||
information may not be configurable.
|
||||
|
||||
Required properties:
|
||||
--------------------
|
||||
|
||||
- msi-parent: A list of phandle + msi-specifier pairs, one for each MSI
|
||||
controller which the device is capable of using.
|
||||
|
||||
This property is unordered, and MSIs may be allocated from any combination of
|
||||
MSI controllers listed in the msi-parent property.
|
||||
|
||||
If a device has restrictions on the allocation of MSIs, these restrictions
|
||||
must be described with additional properties.
|
||||
|
||||
When #msi-cells is non-zero, busses with an msi-parent will require
|
||||
additional properties to describe the relationship between devices on the bus
|
||||
and the set of MSIs they can potentially generate.
|
||||
|
||||
|
||||
Example
|
||||
=======
|
||||
|
||||
/ {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
msi_a: msi-controller@a {
|
||||
reg = <0xa 0xf00>;
|
||||
compatible = "vendor-a,some-controller";
|
||||
msi-controller;
|
||||
/* No sideband data, so #msi-cells omitted */
|
||||
};
|
||||
|
||||
msi_b: msi-controller@b {
|
||||
reg = <0xb 0xf00>;
|
||||
compatible = "vendor-b,another-controller";
|
||||
msi-controller;
|
||||
/* Each device has some unique ID */
|
||||
#msi-cells = <1>;
|
||||
};
|
||||
|
||||
msi_c: msi-controller@c {
|
||||
reg = <0xb 0xf00>;
|
||||
compatible = "vendor-b,another-controller";
|
||||
msi-controller;
|
||||
/* Each device has some unique ID */
|
||||
#msi-cells = <1>;
|
||||
};
|
||||
|
||||
dev@0 {
|
||||
reg = <0x0 0xf00>;
|
||||
compatible = "vendor-c,some-device";
|
||||
|
||||
/* Can only generate MSIs to msi_a */
|
||||
msi-parent = <&msi_a>;
|
||||
};
|
||||
|
||||
dev@1 {
|
||||
reg = <0x1 0xf00>;
|
||||
compatible = "vendor-c,some-device";
|
||||
|
||||
/*
|
||||
* Can generate MSIs to either A or B.
|
||||
*/
|
||||
msi-parent = <&msi_a>, <&msi_b 0x17>;
|
||||
};
|
||||
|
||||
dev@2 {
|
||||
reg = <0x2 0xf00>;
|
||||
compatible = "vendor-c,some-device";
|
||||
/*
|
||||
* Has different IDs at each MSI controller.
|
||||
* Can generate MSIs to all of the MSI controllers.
|
||||
*/
|
||||
msi-parent = <&msi_a>, <&msi_b 0x17>, <&msi_c 0x53>;
|
||||
};
|
||||
};
|
@ -11,6 +11,7 @@ Required properties:
|
||||
|
||||
Optional properties:
|
||||
|
||||
- dmas: dma data channel, see dma.txt binding doc
|
||||
- marvell,nand-enable-arbiter: Set to enable the bus arbiter
|
||||
- marvell,nand-keep-config: Set to keep the NAND controller config as set
|
||||
by the bootloader
|
||||
@ -32,6 +33,8 @@ Example:
|
||||
compatible = "marvell,pxa3xx-nand";
|
||||
reg = <0x43100000 90>;
|
||||
interrupts = <45>;
|
||||
dmas = <&pdma 97 0>;
|
||||
dma-names = "data";
|
||||
#address-cells = <1>;
|
||||
|
||||
marvell,nand-enable-arbiter;
|
||||
|
@ -2,7 +2,11 @@ TI SoC Ethernet Switch Controller Device Tree Bindings
|
||||
------------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "ti,cpsw"
|
||||
- compatible : Should be one of the below:-
|
||||
"ti,cpsw" for backward compatible
|
||||
"ti,am335x-cpsw" for AM335x controllers
|
||||
"ti,am4372-cpsw" for AM437x controllers
|
||||
"ti,dra7-cpsw" for DRA7x controllers
|
||||
- reg : physical base address and size of the cpsw
|
||||
registers map
|
||||
- interrupts : property with a value describing the interrupt
|
||||
|
@ -113,6 +113,7 @@ intel Intel Corporation
|
||||
intercontrol Inter Control Group
|
||||
isee ISEE 2007 S.L.
|
||||
isil Intersil
|
||||
jedec JEDEC Solid State Technology Association
|
||||
karo Ka-Ro electronics GmbH
|
||||
keymile Keymile GmbH
|
||||
kinetic Kinetic Technologies
|
||||
@ -184,6 +185,7 @@ sbs Smart Battery System
|
||||
schindler Schindler
|
||||
seagate Seagate Technology PLC
|
||||
semtech Semtech Corporation
|
||||
sharp Sharp Corporation
|
||||
sil Silicon Image
|
||||
silabs Silicon Laboratories
|
||||
siliconmitus Silicon Mitus, Inc.
|
||||
|
@ -7573,8 +7573,9 @@ F: Documentation/i2c/busses/i2c-ocores
|
||||
F: drivers/i2c/busses/i2c-ocores.c
|
||||
|
||||
OPEN FIRMWARE AND FLATTENED DEVICE TREE
|
||||
M: Grant Likely <grant.likely@linaro.org>
|
||||
M: Rob Herring <robh+dt@kernel.org>
|
||||
M: Frank Rowand <frowand.list@gmail.com>
|
||||
M: Grant Likely <grant.likely@linaro.org>
|
||||
L: devicetree@vger.kernel.org
|
||||
W: http://www.devicetree.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux.git
|
||||
|
@ -375,9 +375,7 @@ int platform_device_add(struct platform_device *pdev)
|
||||
|
||||
while (--i >= 0) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
unsigned long type = resource_type(r);
|
||||
|
||||
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
}
|
||||
|
||||
@ -408,9 +406,7 @@ void platform_device_del(struct platform_device *pdev)
|
||||
|
||||
for (i = 0; i < pdev->num_resources; i++) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
unsigned long type = resource_type(r);
|
||||
|
||||
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
}
|
||||
}
|
||||
|
@ -845,10 +845,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from,
|
||||
struct resource res;
|
||||
|
||||
while (dn) {
|
||||
if (of_address_to_resource(dn, 0, &res))
|
||||
continue;
|
||||
if (res.start == base_address)
|
||||
if (!of_address_to_resource(dn, 0, &res) &&
|
||||
res.start == base_address)
|
||||
return dn;
|
||||
|
||||
dn = of_find_matching_node(dn, matches);
|
||||
}
|
||||
|
||||
|
@ -457,6 +457,15 @@ int of_platform_populate(struct device_node *root,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_platform_populate);
|
||||
|
||||
int of_platform_default_populate(struct device_node *root,
|
||||
const struct of_dev_auxdata *lookup,
|
||||
struct device *parent)
|
||||
{
|
||||
return of_platform_populate(root, of_default_bus_match_table, lookup,
|
||||
parent);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_platform_default_populate);
|
||||
|
||||
static int of_platform_device_destroy(struct device *dev, void *data)
|
||||
{
|
||||
/* Do not touch devices not populated from the device tree */
|
||||
|
@ -72,6 +72,9 @@ extern int of_platform_populate(struct device_node *root,
|
||||
const struct of_device_id *matches,
|
||||
const struct of_dev_auxdata *lookup,
|
||||
struct device *parent);
|
||||
extern int of_platform_default_populate(struct device_node *root,
|
||||
const struct of_dev_auxdata *lookup,
|
||||
struct device *parent);
|
||||
extern void of_platform_depopulate(struct device *parent);
|
||||
#else
|
||||
static inline int of_platform_populate(struct device_node *root,
|
||||
@ -81,6 +84,12 @@ static inline int of_platform_populate(struct device_node *root,
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int of_platform_default_populate(struct device_node *root,
|
||||
const struct of_dev_auxdata *lookup,
|
||||
struct device *parent)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline void of_platform_depopulate(struct device *parent) { }
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user