File Index
Files and directories
Sign in
FILE

fsl,mpic-msi.yaml

File preview with syntax highlighting.

linux-6.19.14/Documentation/devicetree/bindings/interrupt-controller/fsl,mpic-msi.yaml YAML
  1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
  2%YAML 1.2
  3---
  4$id: http://devicetree.org/schemas/interrupt-controller/fsl,mpic-msi.yaml#
  5$schema: http://devicetree.org/meta-schemas/core.yaml#
  6
  7title: Freescale MSI interrupt controller
  8
  9description: |
 10  The Freescale hypervisor and msi-address-64
 11  -------------------------------------------
 12
 13  Normally, PCI devices have access to all of CCSR via an ATMU mapping.  The
 14  Freescale MSI driver calculates the address of MSIIR (in the MSI register
 15  block) and sets that address as the MSI message address.
 16
 17  In a virtualized environment, the hypervisor may need to create an IOMMU
 18  mapping for MSIIR.  The Freescale ePAPR hypervisor has this requirement
 19  because of hardware limitations of the Peripheral Access Management Unit
 20  (PAMU), which is currently the only IOMMU that the hypervisor supports.
 21  The ATMU is programmed with the guest physical address, and the PAMU
 22  intercepts transactions and reroutes them to the true physical address.
 23
 24  In the PAMU, each PCI controller is given only one primary window.  The
 25  PAMU restricts DMA operations so that they can only occur within a window.
 26  Because PCI devices must be able to DMA to memory, the primary window must
 27  be used to cover all of the guest's memory space.
 28
 29  PAMU primary windows can be divided into 256 subwindows, and each
 30  subwindow can have its own address mapping ("guest physical" to "true
 31  physical").  However, each subwindow has to have the same alignment, which
 32  means they cannot be located at just any address.  Because of these
 33  restrictions, it is usually impossible to create a 4KB subwindow that
 34  covers MSIIR where it's normally located.
 35
 36  Therefore, the hypervisor has to create a subwindow inside the same
 37  primary window used for memory, but mapped to the MSIR block (where MSIIR
 38  lives).  The first subwindow after the end of guest memory is used for
 39  this.  The address specified in the msi-address-64 property is the PCI
 40  address of MSIIR.  The hypervisor configures the PAMU to map that address to
 41  the true physical address of MSIIR.
 42
 43maintainers:
 44  - J. Neuschäfer <j.ne@posteo.net>
 45
 46properties:
 47  compatible:
 48    oneOf:
 49      - enum:
 50          - fsl,mpic-msi
 51          - fsl,mpic-msi-v4.3
 52          - fsl,ipic-msi
 53          - fsl,vmpic-msi
 54          - fsl,vmpic-msi-v4.3
 55      - items:
 56          - enum:
 57              - fsl,mpc8572-msi
 58              - fsl,mpc8610-msi
 59              - fsl,mpc8641-msi
 60          - const: fsl,mpic-msi
 61
 62  reg:
 63    minItems: 1
 64    items:
 65      - description: Address and length of the shared message interrupt
 66          register set
 67      - description: Address of aliased MSIIR or MSIIR1 register for platforms
 68          that have such an alias. If using MSIIR1, the second region must be
 69          added because different MSI group has different MSIIR1 offset.
 70
 71  interrupts:
 72    minItems: 1
 73    maxItems: 16
 74    description:
 75      Each one of the interrupts here is one entry per 32 MSIs, and routed to
 76      the host interrupt controller. The interrupts should be set as edge
 77      sensitive. If msi-available-ranges is present, only the interrupts that
 78      correspond to available ranges shall be present.
 79
 80  msi-available-ranges:
 81    $ref: /schemas/types.yaml#/definitions/uint32-matrix
 82    items:
 83      items:
 84        - description: First MSI interrupt in this range
 85        - description: Number of MSI interrupts in this range
 86    description:
 87      Define which MSI interrupt can be used in the 256 MSI interrupts.
 88      If not specified, all the MSI interrupts can be used.
 89      Each available range must begin and end on a multiple of 32 (i.e. no
 90      splitting an individual MSI register or the associated PIC interrupt).
 91
 92  msi-address-64:
 93    $ref: /schemas/types.yaml#/definitions/uint64
 94    description:
 95      64-bit PCI address of the MSIIR register. The MSIIR register is used for
 96      MSI messaging.  The address of MSIIR in PCI address space is the MSI
 97      message address.
 98
 99      This property may be used in virtualized environments where the hypervisor
100      has created an alternate mapping for the MSIR block.  See the top-level
101      description for an explanation.
102
103required:
104  - compatible
105  - reg
106  - interrupts
107
108allOf:
109  - if:
110      properties:
111        compatible:
112          contains:
113            enum:
114              - fsl,mpic-msi-v4.3
115              - fsl,vmpic-msi-v4.3
116    then:
117      properties:
118        interrupts:
119          minItems: 16
120          description:
121            Version 4.3 implies that there are 16 shared interrupts, and they
122            are configured through MSIIR1.
123
124        # MPIC v4.3 does not support this property because the 32 interrupts of
125        # an individual register are not continuous when using MSIIR1.
126        msi-available-ranges: false
127
128        reg:
129          minItems: 2
130
131    else:
132      properties:
133        interrupts:
134          maxItems: 8
135          description:
136            In versions before 4.3, only 8 shared interrupts are available, and
137            they are configured through MSIIR.
138
139unevaluatedProperties: false
140
141examples:
142  - |
143    msi@41600 {
144            compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
145            reg = <0x41600 0x80>;
146            msi-available-ranges = <0 0x100>;
147            interrupts = <0xe0 0>, <0xe1 0>, <0xe2 0>, <0xe3 0>,
148                         <0xe4 0>, <0xe5 0>, <0xe6 0>, <0xe7 0>;
149    };
150
151  - |
152    msi@41600 {
153            compatible = "fsl,mpic-msi-v4.3";
154            reg = <0x41600 0x200>, <0x44148 4>;
155            interrupts = <0xe0 0 0 0>, <0xe1 0 0 0>, <0xe2 0 0 0>, <0xe3 0 0 0>,
156                         <0xe4 0 0 0>, <0xe5 0 0 0>, <0xe6 0 0 0>, <0xe7 0 0 0>,
157                         <0x100 0 0 0>, <0x101 0 0 0>, <0x102 0 0 0>, <0x103 0 0 0>,
158                         <0x104 0 0 0>, <0x105 0 0 0>, <0x106 0 0 0>, <0x107 0 0 0>;
159    };
160
161...
~/ Read-only file preview.