1 // SPDX-License-Identifier: GPL-2.0-only
3 #include <linux/device.h>
4 #include <linux/init.h>
5 #include <linux/module.h>
6 #include <linux/mutex.h>
8 #include <linux/of_device.h>
9 #include <linux/platform_device.h>
10 #include <linux/slab.h>
11 #include <linux/mtd/mtd.h>
12 #include <linux/mtd/partitions.h>
13 #include <linux/mtd/spi-nor.h>
15 #include "rtl838x-spi.h"
16 #include <asm/mach-rtl838x/mach-rtl838x.h>
18 extern struct rtl838x_soc_info soc_info
;
23 volatile void __iomem
*base
;
30 static uint32_t spi_prep(struct rtl838x_nor
*rtl838x_nor
)
32 /* Needed because of MMU constraints */
34 spi_w32w(SPI_CS_INIT
, SFCSR
); //deactivate CS0, CS1
35 spi_w32w(0, SFCSR
); //activate CS0,CS1
36 spi_w32w(SPI_CS_INIT
, SFCSR
); //deactivate CS0, CS1
38 return (CS0
& rtl838x_nor
->flags
) ? (SPI_eCS0
& SPI_LEN_INIT
)
39 : ((SPI_eCS1
& SPI_LEN_INIT
) | SFCSR_CHIP_SEL
);
42 static uint32_t rtl838x_nor_get_SR(struct rtl838x_nor
*rtl838x_nor
)
46 sfcsr
= spi_prep(rtl838x_nor
);
47 sfdr
= (SPINOR_OP_RDSR
)<<24;
49 pr_debug("%s: rdid,sfcsr_val = %.8x,SFDR = %.8x\n", __func__
, sfcsr
, sfdr
);
50 pr_debug("rdid,sfcsr = %.8x\n", sfcsr
| SPI_LEN4
);
51 spi_w32w(sfcsr
, SFCSR
);
53 spi_w32_mask(0, SPI_LEN4
, SFCSR
);
59 static void spi_write_disable(struct rtl838x_nor
*rtl838x_nor
)
63 sfcsr
= spi_prep(rtl838x_nor
);
64 sfdr
= (SPINOR_OP_WRDI
) << 24;
65 spi_w32w(sfcsr
, SFCSR
);
67 pr_debug("%s: sfcsr_val = %.8x,SFDR = %.8x", __func__
, sfcsr
, sfdr
);
69 spi_prep(rtl838x_nor
);
72 static void spi_write_enable(struct rtl838x_nor
*rtl838x_nor
)
76 sfcsr
= spi_prep(rtl838x_nor
);
77 sfdr
= (SPINOR_OP_WREN
) << 24;
78 spi_w32w(sfcsr
, SFCSR
);
80 pr_debug("%s: sfcsr_val = %.8x,SFDR = %.8x", __func__
, sfcsr
, sfdr
);
82 spi_prep(rtl838x_nor
);
85 static void spi_4b_set(struct rtl838x_nor
*rtl838x_nor
, bool enable
)
89 sfcsr
= spi_prep(rtl838x_nor
);
91 sfdr
= (SPINOR_OP_EN4B
) << 24;
93 sfdr
= (SPINOR_OP_EX4B
) << 24;
95 spi_w32w(sfcsr
, SFCSR
);
97 pr_debug("%s: sfcsr_val = %.8x,SFDR = %.8x", __func__
, sfcsr
, sfdr
);
99 spi_prep(rtl838x_nor
);
102 static int rtl838x_get_addr_mode(struct rtl838x_nor
*rtl838x_nor
)
107 sw_w32(0x3, RTL838X_INT_RW_CTRL
);
108 if (!sw_r32(RTL838X_EXT_VERSION
)) {
109 if (sw_r32(RTL838X_STRAP_DBG
) & (1 << 29))
112 reg
= sw_r32(RTL838X_PLL_CML_CTRL
);
113 if ((reg
& (1 << 30)) && (reg
& (1 << 31)))
115 if ((!(reg
& (1 << 30)))
116 && sw_r32(RTL838X_STRAP_DBG
) & (1 << 29))
119 sw_w32(0x0, RTL838X_INT_RW_CTRL
);
123 static int rtl8390_get_addr_mode(struct rtl838x_nor
*rtl838x_nor
)
125 if (spi_r32(RTL8390_SOC_SPI_MMIO_CONF
) & (1 << 9))
130 ssize_t
rtl838x_do_read(struct rtl838x_nor
*rtl838x_nor
, loff_t from
,
131 size_t length
, u_char
*buffer
, uint8_t command
)
133 uint32_t sfcsr
, sfdr
;
134 uint32_t len
= length
;
136 sfcsr
= spi_prep(rtl838x_nor
);
137 sfdr
= command
<< 24;
139 /* Perform SPINOR_OP_READ: 1 byte command & 3 byte addr*/
143 spi_w32w(sfcsr
, SFCSR
);
144 spi_w32w(sfdr
, SFDR
);
146 /* Read Data, 4 bytes at a time */
147 while (length
>= 4) {
149 *((uint32_t *) buffer
) = spi_r32(SFDR
);
150 /* printk("%.8x ", *((uint32_t*) buffer)); */
155 /* The rest needs to be read 1 byte a time */
156 sfcsr
&= SPI_LEN_INIT
|SPI_LEN1
;
158 spi_w32w(sfcsr
, SFCSR
);
161 *(buffer
) = spi_r32(SFDR
) >> 24;
162 /* printk("%.2x ", *(buffer)); */
170 * Do fast read in 3 or 4 Byte addressing mode
172 static ssize_t
rtl838x_do_4bf_read(struct rtl838x_nor
*rtl838x_nor
, loff_t from
,
173 size_t length
, u_char
*buffer
, uint8_t command
)
175 int sfcsr_addr_len
= rtl838x_nor
->fourByteMode
? 0x3 : 0x2;
176 int sfdr_addr_shift
= rtl838x_nor
->fourByteMode
? 0 : 8;
178 uint32_t len
= length
;
180 pr_debug("Fast read from %llx, len %x, shift %d\n",
181 from
, sfcsr_addr_len
, sfdr_addr_shift
);
182 sfcsr
= spi_prep(rtl838x_nor
);
184 /* Send read command */
185 spi_w32w(sfcsr
| SPI_LEN1
, SFCSR
);
186 spi_w32w(command
<< 24, SFDR
);
189 spi_w32w(sfcsr
| (sfcsr_addr_len
<< 28), SFCSR
);
190 spi_w32w(from
<< sfdr_addr_shift
, SFDR
);
193 spi_w32w(sfcsr
| SPI_LEN1
, SFCSR
);
197 spi_w32w(sfcsr
| SPI_LEN4
, SFCSR
);
199 /* Read Data, 4 bytes at a time */
200 while (length
>= 4) {
202 *((uint32_t *) buffer
) = spi_r32(SFDR
);
203 /* printk("%.8x ", *((uint32_t*) buffer)); */
208 /* The rest needs to be read 1 byte a time */
209 sfcsr
&= SPI_LEN_INIT
|SPI_LEN1
;
211 spi_w32w(sfcsr
, SFCSR
);
214 *(buffer
) = spi_r32(SFDR
) >> 24;
215 /* printk("%.2x ", *(buffer)); */
224 * Do write (Page Programming) in 3 or 4 Byte addressing mode
226 static ssize_t
rtl838x_do_4b_write(struct rtl838x_nor
*rtl838x_nor
, loff_t to
,
227 size_t length
, const u_char
*buffer
,
230 int sfcsr_addr_len
= rtl838x_nor
->fourByteMode
? 0x3 : 0x2;
231 int sfdr_addr_shift
= rtl838x_nor
->fourByteMode
? 0 : 8;
233 uint32_t len
= length
;
235 pr_debug("Write to %llx, len %x, shift %d\n",
236 to
, sfcsr_addr_len
, sfdr_addr_shift
);
237 sfcsr
= spi_prep(rtl838x_nor
);
239 /* Send write command, command IO-width is 1 (bit 25/26) */
240 spi_w32w(sfcsr
| SPI_LEN1
| (0 << 25), SFCSR
);
241 spi_w32w(command
<< 24, SFDR
);
244 spi_w32w(sfcsr
| (sfcsr_addr_len
<< 28) | (0 << 25), SFCSR
);
245 spi_w32w(to
<< sfdr_addr_shift
, SFDR
);
247 /* Write Data, 1 byte at a time, if we are not 4-byte aligned */
248 if (((long)buffer
) % 4) {
249 spi_w32w(sfcsr
| SPI_LEN1
, SFCSR
);
250 while (length
> 0 && (((long)buffer
) % 4)) {
252 spi_w32(*(buffer
) << 24, SFDR
);
258 /* Now we can write 4 bytes at a time */
260 spi_w32w(sfcsr
| SPI_LEN4
, SFCSR
);
261 while (length
>= 4) {
263 spi_w32(*((uint32_t *)buffer
), SFDR
);
268 /* Final bytes might need to be written 1 byte at a time, again */
270 spi_w32w(sfcsr
| SPI_LEN1
, SFCSR
);
273 spi_w32(*(buffer
) << 24, SFDR
);
280 static ssize_t
rtl838x_nor_write(struct spi_nor
*nor
, loff_t to
, size_t len
,
281 const u_char
*buffer
)
285 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
287 uint8_t cmd
= SPINOR_OP_PP
;
289 /* Do write in 4-byte mode on large Macronix chips */
290 if (rtl838x_nor
->fourByteMode
) {
291 cmd
= SPINOR_OP_PP_4B
;
292 spi_4b_set(rtl838x_nor
, true);
295 pr_debug("In %s %8x to: %llx\n", __func__
,
296 (unsigned int) rtl838x_nor
, to
);
298 while (l
>= SPI_MAX_TRANSFER_SIZE
) {
300 (rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WIP
);
302 spi_write_enable(rtl838x_nor
);
303 } while (!(rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WEL
));
304 ret
= rtl838x_do_4b_write(rtl838x_nor
, to
+ offset
,
305 SPI_MAX_TRANSFER_SIZE
, buffer
+offset
, cmd
);
306 l
-= SPI_MAX_TRANSFER_SIZE
;
307 offset
+= SPI_MAX_TRANSFER_SIZE
;
312 (rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WIP
);
314 spi_write_enable(rtl838x_nor
);
315 } while (!(rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WEL
));
316 ret
= rtl838x_do_4b_write(rtl838x_nor
, to
+offset
,
317 len
, buffer
+offset
, cmd
);
323 static ssize_t
rtl838x_nor_read(struct spi_nor
*nor
, loff_t from
,
324 size_t length
, u_char
*buffer
)
327 uint8_t cmd
= SPINOR_OP_READ_FAST
;
329 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
331 /* Do fast read in 3, or 4-byte mode on large Macronix chips */
332 if (rtl838x_nor
->fourByteMode
) {
333 cmd
= SPINOR_OP_READ_FAST_4B
;
334 spi_4b_set(rtl838x_nor
, true);
337 /* TODO: do timeout and return error */
338 pr_debug("Waiting for pending writes\n");
340 (rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WIP
);
342 spi_write_enable(rtl838x_nor
);
343 } while (!(rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WEL
));
345 pr_debug("cmd is %d\n", cmd
);
346 pr_debug("%s: addr %.8llx to addr %.8x, cmd %.8x, size %d\n", __func__
,
347 from
, (u32
)buffer
, (u32
)cmd
, length
);
349 while (l
>= SPI_MAX_TRANSFER_SIZE
) {
350 rtl838x_do_4bf_read(rtl838x_nor
, from
+ offset
,
351 SPI_MAX_TRANSFER_SIZE
, buffer
+offset
, cmd
);
352 l
-= SPI_MAX_TRANSFER_SIZE
;
353 offset
+= SPI_MAX_TRANSFER_SIZE
;
357 rtl838x_do_4bf_read(rtl838x_nor
, from
+ offset
, l
, buffer
+offset
, cmd
);
362 static int rtl838x_erase(struct spi_nor
*nor
, loff_t offs
)
364 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
365 int sfcsr_addr_len
= rtl838x_nor
->fourByteMode
? 0x3 : 0x2;
366 int sfdr_addr_shift
= rtl838x_nor
->fourByteMode
? 0 : 8;
368 uint8_t cmd
= SPINOR_OP_SE
;
370 pr_debug("Erasing sector at %llx\n", offs
);
372 /* Do erase in 4-byte mode on large Macronix chips */
373 if (rtl838x_nor
->fourByteMode
) {
374 cmd
= SPINOR_OP_SE_4B
;
375 spi_4b_set(rtl838x_nor
, true);
377 /* TODO: do timeout and return error */
379 (rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WIP
);
381 spi_write_enable(rtl838x_nor
);
382 } while (!(rtl838x_nor_get_SR(rtl838x_nor
) & SPI_WEL
));
384 sfcsr
= spi_prep(rtl838x_nor
);
386 /* Send erase command, command IO-width is 1 (bit 25/26) */
387 spi_w32w(sfcsr
| SPI_LEN1
| (0 << 25), SFCSR
);
388 spi_w32w(cmd
<< 24, SFDR
);
391 spi_w32w(sfcsr
| (sfcsr_addr_len
<< 28) | (0 << 25), SFCSR
);
392 spi_w32w(offs
<< sfdr_addr_shift
, SFDR
);
397 static int rtl838x_nor_read_reg(struct spi_nor
*nor
, u8 opcode
, u8
*buf
, int len
)
401 uint32_t sfcsr
, sfdr
;
402 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
404 pr_debug("In %s: opcode %x, len %x\n", __func__
, opcode
, len
);
406 sfcsr
= spi_prep(rtl838x_nor
);
411 spi_w32w(sfcsr
, SFCSR
);
412 spi_w32w(sfdr
, SFDR
);
416 *(buffer
) = spi_r32(SFDR
) >> 24;
424 static int rtl838x_nor_write_reg(struct spi_nor
*nor
, u8 opcode
, u8
*buf
, int len
)
426 uint32_t sfcsr
, sfdr
;
427 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
429 pr_debug("In %s, opcode %x, len %x\n", __func__
, opcode
, len
);
430 sfcsr
= spi_prep(rtl838x_nor
);
433 if (len
== 1) { /* SPINOR_OP_WRSR */
437 spi_w32w(sfcsr
, SFCSR
);
438 spi_w32w(sfdr
, SFDR
);
442 static int spi_enter_sio(struct spi_nor
*nor
)
444 uint32_t sfcsr
, sfcr2
, sfdr
;
445 uint32_t ret
= 0, reg
= 0, size_bits
;
446 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
448 pr_debug("In %s\n", __func__
);
449 rtl838x_nor
->io_status
= 0;
450 sfdr
= SPI_C_RSTQIO
<< 24;
451 sfcsr
= spi_prep(rtl838x_nor
);
453 reg
= spi_r32(SFCR2
);
454 pr_debug("SFCR2: %x, size %x, rdopt: %x\n", reg
, SFCR2_GETSIZE(reg
),
455 (reg
& SFCR2_RDOPT
));
456 size_bits
= rtl838x_nor
->fourByteMode
? SFCR2_SIZE(0x6) : SFCR2_SIZE(0x7);
458 sfcr2
= SFCR2_HOLD_TILL_SFDR2
| size_bits
459 | (reg
& SFCR2_RDOPT
) | SFCR2_CMDIO(0)
460 | SFCR2_ADDRIO(0) | SFCR2_DUMMYCYCLE(4)
461 | SFCR2_DATAIO(0) | SFCR2_SFCMD(SPINOR_OP_READ_FAST
);
462 pr_debug("SFCR2: %x, size %x\n", reg
, SFCR2_GETSIZE(reg
));
465 spi_w32w(sfcr2
, SFCR2
);
466 spi_w32w(sfcsr
, SFCSR
);
467 spi_w32w(sfdr
, SFDR
);
469 spi_w32_mask(SFCR2_HOLD_TILL_SFDR2
, 0, SFCR2
);
470 rtl838x_nor
->io_status
&= ~IOSTATUS_CIO_MASK
;
471 rtl838x_nor
->io_status
|= CIO1
;
473 spi_prep(rtl838x_nor
);
478 int rtl838x_spi_nor_scan(struct spi_nor
*nor
, const char *name
)
480 static const struct spi_nor_hwcaps hwcaps
= {
481 .mask
= SNOR_HWCAPS_READ
| SNOR_HWCAPS_PP
482 | SNOR_HWCAPS_READ_FAST
485 struct rtl838x_nor
*rtl838x_nor
= nor
->priv
;
487 pr_debug("In %s\n", __func__
);
489 spi_w32_mask(0, SFCR_EnableWBO
, SFCR
);
490 spi_w32_mask(0, SFCR_EnableRBO
, SFCR
);
492 rtl838x_nor
->flags
= CS0
| R_MODE
;
494 spi_nor_scan(nor
, NULL
, &hwcaps
);
495 pr_debug("------------- Got size: %llx\n", nor
->mtd
.size
);
500 int rtl838x_nor_init(struct rtl838x_nor
*rtl838x_nor
,
501 struct device_node
*flash_node
)
506 pr_info("%s called\n", __func__
);
507 nor
= &rtl838x_nor
->nor
;
508 nor
->dev
= rtl838x_nor
->dev
;
509 nor
->priv
= rtl838x_nor
;
510 spi_nor_set_flash_node(nor
, flash_node
);
512 nor
->read_reg
= rtl838x_nor_read_reg
;
513 nor
->write_reg
= rtl838x_nor_write_reg
;
514 nor
->read
= rtl838x_nor_read
;
515 nor
->write
= rtl838x_nor_write
;
516 nor
->erase
= rtl838x_erase
;
517 nor
->mtd
.name
= "rtl838x_nor";
518 nor
->erase_opcode
= rtl838x_nor
->fourByteMode
? SPINOR_OP_SE_4B
520 /* initialized with NULL */
521 ret
= rtl838x_spi_nor_scan(nor
, NULL
);
526 spi_write_disable(rtl838x_nor
);
528 ret
= mtd_device_parse_register(&nor
->mtd
, NULL
, NULL
, NULL
, 0);
532 static int rtl838x_nor_drv_probe(struct platform_device
*pdev
)
534 struct device_node
*flash_np
;
535 struct resource
*res
;
537 struct rtl838x_nor
*rtl838x_nor
;
540 pr_info("Initializing rtl838x_nor_driver\n");
541 if (!pdev
->dev
.of_node
) {
542 dev_err(&pdev
->dev
, "No DT found\n");
546 rtl838x_nor
= devm_kzalloc(&pdev
->dev
, sizeof(*rtl838x_nor
), GFP_KERNEL
);
549 platform_set_drvdata(pdev
, rtl838x_nor
);
551 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
552 rtl838x_nor
->base
= devm_ioremap_resource(&pdev
->dev
, res
);
553 if (IS_ERR((void *)rtl838x_nor
->base
))
554 return PTR_ERR((void *)rtl838x_nor
->base
);
556 pr_info("SPI resource base is %08x\n", (u32
)rtl838x_nor
->base
);
557 rtl838x_nor
->dev
= &pdev
->dev
;
559 /* only support one attached flash */
560 flash_np
= of_get_next_available_child(pdev
->dev
.of_node
, NULL
);
562 dev_err(&pdev
->dev
, "no SPI flash device to configure\n");
567 /* Get the 3/4 byte address mode as configure by bootloader */
568 if (soc_info
.family
== RTL8390_FAMILY_ID
)
569 addrMode
= rtl8390_get_addr_mode(rtl838x_nor
);
571 addrMode
= rtl838x_get_addr_mode(rtl838x_nor
);
572 pr_info("Address mode is %d bytes\n", addrMode
);
574 rtl838x_nor
->fourByteMode
= true;
576 ret
= rtl838x_nor_init(rtl838x_nor
, flash_np
);
582 static int rtl838x_nor_drv_remove(struct platform_device
*pdev
)
584 /* struct rtl8xx_nor *rtl838x_nor = platform_get_drvdata(pdev); */
588 static const struct of_device_id rtl838x_nor_of_ids
[] = {
589 { .compatible
= "realtek,rtl838x-nor"},
592 MODULE_DEVICE_TABLE(of
, rtl838x_nor_of_ids
);
594 static struct platform_driver rtl838x_nor_driver
= {
595 .probe
= rtl838x_nor_drv_probe
,
596 .remove
= rtl838x_nor_drv_remove
,
598 .name
= "rtl838x-nor",
600 .of_match_table
= rtl838x_nor_of_ids
,
604 module_platform_driver(rtl838x_nor_driver
);
606 MODULE_LICENSE("GPL v2");
607 MODULE_DESCRIPTION("RTL838x SPI NOR Flash Driver");