mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	dt-bindings: pci: Convert iProc PCIe to YAML
Conver the iProc PCIe controller Device Tree binding to YAML now that all DTS in arch/arm and arch/arm64 have been fixed to be compliant. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Link: https://lore.kernel.org/r/20211214035820.2984289-7-f.fainelli@gmail.com Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
		
							parent
							
								
									8dbb528b88
								
							
						
					
					
						commit
						905b986d09
					
				
					 2 changed files with 184 additions and 133 deletions
				
			
		| 
						 | 
				
			
			@ -1,133 +0,0 @@
 | 
			
		|||
* Broadcom iProc PCIe controller with the platform bus interface
 | 
			
		||||
 | 
			
		||||
Required properties:
 | 
			
		||||
- compatible:
 | 
			
		||||
      "brcm,iproc-pcie" for the first generation of PAXB based controller,
 | 
			
		||||
used in SoCs including NSP, Cygnus, NS2, and Pegasus
 | 
			
		||||
      "brcm,iproc-pcie-paxb-v2" for the second generation of PAXB-based
 | 
			
		||||
controllers, used in Stingray
 | 
			
		||||
      "brcm,iproc-pcie-paxc" for the first generation of PAXC based
 | 
			
		||||
controller, used in NS2
 | 
			
		||||
      "brcm,iproc-pcie-paxc-v2" for the second generation of PAXC based
 | 
			
		||||
controller, used in Stingray
 | 
			
		||||
  PAXB-based root complex is used for external endpoint devices. PAXC-based
 | 
			
		||||
root complex is connected to emulated endpoint devices internal to the ASIC
 | 
			
		||||
- reg: base address and length of the PCIe controller I/O register space
 | 
			
		||||
- #interrupt-cells: set to <1>
 | 
			
		||||
- interrupt-map-mask and interrupt-map, standard PCI properties to define the
 | 
			
		||||
  mapping of the PCIe interface to interrupt numbers
 | 
			
		||||
- linux,pci-domain: PCI domain ID. Should be unique for each host controller
 | 
			
		||||
- bus-range: PCI bus numbers covered
 | 
			
		||||
- #address-cells: set to <3>
 | 
			
		||||
- #size-cells: set to <2>
 | 
			
		||||
- device_type: set to "pci"
 | 
			
		||||
- ranges: ranges for the PCI memory and I/O regions
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- phys: phandle of the PCIe PHY device
 | 
			
		||||
- phy-names: must be "pcie-phy"
 | 
			
		||||
- dma-coherent: present if DMA operations are coherent
 | 
			
		||||
- dma-ranges: Some PAXB-based root complexes do not have inbound mapping done
 | 
			
		||||
  by the ASIC after power on reset.  In this case, SW is required to configure
 | 
			
		||||
the mapping, based on inbound memory regions specified by this property.
 | 
			
		||||
 | 
			
		||||
- brcm,pcie-ob: Some iProc SoCs do not have the outbound address mapping done
 | 
			
		||||
by the ASIC after power on reset. In this case, SW needs to configure it
 | 
			
		||||
 | 
			
		||||
If the brcm,pcie-ob property is present, the following properties become
 | 
			
		||||
effective:
 | 
			
		||||
 | 
			
		||||
Required:
 | 
			
		||||
- brcm,pcie-ob-axi-offset: The offset from the AXI address to the internal
 | 
			
		||||
address used by the iProc PCIe core (not the PCIe address)
 | 
			
		||||
 | 
			
		||||
MSI support (optional):
 | 
			
		||||
 | 
			
		||||
For older platforms without MSI integrated in the GIC, iProc PCIe core provides
 | 
			
		||||
an event queue based MSI support.  The iProc MSI uses host memories to store
 | 
			
		||||
MSI posted writes in the event queues
 | 
			
		||||
 | 
			
		||||
On newer iProc platforms, gicv2m or gicv3-its based MSI support should be used
 | 
			
		||||
 | 
			
		||||
- msi-map: Maps a Requester ID to an MSI controller and associated MSI
 | 
			
		||||
sideband data
 | 
			
		||||
 | 
			
		||||
- msi-parent: Link to the device node of the MSI controller, used when no MSI
 | 
			
		||||
sideband data is passed between the iProc PCIe controller and the MSI
 | 
			
		||||
controller
 | 
			
		||||
 | 
			
		||||
Refer to the following binding documents for more detailed description on
 | 
			
		||||
