xref: /rk3399_ARM-atf/include/drivers/nxp/flexspi/fspi_api.h (revision 9719e19a977df3e8bf7567b3c0e1d6b2ebc5b46f)
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