117 | | [=#firmware-version] |
118 | | = Firmware Versioning = |
119 | | |
120 | | You can determine the firmware version of various portions of the firmware by looking for banners on the serial console. For example: |
121 | | {{{#!bash |
122 | | Gateworks Newport SPL (ea21abc Tue Dec 12 23:42:48 UTC 2017) |
123 | | |
124 | | GSC : v49 0x832c WDT:disabled board temp:61C |
125 | | RTC : 0 |
126 | | Model : GW6304-B |
127 | | ... |
128 | | NOTICE: BL1: v1.3(release):OCTEONTX_SDK_6_2_0_build_26 |
129 | | NOTICE: BL1: Built : 15:30:07, Dec 4 2017 |
130 | | ... |
131 | | U-Boot 2017.09-rc1-00023-g1fd1415 (Dec 12 2017 - 15:42:30 -0800) for Cavium OcteonTX CN81XX ARM V8 Core |
132 | | ... |
133 | | [ 0.000000] Linux version 4.14.4-00005-g9e5958b (tharvey@tharvey) (gcc version 5.3.0 (Cavium Inc. Version 0.99 build 440)) #141 SMP PREEMPT Fri Dec 15 10:18:19 PST 2017 |
134 | | ... |
135 | | Ubuntu 16.04 LTS xenial-newport ttyAMA0 |
136 | | ... |
137 | | }}} |
138 | | - The above output shows you: |
139 | | * Secondary Program Loader (SPL) is 'ea21abc' built on Tue Dec 12 23:42:48 2017. The git sha of 'ea21abc'. |
140 | | * GSC v49 0x832c |
141 | | * ATF (ARM Trusted Firmware) is v1.3 built on Dec 4 2017. |
142 | | * U-Boot is '2017.09-rc1-00023-g1fd1415' built on Dec 12 2017. |
143 | | * Linux version 4.14.4-00005-g9e5958b built on Fri Dec 15 10:18:19 PST 2017 |
144 | | * Ubuntu 16.04 (aka xenial) OS (use {{{dpkg -l | grep "^ii"}}} to see what packages and versions are installed |
145 | | |
146 | | If you want more detail on the versions of the various components of the [wiki:newport/boot Boot Firmware] you can look at the {{{version}}} file created/placed by the Newport BSP Makefile in the FAT12 filesystem. See [wiki:newport/boot#version newport/boot/version] for details. |
147 | | |
148 | | |
149 | | [=#firmware-update] |
150 | | = Updating Firmware = |
151 | | This section provides instructions for updating both GSC firmware as well as boot device firmware. |
152 | | |
153 | | There are two methods for updating firmware: |
154 | | * on a live board using Serial Console and Ethernet ('''Note that currently the eMMC FLASH can only be updated on a live board booted from either eMMC or microSD''') |
155 | | * on removable storage (ie recovery microSD) |
156 | | * using a GW16099 JTAG dongle (see [#jtag below]) ('''Note that currently only the GSC firmware can be updated via JTAG''') |
157 | | |
158 | | The various items that can be updated: |
159 | | * GSC Firmware - currently only JTAG updates are supported for Newport - see [#jtag-gsc below] |
160 | | * Boot Firmware (Everything up to and including the Bootloader) - currently must be updated from U-Boot or Linux on a live system - see [#serial-ethernet below] |
161 | | * Root Filesystem (Operating System) - currently must be updated from U-Boot or Linux on a live system - see [#serial-ethernet below] |
162 | | |
163 | | |
164 | | [=#serial-ethernet] |
165 | | == Update Firmware via Serial Console and Ethernet == |
166 | | The quickest and easiest way to update your firmware is via Serial Console and Ethernet. You can do this either in the U-Boot bootloader (recommended) or within a Linux OS. If your primary boot device is corrupt, then you can boot via an alternate boot device (ie microSD) - see [#recovery newport/recovery] for details. |
167 | | |
168 | | |
169 | | [=#serial-ethernet-uboot] |
170 | | === Update Firmware via Serial Console and Ethernet from Bootloader === |
171 | | If updating firmware via !Bootloader/Serial/Ethernet (recommended for speed) you need to setup a TFTP server to host the files for transfer. Alternatively you could load firmware files from removable storage (microSD, mSATA, or USB for example) however the transfer rate is typically very slow compared to Gigabit Ethernet. For details on setting up a TFTP server see [wiki:tftpserver here]. |
172 | | |
173 | | The following instructions assume your board target IP address is 192.168.1.1 and you have a TFTP server at 192.168.1.146. Adjust environment according to your network via 'setenv ipaddr <ipaddr>' and 'setenv serverip <serverip>'. |
174 | | |
175 | | Note that the {{{dev}}} variable needs to be set to the MMC device you are updating: |
176 | | * setenv dev 0 # boot device |
177 | | * setenv dev 1 # secondary device |
178 | | * use {{{mmc list}}} to see how they are configured |
179 | | |
180 | | The methods you use to update the firmware depends on what specifically you are trying to update. |
181 | | |
182 | | Update the entire device from a Compressed Disk Image ('[wiki:newport/boot boot firmware]' as well as OS): |
183 | | {{{#!bash |
184 | | setenv dev 0 # use 'mmc list' to show which device to use for eMMC vs microSD |
185 | | tftpboot ${loadaddr} xenial-newport.img.gz && gzwrite mmc ${dev} ${loadaddr} ${filesize} |
186 | | }}} |
187 | | - **If the image was created using a minimally sized filesystem you will want to resize it after booting to take advantage of the full partition space. For an {{{ext4}}} root filesystem on the primary MMC device run {{{resize2fs /dev/mmcblk0p2}}}.** |
188 | | |
189 | | To summarize: |
190 | | {{{#!bash |
191 | | setenv ipaddr 192.168.1.1 # sets device IP |
192 | | |
193 | | setenv serverip 192.168.1.146 # sets TFTP server IP |
194 | | |
195 | | setenv dev 0 # sets MMC device to be flashed |
196 | | |
197 | | tftpboot ${loadaddr} xenial-newport.img.gz && gzwrite mmc ${dev} ${loadaddr} ${filesize} # will flash xenial-newport.img.gz which resides in the top most directory of the TFTP server |
198 | | }}} |
199 | | |
200 | | Updating just the kernel can be done with {{{tftpboot}}} and {{{fatwrite}}}: |
201 | | {{{#!bash |
202 | | # kernel |
203 | | tftpboot $loadaddr kernel.itb && fatwrite mmc $dev:1 $loadaddr kernel.itb $filesize |
204 | | # bootscript |
205 | | tftpboot $loadaddr newport.scr && fatwrite mmc $dev:1 $loadaddr newport.scr $filesize |
206 | | }}} |
207 | | |
208 | | Updating the [wiki:newport/boot 'Boot firmware'] (everything up to and including the Bootloader): |
209 | | On a Newport booted to the bootloader: |
210 | | {{{#!bash |
211 | | mmc dev 0 # use 'mmc list' to show which device to use for eMMC vs microSD |
212 | | tftpboot ${loadaddr} firmware-newport.img && mmc write ${loadaddr} 0 8000 # update first 16MB |
213 | | mmc rescan # re-scan the mmc devices in case the partition table changed |
214 | | }}} |
215 | | |
216 | | Incorrect or out of date Boot Firmware may result in the analogue to digital conversion or registers being misinterpreted, in example: |
217 | | {{{#!bash |
218 | | GSC : v51 0x859f WDT:disabled board temp:3276C |
219 | | RTC : 0 |
220 | | Model : GW6300-B |
221 | | MFGDate : 12-13-2017 |
222 | | Serial : 757565 |
223 | | DTB : gw6300.dtb |
224 | | SoC : CN8020-850BG676-SCP-P12-G 1024KB 850/500MHz 0xa2 Pass 1.2 |
225 | | MMC0 : eMMC |
226 | | MMC1 : not detected |
227 | | Boot : eMMC non-trusted |
228 | | DRAM : 1024 MB, 1333 MT/s, DDR4 UDIMM |
229 | | J9 : PCI |
230 | | J10 : PCI |
231 | | J11 : PCI |
232 | | QLM0 : PCIE_1X1@5000MHz |
233 | | QLM1 : SGMII_1X1@1250MHz |
234 | | QLM2 : PCIE_1X1@5000MHz |
235 | | QLM3 : PCIE_1X1@5000MHz |
236 | | Serial : 2x RS232 without flow control |
237 | | PEM0 : QLM0 Link Timeout |
238 | | PEM1 : QLM2 Link Timeout |
239 | | PEM2 : QLM3 Link Timeout |
240 | | temp : 32765 - Failed High: 9000 |
241 | | vin : 7798784 - Failed High: 60000 |
242 | | 3p3 : 137088 - Failed High: 3630 |
243 | | 5p0 : 84481 - Failed High: 5500 |
244 | | 0p9 : 107521 - Failed High: 990 |
245 | | core : 8782184 - Failed High: 946 |
246 | | 1p2 : invalid |
247 | | 2p5 : invalid |
248 | | 1p0 : invalid |
249 | | 1p5 : invalid |
250 | | 1p8 : invalid |
251 | | anl : invalid |
252 | | }}} |
253 | | |
254 | | |
255 | | |
256 | | [=#serial-ethernet-linux] |
257 | | === Update Firmware via Serial Console and Ethernet from Linux === |
258 | | If booted to Linux on a board you can also update the kernel and bootscript fairly easily by mounting the FAT12 filesystem and copying the file(s): |
259 | | {{{#!bash |
260 | | mount /dev/mmcblk0p1 /mnt |
261 | | cp kernel.itb /mnt |
262 | | cp newport.scr /mnt |
263 | | }}} |
264 | | |
265 | | You can also easily update the [wiki:newport/boot 'Boot Firmware']. First prepare a boot image that contains your desired partition table, boot firmware, kernel, bootscript and U-Boot environment (see example above). Then on a booted Newport: |
266 | | {{{#!bash |
267 | | cd /tmp |
268 | | wget http://dev.gateworks.com/newport/boot_firmware/firmware-newport.img |
269 | | dd if=firmware-newport.img of=/dev/mmcblk0 |
270 | | }}} |
271 | | * Note above we are writing to {{{/dev/mmcblk0}}} and not a partition |
272 | | * Use {{{/dev/mmcblk1}}} for the secondary MMC device (ie microSD) |
273 | | * Note that Newport boards only supports MMC based boot devices |
274 | | * **Note that this overwrites the partition-table, the U-Boot environment, and the FAT12 filesystem which are things you might have customizations in.** |
275 | | |
276 | | Note that if you want to update the root filesystem itself from within Linux you can only do this by either: |
277 | | a) updating portions of the live filesystem that are not in use (ie package updates) |
278 | | b) booting to a kernel+ramdisk (ie [wiki:buildroot buildroot) and imaging the disk |