the use of 'msi-map' and 'msi-parent':
 | 
			
		||||
  Documentation/devicetree/bindings/pci/pci-msi.txt
 | 
			
		||||
  Documentation/devicetree/bindings/interrupt-controller/msi.txt
 | 
			
		||||
 | 
			
		||||
When the iProc event queue based MSI is used, one needs to define the
 | 
			
		||||
following properties in the MSI device node:
 | 
			
		||||
- compatible: Must be "brcm,iproc-msi"
 | 
			
		||||
- msi-controller: claims itself as an MSI controller
 | 
			
		||||
- interrupts: List of interrupt IDs from its parent interrupt device
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- brcm,pcie-msi-inten: Needs to be present for some older iProc platforms that
 | 
			
		||||
require the interrupt enable registers to be set explicitly to enable MSI
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
	pcie0: pcie@18012000 {
 | 
			
		||||
		compatible = "brcm,iproc-pcie";
 | 
			
		||||
		reg = <0x18012000 0x1000>;
 | 
			
		||||
 | 
			
		||||
		#interrupt-cells = <1>;
 | 
			
		||||
		interrupt-map-mask = <0 0 0 0>;
 | 
			
		||||
		interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_NONE>;
 | 
			
		||||
 | 
			
		||||
		linux,pci-domain = <0>;
 | 
			
		||||
 | 
			
		||||
		bus-range = <0x00 0xff>;
 | 
			
		||||
 | 
			
		||||
		#address-cells = <3>;
 | 
			
		||||
		#size-cells = <2>;
 | 
			
		||||
		device_type = "pci";
 | 
			
		||||
		ranges = <0x81000000 0 0	  0x28000000 0 0x00010000
 | 
			
		||||
			  0x82000000 0 0x20000000 0x20000000 0 0x04000000>;
 | 
			
		||||
 | 
			
		||||
		phys = <&phy 0 5>;
 | 
			
		||||
		phy-names = "pcie-phy";
 | 
			
		||||
 | 
			
		||||
		brcm,pcie-ob;
 | 
			
		||||
		brcm,pcie-ob-axi-offset = <0x00000000>;
 | 
			
		||||
 | 
			
		||||
		msi-parent = <&msi0>;
 | 
			
		||||
 | 
			
		||||
		/* iProc event queue based MSI */
 | 
			
		||||
		msi0: msi@18012000 {
 | 
			
		||||
			compatible = "brcm,iproc-msi";
 | 
			
		||||
			msi-controller;
 | 
			
		||||
			interrupt-parent = <&gic>;
 | 
			
		||||
			interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>,
 | 
			
		||||
				     <GIC_SPI 97 IRQ_TYPE_NONE>,
 | 
			
		||||
				     <GIC_SPI 98 IRQ_TYPE_NONE>,
 | 
			
		||||
				     <GIC_SPI 99 IRQ_TYPE_NONE>,
 | 
			
		||||
		};
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	pcie1: pcie@18013000 {
 | 
			
		||||
		compatible = "brcm,iproc-pcie";
 | 
			
		||||
		reg = <0x18013000 0x1000>;
 | 
			
		||||
 | 
			
		||||
		#interrupt-cells = <1>;
 | 
			
		||||
		interrupt-map-mask = <0 0 0 0>;
 | 
			
		||||
		interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_NONE>;
 | 
			
		||||
 | 
			
		||||
		linux,pci-domain = <1>;
 | 
			
		||||
 | 
			
		||||
		bus-range = <0x00 0xff>;
 | 
			
		||||
 | 
			
		||||
		#address-cells = <3>;
 | 
			
		||||
		#size-cells = <2>;
 | 
			
		||||
		device_type = "pci";
 | 
			
		||||
		ranges = <0x81000000 0 0	  0x48000000 0 0x00010000
 | 
			
		||||
			  0x82000000 0 0x40000000 0x40000000 0 0x04000000>;
 | 
			
		||||
 | 
			
		||||
		phys = <&phy 1 6>;
 | 
			
		||||
		phy-names = "pcie-phy";
 | 
			
		||||
	};
 | 
			
		||||
							
								
								
									
										184
									
								
								Documentation/devicetree/bindings/pci/brcm,iproc-pcie.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								Documentation/devicetree/bindings/pci/brcm,iproc-pcie.yaml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,184 @@
 | 
			
		|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
 | 
			
		||||
%YAML 1.2
 | 
			
		||||
---
 | 
			
		||||
$id: http://devicetree.org/schemas/pci/brcm,iproc-pcie.yaml#
 | 
			
		||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
 | 
			
		||||
 | 
			
		||||
title: Broadcom iProc PCIe controller with the platform bus interface
 | 
			
		||||
 | 
			
		||||
maintainers:
 | 
			
		||||
  - Ray Jui <ray.jui@broadcom.com>
 | 
			
		||||
  - Scott Branden <scott.branden@broadcom.com>
 | 
			
		||||
 | 
			
		||||
allOf:
 | 
			
		||||
  - $ref: /schemas/pci/pci-bus.yaml#
 | 
			
		||||
  - $ref: /schemas/interrupt-controller/msi-controller.yaml#
 | 
			
		||||
 | 
			
		||||
properties:
 | 
			
		||||
  compatible:
 | 
			
		||||
    items:
 | 
			
		||||
      - enum:
 | 
			
		||||
          # for the first generation of PAXB based controller, used in SoCs
 | 
			
		||||
          # including NSP, Cygnus, NS2, and Pegasus
 | 
			
		||||
          - brcm,iproc-pcie
 | 
			
		||||
          # for the second generation of PAXB-based controllers, used in
 | 
			
		||||
          # Stingray
 | 
			
		||||
          - brcm,iproc-pcie-paxb-v2
 | 
			
		||||
          # For the first generation of PAXC based controller, used in NS2
 | 
			
		||||
          - brcm,iproc-pcie-paxc
 | 
			
		||||
          # For the second generation of PAXC based controller, used in Stingray
 | 
			
		||||
          - brcm,iproc-pcie-paxc-v2
 | 
			
		||||
 | 
			
		||||
  reg:
 | 
			
		||||
    maxItems: 1
 | 
			
		||||
    description: >
 | 
			
		||||
       Base address and length of the PCIe controller I/O register space
 | 
			
		||||
 | 
			
		||||
  interrupt-map: true
 | 
			
		||||
 | 
			
		||||
  interrupt-map-mask: true
 | 
			
		||||
 | 
			
		||||
  "#interrupt-cells":
 | 
			
		||||
    const: 1
 | 
			
		||||
 | 
			
		||||
  ranges:
 | 
			
		||||
    minItems: 1
 | 
			
		||||
    maxItems: 2
 | 
			
		||||
    description: >
 | 
			
		||||
      Ranges for the PCI memory and I/O regions
 | 
			
		||||
 | 
			
		||||
  phys:
 | 
			
		||||
    maxItems: 1
 | 
			
		||||
 | 
			
		||||
  phy-names:
 | 
			
		||||
    items:
 | 
			
		||||
      - const: pcie-phy
 | 
			
		||||
 | 
			
		||||
  bus-range: true
 | 
			
		||||
 | 
			
		||||
  dma-coherent: true
 | 
			
		||||
 | 
			
		||||
  "#address-cells": true
 | 
			
		||||
 | 
			
		||||
  "#size-cells": true
 | 
			
		||||
 | 
			
		||||
  device_type: true
 | 
			
		||||
 | 
			
		||||
  brcm,pcie-ob:
 | 
			
		||||
    type: boolean
 | 
			
		||||
    description: >
 | 
			
		||||
      Some iProc SoCs do not have the outbound address mapping done by the
 | 
			
		||||
      ASIC after power on reset. In this case, SW needs to configure it
 | 
			
		||||
 | 
			
		||||
  brcm,pcie-ob-axi-offset:
 | 
			
		||||
    $ref: /schemas/types.yaml#/definitions/uint32
 | 
			
		||||
    description: >
 | 
			
		||||
       The offset from the AXI address to the internal address used by the
 | 
			
		||||
       iProc PCIe core (not the PCIe address)
 | 
			
		||||
 | 
			
		||||
  msi:
 | 
			
		||||
    type: object
 | 
			
		||||
    properties:
 | 
			
		||||
      compatible:
 | 
			
		||||
        items:
 | 
			
		||||
          - const: brcm,iproc-msi
 | 
			
		||||
 | 
			
		||||
  msi-parent: true
 | 
			
		||||
 | 
			
		||||
  msi-controller: true
 | 
			
		||||
 | 
			
		||||
  brcm,pcie-msi-inten:
 | 
			
		||||
    type: boolean
 | 
			
		||||
    description: >
 | 
			
		||||
      Needs to be present for some older iProc platforms that require the
 | 
			
		||||
      interrupt enable registers to be set explicitly to enable MSI
 | 
			
		||||
 | 
			
		||||
dependencies:
 | 
			
		||||
  brcm,pcie-ob-axi-offset: ["brcm,pcie-ob"]
 | 
			
		||||
  brcm,pcie-msi-inten: [msi-controller]
 | 
			
		||||
 | 
			
		||||
required:
 | 
			
		||||
  - compatible
 | 
			
		||||
  - reg
 | 
			
		||||
  - ranges
 | 
			
		||||
 | 
			
		||||
if:
 | 
			
		||||
  properties:
 | 
			
		||||
    compatible:
 | 
			
		||||
      contains:
 | 
			
		||||
        enum:
 | 
			
		||||
          - brcm,iproc-pcie
 | 
			
		||||
then:
 | 
			
		||||
  required:
 | 
			
		||||
    - interrupt-map
 | 
			
		||||
    - interrupt-map-mask
 | 
			
		||||
 | 
			
		||||
unevaluatedProperties: false
 | 
			
		||||
 | 
			
		||||
examples:
 | 
			
		||||
  - |
 | 
			
		||||
   #include <dt-bindings/interrupt-controller/arm-gic.h>
 | 
			
		||||
 | 
			
		||||
   bus {
 | 
			
		||||
      #address-cells = <1>;
 | 
			
		||||
      #size-cells = <1>;
 | 
			
		||||
           pcie0: pcie@18012000 {
 | 
			
		||||
              compatible = "brcm,iproc-pcie";
 | 
			
		||||
              reg = <0x18012000 0x1000>;
 | 
			
		||||
 | 
			
		||||
              #interrupt-cells = <1>;
 | 
			
		||||
              interrupt-map-mask = <0 0 0 0>;
 | 
			
		||||
              interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_NONE>;
 | 
			
		||||
 | 
			
		||||
              linux,pci-domain = <0>;
 | 
			
		||||
 | 
			
		||||
              bus-range = <0x00 0xff>;
 | 
			
		||||
 | 
			
		||||
              #address-cells = <3>;
 | 
			
		||||
              #size-cells = <2>;
 | 
			
		||||
              device_type = "pci";
 | 
			
		||||
              ranges = <0x81000000 0 0     0x28000000 0 0x00010000>,
 | 
			
		||||
                   <0x82000000 0 0x20000000 0x20000000 0 0x04000000>;
 | 
			
		||||
 | 
			
		||||
              phys = <&phy 0 5>;
 | 
			
		||||
              phy-names = "pcie-phy";
 | 
			
		||||
 | 
			
		||||
              brcm,pcie-ob;
 | 
			
		||||
              brcm,pcie-ob-axi-offset = <0x00000000>;
 | 
			
		||||
 | 
			
		||||
              msi-parent = <&msi0>;
 | 
			
		||||
 | 
			
		||||
              /* iProc event queue based MSI */
 | 
			
		||||
              msi0: msi {
 | 
			
		||||
                 compatible = "brcm,iproc-msi";
 | 
			
		||||
                 msi-controller;
 | 
			
		||||
                 interrupt-parent = <&gic>;
 | 
			
		||||
                 interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>,
 | 
			
		||||
                         <GIC_SPI 97 IRQ_TYPE_NONE>,
 | 
			
		||||
                         <GIC_SPI 98 IRQ_TYPE_NONE>,
 | 
			
		||||
                         <GIC_SPI 99 IRQ_TYPE_NONE>;
 | 
			
		||||
              };
 | 
			
		||||
           };
 | 
			
		||||
 | 
			
		||||
           pcie1: pcie@18013000 {
 | 
			
		||||
              compatible = "brcm,iproc-pcie";
 | 
			
		||||
              reg = <0x18013000 0x1000>;
 | 
			
		||||
 | 
			
		||||
              #interrupt-cells = <1>;
 | 
			
		||||
              interrupt-map-mask = <0 0 0 0>;
 | 
			
		||||
              interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_NONE>;
 | 
			
		||||
 | 
			
		||||
              linux,pci-domain = <1>;
 | 
			
		||||
 | 
			
		||||
              bus-range = <0x00 0xff>;
 | 
			
		||||
 | 
			
		||||
              #address-cells = <3>;
 | 
			
		||||
              #size-cells = <2>;
 | 
			
		||||
              device_type = "pci";
 | 
			
		||||
              ranges = <0x81000000 0 0     0x48000000 0 0x00010000>,
 | 
			
		||||
                   <0x82000000 0 0x40000000 0x40000000 0 0x04000000>;
 | 
			
		||||
 | 
			
		||||
              phys = <&phy 1 6>;
 | 
			
		||||
              phy-names = "pcie-phy";
 | 
			
		||||
           };
 | 
			
		||||
    };
 | 
			
		||||
		Loading…
	
		Reference in a new issue