-
Notifications
You must be signed in to change notification settings - Fork 8
/
nvboot_spi_flash_param.h
200 lines (158 loc) · 5.69 KB
/
nvboot_spi_flash_param.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/*
* Copyright (c) 2007 - 2009 NVIDIA Corporation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of NVIDIA CORPORATION nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Defines the parameters and data structure for SPI FLASH devices.
*/
#ifndef INCLUDED_NVBOOT_SPI_FLASH_PARAM_H
#define INCLUDED_NVBOOT_SPI_FLASH_PARAM_H
#if defined(__cplusplus)
extern "C"
{
#endif
//Clock sources supported by spi driver in bootrom are pllp and clkm only
typedef enum
{
/// Specifies SPI clock source to be PLLP_Out0.
NvBootSpiClockSource_PllPOut0 = 0,
/// Specifies SPI clock source to be PLLC4_Out2.
NvBootSpiClockSource_PllC4_Muxed = 4 ,
/// Specifies SPI clock source to be ClockM.
NvBootSpiClockSource_ClockM = 6,
NvBootSpiClockSource_Num,
NvBootSpiClockSource_Force32 = 0x7FFFFFF
} NvBootSpiClockSource;
typedef enum
{
NvBootSpiDataWidth_x1 = 0,
NvBootSpiDataWidth_x2,
NvBootSpiDataWidth_x4,
NvBootSpiDataWidth_Num,
NvBootSpiDataWidth_Force32 = 0x7FFFFFF
} NvBootSpiDataWidth;
typedef enum
{
NvBootSpiXferMode_Pio = 0,
NvBootSpiXferMode_Dma,
NvBootSpiXferMode_Num,
NvBootSpiXferMode_Force32 = 0x7FFFFFF
} NvBootSpiXferMode;
typedef enum {
NvBootSpiFlashCSActivePolarity_ActiveLow = 0,
NvBootSpiFlashCSActivePolarity_ActiveHigh = 1,
NvBootSpiFlashCSActivePolarity_Num,
NvBootSpiFlashCSActivePolarity_Force32 = 0x7fffffff
} NvBootSpiFlashCSActivePolarity;
/**
* Defines the parameters for SPI FLASH devices.
*/
typedef struct NvBootSpiFlashParamsRec
{
/**
* Chip select polarity - will be selected through BOOT_DEVICE_INFO fuse only
* Can't be set again through BCT because it doesn't make any sense to set it htrough BCT
*/
NvBootSpiFlashCSActivePolarity ChipSelectPolarity;
/**
* Spi Clock selected will be 20MHz or 50MHz through the BOOT_DEVICE_INFO fuse.
* Thereafter, spi clock and divider specified in Spi flash params in BCT will be used.
*
*/
NvBool SpiClock;
/**
* Specifies the clock source to use.
*/
NvBootSpiClockSource ClockSource;
/**
* Specifes the clock divider to use.
* The value is a 7-bit value based on an input clock of 432Mhz.
* Divider = (432+ DesiredFrequency-1)/DesiredFrequency;
* Typical values:
* NORMAL_READ at 20MHz: 22
* FAST_READ at 33MHz: 14
* FAST_READ at 40MHz: 11
* FAST_READ at 50MHz: 9
*/
NvU8 ClockDivider;
/**
* Specifies the type of command for read operations.
* NV_FALSE specifies a NORMAL_READ Command
* NV_TRUE specifies a FAST_READ Command
*/
NvBool ReadCommandTypeFast;
//0 = 2k page size, 1 = 16K page size
NvU8 PageSize2kor32k;
/*
* Data Width - 0:x1 , 1:x4 (in line with the BOOT_DEVICE_INFO fuse
* definition.
* Note: It's highly unlike to change from the fuse definition but
* Data width as part of the BCT allows us to have a fallback method
* and not lose performance.
*/
NvBootSpiDataWidth DataWidth;
/*
* XferMode - 0: PIO, 1: DMA
*/
NvBootSpiXferMode XferMode;
/*
* Erase sector size - This will be same as physical sector size of
* spi flash. Reads can span across pages for some spi flash devices
* but need to check if some spi flash devices really limit reads to
* a certain page size
*/
NvU32 EraseSectorSizeLog2;
/*
* Erase time may vary from with flash devices and also based on the
* the type of erase command. This driver uses only sector erase.
* This time is to be specified in milliseconds. Most spi flash part specifications
* provide erase time for one sector of the order of a hundreds of milliseconds.
*/
NvU32 EraseTime;
/*
* Write page size for Page Program in most cases, may not be the same
* as read/erase sector size.
*/
NvU32 WritePageSizeLog2;
/* PLLC4 parameters */
NvU8 PllcDivM;
NvU8 PllcDivN;
NvU8 PllcDivP;
NvU8 PllcKVCO;
NvU8 PllcKCP;
NvU8 PllcSetup;
NvU8 TxFifoDepth;
NvU8 RxFifoDepth;
NvU8 TxFifoTriggerLevel;
NvU8 RxFifoTriggerLevel;
NvU32 DataXferTimeout;
NvU8 QuadReadDummyCycles;
NvU8 QuadReadModeCycles;
} NvBootSpiFlashParams;
#if defined(__cplusplus)
}
#endif
#endif /* #ifndef INCLUDED_NVBOOT_SPI_FLASH_PARAM_H */