SemiDrive SSDK Appication Program Interface PTG3.0
sdrv_spi_nor.h
Go to the documentation of this file.
1
9#ifndef SDRV_SPI_NOR_H_
10#define SDRV_SPI_NOR_H_
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16#include <stdbool.h>
17#include <types.h>
18#include <sdrv_ckgen.h>
19#include <sdrv_common.h>
20
21#undef BIT
22#define BIT(nr) (1u << (nr))
23
24#define SNOR_READID_DUMMY_LSB (24u)
25#define SNOR_OPCODE_PROTO_LSB (24u)
26#define SNOR_DTR_PROTO BIT(16)
27
28#define SNOR_INST_LANS_PROTO_LSB (8u)
29#define SNOR_INST_LANS_PROTO_MASK (0xFu)
30#define SNOR_INST_SINGLE_LANS (0u << SNOR_INST_LANS_PROTO_LSB)
31#define SNOR_INST_DUAL_LANS (1u << SNOR_INST_LANS_PROTO_LSB)
32#define SNOR_INST_QUAD_LANS (2u << SNOR_INST_LANS_PROTO_LSB)
33#define SNOR_INST_OCTAL_LANS (3u << SNOR_INST_LANS_PROTO_LSB)
34#define SNOR_INST_LANS(x) (((x) >> SNOR_INST_LANS_PROTO_LSB) & \
35 (SNOR_INST_LANS_PROTO_MASK))
36
37#define SNOR_ADDR_LANS_PROTO_LSB (4u)
38#define SNOR_ADDR_LANS_PROTO_MASK (0xFu)
39#define SNOR_ADDR_SINGLE_LANS (0u << SNOR_ADDR_LANS_PROTO_LSB)
40#define SNOR_ADDR_DUAL_LANS (1u << SNOR_ADDR_LANS_PROTO_LSB)
41#define SNOR_ADDR_QUAD_LANS (2u << SNOR_ADDR_LANS_PROTO_LSB)
42#define SNOR_ADDR_OCTAL_LANS (3u << SNOR_ADDR_LANS_PROTO_LSB)
43#define SNOR_ADDR_LANS(x) (((x) >> SNOR_ADDR_LANS_PROTO_LSB) & \
44 (SNOR_ADDR_LANS_PROTO_MASK))
45
46
47#define SNOR_DATA_LANS_PROTO_LSB (0u)
48#define SNOR_DATA_LANS_PROTO_MASK (0xFu)
49#define SNOR_DATA_SINGLE_LANS (0u << SNOR_DATA_LANS_PROTO_LSB)
50#define SNOR_DATA_DUAL_LANS (1u << SNOR_DATA_LANS_PROTO_LSB)
51#define SNOR_DATA_QUAD_LANS (2u << SNOR_DATA_LANS_PROTO_LSB)
52#define SNOR_DATA_OCTAL_LANS (3u << SNOR_DATA_LANS_PROTO_LSB)
53#define SNOR_DATA_LANS(x) (((x) >> SNOR_DATA_LANS_PROTO_LSB) & \
54 (SNOR_DATA_LANS_PROTO_MASK))
55
56#define SNOR_PROTO_1_1_1 \
57 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_SINGLE_LANS | SNOR_DATA_SINGLE_LANS)
58#define SNOR_PROTO_1_1_2 \
59 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_SINGLE_LANS | SNOR_DATA_DUAL_LANS)
60#define SNOR_PROTO_1_1_4 \
61 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_SINGLE_LANS | SNOR_DATA_QUAD_LANS)
62#define SNOR_PROTO_1_1_8 \
63 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_SINGLE_LANS | SNOR_DATA_OCTAL_LANS)
64#define SNOR_PROTO_1_2_2 \
65 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_DUAL_LANS | SNOR_DATA_DUAL_LANS)
66#define SNOR_PROTO_1_4_4 \
67 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_QUAD_LANS | SNOR_DATA_QUAD_LANS)
68#define SNOR_PROTO_1_8_8 \
69 (SNOR_INST_SINGLE_LANS | SNOR_ADDR_OCTAL_LANS | SNOR_DATA_OCTAL_LANS)
70#define SNOR_PROTO_2_2_2 \
71 (SNOR_INST_DUAL_LANS | SNOR_ADDR_DUAL_LANS | SNOR_DATA_DUAL_LANS)
72#define SNOR_PROTO_4_4_4 \
73 (SNOR_INST_QUAD_LANS | SNOR_ADDR_QUAD_LANS | SNOR_DATA_QUAD_LANS)
74#define SNOR_PROTO_8_8_8 \
75 (SNOR_INST_OCTAL_LANS | SNOR_ADDR_OCTAL_LANS | SNOR_DATA_OCTAL_LANS)
76#define SNOR_PROTO_1_1_1_DTR (SNOR_PROTO_1_1_1 | SNOR_DTR_PROTO)
77#define SNOR_PROTO_1_2_2_DTR (SNOR_PROTO_1_2_2 | SNOR_DTR_PROTO)
78#define SNOR_PROTO_1_4_4_DTR (SNOR_PROTO_1_4_4 | SNOR_DTR_PROTO)
79#define SNOR_PROTO_4_4_4_DTR (SNOR_PROTO_4_4_4 | SNOR_DTR_PROTO)
80#define SNOR_PROTO_1_1_8_DTR (SNOR_PROTO_1_1_8 | SNOR_DTR_PROTO)
81#define SNOR_PROTO_1_8_8_DTR (SNOR_PROTO_1_8_8 | SNOR_DTR_PROTO)
82#define SNOR_PROTO_8_8_8_DTR (SNOR_PROTO_8_8_8 | SNOR_DTR_PROTO)
83
84#define SNOR_PROTO_DTR_MASK 0x1ffffu
85#define SNOR_PROTO_MASK 0xffffu
86#define SNOR_PROTO_DTR(x) ((x) & SNOR_PROTO_DTR_MASK)
87#define SNOR_PROTO(x) ((x) & SNOR_PROTO_MASK)
88
89#define SPI_NOR_MAX_ID_LEN 6
90
91#define SECTOR_4K_POST (12)
92#define SECTOR_32K_POST (15)
93#define SECTOR_64K_POST (16)
94#define SECTOR_128K_POST (17)
95#define SECTOR_256K_POST (18)
96#define SECTOR_POST_TO_SIZE(n) (1U << (n))
97
98#define SPINOR_SECTOR_4K_SIZE (0x1000)
99#define SPINOR_SECTOR_32K_SIZE (0x8000)
100#define SPINOR_SECTOR_64K_SIZE (0x10000)
101#define SPINOR_SECTOR_128K_SIZE (0x20000)
102#define SPINOR_SECTOR_256K_SIZE (0x40000)
103
104#define SWITCH_DEVICE_MAX_NUM (4u)
105
106typedef enum {
114#define SECTOR_TYPE_TO_POST(type) ((type) ? (14 + (type)) : 12)
115#define SECTOR_TYPE_TO_SIZE(type) SECTOR_POST_TO_SIZE(SECTOR_TYPE_TO_POST(type))
116
120typedef uint64_t flash_addr_t;
121typedef uint64_t flash_size_t;
122
132};
133
144};
145
153 uint8_t *buf;
155};
156
160typedef void (*flash_notification)(enum flash_opt type,
161 enum flash_opt_result result);
162
170};
171
179};
180
185 uint8_t id;
186 addr_t apb_base;
187 addr_t direct_base;
188 unsigned int irq;
189 unsigned long ref_clk;
190 bool xip_mode;
191};
192
197 uint8_t id;
198 addr_t apb_base;
199 addr_t direct_base;
200 unsigned int irq;
201 unsigned long ref_clk_hz;
203 unsigned int sclk;
205 uint32_t dma_burst_size;
207 uint8_t current_cs;
208 bool dqs_en;
209 uint8_t fifo_depth;
210 uint8_t fifo_width;
212};
213
214struct spi_nor;
215
219typedef enum {
220 SPI_NOR_COMMON = 0, // ret = OK
227
231typedef enum {
242
246typedef enum {
249
250#define SPI_NOR_OK_STATUS SDRV_STATUS_OK
251#define SPI_NOR_ERR_CODE(g, c) (((((g) & 0xF) << 5) | ((c) & 0x1F)) * !!(c))
252#define SPI_NOR_ERR_STATUS(g, c) (int)(SDRV_ERROR_STATUS(SDRV_STATUS_GROUP_XSPI, SPI_NOR_ERR_CODE((g), (c))) * !!(c))
253
261};
262
270};
271
279};
280
291};
292
297 uint8_t opcode;
298 uint8_t inst_type;
299 uint8_t dummy;
300 uint8_t addr_bytes;
301};
302
307 uint16_t addr;
308 uint16_t data;
309};
310
315 char *name;
316 bool is_read;
317 uint32_t num;
318 struct hyperbus_ca ca[7];
319};
320
330};
331
340};
341
346 uint8_t id;
347 uint8_t cs;
348 uint32_t baudrate;
354 bool sw_rst;
355 uint32_t force_size;
356};
357
359 uint32_t erase_proto;
360 uint32_t erase_size; // in bytes
361 uint32_t post;
362};
363
366 const struct spi_nor_erase_map *map;
367};
368
373 const char *name;
376 uint32_t read_proto;
377 uint32_t write_proto;
378 uint32_t erase_proto;
381 uint8_t read_dummy;
382 uint8_t write_dummy;
383 uint8_t status_dummy;
385 uint32_t sector_size;
386 uint16_t page_size;
392 int (*default_init)(struct spi_nor *nor);
393 int (*octal_dtr_enable)(struct spi_nor *nor, bool enable);
394 int (*quad_enable)(struct spi_nor *nor, bool enable);
395 int (*enter_quad)(struct spi_nor *nor, bool enable);
396 int (*set_4byte_addr_mode)(struct spi_nor *nor,
397 bool enable);
398};
399
404 int (*prepare)(struct spi_nor *flash_handle, enum spi_nor_ops ops);
405 void (*unprepare)(struct spi_nor *flash_handle, enum spi_nor_ops ops);
406 int (*reg_read)(struct spi_nor *flash_handle, struct spi_nor_cmd *cmd,
407 flash_addr_t addr, uint8_t *buf, flash_size_t length);
408 int (*reg_write)(struct spi_nor *flash_handle, struct spi_nor_cmd *cmd,
409 flash_addr_t addr, const uint8_t *buf,
410 flash_size_t length);
411 int (*read)(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf,
412 flash_size_t length);
413 int (*write)(struct spi_nor *flash_handle, flash_addr_t addr,
414 const uint8_t *buf, flash_size_t length);
415 int (*erase)(struct spi_nor *flash_handle, flash_addr_t offset);
416 int (*complex_erase)(struct spi_nor *nor, struct spi_nor_erase_cmd *cmd);
417 int (*training)(struct spi_nor *flash_handle, flash_addr_t addr,
418 uint8_t *buf, const uint8_t *pattern, flash_size_t length);
419 int (*cancel)(struct spi_nor *flash_handle);
420 void (*cache_flush)(struct spi_nor *flash_handle, flash_addr_t addr, flash_size_t length);
421 int (*enable_rfd)(struct spi_nor *flash_handle, uint8_t mask);
422 void (*xip_proto_setup)(struct spi_nor *flash_handle);
423};
424
429 int (*read16)(struct spi_nor *flash_handle, flash_addr_t addr, uint16_t *buf);
430 int (*write16)(struct spi_nor *flash_handle, flash_addr_t addr, uint16_t *buf);
431 void (*set_pre_transaction)(struct spi_nor *flash_handle, bool is_read,
432 bool is_direct, uint32_t num, struct hyperbus_ca **ca_array);
433 void (*hyperram_en)(struct spi_nor *flash_handle, uint8_t cs,
434 uint8_t read_dummy, uint8_t write_dummy);
435 int (*read)(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf,
436 flash_size_t length);
437 int (*write)(struct spi_nor *flash_handle, flash_addr_t addr,
438 const uint8_t *buf, flash_size_t length);
439 void (*cache_flush)(struct spi_nor *flash_handle, flash_addr_t addr, flash_size_t length);
440};
441
446 uint8_t id;
447 addr_t base;
448 unsigned int irq;
452 unsigned long ref_clk_hz;
453 bool xip_mode;
458 struct spi_nor *dev;
459 void *priv_data;
462};
463
467typedef void (*flash_dma_config)(struct spi_nor *nor, flash_addr_t addr, uint8_t *buf,
468 uint32_t len, bool is_read_flag, uint32_t burst_len);
469typedef void (*flash_dma_stop)(void);
470typedef void (*flash_dma_stop_signal)(struct spi_nor *nor);
471
475struct spi_nor {
476 uint8_t id;
477 uint8_t cs;
478 uint32_t baudrate;
479 uint32_t offset_address;
480 enum spi_memory_type
486 bool phy_en;
487 bool dqs_en;
491 bool sw_rst;
493 uint32_t reg_proto;
495 uint8_t addr_width;
507 void *ops;
508 void *parent;
509};
510
511typedef struct {
512 int (*fls_wait_idle)(struct spi_nor *nor);
513 int (*fls_write_enable)(struct spi_nor *nor, bool enable);
514 int (*fls_init)(struct spi_nor *nor, struct spi_nor_host *host,
515 const struct spi_nor_config *flash_config);
516 void (*fls_deinit)(struct spi_nor *nor);
517 int (*fls_read)(struct spi_nor *nor, flash_addr_t addr, uint8_t *buf,
518 flash_size_t size);
519 int (*fls_write)(struct spi_nor *nor, flash_addr_t addr,
520 const uint8_t *buf, flash_size_t size);
521 int (*fls_erase)(struct spi_nor *nor, flash_addr_t addr,
522 flash_size_t size);
523 int (*fls_cancel)(struct spi_nor *nor);
524 void (*fls_main_function)(struct spi_nor *nor);
525 const struct flash_info*(*fls_get_flash_table)(uint32_t *num);
527#if !(CONFIG_DISABLE_SPIBUS_COMPILE)
529#endif
530#if !(CONFIG_DISABLE_HYPERBUS_COMPILE)
532#endif
533
540static inline int sdrv_spi_nor_wait_idle(struct spi_nor *nor) {
541 if (nor && nor->ops) {
542 return ((flash_ops_t*)(nor->ops))->fls_wait_idle(nor);
543 }
545}
546
554static inline int sdrv_spi_nor_write_enable(struct spi_nor *nor, bool enable) {
555 if (nor && nor->ops) {
556 return ((flash_ops_t*)(nor->ops))->fls_write_enable(nor, enable);
557 }
559}
560
569//void *spi_nor_host_init(const struct spi_nor_host_config *host_config);
570
580static inline int sdrv_spi_nor_init(struct spi_nor *flash_handle, struct spi_nor_host *host,
581 const struct spi_nor_config *flash_config) {
582 int ret = -1;
583 if (flash_config->hyperbus_mode) {
584#if !(CONFIG_DISABLE_HYPERBUS_COMPILE)
585 ret = hyperbus_ops.fls_init(flash_handle, host, flash_config);
586#endif
587 } else {
588#if !(CONFIG_DISABLE_SPIBUS_COMPILE)
589 ret = spi_nor_ops.fls_init(flash_handle, host, flash_config);
590#endif
591 }
592 return ret;
593}
594
599static inline void sdrv_spi_nor_deinit(struct spi_nor *flash_handle) {
600 if (flash_handle && flash_handle->ops) {
601 ((flash_ops_t*)(flash_handle->ops))->fls_deinit(flash_handle);
602 }
603}
604
616static inline int sdrv_spi_nor_read(struct spi_nor *flash_handle, flash_addr_t addr,
617 uint8_t *buf,
619 if (flash_handle && flash_handle->ops) {
620 return ((flash_ops_t*)(flash_handle->ops))->fls_read(flash_handle, addr, buf, size);
621 }
623}
624
636static inline int sdrv_spi_nor_write(struct spi_nor *flash_handle, flash_addr_t addr,
637 const uint8_t *buf, flash_size_t size) {
638 if (flash_handle && flash_handle->ops) {
639 return ((flash_ops_t*)(flash_handle->ops))->fls_write(flash_handle, addr, buf, size);
640 }
642}
652static inline int sdrv_spi_nor_erase(struct spi_nor *flash_handle, flash_addr_t addr,
654 if (flash_handle && flash_handle->ops) {
655 return ((flash_ops_t*)(flash_handle->ops))->fls_erase(flash_handle, addr, size);
656 }
658}
659
668static inline int sdrv_spi_nor_cancel(struct spi_nor *flash_handle) {
669 if (flash_handle && flash_handle->ops) {
670 return ((flash_ops_t*)(flash_handle->ops))->fls_cancel(flash_handle);
671 }
673}
674
680static inline void sdrv_spi_nor_main_function(struct spi_nor *flash_handle) {
681 if (flash_handle && flash_handle->ops) {
682 ((flash_ops_t*)(flash_handle->ops))->fls_main_function(flash_handle);
683 }
684}
685
692static inline void sdrv_spi_nor_setup_handler(struct spi_nor *flash_handle,
693 flash_notification handler)
694{
695 flash_handle->event_handler = handler;
696 return;
697}
698
710 struct spi_nor *flash_handle)
711{
712 if (flash_handle) {
713 return flash_handle->xfer_info.opt_result;
714 }
715 else {
716 return FLASH_OPT_INVALID;
717 }
718}
719
725static inline struct flash_info *sdrv_spi_nor_get_info(struct spi_nor
726 *flash_handle)
727{
728 if (flash_handle) {
729 return &(flash_handle->info);
730 }
731 else {
732 return NULL;
733 }
734}
735
736static inline int sdrv_spi_nor_enable_rfd(struct spi_nor *flash_handle, uint8_t mask) {
737 int ret;
738 if (flash_handle && flash_handle->host->ops->enable_rfd) {
739 flash_handle->host->ops->prepare(flash_handle, SPI_NOR_OPS_LOCK);
740 ret = flash_handle->host->ops->enable_rfd(flash_handle, mask);
741 flash_handle->host->ops->unprepare(flash_handle, SPI_NOR_OPS_LOCK);
742 if (ret) {
743 return SDRV_STATUS_FAIL;
744 }
745 } else {
747 }
748 return SDRV_STATUS_OK;
749}
750
751static inline const struct flash_info *sdrv_spi_nor_get_flash_table(
752 bool is_hyperbus, uint32_t *num) {
753 const struct flash_info *ret = NULL;
754 if (!num) {
755 return NULL;
756 }
757 if (is_hyperbus) {
758#if !(CONFIG_DISABLE_HYPERBUS_COMPILE)
760#endif
761 } else {
762#if !(CONFIG_DISABLE_SPIBUS_COMPILE)
763 ret = spi_nor_ops.fls_get_flash_table(num);
764#endif
765 }
766 return ret;
767}
768
769static inline struct spi_nor *sdrv_get_flash_handle(struct spi_nor_host *host,
770 flash_addr_t addr, flash_size_t size) {
771 struct spi_nor *nor;
772 for (uint8_t i = 0; i < SWITCH_DEVICE_MAX_NUM ; i++) {
773 nor = host->nor_tab[i];
774 if (!nor) {
775 continue;
776 }
777 if ((addr >= nor->offset_address) &&
778 (addr + size) <= (nor->offset_address + nor->info.size)) {
779 return nor;
780 }
781 }
782 return NULL;
783}
784
785static inline int sdrv_host_read(struct spi_nor_host *host, flash_addr_t addr,
786 uint8_t *buf, flash_size_t size) {
787 struct spi_nor *flash_handle = sdrv_get_flash_handle(host, addr, size);
788 if (flash_handle) {
789 addr -= flash_handle->offset_address;
790 return sdrv_spi_nor_read(flash_handle, addr, buf, size);
791 }
792 return SDRV_STATUS_FAIL;
793}
794
795static inline int sdrv_host_erase(struct spi_nor_host *host, flash_addr_t addr,
796 flash_size_t size) {
797 struct spi_nor *flash_handle = sdrv_get_flash_handle(host, addr, size);
798 if (flash_handle) {
799 addr -= flash_handle->offset_address;
800 return sdrv_spi_nor_erase(flash_handle, addr, size);
801 }
802 return SDRV_STATUS_FAIL;
803}
804
805static inline int sdrv_host_write(struct spi_nor_host *host, flash_addr_t addr,
806 const uint8_t *buf, flash_size_t size) {
807 struct spi_nor *flash_handle = sdrv_get_flash_handle(host, addr, size);
808 if (flash_handle) {
809 addr -= flash_handle->offset_address;
810 return sdrv_spi_nor_write(flash_handle, addr, buf, size);
811 }
812 return SDRV_STATUS_FAIL;
813}
814
815#ifdef __cplusplus
816}
817#endif
818#endif /* SDRV_SPI_NOR_H_ */
const struct g2dlite_ops ops
SemiDrive clock generator driver header file.
SemiDrive driver common header file.
@ SDRV_STATUS_INVALID_PARAM
Definition: sdrv_common.h:76
@ SDRV_STATUS_FAIL
Definition: sdrv_common.h:73
@ SDRV_STATUS_OK
Definition: sdrv_common.h:72
#define NULL
Definition: sdrv_crypto_utility.h:21
static int sdrv_spi_nor_read(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf, flash_size_t size)
spi norflash read interface.
Definition: sdrv_spi_nor.h:616
static int sdrv_spi_nor_wait_idle(struct spi_nor *nor)
spi norflash get status.
Definition: sdrv_spi_nor.h:540
spi_nor_ops
spi norflash r/w/e ops flags.
Definition: sdrv_spi_nor.h:324
@ SPI_NOR_OPS_READ
Definition: sdrv_spi_nor.h:325
@ SPI_NOR_OPS_ERASE
Definition: sdrv_spi_nor.h:327
@ SPI_NOR_OPS_WRITE
Definition: sdrv_spi_nor.h:326
@ SPI_NOR_OPS_LOCK
Definition: sdrv_spi_nor.h:328
@ SPI_NOR_OPS_UNLOCK
Definition: sdrv_spi_nor.h:329
void(* flash_dma_config)(struct spi_nor *nor, flash_addr_t addr, uint8_t *buf, uint32_t len, bool is_read_flag, uint32_t burst_len)
dma operation for xspi.
Definition: sdrv_spi_nor.h:467
spi_nor_proto_type
spi norflash proto type.
Definition: sdrv_spi_nor.h:275
@ SPI_NOR_PROTO_TYPE_READ
Definition: sdrv_spi_nor.h:276
@ SPI_NOR_PROTO_TYPE_WRITE
Definition: sdrv_spi_nor.h:277
@ SPI_NOR_PROTO_TYPE_ERASE
Definition: sdrv_spi_nor.h:278
spi_memory_type
spi norflash device type.
Definition: sdrv_spi_nor.h:284
@ SPI_HYPERRAM
Definition: sdrv_spi_nor.h:289
@ SPI_HYPERBUS_MCP
Definition: sdrv_spi_nor.h:290
@ SPI_NOR_FLASH
Definition: sdrv_spi_nor.h:286
@ SPI_AUTO_DETECT
Definition: sdrv_spi_nor.h:285
@ SPI_NAND_FLASH
Definition: sdrv_spi_nor.h:287
@ SPI_HYPERFLASH
Definition: sdrv_spi_nor.h:288
static const struct flash_info * sdrv_spi_nor_get_flash_table(bool is_hyperbus, uint32_t *num)
Definition: sdrv_spi_nor.h:751
flash_ops_t hyperbus_ops
spi_nor_error_group_t
sub group
Definition: sdrv_spi_nor.h:219
@ SPI_NOR_WRITE
Definition: sdrv_spi_nor.h:223
@ SPI_NOR_CANCEL
Definition: sdrv_spi_nor.h:225
@ SPI_NOR_ERASE
Definition: sdrv_spi_nor.h:222
@ SPI_NOR_INIT
Definition: sdrv_spi_nor.h:221
@ SPI_NOR_COMMON
Definition: sdrv_spi_nor.h:220
@ SPI_NOR_READ
Definition: sdrv_spi_nor.h:224
#define SWITCH_DEVICE_MAX_NUM
Definition: sdrv_spi_nor.h:104
static struct flash_info * sdrv_spi_nor_get_info(struct spi_nor *flash_handle)
Used for get spi norflash info what like sector size, page size, and ect.
Definition: sdrv_spi_nor.h:725
flash_opt_result
flash operating result collection.
Definition: sdrv_spi_nor.h:137
@ FLASH_OPT_INVALID
Definition: sdrv_spi_nor.h:142
@ FLASH_OPT_PENDING
Definition: sdrv_spi_nor.h:140
@ FLASH_OPT_COMPLETE
Definition: sdrv_spi_nor.h:138
@ FLASH_OPT_INCONSISTENT
Definition: sdrv_spi_nor.h:141
@ FLASH_OPT_FAILED
Definition: sdrv_spi_nor.h:139
@ FLASH_OPT_RESULET_MAX
Definition: sdrv_spi_nor.h:143
static int sdrv_spi_nor_erase(struct spi_nor *flash_handle, flash_addr_t addr, flash_size_t size)
spi norflash erase interface.
Definition: sdrv_spi_nor.h:652
xspi_bus_event_mode
reserve for osEvent interface.
Definition: sdrv_spi_nor.h:175
@ SPI_NOR_XFER_WAIT
Definition: sdrv_spi_nor.h:178
@ SPI_NOR_XFER_COMPLETE
Definition: sdrv_spi_nor.h:177
@ SPI_NOR_XFER_CLEAR
Definition: sdrv_spi_nor.h:176
spi_nor_rw_para
spi norflash indirect/direct(r/w) flags.
Definition: sdrv_spi_nor.h:335
@ SPI_NOR_DIRECT_READ
Definition: sdrv_spi_nor.h:336
@ SPI_NOR_INDIRECT_READ
Definition: sdrv_spi_nor.h:337
@ SPI_NOR_DIRECT_WRITE
Definition: sdrv_spi_nor.h:338
@ SPI_NOR_INDIRECT_WRITE
Definition: sdrv_spi_nor.h:339
xspi_xfer_mode
reserve.
Definition: sdrv_spi_nor.h:166
@ XSPI_XFER_NONE
Definition: sdrv_spi_nor.h:167
@ XSPI_XFER_WRITE
Definition: sdrv_spi_nor.h:169
@ XSPI_XFER_READ
Definition: sdrv_spi_nor.h:168
static int sdrv_host_write(struct spi_nor_host *host, flash_addr_t addr, const uint8_t *buf, flash_size_t size)
Definition: sdrv_spi_nor.h:805
static int sdrv_spi_nor_enable_rfd(struct spi_nor *flash_handle, uint8_t mask)
Definition: sdrv_spi_nor.h:736
static int sdrv_host_read(struct spi_nor_host *host, flash_addr_t addr, uint8_t *buf, flash_size_t size)
Definition: sdrv_spi_nor.h:785
static struct spi_nor * sdrv_get_flash_handle(struct spi_nor_host *host, flash_addr_t addr, flash_size_t size)
Definition: sdrv_spi_nor.h:769
spi_nor_sector_type
Definition: sdrv_spi_nor.h:106
@ SPI_NOR_SECTOR_64KB
Definition: sdrv_spi_nor.h:109
@ SPI_NOR_SECTOR_4KB
Definition: sdrv_spi_nor.h:107
@ SPI_NOR_SECTOR_TYPE_MAX
Definition: sdrv_spi_nor.h:112
@ SPI_NOR_SECTOR_32KB
Definition: sdrv_spi_nor.h:108
@ SPI_NOR_SECTOR_128KB
Definition: sdrv_spi_nor.h:110
@ SPI_NOR_SECTOR_256KB
Definition: sdrv_spi_nor.h:111
flash_opt
flash operating collection.
Definition: sdrv_spi_nor.h:126
@ FLASH_OPT_READ
Definition: sdrv_spi_nor.h:128
@ FLASH_OPT_NONE
Definition: sdrv_spi_nor.h:127
@ FLASH_OPT_MAX
Definition: sdrv_spi_nor.h:131
@ FLASH_OPT_WRITE
Definition: sdrv_spi_nor.h:129
@ FLASH_OPT_ERASE
Definition: sdrv_spi_nor.h:130
static enum flash_opt_result sdrv_spi_nor_get_result(struct spi_nor *flash_handle)
Used for get spi norflash async tansfer result.
Definition: sdrv_spi_nor.h:709
#define SPI_NOR_MAX_ID_LEN
Definition: sdrv_spi_nor.h:89
static int sdrv_host_erase(struct spi_nor_host *host, flash_addr_t addr, flash_size_t size)
Definition: sdrv_spi_nor.h:795
void(* flash_dma_stop_signal)(struct spi_nor *nor)
Definition: sdrv_spi_nor.h:470
void(* flash_notification)(enum flash_opt type, enum flash_opt_result result)
event callback.
Definition: sdrv_spi_nor.h:160
uint64_t flash_size_t
Definition: sdrv_spi_nor.h:121
uint64_t flash_addr_t
flash addr/size use uint64_t.
Definition: sdrv_spi_nor.h:120
spi_nor_device_mode
device trans mode.
Definition: sdrv_spi_nor.h:266
@ SPI_NOR_DEV_PARALLEL_MODE
Definition: sdrv_spi_nor.h:269
@ SPI_NOR_DEV_LOCKSTEP_MODE
Definition: sdrv_spi_nor.h:268
@ SPI_NOR_DEV_SINGLE_MODE
Definition: sdrv_spi_nor.h:267
static int sdrv_spi_nor_cancel(struct spi_nor *flash_handle)
spi norflash async cancel interface.
Definition: sdrv_spi_nor.h:668
static int sdrv_spi_nor_init(struct spi_nor *flash_handle, struct spi_nor_host *host, const struct spi_nor_config *flash_config)
spi norflash host initialize function.
Definition: sdrv_spi_nor.h:580
static void sdrv_spi_nor_setup_handler(struct spi_nor *flash_handle, flash_notification handler)
Used for setup spi norflash async mode notification handler.
Definition: sdrv_spi_nor.h:692
static void sdrv_spi_nor_main_function(struct spi_nor *flash_handle)
spi norflash async main function interface.
Definition: sdrv_spi_nor.h:680
spi_nor_init_error_code_t
error code for init
Definition: sdrv_spi_nor.h:246
@ SPI_NOR_INIT_TRAIN_E
Definition: sdrv_spi_nor.h:247
static int sdrv_spi_nor_write_enable(struct spi_nor *nor, bool enable)
spi norflash write enable op.
Definition: sdrv_spi_nor.h:554
spi_nor_common_error_code_t
Common error code:
Definition: sdrv_spi_nor.h:231
@ SPI_NOR_TIMEOUT
Definition: sdrv_spi_nor.h:235
@ SPI_NOR_FAIL
Definition: sdrv_spi_nor.h:233
@ SPI_NOR_UNSUPPORT
Definition: sdrv_spi_nor.h:236
@ SPI_NOR_ADDRESS_INVALID
Definition: sdrv_spi_nor.h:238
@ SPI_NOR_BUSY
Definition: sdrv_spi_nor.h:234
@ SPI_NOR_COMMON_CODE_MAX
Definition: sdrv_spi_nor.h:240
@ SPI_NOR_UNREACHABLE
Definition: sdrv_spi_nor.h:237
@ SPI_NOR_OK
Definition: sdrv_spi_nor.h:232
@ SPI_NOR_LENGTH_INVALID
Definition: sdrv_spi_nor.h:239
static void sdrv_spi_nor_deinit(struct spi_nor *flash_handle)
spi norflash instance destruction interface.
Definition: sdrv_spi_nor.h:599
spi_nor_xfer_mode
spi norflash trans mode, dma/intterrupt/polling.
Definition: sdrv_spi_nor.h:257
@ SPI_NOR_XFER_POLLING_MODE
Definition: sdrv_spi_nor.h:258
@ SPI_NOR_XFER_INTERRUPT_MODE
Definition: sdrv_spi_nor.h:259
@ SPI_NOR_XFER_DMA_MODE
Definition: sdrv_spi_nor.h:260
void(* flash_dma_stop)(void)
Definition: sdrv_spi_nor.h:469
static int sdrv_spi_nor_write(struct spi_nor *flash_handle, flash_addr_t addr, const uint8_t *buf, flash_size_t size)
spi norflash write interface.
Definition: sdrv_spi_nor.h:636
spi norflash information.
Definition: sdrv_spi_nor.h:372
uint32_t erase_proto_list[SPI_NOR_SECTOR_TYPE_MAX]
Definition: sdrv_spi_nor.h:379
uint32_t erase_proto
Definition: sdrv_spi_nor.h:378
int(* quad_enable)(struct spi_nor *nor, bool enable)
Definition: sdrv_spi_nor.h:394
uint32_t read_proto
Definition: sdrv_spi_nor.h:376
flash_size_t size
Definition: sdrv_spi_nor.h:388
uint8_t status_dummy
Definition: sdrv_spi_nor.h:383
uint32_t write_proto
Definition: sdrv_spi_nor.h:377
int(* octal_dtr_enable)(struct spi_nor *nor, bool enable)
Definition: sdrv_spi_nor.h:393
int(* default_init)(struct spi_nor *nor)
Definition: sdrv_spi_nor.h:392
uint8_t read_dummy
Definition: sdrv_spi_nor.h:381
struct spi_nor_erase_map erase_map[SPI_NOR_SECTOR_TYPE_MAX]
Definition: sdrv_spi_nor.h:389
uint32_t sector_size
Definition: sdrv_spi_nor.h:385
uint8_t write_dummy
Definition: sdrv_spi_nor.h:382
int(* set_4byte_addr_mode)(struct spi_nor *nor, bool enable)
Definition: sdrv_spi_nor.h:396
const char * name
Definition: sdrv_spi_nor.h:373
uint16_t page_size
Definition: sdrv_spi_nor.h:386
uint8_t flash_id[SPI_NOR_MAX_ID_LEN]
Definition: sdrv_spi_nor.h:374
int(* enter_quad)(struct spi_nor *nor, bool enable)
Definition: sdrv_spi_nor.h:395
Definition: sdrv_spi_nor.h:511
const struct flash_info *(* fls_get_flash_table)(uint32_t *num)
Definition: sdrv_spi_nor.h:525
int(* fls_init)(struct spi_nor *nor, struct spi_nor_host *host, const struct spi_nor_config *flash_config)
Definition: sdrv_spi_nor.h:514
flash transfer collection.
Definition: sdrv_spi_nor.h:149
flash_size_t size
Definition: sdrv_spi_nor.h:154
uint8_t * buf
Definition: sdrv_spi_nor.h:153
flash_addr_t addr
Definition: sdrv_spi_nor.h:152
enum flash_opt opt_type
Definition: sdrv_spi_nor.h:150
enum flash_opt_result opt_result
Definition: sdrv_spi_nor.h:151
address data, set pre transaction to hyperflash.
Definition: sdrv_spi_nor.h:306
uint16_t addr
Definition: sdrv_spi_nor.h:307
uint16_t data
Definition: sdrv_spi_nor.h:308
hyperbus host operation.
Definition: sdrv_spi_nor.h:428
void(* hyperram_en)(struct spi_nor *flash_handle, uint8_t cs, uint8_t read_dummy, uint8_t write_dummy)
Definition: sdrv_spi_nor.h:433
int(* read)(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:435
void(* cache_flush)(struct spi_nor *flash_handle, flash_addr_t addr, flash_size_t length)
Definition: sdrv_spi_nor.h:439
void(* set_pre_transaction)(struct spi_nor *flash_handle, bool is_read, bool is_direct, uint32_t num, struct hyperbus_ca **ca_array)
Definition: sdrv_spi_nor.h:431
int(* write16)(struct spi_nor *flash_handle, flash_addr_t addr, uint16_t *buf)
Definition: sdrv_spi_nor.h:430
int(* write)(struct spi_nor *flash_handle, flash_addr_t addr, const uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:437
int(* read16)(struct spi_nor *flash_handle, flash_addr_t addr, uint16_t *buf)
Definition: sdrv_spi_nor.h:429
hyperflash cmd.
Definition: sdrv_spi_nor.h:314
char * name
Definition: sdrv_spi_nor.h:315
uint32_t num
Definition: sdrv_spi_nor.h:317
bool is_read
Definition: sdrv_spi_nor.h:316
struct hyperbus_ca ca[7]
Definition: sdrv_spi_nor.h:318
Abstract clock common node for driver operate.
Definition: sdrv_ckgen.h:175
spi norflash cmd.
Definition: sdrv_spi_nor.h:296
uint8_t addr_bytes
Definition: sdrv_spi_nor.h:300
uint8_t opcode
Definition: sdrv_spi_nor.h:297
uint8_t inst_type
Definition: sdrv_spi_nor.h:298
uint8_t dummy
Definition: sdrv_spi_nor.h:299
spi norflash configurations.
Definition: sdrv_spi_nor.h:345
enum spi_nor_device_mode dev_mode
Definition: sdrv_spi_nor.h:350
enum spi_memory_type mem_type
Definition: sdrv_spi_nor.h:351
uint8_t id
Definition: sdrv_spi_nor.h:346
bool async_mode
Definition: sdrv_spi_nor.h:352
uint32_t force_size
Definition: sdrv_spi_nor.h:355
bool hyperbus_mode
Definition: sdrv_spi_nor.h:353
uint32_t baudrate
Definition: sdrv_spi_nor.h:348
uint8_t cs
Definition: sdrv_spi_nor.h:347
enum spi_nor_xfer_mode xfer_mode
Definition: sdrv_spi_nor.h:349
bool sw_rst
Definition: sdrv_spi_nor.h:354
Definition: sdrv_spi_nor.h:364
flash_addr_t addr
Definition: sdrv_spi_nor.h:365
const struct spi_nor_erase_map * map
Definition: sdrv_spi_nor.h:366
Definition: sdrv_spi_nor.h:358
uint32_t erase_proto
Definition: sdrv_spi_nor.h:359
uint32_t post
Definition: sdrv_spi_nor.h:361
uint32_t erase_size
Definition: sdrv_spi_nor.h:360
spi norflash host operation.
Definition: sdrv_spi_nor.h:403
void(* xip_proto_setup)(struct spi_nor *flash_handle)
Definition: sdrv_spi_nor.h:422
int(* training)(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf, const uint8_t *pattern, flash_size_t length)
Definition: sdrv_spi_nor.h:417
void(* unprepare)(struct spi_nor *flash_handle, enum spi_nor_ops ops)
Definition: sdrv_spi_nor.h:405
int(* cancel)(struct spi_nor *flash_handle)
Definition: sdrv_spi_nor.h:419
int(* read)(struct spi_nor *flash_handle, flash_addr_t addr, uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:411
int(* prepare)(struct spi_nor *flash_handle, enum spi_nor_ops ops)
Definition: sdrv_spi_nor.h:404
void(* cache_flush)(struct spi_nor *flash_handle, flash_addr_t addr, flash_size_t length)
Definition: sdrv_spi_nor.h:420
int(* reg_write)(struct spi_nor *flash_handle, struct spi_nor_cmd *cmd, flash_addr_t addr, const uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:408
int(* enable_rfd)(struct spi_nor *flash_handle, uint8_t mask)
Definition: sdrv_spi_nor.h:421
int(* complex_erase)(struct spi_nor *nor, struct spi_nor_erase_cmd *cmd)
Definition: sdrv_spi_nor.h:416
int(* write)(struct spi_nor *flash_handle, flash_addr_t addr, const uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:413
int(* reg_read)(struct spi_nor *flash_handle, struct spi_nor_cmd *cmd, flash_addr_t addr, uint8_t *buf, flash_size_t length)
Definition: sdrv_spi_nor.h:406
int(* erase)(struct spi_nor *flash_handle, flash_addr_t offset)
Definition: sdrv_spi_nor.h:415
spi norflash host configurations.
Definition: sdrv_spi_nor.h:445
struct spi_nor_host_ops * ops
Definition: sdrv_spi_nor.h:455
flash_size_t total_size
Definition: sdrv_spi_nor.h:461
uint8_t id
Definition: sdrv_spi_nor.h:446
bool xip_mode
Definition: sdrv_spi_nor.h:453
void * priv_data
Definition: sdrv_spi_nor.h:459
unsigned long ref_clk_hz
Definition: sdrv_spi_nor.h:452
addr_t base
Definition: sdrv_spi_nor.h:447
struct spi_nor * dev
Definition: sdrv_spi_nor.h:458
sdrv_ckgen_node_t * clk
Definition: sdrv_spi_nor.h:450
unsigned int irq
Definition: sdrv_spi_nor.h:448
struct spi_nor * nor_tab[SWITCH_DEVICE_MAX_NUM]
Definition: sdrv_spi_nor.h:460
struct hyperbus_host_ops * hyper_ops
Definition: sdrv_spi_nor.h:456
spi norflash device configurations.
Definition: sdrv_spi_nor.h:475
enum spi_nor_device_mode dev_mode
Definition: sdrv_spi_nor.h:482
enum spi_memory_type mem_type
Definition: sdrv_spi_nor.h:480
uint8_t id
Definition: sdrv_spi_nor.h:476
flash_dma_config dma_xfer_config
Definition: sdrv_spi_nor.h:502
flash_dma_stop_signal dma_stop
Definition: sdrv_spi_nor.h:504
flash_notification event_handler
Definition: sdrv_spi_nor.h:500
void * parent
Definition: sdrv_spi_nor.h:508
struct flash_xfer_info xfer_info
Definition: sdrv_spi_nor.h:498
bool async_mode
Definition: sdrv_spi_nor.h:489
bool phy_en
Definition: sdrv_spi_nor.h:486
struct flash_xfer_info xfer_info_bottom
Definition: sdrv_spi_nor.h:499
bool hyperbus_mode
Definition: sdrv_spi_nor.h:490
bool octal_dtr_en
Definition: sdrv_spi_nor.h:488
uint32_t offset_address
Definition: sdrv_spi_nor.h:479
struct flash_info info
Definition: sdrv_spi_nor.h:484
flash_dma_stop dma_xfer_stop
Definition: sdrv_spi_nor.h:503
uint8_t addr_width
Definition: sdrv_spi_nor.h:495
uint32_t reg_proto
Definition: sdrv_spi_nor.h:493
uint32_t baudrate
Definition: sdrv_spi_nor.h:478
uint8_t cs
Definition: sdrv_spi_nor.h:477
enum spi_nor_xfer_mode xfer_mode
Definition: sdrv_spi_nor.h:497
struct spi_nor_host * host
Definition: sdrv_spi_nor.h:506
bool sw_rst
Definition: sdrv_spi_nor.h:491
bool dqs_en
Definition: sdrv_spi_nor.h:487
void * ops
Definition: sdrv_spi_nor.h:507
xspi config collection
Definition: sdrv_spi_nor.h:184
uint8_t id
Definition: sdrv_spi_nor.h:185
bool xip_mode
Definition: sdrv_spi_nor.h:190
addr_t apb_base
Definition: sdrv_spi_nor.h:186
unsigned int irq
Definition: sdrv_spi_nor.h:188
unsigned long ref_clk
Definition: sdrv_spi_nor.h:189
addr_t direct_base
Definition: sdrv_spi_nor.h:187
xspi private information.
Definition: sdrv_spi_nor.h:196
uint8_t dma_bus_width
Definition: sdrv_spi_nor.h:204
uint8_t id
Definition: sdrv_spi_nor.h:197
unsigned int sclk
Definition: sdrv_spi_nor.h:203
unsigned long ref_clk_hz
Definition: sdrv_spi_nor.h:201
addr_t apb_base
Definition: sdrv_spi_nor.h:198
unsigned int irq
Definition: sdrv_spi_nor.h:200
uint8_t current_cs
Definition: sdrv_spi_nor.h:207
uint32_t dma_burst_size
Definition: sdrv_spi_nor.h:205
uint8_t fifo_depth
Definition: sdrv_spi_nor.h:209
bool cs_decoded
Definition: sdrv_spi_nor.h:206
uint32_t direct_range_size
Definition: sdrv_spi_nor.h:211
addr_t direct_base
Definition: sdrv_spi_nor.h:199
uint8_t fifo_width
Definition: sdrv_spi_nor.h:210
bool dqs_en
Definition: sdrv_spi_nor.h:208