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