1 /***************************************************************************/ /** 2 * @file rsi_qspi_proto.h 3 ******************************************************************************* 4 * # License 5 * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b> 6 ******************************************************************************* 7 * 8 * SPDX-License-Identifier: Zlib 9 * 10 * The licensor of this software is Silicon Laboratories Inc. 11 * 12 * This software is provided 'as-is', without any express or implied 13 * warranty. In no event will the authors be held liable for any damages 14 * arising from the use of this software. 15 * 16 * Permission is granted to anyone to use this software for any purpose, 17 * including commercial applications, and to alter it and redistribute it 18 * freely, subject to the following restrictions: 19 * 20 * 1. The origin of this software must not be misrepresented; you must not 21 * claim that you wrote the original software. If you use this software 22 * in a product, an acknowledgment in the product documentation would be 23 * appreciated but is not required. 24 * 2. Altered source versions must be plainly marked as such, and must not be 25 * misrepresented as being the original software. 26 * 3. This notice may not be removed or altered from any source distribution. 27 * 28 ******************************************************************************/ 29 30 // Include Files 31 32 #include "rsi_ccp_common.h" 33 #include "base_types.h" 34 35 #ifndef QSPI_PROTO_H 36 #define QSPI_PROTO_H 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 // GPIO register bit position related defines 43 #define GPIO_0_TO_5 0 44 #define GPIO_6_TO_11 1 45 #define GPIO_46_TO_51 2 46 #define GPIO_52_TO_57 3 47 #define GPIO_58_TO_63 4 48 // NWP OCTA/DUAL combinations 49 #define GPIO_0_AND_58 5 50 #define GPIO_6_AND_58 6 51 #define GPIO_46_AND_58 7 52 // M4 OCTA/DUAL combinations 53 #define GPIO_0_AND_52 8 54 #define GPIO_6_AND_52 9 55 #define GPIO_46_AND_52 10 56 #define NOT_USING 11 // Not applicable 57 #define GPIO_58_AND_52 12 58 #define GPIO_DDR_PADS 13 59 60 #define M4SS_PAD_CONFIG_REG(x) *(volatile uint32_t *)(0x46004000 + 4 * (x)) // REN enable bit(this should be enable) 61 #define M4_DDR_PAD_CONFIG(x) *(volatile uint32_t *)(0x46006000 + ((x)*4)) 62 // Pad config(P2 P1) 63 // 00 - Hi-Z, 01 - Pullup, 10 - PullDown, 11 - Repeater 64 #define PAD_CONFIG_P2 BIT(7) 65 #define PAD_CONFIG_P1 BIT(6) 66 67 #define PADSELECTION \ 68 (*(volatile uint32_t *)(0x41300000 + 0x610)) // PAD selection (0 t0 21) A value of 1 on this gives control to M4SS 69 // Note BIT(0) to BIT(7) are reserved for channel no 70 #define DEFAULT_DESC_MODE BIT(8) 71 #define USE_UDMA_MODE BIT(9) 72 73 typedef enum qspi_mode_e { NONE = 0, READ_MODE, WRITE_MODE } qspi_mode_t; 74 75 // Structure to qspi standalone encrypt/decrypt configs 76 typedef struct qspi_standalone_config_s { 77 uint8_t aes_mode; // AES mode 78 bool encrypt; // 0 = Encrypt, 1 = Decrypt 79 bool kh_enable; // 1 = Pick the key from keyholder, 0 = pass the key 80 uint32_t *iv; // flash offset where data stored 81 uint32_t *key1; // Pass key1 if kh_enable = 0 82 uint32_t *key2; // Pass key1 if kh_enable = 0 and 32 byte key 83 uint32_t key_len; // Key len i.e 16 or 32 bytes 84 uint32_t flip_data; // writing 1 to this Flips the 32-bit endian for data in standalone mode 85 } qspi_standalone_config_t; 86 87 extern qspi_mode_t qspi_mode_g; 88 89 typedef struct qspi_reg_s qspi_reg_t; 90 // This structure members are used to configure qspi 91 typedef struct spi_config_1_s { 92 // QSPI operation modes, all modes are single, dual or quad 93 94 unsigned int inst_mode : 2; // instruction will be sent in this mode 95 unsigned int addr_mode : 2; // addr will be sent in this mode 96 unsigned int data_mode : 2; // data will be sent/received in this mode 97 unsigned int dummy_mode : 2; // dummy bytes will be sent/received in this mode 98 unsigned int extra_byte_mode : 2; // extra bytes will be sent in this mode 99 // SPI mode 100 #define SINGLE_MODE 0 101 // dual mode 102 #define DUAL_MODE 1 103 // quad mode 104 #define QUAD_MODE 2 105 #define OCTA_MODE 3 106 107 unsigned int prefetch_en : 1; // prefetch enable 108 // prefetch will be enabled 109 #define EN_PREFETCH 1 110 // prefetch will be disabled 111 #define DIS_PREFETCH 0 112 113 unsigned int dummy_W_or_R : 1; // dummy writes or read select 114 // dummy's are read 115 #define DUMMY_READS 0 116 // dummy's are written 117 #define DUMMY_WRITES 1 118 119 unsigned int extra_byte_en : 1; // Enable extra byte 120 // Extra byte will be enabled 121 #define EN_EXTRA_BYTE 122 // Extra byte will be disabled 123 #define DIS_EXTRA_BYTE 124 125 unsigned int d3d2_data : 2; // Data on D3 and D2 line in SPI or DUAL mode 126 127 unsigned int continuous : 1; // continuous mode select 128 // continuous mode is selected 129 #define CONTINUOUS 1 130 // discontinuous mode is selected 131 #define DIS_CONTINUOUS 0 132 133 unsigned int read_cmd : 8; // read cmd to be used 134 135 unsigned int flash_type : 4; // flash defines 136 // sst spi flash 137 #define FREAD_QUAD_O 0x6B 138 139 #define FREAD_QUAD_O_EB 0xEB 140 141 // WINBOND + MACRONIX specific cmds 142 143 // fast read dual IO 144 #define FREAD_DUAL_IO 0xBB 145 // fast read quad IO 146 #define FREAD_QUAD_IO 0xEB 147 #define SST_SPI_FLASH 0 148 // sst dual flash 149 #define SST_DUAL_FLASH 1 150 // sst quad flash 151 #define SST_QUAD_FLASH 2 152 // Winbond quad flash 153 #define WBOND_QUAD_FLASH 3 154 // Atmel quad flash 155 #define AT_QUAD_FLASH 4 156 // macronix quad flash 157 #define MX_QUAD_FLASH 5 158 // cFeon quad flash 159 #define EON_QUAD_FLASH 6 160 // Micron quad flash 161 #define MICRON_QUAD_FLASH 7 162 // Giga Device flash 163 #define GIGA_DEVICE_FLASH 8 164 // macronix octa flash 165 #define MX_OCTA_FLASH 9 166 // Adesto octa flash 167 #define ADESTO_OCTA_FLASH 10 168 169 #if defined(SLI_SI917) || defined(SLI_SI915) 170 // Adesto quad flash 171 #define ADESTO_QUAD_FLASH 11 172 //ISSI flash 173 #define ISSI_FLASH 12 174 175 //XMC fash 176 #define XMC_FLASH 13 177 178 #endif 179 unsigned int no_of_dummy_bytes : 4; // no_of_dummy_bytes to be used for read operations 180 } spi_config_1_t; 181 182 // This structure members are used to configure qspi 183 typedef struct spi_config_2_s { 184 185 unsigned int auto_mode : 1; // mode select 186 // Auto mode selection 187 #define EN_AUTO_MODE 1 188 // Manual mode selection 189 #define EN_MANUAL_MODE 0 190 191 unsigned int cs_no : 2; // QSPI chip_select 192 // cs-0 193 #define CHIP_ZERO 0 194 // cs-1 195 #define CHIP_ONE 1 196 // cs-2 197 #define CHIP_TWO 2 198 // cs-3 199 #define CHIP_THREE 3 200 201 unsigned int reserved1 : 1; // Jump Enable 202 // Enables jump 203 #define EN_JUMP 1 204 // Disables jump 205 #define DIS_JUMP 0 206 207 unsigned int neg_edge_sampling : 1; // For High speed mode, sample at neg edge 208 // enables neg edge sampling 209 #define NEG_EDGE_SAMPLING 1 210 // enables pos edge sampling 211 #define POS_EDGE_SAMPLING 0 212 213 unsigned int qspi_clk_en : 1; // qspi clk select 214 // full time clk will be provided 215 #define QSPI_FULL_TIME_CLK 1 216 // dynamic clk gating will be enabled 217 #define QSPI_DYNAMIC_CLK 0 218 219 unsigned int protection : 2; // flash protection select 220 // enable write protection 221 #define EN_WR_PROT 2 222 // remove write protection 223 #define REM_WR_PROT 1 224 // no change to wr protection 225 #define DNT_REM_WR_PROT 0 226 227 unsigned int dma_mode : 1; // dma mode enable 228 // use dma only in manaul mode 229 #define DMA_MODE 1 230 // dma will not be used 231 #define NO_DMA 0 232 233 unsigned int swap_en : 1; // swap enable for w/r 234 // swap will be enabled 235 #define SWAP 1 236 // swap will be disabled 237 #define NO_SWAP 0 238 239 unsigned int full_duplex : 2; // full duplex mode select 240 // do nothing for full duplex 241 #define IGNORE_FULL_DUPLEX 2 242 // enable full duplex 243 #define EN_FULL_DUPLEX 1 244 // disable full duplex 245 #define DIS_FULL_DUPLEX 0 246 247 unsigned int wrap_len_in_bytes : 3; // wrap len to be used 248 // wrap is diabled 249 #define NO_WRAP 7 250 // 8 byte wrap will be used 251 #define SST_8BYTE_WRAP 0 252 // 16 byte wrap will be used 253 #define SST_16BYTE_WRAP 1 254 // 32 byte wrap will be used 255 #define SST_32BYTE_WRAP 2 256 // 64 byte wrap will be used 257 #define SST_64BYTE_WRAP 3 258 259 // 16 byte wrap will be used 260 #define MICRON_16BYTE_WRAP 0 261 // 32 byte wrap will be used 262 #define MICRON_32BYTE_WRAP 1 263 // 64 byte wrap will be used 264 #define MICRON_64BYTE_WRAP 2 265 266 unsigned int addr_width_valid : 1; 267 // mode 3 clk will be used 268 // mode 0 clk will be used 269 270 unsigned int addr_width : 3; // addr width to used 271 // 32 bit addr is configured 272 #define _32BIT_ADDR 4 273 // 24 bit addr is configured 274 #define _24BIT_ADDR 3 275 // 16 bit addr is configured 276 #define _16BIT_ADDR 2 277 // 9 bit addr is configured 278 #define _9BIT_ADDR 1 279 // 8 bit addr is configured 280 #define _8BIT_ADDR 0 281 282 #define MANUAL_DUMMY_BYTE_OR_BIT_MODE BIT(25) 283 #define DUMMY_BYTE_OR_BIT_MODE BIT(0) 284 unsigned int dummy_cycles_for_controller : 2; 285 286 unsigned int reserved2 : 6; 287 // uint32 jump_inst : 8; // Instruction to be used in case of jump 288 289 unsigned int pinset_valid : 1; 290 291 unsigned int flash_pinset : 4; // width of memory protection reg for sst flashes 292 293 } spi_config_2_t; 294 295 // This structure members are used to configure qspi 296 typedef struct spi_config_3_s { 297 #define CONTINUE_FETCH_EN BIT(12) 298 #define WORD_SWAP_EN 20 299 unsigned int en_word_swap : 1; 300 unsigned int _16bit_cmd_valid : 1; 301 unsigned int _16bit_rd_cmd_msb : 8; 302 unsigned int xip_mode : 1; 303 unsigned int no_of_dummy_bytes_wrap : 4; // no_of_dummy_bytes to be used for wrap operations 304 #ifdef CHIP_9118 305 unsigned int ddr_mode_en : 1; 306 #else 307 unsigned int reserved : 1; 308 #endif 309 unsigned int wr_cmd : 8; 310 unsigned int wr_inst_mode : 2; 311 unsigned int wr_addr_mode : 2; 312 unsigned int wr_data_mode : 2; 313 unsigned int dummys_4_jump : 2; // no_of_dummy_bytes in case of jump instruction 314 } spi_config_3_t; 315 316 typedef struct spi_config_4_s { 317 unsigned int _16bit_wr_cmd_msb : 8; 318 unsigned int high_perf_mode_en : 1; //used for high performance mode not ddr 319 unsigned int qspi_loop_back_mode_en : 1; 320 #ifdef CHIP_9118 321 unsigned int qspi_manual_ddr_phasse : 1; 322 unsigned int ddr_data_mode : 1; 323 unsigned int ddr_inst_mode : 1; 324 unsigned int ddr_addr_mode : 1; 325 unsigned int ddr_dummy_mode : 1; 326 unsigned int ddr_extra_byte : 1; 327 #else 328 unsigned int reserved : 1; 329 unsigned int reserved1 : 1; 330 unsigned int reserved2 : 1; 331 unsigned int reserved3 : 1; 332 unsigned int reserved4 : 1; 333 unsigned int reserved5 : 1; 334 #endif 335 unsigned int dual_flash_mode : 1; 336 unsigned int secondary_csn : 1; 337 unsigned int polarity_mode : 1; 338 unsigned int valid_prot_bits : 4; 339 unsigned int no_of_ms_dummy_bytes : 4; 340 #ifdef CHIP_9118 341 unsigned int ddr_dll_en : 1; 342 #else 343 unsigned int reserved6 : 1; 344 #endif 345 unsigned int continue_fetch_en : 1; 346 unsigned int dma_write : 1; 347 unsigned int prot_top_bottom : 1; 348 unsigned int auto_csn_based_addr_en : 1; 349 } spi_config_4_t; 350 typedef struct spi_config_5_s { 351 unsigned int block_erase_cmd : 16; 352 unsigned int busy_bit_pos : 3; 353 unsigned int d7_d4_data : 4; 354 unsigned int dummy_bytes_for_rdsr : 4; 355 unsigned int reset_type : 5; 356 } spi_config_5_t; 357 358 typedef struct spi_config_6_s { 359 unsigned int chip_erase_cmd : 16; 360 unsigned int sector_erase_cmd : 16; 361 } spi_config_6_t; 362 363 typedef struct spi_config_7_s { 364 unsigned int status_reg_write_cmd : 16; 365 unsigned int status_reg_read_cmd : 16; 366 } spi_config_7_t; 367 368 // This structure has two daughter structures to configure qspi 369 typedef struct spi_config_s { 370 spi_config_1_t spi_config_1; // daughter structure 1 371 spi_config_2_t spi_config_2; // daughter structure 2 372 spi_config_3_t spi_config_3; // daughter structure 3 373 spi_config_4_t spi_config_4; // daughter structure 4 374 spi_config_5_t spi_config_5; // daughter structure 5 375 spi_config_6_t spi_config_6; // daughter structure 5 376 spi_config_7_t spi_config_7; // daughter structure 5 377 } spi_config_t; 378 379 typedef const struct qspi_func_s qspi_func_t; 380 381 struct qspi_func_s { 382 383 void (*qspi_write_to_flash)(qspi_reg_t *qspi_reg, uint32_t len_in_bits, uint32_t cmd_addr_data, uint32_t cs_no); 384 385 void (*qspi_switch_qspi2)(qspi_reg_t *qspi_reg, uint32_t mode, uint32_t cs_no); 386 387 uint32_t (*qspi_wait_flash_status_Idle)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms); 388 389 void (*qspi_enable_status_reg_write)(qspi_reg_t *qspi_reg, 390 uint32_t flash_type, 391 spi_config_t *spi_config, 392 uint32_t cs_no); 393 394 void (*qspi_status_reg_write)(qspi_reg_t *qspi_reg, 395 uint32_t write_value, 396 spi_config_t *spi_config, 397 uint32_t wr_reg_delay_ms); 398 399 uint32_t (*qspi_flash_reg_read)(qspi_reg_t *qspi_reg, uint8_t reg_read_cmd, uint32_t cs_no, spi_config_t *spi_config); 400 401 void (*qspi_flash_reg_write)(qspi_reg_t *qspi_reg, 402 uint32_t reg_write_cmd, 403 uint32_t reg_write_value, 404 uint32_t cs_no, 405 uint32_t wr_reg_delay_ms); 406 407 void (*qspi_set_flash_mode)(qspi_reg_t *qspi_reg, 408 uint32_t data_mode, 409 uint32_t cs_no, 410 uint32_t ddr_en, 411 uint32_t flash_type); 412 413 void (*qspi_config_qflash4_read)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t addr); 414 415 void (*qspi_manual_read)(qspi_reg_t *qspi_reg, 416 spi_config_t *spi_config, 417 uint32_t addr, 418 uint8_t *data, 419 uint32_t hsize, 420 uint32_t len_in_bytes, 421 uint32_t dma_flags, 422 void *udmaHandle, 423 void *rpdmaHandle); 424 425 void (*qspi_auto_init)(qspi_reg_t *qspi_reg, spi_config_t *spi_config); 426 427 void (*qspi_auto_read)(uint32_t cs_no, 428 uint32_t addr, 429 uint8_t *data, 430 uint32_t hsize, 431 uint32_t len_in_bytes, 432 spi_config_t *spi_config, 433 uint32_t dma_flags); 434 435 void (*qspi_flash_init)(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms); 436 437 void (*qspi_spi_init)(qspi_reg_t *qspi_reg, 438 spi_config_t *spi_config, 439 uint32_t RSI_QSPI_FlashInit_req, 440 uint32_t wr_reg_delay_ms, 441 uint8_t fifo_thrsld); 442 443 void (*qspi_spi_erase)(qspi_reg_t *qspi_reg, 444 spi_config_t *spi_config, 445 uint32_t erase_cmd, 446 uint32_t blk_sec_addr, 447 uint32_t dis_hw_ctrl, 448 uint32_t wr_reg_delay_ms); 449 450 uint32_t (*qspi_spi_write)(qspi_reg_t *qspi_reg, 451 spi_config_t *spi_config, 452 uint32_t write_cmd, 453 uint32_t addr, 454 uint8_t *data, 455 uint32_t len_in_bytes, 456 uint16_t page_size, 457 uint32_t hsize, 458 uint32_t dis_hw_ctrl, 459 uint32_t wr_reg_delay_ms, 460 uint32_t check_en, 461 uint32_t dma_flags, 462 void *udmaHandle, 463 void *rpdmaHandle); 464 465 void (*qspi_spi_read)(qspi_reg_t *qspi_reg, 466 spi_config_t *spi_config, 467 uint32_t addr, 468 uint8_t *data, 469 uint32_t hsize, 470 uint32_t len_in_bytes, 471 uint32_t dma_flags, 472 void *udmaHandle, 473 void *rpdmaHandle); 474 void (*RSI_QSPI_ConfigureQspiRead)(spi_config_t *spi_config, qspi_func_t *qspi_func); 475 476 void (*RSI_QSPI_ConfigureQspiWrite)(spi_config_t *spi_config, qspi_func_t *qspi_func); 477 void (*qspi_usleep)(uint32_t delay_us); // function ptr for halting processor for delay (us) specified 478 479 void (*qspi_write_block_protect)(qspi_reg_t *qspi_reg, 480 uint32_t protect, 481 uint32_t cs_no, 482 uint32_t num_prot_bytes, 483 uint32_t wr_reg_delay_ms); 484 485 #if defined(SLI_SI917) || defined(SLI_SI915) 486 #if defined(SLI_SI917B0) || defined(SLI_SI915) 487 void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg, 488 uint8_t mode, 489 uint32_t *key1, 490 uint32_t *key2, 491 uint32_t key_len, 492 uint32_t kh_enable); 493 #else 494 void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg, uint8_t mode, uint32_t *key, uint32_t kh_enable); 495 #endif 496 #else 497 void (*qspi_qspiload_key)(qspi_reg_t *qspi_reg, uint32_t *key, uint32_t kh_enable); 498 #endif 499 void (*qspi_qspiload_nonce)(qspi_reg_t *qspi_reg, uint32_t *nonce); 500 void (*qspi_seg_sec_en)(qspi_reg_t *qspi_reg, uint32_t seg_no, uint32_t start_addr, uint32_t end_addr); 501 void (*qspi_status_control_reg_write)(spi_config_t *spi_config, 502 qspi_reg_t *qspi_reg, 503 uint16_t write_command, 504 uint32_t addr, 505 uint16_t write_value, 506 uint32_t cs_no, 507 uint32_t wr_reg_delay_ms); 508 void (*qspi_flash_protection)(spi_config_t *spi_config, 509 qspi_reg_t *qspi_reg, 510 uint32_t protection, 511 uint32_t wr_reg_delay_ms); 512 513 void (*RSI_QSPI_ConfigQspiDll)(spi_config_t *spi_config, qspi_reg_t *qspi_reg); 514 515 void (*RSI_QSPI_ResetFlash)(qspi_reg_t *qspi_reg, uint32_t cs_no); 516 517 void (*RSI_QSPI_UpdateOperatingMode_and_ResetType)(qspi_reg_t *qspi_reg, uint32_t operating_mode); 518 }; 519 520 // SPI API LIST 521 522 uint32_t qspi_flash_reg_read(qspi_reg_t *qspi_reg, uint8_t reg_read_cmd, uint32_t cs_no, spi_config_t *spi_config); 523 524 void qspi_status_reg_write(qspi_reg_t *qspi_reg, 525 uint32_t write_value, 526 spi_config_t *spi_config, 527 uint32_t wr_reg_delay_ms); 528 529 void qspi_enable_status_reg_write(qspi_reg_t *qspi_reg, uint32_t flash_type, spi_config_t *spi_config, uint32_t cs_no); 530 531 uint32_t qspi_wait_flash_status_Idle(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms); 532 533 void qspi_spi_init(qspi_reg_t *qspi_reg, 534 spi_config_t *spi_config, 535 uint32_t flash_init_req, 536 uint32_t wr_reg_delay_ms, 537 uint8_t fifo_thrsld); 538 #define FLASH_INIT_REQ 1 539 #define SKIP_FLASH_INIT 0 540 541 void qspi_spi_erase(qspi_reg_t *qspi_reg, 542 spi_config_t *spi_config, 543 uint32_t erase_cmd, 544 uint32_t blk_sec_addr, 545 uint32_t dis_hw_ctrl, 546 uint32_t wr_reg_delay_ms); 547 // chip erase cmd 548 #define CHIP_ERASE 0xC7 549 // block erase cmd 550 #define BLOCK_ERASE 0xD8 551 // sector erase cmd 552 #define SECTOR_ERASE 0x20 553 554 // disable hw ctrl 555 #define DIS_HW_CTRL 1 556 // donot disable hw ctrl 557 #define DNT_DIS_HW_CTRL 0 558 559 // 32bit hsize 560 #define _32BIT 3 561 // 24bit hsize is not supported, so reserved 562 // reserved 2 563 // 16bit hsize 564 #define _16BIT 1 565 // 8bit hsize 566 #define _8BIT 0 567 568 uint32_t qspi_spi_write(qspi_reg_t *qspi_reg, 569 spi_config_t *spi_config, 570 uint32_t write_cmd, 571 uint32_t addr, 572 uint8_t *data, 573 uint32_t len_in_bytes, 574 uint16_t page_size, 575 uint32_t hsize, 576 uint32_t dis_hw_ctrl, 577 uint32_t wr_reg_delay_ms, 578 uint32_t check_en, 579 uint32_t dma_flags, 580 void *udmaHandle, 581 void *rpdmaHandle); 582 583 void qspi_spi_read(qspi_reg_t *qspi_reg, 584 spi_config_t *spi_config, 585 uint32_t addr, 586 uint8_t *data, 587 uint32_t hsize, 588 uint32_t len_in_bytes, 589 uint32_t dma_flags, 590 void *udmaHandle, 591 void *rpdmaHandle); 592 593 uint32_t RSI_QSPI_Aes_Encrypt_Decrypt_Standalone(qspi_reg_t *qspi_reg, 594 qspi_standalone_config_t *configs, 595 uint32_t *in_data, 596 uint32_t *out_data, 597 uint32_t data_length); 598 599 // ROM API Fuctions 600 601 void qspi_write_block_protect(qspi_reg_t *qspi_reg, 602 uint32_t protect, 603 uint32_t cs_no, 604 uint32_t num_prot_bytes, 605 uint32_t wr_reg_delay_ms); 606 void qspi_usleep(uint32_t delay_us); // function ptr for halting processor for delay (us) specified 607 void qspi_auto_init(qspi_reg_t *qspi_reg, spi_config_t *spi_config); 608 void qspi_set_flash_mode(qspi_reg_t *qspi_reg, 609 uint32_t data_mode, 610 uint32_t cs_no, 611 uint32_t ddr_en, 612 uint32_t flash_type); 613 614 void qspi_write_to_flash(qspi_reg_t *qspi_reg, uint32_t len_in_bits, uint32_t cmd_addr_data, uint32_t cs_no); 615 616 void qspi_switch_qspi2(qspi_reg_t *qspi_reg, uint32_t mode, uint32_t cs_no); 617 618 void qspi_flash_reg_write(qspi_reg_t *qspi_reg, 619 uint32_t reg_write_cmd, 620 uint32_t reg_write_value, 621 uint32_t cs_no, 622 uint32_t wr_reg_delay_ms); 623 624 void qspi_config_qflash4_read(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t addr); 625 626 void qspi_manual_read(qspi_reg_t *qspi_reg, 627 spi_config_t *spi_config, 628 uint32_t addr, 629 uint8_t *data, 630 uint32_t hsize, 631 uint32_t len_in_bytes, 632 uint32_t dma_flags, 633 void *udmaHandle, 634 void *rpdmaHandle); 635 636 void qspi_auto_read(uint32_t cs_no, 637 uint32_t addr, 638 uint8_t *data, 639 uint32_t hsize, 640 uint32_t len_in_bytes, 641 spi_config_t *spi_config, 642 uint32_t dma_flags); 643 644 void qspi_flash_init(qspi_reg_t *qspi_reg, spi_config_t *spi_config, uint32_t wr_reg_delay_ms); 645 646 #if defined(SLI_SI917) || defined(SLI_SI915) 647 #if defined(SLI_SI917B0) || defined(SLI_SI915) 648 void qspi_qspiload_key(qspi_reg_t *qspi_reg, 649 uint8_t mode, 650 uint32_t *key1, 651 uint32_t *key2, 652 uint32_t key_len, 653 uint32_t kh_enable); 654 #else 655 void qspi_qspiload_key(qspi_reg_t *qspi_reg, uint8_t mode, uint32_t *key, uint32_t kh_enable); 656 #endif 657 #else 658 void qspi_qspiload_key(qspi_reg_t *qspi_reg, uint32_t *key, uint32_t kh_enable); 659 #endif 660 661 void qspi_qspiload_nonce(qspi_reg_t *qspi_reg, uint32_t *nonce); 662 663 void qspi_seg_sec_en(qspi_reg_t *qspi_reg, uint32_t seg_no, uint32_t start_addr, uint32_t end_addr); 664 void qspi_status_control_reg_write(spi_config_t *spi_config, 665 qspi_reg_t *qspi_reg, 666 uint16_t write_command, 667 uint32_t addr, 668 uint16_t write_value, 669 uint32_t cs_no, 670 uint32_t wr_reg_delay_ms); 671 void qspi_flash_protection(spi_config_t *spi_config, 672 qspi_reg_t *qspi_reg, 673 uint32_t protection, 674 uint32_t wr_reg_delay_ms); 675 676 void RSI_QSPI_ResetFlash(qspi_reg_t *qspi_reg, uint32_t cs_no); 677 678 void RSI_QSPI_UpdateOperatingMode_and_ResetType(qspi_reg_t *qspi_reg, uint32_t operating_mode); 679 680 extern spi_config_t spi_default_config; 681 682 #ifdef __cplusplus 683 } 684 #endif 685 686 #endif // QSPI_PROTO_H 687