blob: bf52d8ca8a50e11270a9d68479ec1583bcd8b942 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Wilco configs."""
from __future__ import print_function
from chromite.lib import cros_logging as logging
# TODO(b/143241417): Use futility anytime flashing over ssh to avoid failures.
DEPLOY_SSH_FORCE_FUTILITY = True
def is_fast_required(_use_futility, servo):
"""Returns true if --fast is necessary to flash successfully.
The configurations in this function consistently fail on the verify step,
adding --fast removes verification of the flash and allows these configs to
flash properly. Meant to be a temporary hack until b/143240576 is fixed.
Args:
_use_futility (bool): True if futility is to be used, False if
flashrom.
servo (servo_lib.Servo): The servo connected to the target DUT.
Returns:
bool: True if fast is necessary, False otherwise.
"""
# servo_v4_with_servo_micro or servo_micro
return servo.is_micro
def get_commands(servo):
"""Get specific flash commands for wilco
Each board needs specific commands including the voltage for Vref, to turn
on and turn off the SPI flash. The get_*_commands() functions provide a
board-specific set of commands for these tasks. The voltage for this board
needs to be set to 3.3 V.
wilco care and feeding doc only lists commands for servo v2 and servo micro
TODO: support 4 byte addressing?
From wilco care and feeding doc:
4 Byte Addressing
As of 20-Aug-2019 flashrom at ToT cannot flash the 32 MB flashes that
drallion uses. If you see an error about “4 byte addressing” run the
following commands to get a useable flashrom
cd ~/trunk/src/third_party/flashrom/
git co ff7778ab25d0b343e781cffc0e45f329ee69a5a8~1
cros_workon --host start flashrom
sudo emerge flashrom
Args:
servo (servo_lib.Servo): The servo connected to the target DUT.
Returns:
list: [dut_control_on, dut_control_off, flashrom_cmd, futility_cmd]
dut_control*=2d arrays formmated like [["cmd1", "arg1", "arg2"],
["cmd2", "arg3", "arg4"]]
where cmd1 will be run before cmd2
flashrom_cmd=command to flash via flashrom
futility_cmd=command to flash via futility
"""
dut_control_on = []
dut_control_off = []
if servo.is_v2:
dut_control_on.append(['spi2_vref:pp3300', 'spi2_buf_en:on',
'spi2_buf_on_flex_en:on',
'cold_reset:on'])
dut_control_off.append(['spi2_vref:off', 'spi2_buf_en:off',
'spi2_buf_on_flex_en:off',
'cold_reset:off'])
programmer = 'ft2232_spi:type=google-servo-v2,serial=%s' % servo.serial
elif servo.is_micro:
dut_control_on.append(['spi2_vref:pp3300', 'spi2_buf_en:on',
'cold_reset:on'])
dut_control_off.append(['spi2_vref:off', 'spi2_buf_en:off',
'cold_reset:off'])
programmer = 'raiden_debug_spi:serial=%s' % servo.serial
elif servo.is_ccd:
# According to wilco care and feeding doc there is
# NO support for CCD on wilco so this will not work.
logging.error('wilco devices do not support ccd, cannot flash')
logging.info('Please use a different servo with wilco devices')
raise Exception('%s not accepted' % servo.version)
else:
raise Exception('%s not supported' % servo.version)
flashrom_cmd = ['flashrom', '-p', programmer, '-w']
futility_cmd = ['futility', 'update', '-p', programmer, '-i']
return [dut_control_on, dut_control_off, flashrom_cmd, futility_cmd]