# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---

$id: http://devicetree.org/schemas/pci/fsl,mpc8xxx-pci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Freescale MPC83xx PCI/PCI-X/PCIe controllers

description:
  Binding for the PCI/PCI-X/PCIe host bridges on MPC8xxx SoCs

maintainers:
  - J. Neuschäfer <j.neuschaefer@gmx.net>

allOf:
  - $ref: /schemas/pci/pci-host-bridge.yaml#

properties:
  compatible:
    oneOf:
      - enum:
          - fsl,mpc8314-pcie
          - fsl,mpc8349-pci
          - fsl,mpc8540-pci
          - fsl,mpc8548-pcie
          - fsl,mpc8641-pcie
      - items:
          - enum:
              - fsl,mpc8308-pcie
              - fsl,mpc8315-pcie
              - fsl,mpc8377-pcie
              - fsl,mpc8378-pcie
          - const: fsl,mpc8314-pcie
      - items:
          - const: fsl,mpc8360-pci
          - const: fsl,mpc8349-pci
      - items:
          - const: fsl,mpc8540-pcix
          - const: fsl,mpc8540-pci

  reg:
    minItems: 1
    items:
      - description: internal registers
      - description: config space access registers

  clock-frequency: true

  interrupts:
    items:
      - description: Consolidated PCI interrupt

  fsl,pci-agent-force-enum:
    type: boolean
    description:
      Typically any Freescale PCI-X bridge hardware strapped into Agent mode is
      prevented from enumerating the bus. The PrPMC form-factor requires all
      mezzanines to be PCI-X Agents, but one per system may still enumerate the
      bus.

      This property allows a PCI-X bridge to be used for bus enumeration
      despite being strapped into Agent mode.

required:
  - reg
  - compatible

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

    pcie@e0009000 {
        compatible = "fsl,mpc8315-pcie", "fsl,mpc8314-pcie";
        reg = <0xe0009000 0x00001000>;
        ranges = <0x02000000 0 0xa0000000 0xa0000000 0 0x10000000
                  0x01000000 0 0x00000000 0xb1000000 0 0x00800000>;
        #address-cells = <3>;
        #size-cells = <2>;
        #interrupt-cells = <1>;
        device_type = "pci";
        bus-range = <0 255>;
        interrupt-map-mask = <0xf800 0 0 7>;
        interrupt-map = <0 0 0 1 &ipic 1 IRQ_TYPE_LEVEL_LOW
                         0 0 0 2 &ipic 1 IRQ_TYPE_LEVEL_LOW
                         0 0 0 3 &ipic 1 IRQ_TYPE_LEVEL_LOW
                         0 0 0 4 &ipic 1 IRQ_TYPE_LEVEL_LOW>;
        clock-frequency = <0>;
    };

  - |
    pci@ef008000 {
        compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
        reg = <0xef008000 0x1000>;
        ranges = <0x02000000 0 0x80000000 0x80000000 0 0x20000000
                  0x01000000 0 0x00000000 0xd0000000 0 0x01000000>;
        #interrupt-cells = <1>;
        #size-cells = <2>;
        #address-cells = <3>;
        device_type = "pci";
        clock-frequency = <33333333>;
        interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
        interrupt-map = </* IDSEL */
                         0xe000 0 0 1 &mpic 2 1
                         0xe000 0 0 2 &mpic 3 1>;
        interrupts-extended = <&mpic 24 2>;
        bus-range = <0 0>;
        fsl,pci-agent-force-enum;
    };

...
