brcm,iproc-pcie.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. * Broadcom iProc PCIe controller with the platform bus interface
  2. Required properties:
  3. - compatible:
  4. "brcm,iproc-pcie" for the first generation of PAXB based controller,
  5. used in SoCs including NSP, Cygnus, NS2, and Pegasus
  6. "brcm,iproc-pcie-paxb-v2" for the second generation of PAXB-based
  7. controllers, used in Stingray
  8. "brcm,iproc-pcie-paxc" for the first generation of PAXC based
  9. controller, used in NS2
  10. "brcm,iproc-pcie-paxc-v2" for the second generation of PAXC based
  11. controller, used in Stingray
  12. PAXB-based root complex is used for external endpoint devices. PAXC-based
  13. root complex is connected to emulated endpoint devices internal to the ASIC
  14. - reg: base address and length of the PCIe controller I/O register space
  15. - #interrupt-cells: set to <1>
  16. - interrupt-map-mask and interrupt-map, standard PCI properties to define the
  17. mapping of the PCIe interface to interrupt numbers
  18. - linux,pci-domain: PCI domain ID. Should be unique for each host controller
  19. - bus-range: PCI bus numbers covered
  20. - #address-cells: set to <3>
  21. - #size-cells: set to <2>
  22. - device_type: set to "pci"
  23. - ranges: ranges for the PCI memory and I/O regions
  24. Optional properties:
  25. - phys: phandle of the PCIe PHY device
  26. - phy-names: must be "pcie-phy"
  27. - dma-coherent: present if DMA operations are coherent
  28. - dma-ranges: Some PAXB-based root complexes do not have inbound mapping done
  29. by the ASIC after power on reset. In this case, SW is required to configure
  30. the mapping, based on inbound memory regions specified by this property.
  31. - brcm,pcie-ob: Some iProc SoCs do not have the outbound address mapping done
  32. by the ASIC after power on reset. In this case, SW needs to configure it
  33. If the brcm,pcie-ob property is present, the following properties become
  34. effective:
  35. Required:
  36. - brcm,pcie-ob-axi-offset: The offset from the AXI address to the internal
  37. address used by the iProc PCIe core (not the PCIe address)
  38. MSI support (optional):
  39. For older platforms without MSI integrated in the GIC, iProc PCIe core provides
  40. an event queue based MSI support. The iProc MSI uses host memories to store
  41. MSI posted writes in the event queues
  42. On newer iProc platforms, gicv2m or gicv3-its based MSI support should be used
  43. - msi-map: Maps a Requester ID to an MSI controller and associated MSI
  44. sideband data
  45. - msi-parent: Link to the device node of the MSI controller, used when no MSI
  46. sideband data is passed between the iProc PCIe controller and the MSI
  47. controller
  48. Refer to the following binding documents for more detailed description on
  49. the use of 'msi-map' and 'msi-parent':
  50. Documentation/devicetree/bindings/pci/pci-msi.txt
  51. Documentation/devicetree/bindings/interrupt-controller/msi.txt
  52. When the iProc event queue based MSI is used, one needs to define the
  53. following properties in the MSI device node:
  54. - compatible: Must be "brcm,iproc-msi"
  55. - msi-controller: claims itself as an MSI controller
  56. - interrupts: List of interrupt IDs from its parent interrupt device
  57. Optional properties:
  58. - brcm,pcie-msi-inten: Needs to be present for some older iProc platforms that
  59. require the interrupt enable registers to be set explicitly to enable MSI
  60. Example:
  61. pcie0: pcie@18012000 {
  62. compatible = "brcm,iproc-pcie";
  63. reg = <0x18012000 0x1000>;
  64. #interrupt-cells = <1>;
  65. interrupt-map-mask = <0 0 0 0>;
  66. interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_NONE>;
  67. linux,pci-domain = <0>;
  68. bus-range = <0x00 0xff>;
  69. #address-cells = <3>;
  70. #size-cells = <2>;
  71. device_type = "pci";
  72. ranges = <0x81000000 0 0 0x28000000 0 0x00010000
  73. 0x82000000 0 0x20000000 0x20000000 0 0x04000000>;
  74. phys = <&phy 0 5>;
  75. phy-names = "pcie-phy";
  76. brcm,pcie-ob;
  77. brcm,pcie-ob-axi-offset = <0x00000000>;
  78. msi-parent = <&msi0>;
  79. /* iProc event queue based MSI */
  80. msi0: msi@18012000 {
  81. compatible = "brcm,iproc-msi";
  82. msi-controller;
  83. interrupt-parent = <&gic>;
  84. interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>,
  85. <GIC_SPI 97 IRQ_TYPE_NONE>,
  86. <GIC_SPI 98 IRQ_TYPE_NONE>,
  87. <GIC_SPI 99 IRQ_TYPE_NONE>,
  88. };
  89. };
  90. pcie1: pcie@18013000 {
  91. compatible = "brcm,iproc-pcie";
  92. reg = <0x18013000 0x1000>;
  93. #interrupt-cells = <1>;
  94. interrupt-map-mask = <0 0 0 0>;
  95. interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_NONE>;
  96. linux,pci-domain = <1>;
  97. bus-range = <0x00 0xff>;
  98. #address-cells = <3>;
  99. #size-cells = <2>;
  100. device_type = "pci";
  101. ranges = <0x81000000 0 0 0x48000000 0 0x00010000
  102. 0x82000000 0 0x40000000 0x40000000 0 0x04000000>;
  103. phys = <&phy 1 6>;
  104. phy-names = "pcie-phy";
  105. };