summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2025-12-18 11:22:00 +0300
committerMark Brown <broonie@kernel.org>2025-12-18 11:22:00 +0300
commit8a3eb50d579c852d3502334e7afa6da6efe0e578 (patch)
tree46313cd8acb387fe46556d4780cc9a2a15b14f8b /Documentation
parent7f7b350e4a65446f5d52ea8ae99e12eac8a972db (diff)
parent29c8c00d9f9db5fb659b6f05f9e8964afc13f3e2 (diff)
downloadlinux-8a3eb50d579c852d3502334e7afa6da6efe0e578.tar.xz
Add support for NXP XSPI
Merge series from Haibo Chen <haibo.chen@nxp.com>: XSPI is a flexible SPI host controller which supports up to 2 external devices (2 CS). It support Single/Dual/Quad/Octal mode data transfer. The difference between XSPI and Flexspi is XSPI support multiple independent execution environments (EENVs) for HW virtualization with some limitations. Each EENV has its own interrupt and its own set of programming registers that exists in a specific offset range in the XSPI memory map. The main environment (EENV0) address space contains all of the registers for controlling EENV0 plus all of the general XSPI control and programming registers. The register mnemonics for the user environments (EENV1 to EENV4) have "_SUB_n" appended to the mnemonic for the corresponding main-environment register. Current driver based on EENV0, which means system already give EENV0 right to linux. This driver use SPI memory interface of the SPI framework to issue flash memory operations. Tested this driver with mtd_debug and UBIFS on NXP i.MX943 EVK board which has one MT35XU512ABA spi nor flash. NOw this driver has the following key features: - Support up to OCT DDR mode - Support AHB read - Support IP read and IP write - Support two CS
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/devicetree/bindings/spi/nxp,imx94-xspi.yaml88
1 files changed, 88 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/spi/nxp,imx94-xspi.yaml b/Documentation/devicetree/bindings/spi/nxp,imx94-xspi.yaml
new file mode 100644
index 000000000000..a0f4b162c858
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/nxp,imx94-xspi.yaml
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/spi/nxp,imx94-xspi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NXP External Serial Peripheral Interface (xSPI)
+
+maintainers:
+ - Haibo Chen <haibo.chen@nxp.com>
+ - Han Xu <han.xu@nxp.com>
+
+properties:
+ compatible:
+ oneOf:
+ - enum:
+ - nxp,imx94-xspi
+
+ reg:
+ items:
+ - description: registers address space
+ - description: memory mapped address space
+
+ reg-names:
+ items:
+ - const: base
+ - const: mmap
+
+ interrupts:
+ items:
+ - description: interrupt for EENV0
+ - description: interrupt for EENV1
+ - description: interrupt for EENV2
+ - description: interrupt for EENV3
+ - description: interrupt for EENV4
+
+ clocks:
+ items:
+ - description: SPI serial clock
+
+ clock-names:
+ items:
+ - const: per
+
+required:
+ - compatible
+ - reg
+ - reg-names
+ - interrupts
+ - clocks
+ - clock-names
+
+allOf:
+ - $ref: spi-controller.yaml#
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ soc {
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ spi@42b90000 {
+ compatible = "nxp,imx94-xspi";
+ reg = <0x0 0x42b90000 0x0 0x50000>, <0x0 0x28000000 0x0 0x08000000>;
+ reg-names = "base", "mmap";
+ interrupts = <GIC_SPI 390 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 391 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 392 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 394 IRQ_TYPE_LEVEL_HIGH>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clocks = <&scmi_1>;
+ clock-names = "per";
+
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <200000000>;
+ spi-rx-bus-width = <8>;
+ spi-tx-bus-width = <8>;
+ };
+ };
+ };