diff --git a/content/boards/chromebooks/01-debugging_interfaces.md b/content/boards/chromebooks/01-debugging_interfaces.md index 29add922eeac8b1b005bd59581981c189e10f086..00e397c9e897ee36eae66f6b8122bb8fd28a060a 100644 --- a/content/boards/chromebooks/01-debugging_interfaces.md +++ b/content/boards/chromebooks/01-debugging_interfaces.md @@ -219,3 +219,97 @@ $ dut-control -p 9932 cold_reset:on If this worked as expected, congratulations! Your Chromebook is now ready to be automated in the LAVA test lab. + + +## Upgrading the Servo v4 firmware + +There are many versions of the Servo v4 firmware. It's recommended to +upgrade it to a recent version whenever possible, as older versions have +shown some issues with certain boards and +[Depthcharge](../04-bootloader_setup) versions. + +You can check the current Servo v4 firmware version using the CLI that +the Servo runs in the first serial terminal it enumerates +(`/dev/ttyUSB0` in the example below, it could be different in your +setup): + +``` +$ miniterm /dev/ttyUSB0 + +> version +Board: 3 +RO: servo_v4_v2.3.22-ecb74cc56 +RW: servo_v4_v2.3.22-ecb74cc56 +Build: servo_v4_v2.3.22-ecb74cc56 + 2019-07-23 18:07:15 @chromeos-legacy-release-us-central2-c-x32-40-2efr +``` + +The `servo_updater` tool (installed from the +[dependencies](#dependencies) above) can be used to flash the Servo v4 +firmware. To use it, first clone the [firmware-tools +repo](https://gitlab.collabora.com/chromium/firmware-tools). Then make +sure the Servo v4 is connected to your host and run: + +``` +$ cd firmware-tools +$ sudo PATH=$PWD/bin:$PATH LD_LIBRARY_PATH=$PWD/lib servo_updater -f <firmware_file> +``` + +The `servo_v4_fw` directory in `firmware-tools` includes some tested +Servo v4 firmware binaries. You can usually find these binaries in the +ChromeOS SDK (`usr/share/servo_updater/firmware/` inside the cros-build +chroot). + +If everything goes well you should see an output like this: + +``` +Current servo_v4 version is servo_v4_v2.3.22-ecb74cc56 +Available servo_v4 version is servo_v4_v2.4.35-f1113c92b +Updating to recommended version. +usb_updater2 -d 18d1:501b -n servo_v4_fw/servo_v4_v2.4.35-f1113c92b.bin +read 131072(0x20000) bytes from servo_v4_fw/servo_v4_v2.4.35-f1113c92b.bin +Found device. +found interface 4 endpoint 6, chunk_len 64 +READY +------- +start +target running protocol version 6 (type 1) +maximum PDU size: 1024 +Flash protection status: 0008 +version: servo_v4_v2.3.22-ecb74cc56 +key_version: 0 +min_rollback: -1 +offset: writable at 0x10000 +sending 0xe760 bytes to 0x10000 +------- +update complete +image updated +usb_updater2 -d 18d1:501b -n servo_v4_fw/servo_v4_v2.4.35-f1113c92b.bin +read 131072(0x20000) bytes from servo_v4_fw/servo_v4_v2.4.35-f1113c92b.bin +Found device. +found interface 4 endpoint 6, chunk_len 64 +READY +------- +start +target running protocol version 6 (type 1) +maximum PDU size: 1024 +Flash protection status: 0008 +version: servo_v4_v2.3.22-ecb74cc56 +key_version: 0 +min_rollback: -1 +offset: writable at 0 +sending 0xe8d4 bytes to 0 +------- +update complete +image updated +``` + +If you have more than one Servo v4 interface connected to the host, you +can specify which one you want to flash using the `-s <serial_number>` +option of `servo_updater`. The serial number of an interface can also be +retrieved from its CLI using the `serialno` command: + +``` +> serialno +Serial number: C1706310161 +```