1 From 76c457e7e2920342637b1955fbaadf2aae282f05 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.com>
3 Date: Fri, 23 Jun 2023 09:48:59 +0100
4 Subject: [PATCH] overlays: jedec-spi-nor: Add speed parameter
6 Add a speed parameter to the jedec-spi-nor overlay to allow much
7 faster accesses, taking the opportunity to simplify the internals.
9 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
11 arch/arm/boot/dts/overlays/README | 8 +-
12 .../dts/overlays/jedec-spi-nor-overlay.dts | 245 +++---------------
13 2 files changed, 41 insertions(+), 212 deletions(-)
15 --- a/arch/arm/boot/dts/overlays/README
16 +++ b/arch/arm/boot/dts/overlays/README
17 @@ -2557,9 +2557,11 @@ Name: jedec-spi-nor
18 Info: Adds support for JEDEC-compliant SPI NOR flash devices. (Note: The
19 "jedec,spi-nor" kernel driver was formerly known as "m25p80".)
20 Load: dtoverlay=jedec-spi-nor,<param>=<val>
21 -Params: flash-spi<n>-<m> Enables flash device on SPI<n>, CS#<m>.
22 - flash-fastr-spi<n>-<m> Enables flash device with fast read capability
24 +Params: spi<n>-<m> Enable flash device on SPI<n>, CS#<m>
25 + fastr Add fast read capability to the flash device
26 + speed Maximum SPI frequency (Hz)
27 + flash-spi<n>-<m> Same as spi<n>-<m> (deprecated)
28 + flash-fastr-spi<n>-<m> Same as spi<n>->m>,fastr (deprecated)
32 --- a/arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts
33 +++ b/arch/arm/boot/dts/overlays/jedec-spi-nor-overlay.dts
36 // flash-spi<n>-<m> - Enables flash device on SPI<n>, CS#<m>.
37 // flash-fastr-spi<n>-<m> - Enables flash device with fast read capability on SPI<n>, CS#<m>.
38 +// speed - Set the SPI clock speed in Hz
40 // If devices are present on SPI1 or SPI2, those interfaces must be enabled with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
46 - // enable flash on spi0.0
47 + // Enable fast read for device
48 + // Use default active low interrupt signalling.
51 + target = <&spi_nor>;
54 - #address-cells = <1>;
56 - spi_nor_00: spi_nor@0 {
57 - #address-cells = <1>;
59 - compatible = "jedec,spi-nor";
61 - spi-max-frequency = <500000>;
67 - // enable flash on spi0.1
69 + payload: fragment@100 {
74 - #address-cells = <1>;
76 - spi_nor_01: spi_nor@1 {
77 - #address-cells = <1>;
79 - compatible = "jedec,spi-nor";
81 - spi-max-frequency = <500000>;
85 + #address-cells = <1>;
88 - // enable flash on spi1.0
93 - #address-cells = <1>;
95 - spi_nor_10: spi_nor@0 {
96 - #address-cells = <1>;
98 + spi_nor: spi_nor@0 {
99 compatible = "jedec,spi-nor";
101 spi-max-frequency = <500000>;
102 @@ -130,180 +104,33 @@
106 - // enable flash on spi1.1
111 - #address-cells = <1>;
113 - spi_nor_11: spi_nor@1 {
114 - #address-cells = <1>;
116 - compatible = "jedec,spi-nor";
118 - spi-max-frequency = <500000>;
123 - // enable flash on spi1.2
128 - #address-cells = <1>;
130 - spi_nor_12: spi_nor@2 {
131 - #address-cells = <1>;
133 - compatible = "jedec,spi-nor";
135 - spi-max-frequency = <500000>;
140 - // enable flash on spi2.0
145 - #address-cells = <1>;
147 - spi_nor_20: spi_nor@0 {
148 - #address-cells = <1>;
150 - compatible = "jedec,spi-nor";
152 - spi-max-frequency = <500000>;
157 - // enable flash on spi2.1
162 - #address-cells = <1>;
164 - spi_nor_21: spi_nor@1 {
165 - #address-cells = <1>;
167 - compatible = "jedec,spi-nor";
169 - spi-max-frequency = <500000>;
174 - // enable flash on spi2.2
179 - #address-cells = <1>;
181 - spi_nor_22: spi_nor@2 {
182 - #address-cells = <1>;
184 - compatible = "jedec,spi-nor";
186 - spi-max-frequency = <500000>;
191 - // Enable fast read for device on spi0.0.
192 - // Use default active low interrupt signalling.
194 - target = <&spi_nor_00>;
200 - // Enable fast read for device on spi0.1.
201 - // Use default active low interrupt signalling.
203 - target = <&spi_nor_01>;
209 - // Enable fast read for device on spi1.0.
210 - // Use default active low interrupt signalling.
212 - target = <&spi_nor_10>;
218 - // Enable fast read for device on spi1.1.
219 - // Use default active low interrupt signalling.
221 - target = <&spi_nor_11>;
227 - // Enable fast read for device on spi1.2.
228 - // Use default active low interrupt signalling.
230 - target = <&spi_nor_12>;
236 - // Enable fast read for device on spi2.0.
237 - // Use default active low interrupt signalling.
239 - target = <&spi_nor_20>;
245 - // Enable fast read for device on spi2.1.
246 - // Use default active low interrupt signalling.
248 - target = <&spi_nor_21>;
254 - // Enable fast read for device on spi2.2.
255 - // Use default active low interrupt signalling.
257 - target = <&spi_nor_22>;
264 - flash-spi0-0 = <0>,"+0+8";
265 - flash-spi0-1 = <0>,"+1+9";
266 - flash-spi1-0 = <0>,"+2+10";
267 - flash-spi1-1 = <0>,"+3+11";
268 - flash-spi1-2 = <0>,"+4+12";
269 - flash-spi2-0 = <0>,"+5+13";
270 - flash-spi2-1 = <0>,"+6+14";
271 - flash-spi2-2 = <0>,"+7+15";
272 - flash-fastr-spi0-0 = <0>,"+0+8+16";
273 - flash-fastr-spi0-1 = <0>,"+1+9+17";
274 - flash-fastr-spi1-0 = <0>,"+2+10+18";
275 - flash-fastr-spi1-1 = <0>,"+3+11+19";
276 - flash-fastr-spi1-2 = <0>,"+4+12+20";
277 - flash-fastr-spi2-0 = <0>,"+5+13+21";
278 - flash-fastr-spi2-1 = <0>,"+6+14+22";
279 - flash-fastr-spi2-2 = <0>,"+7+15+23";
280 + spi0-0 = <0>,"+0", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=0";
281 + spi0-1 = <0>,"+1", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=1";
282 + spi1-0 = <0>,"+2", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=0";
283 + spi1-1 = <0>,"+3", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=1";
284 + spi1-2 = <0>,"+4", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=2";
285 + spi2-0 = <0>,"+5", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=0";
286 + spi2-1 = <0>,"+6", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=1";
287 + spi2-2 = <0>,"+7", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=2";
288 + flash-spi0-0 = <0>,"+0", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=0";
289 + flash-spi0-1 = <0>,"+1", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=1";
290 + flash-spi1-0 = <0>,"+2", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=0";
291 + flash-spi1-1 = <0>,"+3", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=1";
292 + flash-spi1-2 = <0>,"+4", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=2";
293 + flash-spi2-0 = <0>,"+5", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=0";
294 + flash-spi2-1 = <0>,"+6", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=1";
295 + flash-spi2-2 = <0>,"+7", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=2";
296 + flash-fastr-spi0-0 = <0>,"+0+8", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=0";
297 + flash-fastr-spi0-1 = <0>,"+1+8", <&payload>,"target:0=",<&spi0>, <&spi_nor>,"reg:0=1";
298 + flash-fastr-spi1-0 = <0>,"+2+8", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=0";
299 + flash-fastr-spi1-1 = <0>,"+3+8", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=1";
300 + flash-fastr-spi1-2 = <0>,"+4+8", <&payload>,"target:0=",<&spi1>, <&spi_nor>,"reg:0=2";
301 + flash-fastr-spi2-0 = <0>,"+5+8", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=0";
302 + flash-fastr-spi2-1 = <0>,"+6+8", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=1";
303 + flash-fastr-spi2-2 = <0>,"+7+8", <&payload>,"target:0=",<&spi2>, <&spi_nor>,"reg:0=2";
305 + speed = <&spi_nor>, "spi-max-frequency:0";