xref: /freebsd/sys/contrib/device-tree/Bindings/spi/brcm,spi-bcm-qspi.txt (revision 6be3386466ab79a84b48429ae66244f21526d3df)
1c66ec88fSEmmanuel VadotBroadcom SPI controller
2c66ec88fSEmmanuel Vadot
3c66ec88fSEmmanuel VadotThe Broadcom SPI controller is a SPI master found on various SOCs, including
4c66ec88fSEmmanuel VadotBRCMSTB (BCM7XXX), Cygnus, NSP and NS2. The Broadcom Master SPI hw IP consits
5c66ec88fSEmmanuel Vadotof :
6c66ec88fSEmmanuel Vadot MSPI : SPI master controller can read and write to a SPI slave device
7c66ec88fSEmmanuel Vadot BSPI : Broadcom SPI in combination with the MSPI hw IP provides acceleration
8c66ec88fSEmmanuel Vadot	for flash reads and be configured to do single, double, quad lane
9c66ec88fSEmmanuel Vadot	io with 3-byte and 4-byte addressing support.
10c66ec88fSEmmanuel Vadot
11c66ec88fSEmmanuel Vadot Supported Broadcom SoCs have one instance of MSPI+BSPI controller IP.
12c66ec88fSEmmanuel Vadot MSPI master can be used wihout BSPI. BRCMSTB SoCs have an additional instance
13c66ec88fSEmmanuel Vadot of a MSPI master without the BSPI to use with non flash slave devices that
14c66ec88fSEmmanuel Vadot use SPI protocol.
15c66ec88fSEmmanuel Vadot
16c66ec88fSEmmanuel VadotRequired properties:
17c66ec88fSEmmanuel Vadot
18c66ec88fSEmmanuel Vadot- #address-cells:
19c66ec88fSEmmanuel Vadot    Must be <1>, as required by generic SPI binding.
20c66ec88fSEmmanuel Vadot
21c66ec88fSEmmanuel Vadot- #size-cells:
22c66ec88fSEmmanuel Vadot    Must be <0>, also as required by generic SPI binding.
23c66ec88fSEmmanuel Vadot
24c66ec88fSEmmanuel Vadot- compatible:
25c66ec88fSEmmanuel Vadot    Must be one of :
26c66ec88fSEmmanuel Vadot    "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi" : MSPI+BSPI on BRCMSTB SoCs
27c66ec88fSEmmanuel Vadot    "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi" : Second Instance of MSPI
28c66ec88fSEmmanuel Vadot						   BRCMSTB  SoCs
29c66ec88fSEmmanuel Vadot    "brcm,spi-bcm7425-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
30c66ec88fSEmmanuel Vadot    			     			  			    BRCMSTB  SoCs
31c66ec88fSEmmanuel Vadot    "brcm,spi-bcm7429-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
32c66ec88fSEmmanuel Vadot    			     			  			    BRCMSTB  SoCs
33c66ec88fSEmmanuel Vadot    "brcm,spi-bcm7435-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
34c66ec88fSEmmanuel Vadot    			     			  			    BRCMSTB  SoCs
35*6be33864SEmmanuel Vadot    "brcm,spi-bcm7445-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
36*6be33864SEmmanuel Vadot                                                                            BRCMSTB  SoCs
37c66ec88fSEmmanuel Vadot    "brcm,spi-bcm7216-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
38c66ec88fSEmmanuel Vadot    			     			  			    BRCMSTB  SoCs
39c66ec88fSEmmanuel Vadot    "brcm,spi-bcm7278-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
40c66ec88fSEmmanuel Vadot    			     			  			    BRCMSTB  SoCs
41c66ec88fSEmmanuel Vadot    "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi"     : MSPI+BSPI on Cygnus, NSP
42c66ec88fSEmmanuel Vadot    "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi"     : NS2 SoCs
43c66ec88fSEmmanuel Vadot
44c66ec88fSEmmanuel Vadot- reg:
45c66ec88fSEmmanuel Vadot    Define the bases and ranges of the associated I/O address spaces.
46c66ec88fSEmmanuel Vadot    The required range is MSPI controller registers.
47c66ec88fSEmmanuel Vadot
48c66ec88fSEmmanuel Vadot- reg-names:
49c66ec88fSEmmanuel Vadot    First name does not matter, but must be reserved for the MSPI controller
50c66ec88fSEmmanuel Vadot    register range as mentioned in 'reg' above, and will typically contain
51c66ec88fSEmmanuel Vadot    - "bspi_regs": BSPI register range, not required with compatible
52c66ec88fSEmmanuel Vadot		   "spi-brcmstb-mspi"
53c66ec88fSEmmanuel Vadot    - "mspi_regs": MSPI register range is required for compatible strings
54c66ec88fSEmmanuel Vadot    - "intr_regs", "intr_status_reg" : Interrupt and status register for
55c66ec88fSEmmanuel Vadot      NSP, NS2, Cygnus SoC
56c66ec88fSEmmanuel Vadot
57c66ec88fSEmmanuel Vadot- interrupts
58c66ec88fSEmmanuel Vadot    The interrupts used by the MSPI and/or BSPI controller.
59c66ec88fSEmmanuel Vadot
60c66ec88fSEmmanuel Vadot- interrupt-names:
61c66ec88fSEmmanuel Vadot    Names of interrupts associated with MSPI
62c66ec88fSEmmanuel Vadot    - "mspi_halted" :
63c66ec88fSEmmanuel Vadot    - "mspi_done": Indicates that the requested SPI operation is complete.
64c66ec88fSEmmanuel Vadot    - "spi_lr_fullness_reached" : Linear read BSPI pipe full
65c66ec88fSEmmanuel Vadot    - "spi_lr_session_aborted"  : Linear read BSPI pipe aborted
66c66ec88fSEmmanuel Vadot    - "spi_lr_impatient" : Linear read BSPI requested when pipe empty
67c66ec88fSEmmanuel Vadot    - "spi_lr_session_done" : Linear read BSPI session done
68c66ec88fSEmmanuel Vadot
69c66ec88fSEmmanuel Vadot- clocks:
70c66ec88fSEmmanuel Vadot    A phandle to the reference clock for this block.
71c66ec88fSEmmanuel Vadot
72c66ec88fSEmmanuel VadotOptional properties:
73c66ec88fSEmmanuel Vadot
74c66ec88fSEmmanuel Vadot
75c66ec88fSEmmanuel Vadot- native-endian
76c66ec88fSEmmanuel Vadot    Defined when using BE SoC and device uses BE register read/write
77c66ec88fSEmmanuel Vadot
78c66ec88fSEmmanuel VadotRecommended optional m25p80 properties:
79c66ec88fSEmmanuel Vadot- spi-rx-bus-width: Definition as per
80c66ec88fSEmmanuel Vadot                    Documentation/devicetree/bindings/spi/spi-bus.txt
81c66ec88fSEmmanuel Vadot
82c66ec88fSEmmanuel VadotExamples:
83c66ec88fSEmmanuel Vadot
84c66ec88fSEmmanuel VadotBRCMSTB SoC Example:
85c66ec88fSEmmanuel Vadot
86c66ec88fSEmmanuel Vadot  SPI Master (MSPI+BSPI) for SPI-NOR access:
87c66ec88fSEmmanuel Vadot
88c66ec88fSEmmanuel Vadot    spi@f03e3400 {
89c66ec88fSEmmanuel Vadot		#address-cells = <0x1>;
90c66ec88fSEmmanuel Vadot		#size-cells = <0x0>;
91c66ec88fSEmmanuel Vadot		compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi";
92c66ec88fSEmmanuel Vadot		reg = <0xf03e0920 0x4 0xf03e3400 0x188 0xf03e3200 0x50>;
93c66ec88fSEmmanuel Vadot		reg-names = "cs_reg", "mspi", "bspi";
94c66ec88fSEmmanuel Vadot		interrupts = <0x6 0x5 0x4 0x3 0x2 0x1 0x0>;
95c66ec88fSEmmanuel Vadot		interrupt-parent = <0x1c>;
96c66ec88fSEmmanuel Vadot		interrupt-names = "mspi_halted",
97c66ec88fSEmmanuel Vadot				  "mspi_done",
98c66ec88fSEmmanuel Vadot				  "spi_lr_overread",
99c66ec88fSEmmanuel Vadot				  "spi_lr_session_done",
100c66ec88fSEmmanuel Vadot				  "spi_lr_impatient",
101c66ec88fSEmmanuel Vadot				  "spi_lr_session_aborted",
102c66ec88fSEmmanuel Vadot				  "spi_lr_fullness_reached";
103c66ec88fSEmmanuel Vadot
104c66ec88fSEmmanuel Vadot		clocks = <&hif_spi>;
105c66ec88fSEmmanuel Vadot		clock-names = "sw_spi";
106c66ec88fSEmmanuel Vadot
107c66ec88fSEmmanuel Vadot		m25p80@0 {
108c66ec88fSEmmanuel Vadot			#size-cells = <0x2>;
109c66ec88fSEmmanuel Vadot			#address-cells = <0x2>;
110c66ec88fSEmmanuel Vadot			compatible = "m25p80";
111c66ec88fSEmmanuel Vadot			reg = <0x0>;
112c66ec88fSEmmanuel Vadot			spi-max-frequency = <0x2625a00>;
113c66ec88fSEmmanuel Vadot			spi-cpol;
114c66ec88fSEmmanuel Vadot			spi-cpha;
115c66ec88fSEmmanuel Vadot			m25p,fast-read;
116c66ec88fSEmmanuel Vadot
117c66ec88fSEmmanuel Vadot			flash0.bolt@0 {
118c66ec88fSEmmanuel Vadot				reg = <0x0 0x0 0x0 0x100000>;
119c66ec88fSEmmanuel Vadot			};
120c66ec88fSEmmanuel Vadot
121c66ec88fSEmmanuel Vadot			flash0.macadr@100000 {
122c66ec88fSEmmanuel Vadot				reg = <0x0 0x100000 0x0 0x10000>;
123c66ec88fSEmmanuel Vadot			};
124c66ec88fSEmmanuel Vadot
125c66ec88fSEmmanuel Vadot			flash0.nvram@110000 {
126c66ec88fSEmmanuel Vadot				reg = <0x0 0x110000 0x0 0x10000>;
127c66ec88fSEmmanuel Vadot			};
128c66ec88fSEmmanuel Vadot
129c66ec88fSEmmanuel Vadot			flash0.kernel@120000 {
130c66ec88fSEmmanuel Vadot				reg = <0x0 0x120000 0x0 0x400000>;
131c66ec88fSEmmanuel Vadot			};
132c66ec88fSEmmanuel Vadot
133c66ec88fSEmmanuel Vadot			flash0.devtree@520000 {
134c66ec88fSEmmanuel Vadot				reg = <0x0 0x520000 0x0 0x10000>;
135c66ec88fSEmmanuel Vadot			};
136c66ec88fSEmmanuel Vadot
137c66ec88fSEmmanuel Vadot			flash0.splash@530000 {
138c66ec88fSEmmanuel Vadot				reg = <0x0 0x530000 0x0 0x80000>;
139c66ec88fSEmmanuel Vadot			};
140c66ec88fSEmmanuel Vadot
141c66ec88fSEmmanuel Vadot			flash0@0 {
142c66ec88fSEmmanuel Vadot				reg = <0x0 0x0 0x0 0x4000000>;
143c66ec88fSEmmanuel Vadot			};
144c66ec88fSEmmanuel Vadot		};
145c66ec88fSEmmanuel Vadot	};
146c66ec88fSEmmanuel Vadot
147c66ec88fSEmmanuel Vadot
148c66ec88fSEmmanuel Vadot    MSPI master for any SPI device :
149c66ec88fSEmmanuel Vadot
150c66ec88fSEmmanuel Vadot	spi@f0416000 {
151c66ec88fSEmmanuel Vadot		#address-cells = <1>;
152c66ec88fSEmmanuel Vadot		#size-cells = <0>;
153c66ec88fSEmmanuel Vadot		clocks = <&upg_fixed>;
154c66ec88fSEmmanuel Vadot		compatible = "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi";
155c66ec88fSEmmanuel Vadot		reg = <0xf0416000 0x180>;
156c66ec88fSEmmanuel Vadot		reg-names = "mspi";
157c66ec88fSEmmanuel Vadot		interrupts = <0x14>;
158c66ec88fSEmmanuel Vadot		interrupt-parent = <&irq0_aon_intc>;
159c66ec88fSEmmanuel Vadot		interrupt-names = "mspi_done";
160c66ec88fSEmmanuel Vadot	};
161c66ec88fSEmmanuel Vadot
162c66ec88fSEmmanuel VadotiProc SoC Example:
163c66ec88fSEmmanuel Vadot
164c66ec88fSEmmanuel Vadot    qspi: spi@18027200 {
165c66ec88fSEmmanuel Vadot	compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
166c66ec88fSEmmanuel Vadot	reg = <0x18027200 0x184>,
167c66ec88fSEmmanuel Vadot	      <0x18027000 0x124>,
168c66ec88fSEmmanuel Vadot	      <0x1811c408 0x004>,
169c66ec88fSEmmanuel Vadot	      <0x180273a0 0x01c>;
170c66ec88fSEmmanuel Vadot	reg-names = "mspi_regs", "bspi_regs", "intr_regs", "intr_status_reg";
171c66ec88fSEmmanuel Vadot	interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
172c66ec88fSEmmanuel Vadot		     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
173c66ec88fSEmmanuel Vadot		     <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
174c66ec88fSEmmanuel Vadot		     <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
175c66ec88fSEmmanuel Vadot		     <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
176c66ec88fSEmmanuel Vadot		     <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
177c66ec88fSEmmanuel Vadot		     <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
178c66ec88fSEmmanuel Vadot	interrupt-names =
179c66ec88fSEmmanuel Vadot		     "spi_lr_fullness_reached",
180c66ec88fSEmmanuel Vadot		     "spi_lr_session_aborted",
181c66ec88fSEmmanuel Vadot		     "spi_lr_impatient",
182c66ec88fSEmmanuel Vadot		     "spi_lr_session_done",
183c66ec88fSEmmanuel Vadot		     "mspi_done",
184c66ec88fSEmmanuel Vadot		     "mspi_halted";
185c66ec88fSEmmanuel Vadot	clocks = <&iprocmed>;
186c66ec88fSEmmanuel Vadot	clock-names = "iprocmed";
187c66ec88fSEmmanuel Vadot	num-cs = <2>;
188c66ec88fSEmmanuel Vadot	#address-cells = <1>;
189c66ec88fSEmmanuel Vadot	#size-cells = <0>;
190c66ec88fSEmmanuel Vadot    };
191c66ec88fSEmmanuel Vadot
192c66ec88fSEmmanuel Vadot
193c66ec88fSEmmanuel Vadot NS2 SoC Example:
194c66ec88fSEmmanuel Vadot
195c66ec88fSEmmanuel Vadot	       qspi: spi@66470200 {
196c66ec88fSEmmanuel Vadot		       compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi";
197c66ec88fSEmmanuel Vadot		       reg = <0x66470200 0x184>,
198c66ec88fSEmmanuel Vadot			     <0x66470000 0x124>,
199c66ec88fSEmmanuel Vadot			     <0x67017408 0x004>,
200c66ec88fSEmmanuel Vadot			     <0x664703a0 0x01c>;
201c66ec88fSEmmanuel Vadot		       reg-names = "mspi", "bspi", "intr_regs",
202c66ec88fSEmmanuel Vadot			"intr_status_reg";
203c66ec88fSEmmanuel Vadot		       interrupts = <GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH>;
204c66ec88fSEmmanuel Vadot		       interrupt-names = "spi_l1_intr";
205c66ec88fSEmmanuel Vadot			clocks = <&iprocmed>;
206c66ec88fSEmmanuel Vadot			clock-names = "iprocmed";
207c66ec88fSEmmanuel Vadot			num-cs = <2>;
208c66ec88fSEmmanuel Vadot			#address-cells = <1>;
209c66ec88fSEmmanuel Vadot			#size-cells = <0>;
210c66ec88fSEmmanuel Vadot	       };
211c66ec88fSEmmanuel Vadot
212c66ec88fSEmmanuel Vadot
213c66ec88fSEmmanuel Vadot m25p80 node for NSP, NS2
214c66ec88fSEmmanuel Vadot
215c66ec88fSEmmanuel Vadot	 &qspi {
216c66ec88fSEmmanuel Vadot		      flash: m25p80@0 {
217c66ec88fSEmmanuel Vadot		      #address-cells = <1>;
218c66ec88fSEmmanuel Vadot		      #size-cells = <1>;
219c66ec88fSEmmanuel Vadot		      compatible = "m25p80";
220c66ec88fSEmmanuel Vadot		      reg = <0x0>;
221c66ec88fSEmmanuel Vadot		      spi-max-frequency = <12500000>;
222c66ec88fSEmmanuel Vadot		      m25p,fast-read;
223c66ec88fSEmmanuel Vadot		      spi-cpol;
224c66ec88fSEmmanuel Vadot		      spi-cpha;
225c66ec88fSEmmanuel Vadot
226c66ec88fSEmmanuel Vadot		      partition@0 {
227c66ec88fSEmmanuel Vadot				  label = "boot";
228c66ec88fSEmmanuel Vadot				  reg = <0x00000000 0x000a0000>;
229c66ec88fSEmmanuel Vadot		      };
230c66ec88fSEmmanuel Vadot
231c66ec88fSEmmanuel Vadot		      partition@a0000 {
232c66ec88fSEmmanuel Vadot				  label = "env";
233c66ec88fSEmmanuel Vadot				  reg = <0x000a0000 0x00060000>;
234c66ec88fSEmmanuel Vadot		      };
235c66ec88fSEmmanuel Vadot
236c66ec88fSEmmanuel Vadot		      partition@100000 {
237c66ec88fSEmmanuel Vadot				  label = "system";
238c66ec88fSEmmanuel Vadot				  reg = <0x00100000 0x00600000>;
239c66ec88fSEmmanuel Vadot		      };
240c66ec88fSEmmanuel Vadot
241c66ec88fSEmmanuel Vadot		      partition@700000 {
242c66ec88fSEmmanuel Vadot				  label = "rootfs";
243c66ec88fSEmmanuel Vadot				  reg = <0x00700000 0x01900000>;
244c66ec88fSEmmanuel Vadot		      };
245c66ec88fSEmmanuel Vadot	};
246