1*b525a8f0SKuldeep Singh /* 2*b525a8f0SKuldeep Singh * Copyright 2021 NXP 3*b525a8f0SKuldeep Singh * 4*b525a8f0SKuldeep Singh * SPDX-License-Identifier: BSD-3-Clause 5*b525a8f0SKuldeep Singh * 6*b525a8f0SKuldeep Singh */ 7*b525a8f0SKuldeep Singh 8*b525a8f0SKuldeep Singh 9*b525a8f0SKuldeep Singh /*! 10*b525a8f0SKuldeep Singh * @file fspi_api.h 11*b525a8f0SKuldeep Singh * @brief This file contains the FlexSPI/FSPI API to communicate 12*b525a8f0SKuldeep Singh * to attached Slave device. 13*b525a8f0SKuldeep Singh * @addtogroup FSPI_API 14*b525a8f0SKuldeep Singh * @{ 15*b525a8f0SKuldeep Singh */ 16*b525a8f0SKuldeep Singh 17*b525a8f0SKuldeep Singh #ifndef FSPI_API_H 18*b525a8f0SKuldeep Singh #define FSPI_API_H 19*b525a8f0SKuldeep Singh 20*b525a8f0SKuldeep Singh #if DEBUG_FLEXSPI 21*b525a8f0SKuldeep Singh #define SZ_57M 0x3900000u 22*b525a8f0SKuldeep Singh #endif 23*b525a8f0SKuldeep Singh 24*b525a8f0SKuldeep Singh /*! 25*b525a8f0SKuldeep Singh * Basic set of APIs. 26*b525a8f0SKuldeep Singh */ 27*b525a8f0SKuldeep Singh 28*b525a8f0SKuldeep Singh /*! 29*b525a8f0SKuldeep Singh * @details AHB read/IP Read, decision to be internal to API 30*b525a8f0SKuldeep Singh * Minimum Read size = 1Byte 31*b525a8f0SKuldeep Singh * @param[in] src_off source offset from where data to read from flash 32*b525a8f0SKuldeep Singh * @param[out] des Destination location where data needs to be copied 33*b525a8f0SKuldeep Singh * @param[in] len length in Bytes,where 1-word=4-bytes/32-bits 34*b525a8f0SKuldeep Singh * 35*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 36*b525a8f0SKuldeep Singh */ 37*b525a8f0SKuldeep Singh int xspi_read(uint32_t src_off, uint32_t *des, uint32_t len); 38*b525a8f0SKuldeep Singh /*! 39*b525a8f0SKuldeep Singh * @details Sector erase, Minimum size 40*b525a8f0SKuldeep Singh * 256KB(0x40000)/128KB(0x20000)/64K(0x10000)/4K(0x1000) 41*b525a8f0SKuldeep Singh * depending upon flash, Calls xspi_wren() internally 42*b525a8f0SKuldeep Singh * @param[out] erase_offset Destination erase location on flash which 43*b525a8f0SKuldeep Singh * has to be erased, needs to be multiple of 0x40000/0x20000/0x10000 44*b525a8f0SKuldeep Singh * @param[in] erase_len length in bytes in Hex like 0x100000 for 1MB, minimum 45*b525a8f0SKuldeep Singh * erase size is 1 sector(0x40000/0x20000/0x10000) 46*b525a8f0SKuldeep Singh * 47*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 48*b525a8f0SKuldeep Singh */ 49*b525a8f0SKuldeep Singh int xspi_sector_erase(uint32_t erase_offset, uint32_t erase_len); 50*b525a8f0SKuldeep Singh /*! 51*b525a8f0SKuldeep Singh * @details IP write, For writing data to flash, calls xspi_wren() internally. 52*b525a8f0SKuldeep Singh * Single/multiple page write can start @any offset, but performance will be low 53*b525a8f0SKuldeep Singh * due to ERRATA 54*b525a8f0SKuldeep Singh * @param[out] dst_off Destination location on flash where data needs to 55*b525a8f0SKuldeep Singh * be written 56*b525a8f0SKuldeep Singh * @param[in] src source offset from where data to be read 57*b525a8f0SKuldeep Singh * @param[in] len length in bytes,where 1-word=4-bytes/32-bits 58*b525a8f0SKuldeep Singh * 59*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 60*b525a8f0SKuldeep Singh */ 61*b525a8f0SKuldeep Singh int xspi_write(uint32_t dst_off, void *src, uint32_t len); 62*b525a8f0SKuldeep Singh /*! 63*b525a8f0SKuldeep Singh * @details fspi_init, Init function. 64*b525a8f0SKuldeep Singh * @param[in] uint32_t base_reg_addr 65*b525a8f0SKuldeep Singh * @param[in] uint32_t flash_start_addr 66*b525a8f0SKuldeep Singh * 67*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 68*b525a8f0SKuldeep Singh */ 69*b525a8f0SKuldeep Singh int fspi_init(uint32_t base_reg_addr, uint32_t flash_start_addr); 70*b525a8f0SKuldeep Singh /*! 71*b525a8f0SKuldeep Singh * @details is_flash_busy, Check if any erase or write or lock is 72*b525a8f0SKuldeep Singh * pending on flash/slave 73*b525a8f0SKuldeep Singh * @param[in] void 74*b525a8f0SKuldeep Singh * 75*b525a8f0SKuldeep Singh * @return TRUE/FLASE 76*b525a8f0SKuldeep Singh */ 77*b525a8f0SKuldeep Singh bool is_flash_busy(void); 78*b525a8f0SKuldeep Singh 79*b525a8f0SKuldeep Singh /*! 80*b525a8f0SKuldeep Singh * Advanced set of APIs. 81*b525a8f0SKuldeep Singh */ 82*b525a8f0SKuldeep Singh 83*b525a8f0SKuldeep Singh /*! 84*b525a8f0SKuldeep Singh * @details Write enable, to be used by advance users only. 85*b525a8f0SKuldeep Singh * Step 1 for sending write commands to flash. 86*b525a8f0SKuldeep Singh * @param[in] dst_off destination offset where data will be written 87*b525a8f0SKuldeep Singh * 88*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 89*b525a8f0SKuldeep Singh */ 90*b525a8f0SKuldeep Singh int xspi_wren(uint32_t dst_off); 91*b525a8f0SKuldeep Singh /*! 92*b525a8f0SKuldeep Singh * @details AHB read, meaning direct memory mapped access to flash, 93*b525a8f0SKuldeep Singh * Minimum Read size = 1Byte 94*b525a8f0SKuldeep Singh * @param[in] src_off source offset from where data to read from flash, 95*b525a8f0SKuldeep Singh * needs to be word aligned 96*b525a8f0SKuldeep Singh * @param[out] des Destination location where data needs to be copied 97*b525a8f0SKuldeep Singh * @param[in] len length in Bytes,where 1-word=4-bytes/32-bits 98*b525a8f0SKuldeep Singh * 99*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 100*b525a8f0SKuldeep Singh */ 101*b525a8f0SKuldeep Singh int xspi_ahb_read(uint32_t src_off, uint32_t *des, uint32_t len); 102*b525a8f0SKuldeep Singh /*! 103*b525a8f0SKuldeep Singh * @details IP read, READ via RX buffer from flash, minimum READ size = 1Byte 104*b525a8f0SKuldeep Singh * @param[in] src_off source offset from where data to be read from flash 105*b525a8f0SKuldeep Singh * @param[out] des Destination location where data needs to be copied 106*b525a8f0SKuldeep Singh * @param[in] len length in Bytes,where 1-word=4-bytes/32-bits 107*b525a8f0SKuldeep Singh * 108*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 109*b525a8f0SKuldeep Singh */ 110*b525a8f0SKuldeep Singh int xspi_ip_read(uint32_t src_off, uint32_t *des, uint32_t len); 111*b525a8f0SKuldeep Singh /*! 112*b525a8f0SKuldeep Singh * @details CHIP erase, Erase complete chip in one go 113*b525a8f0SKuldeep Singh * 114*b525a8f0SKuldeep Singh * @return XSPI_SUCCESS or error code 115*b525a8f0SKuldeep Singh */ 116*b525a8f0SKuldeep Singh int xspi_bulk_erase(void); 117*b525a8f0SKuldeep Singh 118*b525a8f0SKuldeep Singh /*! 119*b525a8f0SKuldeep Singh * Add test cases to confirm flash read/erase/write functionality. 120*b525a8f0SKuldeep Singh */ 121*b525a8f0SKuldeep Singh void fspi_test(uint32_t fspi_test_addr, uint32_t size, int extra); 122*b525a8f0SKuldeep Singh #endif /* FSPI_API_H */ 123