98 lines
3.0 KiB
Plaintext
98 lines
3.0 KiB
Plaintext
* Open PIC Binding
|
|
|
|
This binding specifies what properties must be available in the device tree
|
|
representation of an Open PIC compliant interrupt controller. This binding is
|
|
based on the binding defined for Open PIC in [1] and is a superset of that
|
|
binding.
|
|
|
|
Required properties:
|
|
|
|
NOTE: Many of these descriptions were paraphrased here from [1] to aid
|
|
readability.
|
|
|
|
- compatible: Specifies the compatibility list for the PIC. The type
|
|
shall be <string> and the value shall include "open-pic".
|
|
|
|
- reg: Specifies the base physical address(s) and size(s) of this
|
|
PIC's addressable register space. The type shall be <prop-encoded-array>.
|
|
|
|
- interrupt-controller: The presence of this property identifies the node
|
|
as an Open PIC. No property value shall be defined.
|
|
|
|
- #interrupt-cells: Specifies the number of cells needed to encode an
|
|
interrupt source. The type shall be a <u32> and the value shall be 2.
|
|
|
|
- #address-cells: Specifies the number of cells needed to encode an
|
|
address. The type shall be <u32> and the value shall be 0. As such,
|
|
'interrupt-map' nodes do not have to specify a parent unit address.
|
|
|
|
Optional properties:
|
|
|
|
- pic-no-reset: The presence of this property indicates that the PIC
|
|
shall not be reset during runtime initialization. No property value shall
|
|
be defined. The presence of this property also mandates that any
|
|
initialization related to interrupt sources shall be limited to sources
|
|
explicitly referenced in the device tree.
|
|
|
|
* Interrupt Specifier Definition
|
|
|
|
Interrupt specifiers consists of 2 cells encoded as
|
|
follows:
|
|
|
|
- <1st-cell>: The interrupt-number that identifies the interrupt source.
|
|
|
|
- <2nd-cell>: The level-sense information, encoded as follows:
|
|
0 = low-to-high edge triggered
|
|
1 = active low level-sensitive
|
|
2 = active high level-sensitive
|
|
3 = high-to-low edge triggered
|
|
|
|
* Examples
|
|
|
|
Example 1:
|
|
|
|
/*
|
|
* An Open PIC interrupt controller
|
|
*/
|
|
mpic: pic@40000 {
|
|
// This is an interrupt controller node.
|
|
interrupt-controller;
|
|
|
|
// No address cells so that 'interrupt-map' nodes which reference
|
|
// this Open PIC node do not need a parent address specifier.
|
|
#address-cells = <0>;
|
|
|
|
// Two cells to encode interrupt sources.
|
|
#interrupt-cells = <2>;
|
|
|
|
// Offset address of 0x40000 and size of 0x40000.
|
|
reg = <0x40000 0x40000>;
|
|
|
|
// Compatible with Open PIC.
|
|
compatible = "open-pic";
|
|
|
|
// The PIC shall not be reset.
|
|
pic-no-reset;
|
|
};
|
|
|
|
Example 2:
|
|
|
|
/*
|
|
* An interrupt generating device that is wired to an Open PIC.
|
|
*/
|
|
serial0: serial@4500 {
|
|
// Interrupt source '42' that is active high level-sensitive.
|
|
// Note that there are only two cells as specified in the interrupt
|
|
// parent's '#interrupt-cells' property.
|
|
interrupts = <42 2>;
|
|
|
|
// The interrupt controller that this device is wired to.
|
|
interrupt-parent = <&mpic>;
|
|
};
|
|
|
|
* References
|
|
|
|
[1] Devicetree Specification
|
|
(https://www.devicetree.org/specifications/)
|
|
|