17d82f89cSRafał Miłecki# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
27d82f89cSRafał Miłecki%YAML 1.2
37d82f89cSRafał Miłecki---
47d82f89cSRafał Miłecki$id: http://devicetree.org/schemas/spi/brcm,spi-bcm-qspi.yaml#
57d82f89cSRafał Miłecki$schema: http://devicetree.org/meta-schemas/core.yaml#
67d82f89cSRafał Miłecki
77d82f89cSRafał Miłeckititle: Broadcom SPI controller
87d82f89cSRafał Miłecki
97d82f89cSRafał Miłeckimaintainers:
107d82f89cSRafał Miłecki  - Kamal Dasu <kdasu.kdev@gmail.com>
117d82f89cSRafał Miłecki  - Rafał Miłecki <rafal@milecki.pl>
127d82f89cSRafał Miłecki
137d82f89cSRafał Miłeckidescription: |
147d82f89cSRafał Miłecki  The Broadcom SPI controller is a SPI master found on various SOCs, including
15*47aab533SBjorn Helgaas  BRCMSTB (BCM7XXX), Cygnus, NSP and NS2. The Broadcom Master SPI hw IP consists
167d82f89cSRafał Miłecki  of:
177d82f89cSRafał Miłecki    MSPI : SPI master controller can read and write to a SPI slave device
187d82f89cSRafał Miłecki    BSPI : Broadcom SPI in combination with the MSPI hw IP provides acceleration
197d82f89cSRafał Miłecki           for flash reads and be configured to do single, double, quad lane
207d82f89cSRafał Miłecki           io with 3-byte and 4-byte addressing support.
217d82f89cSRafał Miłecki
227d82f89cSRafał Miłecki  Supported Broadcom SoCs have one instance of MSPI+BSPI controller IP.
23*47aab533SBjorn Helgaas  MSPI master can be used without BSPI. BRCMSTB SoCs have an additional instance
247d82f89cSRafał Miłecki  of a MSPI master without the BSPI to use with non flash slave devices that
257d82f89cSRafał Miłecki  use SPI protocol.
267d82f89cSRafał Miłecki
277d82f89cSRafał MiłeckiallOf:
287d82f89cSRafał Miłecki  - $ref: spi-controller.yaml#
297d82f89cSRafał Miłecki
307d82f89cSRafał Miłeckiproperties:
317d82f89cSRafał Miłecki  compatible:
327d82f89cSRafał Miłecki    oneOf:
337d82f89cSRafał Miłecki      - description: Second Instance of MSPI BRCMSTB SoCs
347d82f89cSRafał Miłecki        items:
357d82f89cSRafał Miłecki          - enum:
367d82f89cSRafał Miłecki              - brcm,spi-bcm7425-qspi
377d82f89cSRafał Miłecki              - brcm,spi-bcm7429-qspi
387d82f89cSRafał Miłecki              - brcm,spi-bcm7435-qspi
397d82f89cSRafał Miłecki              - brcm,spi-bcm7445-qspi
407d82f89cSRafał Miłecki              - brcm,spi-bcm7216-qspi
417d82f89cSRafał Miłecki              - brcm,spi-bcm7278-qspi
427d82f89cSRafał Miłecki          - const: brcm,spi-bcm-qspi
437d82f89cSRafał Miłecki          - const: brcm,spi-brcmstb-mspi
447d82f89cSRafał Miłecki      - description: Second Instance of MSPI BRCMSTB SoCs
457d82f89cSRafał Miłecki        items:
467d82f89cSRafał Miłecki          - enum:
477d82f89cSRafał Miłecki              - brcm,spi-brcmstb-qspi
487d82f89cSRafał Miłecki              - brcm,spi-brcmstb-mspi
497d82f89cSRafał Miłecki              - brcm,spi-nsp-qspi
507d82f89cSRafał Miłecki              - brcm,spi-ns2-qspi
517d82f89cSRafał Miłecki          - const: brcm,spi-bcm-qspi
527d82f89cSRafał Miłecki
537d82f89cSRafał Miłecki  reg:
547d82f89cSRafał Miłecki    minItems: 1
557d82f89cSRafał Miłecki    maxItems: 5
567d82f89cSRafał Miłecki
577d82f89cSRafał Miłecki  reg-names:
587d82f89cSRafał Miłecki    minItems: 1
597d82f89cSRafał Miłecki    items:
607d82f89cSRafał Miłecki      - const: mspi
617d82f89cSRafał Miłecki      - const: bspi
627d82f89cSRafał Miłecki      - enum: [ intr_regs, intr_status_reg, cs_reg ]
637d82f89cSRafał Miłecki      - enum: [ intr_regs, intr_status_reg, cs_reg ]
647d82f89cSRafał Miłecki      - enum: [ intr_regs, intr_status_reg, cs_reg ]
657d82f89cSRafał Miłecki
667d82f89cSRafał Miłecki  interrupts:
677d82f89cSRafał Miłecki    minItems: 1
687d82f89cSRafał Miłecki    maxItems: 7
697d82f89cSRafał Miłecki
707d82f89cSRafał Miłecki  interrupt-names:
717d82f89cSRafał Miłecki    oneOf:
727d82f89cSRafał Miłecki      - minItems: 1
737d82f89cSRafał Miłecki        items:
747d82f89cSRafał Miłecki          - const: mspi_done
757d82f89cSRafał Miłecki          - const: mspi_halted
767d82f89cSRafał Miłecki          - const: spi_lr_fullness_reached
777d82f89cSRafał Miłecki          - const: spi_lr_session_aborted
787d82f89cSRafał Miłecki          - const: spi_lr_impatient
797d82f89cSRafał Miłecki          - const: spi_lr_session_done
807d82f89cSRafał Miłecki          - const: spi_lr_overread
817d82f89cSRafał Miłecki      - const: spi_l1_intr
827d82f89cSRafał Miłecki
837d82f89cSRafał Miłecki  clocks:
847d82f89cSRafał Miłecki    maxItems: 1
857d82f89cSRafał Miłecki    description: reference clock for this block
867d82f89cSRafał Miłecki
877d82f89cSRafał Miłecki  native-endian:
887d82f89cSRafał Miłecki    $ref: /schemas/types.yaml#/definitions/flag
897d82f89cSRafał Miłecki    description: Defined when using BE SoC and device uses BE register read/write
907d82f89cSRafał Miłecki
917d82f89cSRafał MiłeckiunevaluatedProperties: false
927d82f89cSRafał Miłecki
937d82f89cSRafał Miłeckirequired:
947d82f89cSRafał Miłecki  - reg
957d82f89cSRafał Miłecki  - reg-names
967d82f89cSRafał Miłecki  - interrupts
977d82f89cSRafał Miłecki  - interrupt-names
987d82f89cSRafał Miłecki
997d82f89cSRafał Miłeckiexamples:
1007d82f89cSRafał Miłecki  - | # BRCMSTB SoC: SPI Master (MSPI+BSPI) for SPI-NOR access
1017d82f89cSRafał Miłecki    spi@f03e3400 {
1027d82f89cSRafał Miłecki        compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi";
1037d82f89cSRafał Miłecki        reg = <0xf03e3400 0x188>, <0xf03e3200 0x50>, <0xf03e0920 0x4>;
1047d82f89cSRafał Miłecki        reg-names = "mspi", "bspi", "cs_reg";
1057d82f89cSRafał Miłecki        interrupts = <0x5>, <0x6>, <0x1>, <0x2>, <0x3>, <0x4>, <0x0>;
1067d82f89cSRafał Miłecki        interrupt-parent = <&gic>;
1077d82f89cSRafał Miłecki        interrupt-names = "mspi_done",
1087d82f89cSRafał Miłecki                          "mspi_halted",
1097d82f89cSRafał Miłecki                          "spi_lr_fullness_reached",
1107d82f89cSRafał Miłecki                          "spi_lr_session_aborted",
1117d82f89cSRafał Miłecki                          "spi_lr_impatient",
1127d82f89cSRafał Miłecki                          "spi_lr_session_done",
1137d82f89cSRafał Miłecki                          "spi_lr_overread";
1147d82f89cSRafał Miłecki        clocks = <&hif_spi>;
1157d82f89cSRafał Miłecki        #address-cells = <0x1>;
1167d82f89cSRafał Miłecki        #size-cells = <0x0>;
1177d82f89cSRafał Miłecki
1187d82f89cSRafał Miłecki        flash@0 {
1197d82f89cSRafał Miłecki            #size-cells = <0x2>;
1207d82f89cSRafał Miłecki            #address-cells = <0x2>;
1217d82f89cSRafał Miłecki            compatible = "m25p80";
1227d82f89cSRafał Miłecki            reg = <0x0>;
1237d82f89cSRafał Miłecki            spi-max-frequency = <0x2625a00>;
1247d82f89cSRafał Miłecki            spi-cpol;
1257d82f89cSRafał Miłecki            spi-cpha;
1267d82f89cSRafał Miłecki        };
1277d82f89cSRafał Miłecki    };
1287d82f89cSRafał Miłecki  - | # BRCMSTB SoC: MSPI master for any SPI device
1297d82f89cSRafał Miłecki    spi@f0416000 {
1307d82f89cSRafał Miłecki        clocks = <&upg_fixed>;
1317d82f89cSRafał Miłecki        compatible = "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi";
1327d82f89cSRafał Miłecki        reg = <0xf0416000 0x180>;
1337d82f89cSRafał Miłecki        reg-names = "mspi";
1347d82f89cSRafał Miłecki        interrupts = <0x14>;
1357d82f89cSRafał Miłecki        interrupt-parent = <&irq0_aon_intc>;
1367d82f89cSRafał Miłecki        interrupt-names = "mspi_done";
1377d82f89cSRafał Miłecki        #address-cells = <1>;
1387d82f89cSRafał Miłecki        #size-cells = <0>;
1397d82f89cSRafał Miłecki    };
1407d82f89cSRafał Miłecki  - | # iProc SoC
1417d82f89cSRafał Miłecki    #include <dt-bindings/interrupt-controller/irq.h>
1427d82f89cSRafał Miłecki    #include <dt-bindings/interrupt-controller/arm-gic.h>
1437d82f89cSRafał Miłecki
1447d82f89cSRafał Miłecki    spi@18027200 {
1457d82f89cSRafał Miłecki        compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
1467d82f89cSRafał Miłecki        reg = <0x18027200 0x184>,
1477d82f89cSRafał Miłecki              <0x18027000 0x124>,
1487d82f89cSRafał Miłecki              <0x1811c408 0x004>,
1497d82f89cSRafał Miłecki              <0x180273a0 0x01c>;
1507d82f89cSRafał Miłecki        reg-names = "mspi", "bspi", "intr_regs", "intr_status_reg";
1517d82f89cSRafał Miłecki        interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
1527d82f89cSRafał Miłecki                     <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>,
1537d82f89cSRafał Miłecki                     <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
1547d82f89cSRafał Miłecki                     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
1557d82f89cSRafał Miłecki                     <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
1567d82f89cSRafał Miłecki                     <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
1577d82f89cSRafał Miłecki                     <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
1587d82f89cSRafał Miłecki        interrupt-names = "mspi_done",
1597d82f89cSRafał Miłecki                          "mspi_halted",
1607d82f89cSRafał Miłecki                          "spi_lr_fullness_reached",
1617d82f89cSRafał Miłecki                          "spi_lr_session_aborted",
1627d82f89cSRafał Miłecki                          "spi_lr_impatient",
1637d82f89cSRafał Miłecki                          "spi_lr_session_done";
1647d82f89cSRafał Miłecki        clocks = <&iprocmed>;
1657d82f89cSRafał Miłecki        num-cs = <2>;
1667d82f89cSRafał Miłecki        #address-cells = <1>;
1677d82f89cSRafał Miłecki        #size-cells = <0>;
1687d82f89cSRafał Miłecki    };
1697d82f89cSRafał Miłecki  - | # NS2 SoC
1707d82f89cSRafał Miłecki    #include <dt-bindings/interrupt-controller/irq.h>
1717d82f89cSRafał Miłecki    #include <dt-bindings/interrupt-controller/arm-gic.h>
1727d82f89cSRafał Miłecki
1737d82f89cSRafał Miłecki    spi@66470200 {
1747d82f89cSRafał Miłecki        compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi";
1757d82f89cSRafał Miłecki        reg = <0x66470200 0x184>,
1767d82f89cSRafał Miłecki              <0x66470000 0x124>,
1777d82f89cSRafał Miłecki              <0x67017408 0x004>,
1787d82f89cSRafał Miłecki              <0x664703a0 0x01c>;
1797d82f89cSRafał Miłecki        reg-names = "mspi", "bspi", "intr_regs", "intr_status_reg";
1807d82f89cSRafał Miłecki        interrupts = <GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH>;
1817d82f89cSRafał Miłecki        interrupt-names = "spi_l1_intr";
1827d82f89cSRafał Miłecki        clocks = <&iprocmed>;
1837d82f89cSRafał Miłecki        num-cs = <2>;
1847d82f89cSRafał Miłecki        #address-cells = <1>;
1857d82f89cSRafał Miłecki        #size-cells = <0>;
1867d82f89cSRafał Miłecki
1877d82f89cSRafał Miłecki        flash@0 {
1887d82f89cSRafał Miłecki            #address-cells = <1>;
1897d82f89cSRafał Miłecki            #size-cells = <1>;
1907d82f89cSRafał Miłecki            compatible = "m25p80";
1917d82f89cSRafał Miłecki            reg = <0x0>;
1927d82f89cSRafał Miłecki            spi-max-frequency = <12500000>;
1937d82f89cSRafał Miłecki            spi-cpol;
1947d82f89cSRafał Miłecki            spi-cpha;
1957d82f89cSRafał Miłecki        };
1967d82f89cSRafał Miłecki    };
197