blob: 8337d0ce3195237c4ba15164fc001ba8ced0155d (
plain)
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
|
echo off
Set AMI_PFAT_FLASH_CONFIGURATIONS=Flash.ini
echo AMI_PFAT_Flash_Configurations>%AMI_PFAT_FLASH_CONFIGURATIONS%
Set FITC_OUTIMAGE_MAP=%1
Set BuildBIOSMap=%2
Set WORKING_PATH=%3
Set BIOS_SVN=%4
Set /a FlashSectionSize=%5
if not exist %FITC_OUTIMAGE_MAP% (
echo Error:OutImage.map isn't found, please check the eModule of RomImgae
goto END
)
if not exist %BuildBIOSMap% (
echo Error:BuildBIOS.map isn't found, please check the PfatPubKeysAndBuildPSL.sdl
goto END
)
if not exist ForPfatName.txt (
echo Error:ForPfatName.txt isn't found, please check the eModule of RomImgae
goto END
)
FOR /F "usebackq tokens=1" %%G IN ("ForPfatName.txt") DO (
Set INPUT_BIOS_IMAGE=%%G
)
del ForPfatName.txt
FOR /F "skip=2 usebackq tokens=1,2,3,4-6" %%G IN ("%FITC_OUTIMAGE_MAP%") DO (
if "%%J %%K %%L" EQU "Flash Image " (
Set /a TOTAL_ROM_SIZE=0x%%I
)else if "%%J %%K %%L" EQU "Descriptor Region " (
Set /a DescriptorRegionStartingAddress=0x%%G
Set /a DescriptorRegionLength=0x%%I
)else if "%%J %%K %%L" EQU "GbE Region " (
Set /a GbERegionStartingAddress=0x%%G
Set /a GbERegionLength=0x%%I
)else if "%%J %%K %%L" EQU "ME Region " (
Set /a MERegionStartingAddress=0x%%G
Set /a MERegionLength=0x%%I
)else if "%%J %%K %%L" EQU "BIOS Region " (
Set /a BIOSRegionStartingAddress=0x%%G
Set /a BIOSRegionLength=0x%%I
)
)
goto Define_Flash_Type
:Define_Flash_Type
Set MeType=0
Set BiosType=1
Set EcType=2
Set OthersType=3
goto Prepare_Definitions
:Prepare_Definitions
Set DESCRIPTOR_REGION_ROM=DescriptorRegion.bin
Set GBE_REGION_ROM=GbERegion.bin
Set ME_REGION_ROM=MERegion.bin
Set PUBLIC_KEY_FILENAME=%WORKING_PATH%\PfatPublic.key
Set PRIVATE_KEY_FILENAME=%WORKING_PATH%\PfatPrivate.key
Set PFAT_VKEY_EXP=%WORKING_PATH%\.VkeyExp
Set PUBLIC_KEY_FILENAME_HASH=%WORKING_PATH%\PubKeyhash.bin
Set PFATCRYPTCON=%WORKING_PATH%\PfatCryptoCon.exe
Set KEYGEN=%WORKING_PATH%\Keygen.exe
Set CUTROM=%WORKING_PATH%\CutRom.exe
Set PSL2BIN=%WORKING_PATH%\psl2bin.exe
Set PPB=%WORKING_PATH%\PPB.exe
Set PSL_FILE=AmiPfatBiosPSL
Set PFAT_SCRIPT_HDR=%WORKING_PATH%\PfatCertHeader.bin
Set PFAT_UPDATEPKG_FILENAME=UpdatePkg.pfat
Set PFAT_SIGNATURE_FILENAME=.out_PfatCer
Set PFAT_INTREGRATION_ROM=AMIPFAT.bin
Set AMI_PFAT_HEADER=%WORKING_PATH%\AMIPFATHeader.bin
%WORKING_PATH%\BuildAmiPfatHeader.exe /Empty %AMI_PFAT_HEADER%
copy %AMI_PFAT_HEADER% %PFAT_INTREGRATION_ROM%
goto BUILD_DESCRIPTOR_REGION_ROM
:BUILD_DESCRIPTOR_REGION_ROM
Set ROM_PRIORITY=%DESCRIPTOR_REGION_ROM%
Set /a FV_StartingAddress=%DescriptorRegionStartingAddress%
Set /a FV_Length=%DescriptorRegionLength%
goto SETUP_PARAMETERS
:BUILD_GBE_REGION_ROM
Set ROM_PRIORITY=%GBE_REGION_ROM%
Set /a FV_StartingAddress=%GbERegionStartingAddress%
Set /a FV_Length=%GbERegionLength%
goto SETUP_PARAMETERS
:BUILD_ME_REGION_ROM
Set ROM_PRIORITY=%ME_REGION_ROM%
Set /a FV_StartingAddress=%MERegionStartingAddress%
Set /a FV_Length=%MERegionLength%
goto SETUP_PARAMETERS
:BUILD_BIOS_REGION_ROM_FIRST_FV
Set /a BIOS_FV_Number=0
FOR /F "usebackq tokens=1-4" %%G IN ("%BuildBIOSMap%") DO (
Set ROM_PRIORITY=%%G
Set FlashCMD=%%H
Set /a FV_StartingAddress=%BIOSRegionStartingAddress%+%%I
Set /a FV_Length=%%J
goto SETUP_PARAMETERS
)
goto BuildAmiPfatHeader
:BUILD_BIOS_REGION_ROM_REMAINDER
Set /a BIOS_FV_Number+=1
FOR /F "skip=%BIOS_FV_Number% usebackq tokens=1-4" %%G IN ("%BuildBIOSMap%") DO (
Set ROM_PRIORITY=%%G
Set FlashCMD=%%H
Set /a FV_StartingAddress=%BIOSRegionStartingAddress%+%%I
Set /a FV_Length=%%J
goto SETUP_PARAMETERS
)
goto BuildAmiPfatHeader
:SETUP_PARAMETERS
%CUTROM% %INPUT_BIOS_IMAGE% %ROM_PRIORITY% %FV_StartingAddress% %FV_Length%
Set /a FlashRemainderSize=%FV_Length%%%FlashSectionSize%
Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashSectionSize%-0x1000
Set /a START_COUNT=0
Set /a NoRemainderCount=%FV_Length%/%FlashSectionSize%
if %NoRemainderCount% GTR 0 (
Set /a NoRemainderCount-=1
Set /a SKIP_CUT_ROM=1
) else (
Set /a SKIP_CUT_ROM=0
)
if %FlashRemainderSize% EQU 0 (
Set /a END_COUNT=%FV_Length%/%FlashSectionSize%-1
) else (
Set /a END_COUNT=%FV_Length%/%FlashSectionSize%
)
Set /a END_OF_SIZE=%FV_StartingAddress%+%FV_Length%
goto AutoBuildPSL
:AutoBuildPSL
Set /a START_FLASH_SECTION=%START_COUNT%*%FlashSectionSize%
Set /a START_FLASH_SECTION_IN_MB=%START_FLASH_SECTION%/%FlashSectionSize%
Set FLASH_ROM=AMI_%START_FLASH_SECTION_IN_MB%M.rom
Set PSL_OUT_FILENAME=AmiPfatBiosPSLOutput_%START_FLASH_SECTION_IN_MB%M.bin
Set FLASH_ROM_OUTPUT_FILENAME=APFAT%START_FLASH_SECTION_IN_MB%M.bin
Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%FV_StartingAddress%
Set /a CURRENT_SIZE=%START_COUNT%+1
Set /a CURRENT_SIZE*=%FlashSectionSize%
Set /a CURRENT_SIZE-=0x1000
if %SKIP_CUT_ROM% EQU 1 (
if %NoRemainderCount% GEQ %START_COUNT% (
%CUTROM% %ROM_PRIORITY% %FLASH_ROM% %START_FLASH_SECTION% %FlashSectionSize%
Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE+=%CURRENT_SIZE%
) else (
%CUTROM% %ROM_PRIORITY% %FLASH_ROM% %START_FLASH_SECTION% %FlashRemainderSize%
Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%END_OF_SIZE%-0x1000
Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashRemainderSize%-0x1000
)
) else (
Set FLASH_ROM=%ROM_PRIORITY%
Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%END_OF_SIZE%-0x1000
Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashRemainderSize%-0x1000
)
echo begin > %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo // Set up initial values for update process >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set F0 %SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE%; Total ROM size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set B0 %SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE%; Data size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I0 0; the offset count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I1 0x1000; the FLASH BLOCK SIZE >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I2 0; Erase error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I3 0; Write error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I4 3; Max errors >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I5 0; Error Code Buffer >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set I6 0; Read error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _read; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _read_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo add I6 1; increment the read retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I6 I4; compare read retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _read_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _read; if error START_COUNT is smaller than Max errors jump to read>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _erase_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo add I2 1; increment the erase retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I2 I4; compare erase retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _erase_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _erase; if error START_COUNT is smaller than Max errors jump to erase >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _write_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo add I3 1; increment the write retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I3 I4; compare write retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _write_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _write; if error START_COUNT is smaller than Max errors jump to weite>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _loop: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _read: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo read B1 F0 I1; read block 4KB >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jne _read_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare B0 B1 I1; compare B0 vs B1 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo je _skip_erase_and_write; if B0 == B1 skip erase and write >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _erase: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo eraseblk F0; erase block 4KB >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jne _erase_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _write: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo write F0 B0 I1; write block >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jne _write_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _skip_erase_and_write: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo add I0 I1; increment offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo // check if we reached the end of the buffer. We can't increment F0.offset and B0.offset to be more than BIOS size. >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
if %SKIP_CUT_ROM% EQU 1 (
if %NoRemainderCount% GEQ %START_COUNT% (
echo compare I0 %FlashSectionSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _end; if the count is greater or equal to %FlashSectionSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
) else (
echo compare I0 %FlashRemainderSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _end; if the count is greater or equal to %FlashRemainderSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
)
) else (
echo compare I0 %FlashRemainderSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jge _end; if the count is greater or equal to %FlashRemainderSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
)
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo //Sub 4KB to offsets >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo sub F0 I1; Decrement flash offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo sub B0 I1; Decrement buffer offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _loop; work on the next block >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _read_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set If 1; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _end; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _erase_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set If 2; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo jmp _end; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _write_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set If 3; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo _end: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo set If 0; set error = 0 if success >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
echo end >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
%PSL2BIN% %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl %PSL_OUT_FILENAME%
%PPB% -script %PSL_OUT_FILENAME% -data %FLASH_ROM% -package %PFAT_UPDATEPKG_FILENAME% -use_sfam true -bios_svn %BIOS_SVN%
%PFATCRYPTCON% -z -k %PRIVATE_KEY_FILENAME% -f %PFAT_UPDATEPKG_FILENAME% -s
copy /b %PFAT_UPDATEPKG_FILENAME% + %PFAT_SCRIPT_HDR% + %PFAT_SIGNATURE_FILENAME% %FLASH_ROM_OUTPUT_FILENAME%
if exist .out_key (
del .out_key
)
del .out_PfatCer
del %PFAT_UPDATEPKG_FILENAME%
if %START_COUNT% EQU %END_COUNT% goto FinishedAutoBuildPSL
Set /a START_COUNT+=1
goto AutoBuildPSL
:FinishedAutoBuildPSL
Set /a START_COUNT=0
:IntegrateAllROMs
Set /a START_FLASH_SECTION=%START_COUNT%*%FlashSectionSize%
Set /a START_FLASH_SECTION_IN_MB=%START_FLASH_SECTION%/%FlashSectionSize%
copy /b %PFAT_INTREGRATION_ROM%+APFAT%START_FLASH_SECTION_IN_MB%M.bin %PFAT_INTREGRATION_ROM%
del APFAT%START_FLASH_SECTION_IN_MB%M.bin
del AmiPfatBiosPSLOutput_%START_FLASH_SECTION_IN_MB%M.bin
if exist AMI_%START_FLASH_SECTION_IN_MB%M.rom (
del AMI_%START_FLASH_SECTION_IN_MB%M.rom
)
if %START_COUNT% EQU %END_COUNT% goto FinishedIntegrateAllROMs
Set /a START_COUNT+=1
goto IntegrateAllROMs
:FinishedIntegrateAllROMs
del *.psl
Set /a END_COUNT+=1
del %ROM_PRIORITY%
if "%ROM_PRIORITY%" EQU "%DESCRIPTOR_REGION_ROM%" (
echo %MeType% /DESC %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
goto BUILD_GBE_REGION_ROM
)
if "%ROM_PRIORITY%" EQU "%GBE_REGION_ROM%" (
echo %MeType% /GBE %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
goto BUILD_ME_REGION_ROM
)
if "%ROM_PRIORITY%" EQU "%ME_REGION_ROM%" (
echo %MeType% /ME %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
goto BUILD_BIOS_REGION_ROM_FIRST_FV
)
echo %BiosType% %FlashCMD% %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
goto BUILD_BIOS_REGION_ROM_REMAINDER
:BuildAmiPfatHeader
%WORKING_PATH%\BuildAmiPfatHeader.exe %AMI_PFAT_FLASH_CONFIGURATIONS% %AMI_PFAT_HEADER%
copy /b %AMI_PFAT_HEADER%+%PFAT_INTREGRATION_ROM% AMIPFAT_%INPUT_BIOS_IMAGE%
del %AMI_PFAT_HEADER%
del %PFAT_INTREGRATION_ROM%
:END
|