mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 02:20:48 +00:00
flash_ec: Add concept of servo type.
Not every servo has support for the same controls. For example, servo micro doesn't have the JTAG buf on flex elements. This commit cleans up the assumptions made and defines some variables which indicate which controls are supported on a particular servo type. The servo type is obtained by the "servo_type" control from servod. BUG=b:35648297 BRANCH=gru TEST=With some other patches, try and flash rowan with a servo v4. Change-Id: Ie10f4f73028a01a81638e9114b48c88941b8bf93 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/503475 Commit-Ready: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Nick Sanders <nsanders@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
2cb6448035
commit
ea6f53ae0c
@@ -165,6 +165,7 @@ DEFINE_string offset "0" \
|
||||
"Offset where to program the image from."
|
||||
DEFINE_integer port 9999 \
|
||||
"Port to communicate to servo on."
|
||||
# TODO(aaboagye): It's not just for SPI.
|
||||
DEFINE_boolean raiden "${FLAGS_FALSE}" \
|
||||
"Use raiden_debug_spi programmer"
|
||||
DEFINE_boolean ro "${FLAGS_FALSE}" \
|
||||
@@ -184,7 +185,18 @@ if [ -z "${FLAGS_board}" -a -z "${FLAGS_chip}" ]; then
|
||||
die "should specify a board or a chip."
|
||||
fi
|
||||
|
||||
SERVO_TYPE=servo
|
||||
DUT_CONTROL_CMD="dut-control --port=${FLAGS_port}"
|
||||
|
||||
function dut_control() {
|
||||
$DUT_CONTROL_CMD "$@" >/dev/null
|
||||
}
|
||||
|
||||
function get_servo_type() {
|
||||
if dut_control "servo_type" ; then
|
||||
$DUT_CONTROL_CMD servo_type | sed -e s/servo_type://
|
||||
fi
|
||||
}
|
||||
|
||||
BOARD=${FLAGS_board}
|
||||
BOARD_ROOT=/build/${BOARD}
|
||||
|
||||
@@ -265,7 +277,12 @@ servo_sh_hard_reset() {
|
||||
}
|
||||
|
||||
ec_reset() {
|
||||
eval ${SERVO_TYPE}_${MCU}_hard_reset
|
||||
stype=${SERVO_TYPE}
|
||||
if [[ "${SERVO_TYPE}" =~ "servo" ]] ; then
|
||||
stype=servo
|
||||
fi
|
||||
|
||||
eval ${stype}_${MCU}_hard_reset
|
||||
}
|
||||
|
||||
# force the EC to boot in serial monitor mode
|
||||
@@ -274,7 +291,13 @@ toad_ec_boot0() {
|
||||
}
|
||||
|
||||
servo_ec_boot0() {
|
||||
## This is a stupid hack.
|
||||
if [[ "${SERVO_TYPE}" =~ "_with_ccd" ]] ; then
|
||||
info "Using CCD"
|
||||
dut_control ccd_ec_boot_mode:on
|
||||
else
|
||||
dut_control ec_boot_mode:on
|
||||
fi
|
||||
}
|
||||
|
||||
servo_usbpd_boot0() {
|
||||
@@ -290,7 +313,13 @@ ec_enable_boot0() {
|
||||
if $(in_array "${BOARDS_STM32_PROG_EN[@]}" "${BOARD}"); then
|
||||
dut_control prog_en:yes
|
||||
fi
|
||||
eval ${SERVO_TYPE}_${MCU}_boot0
|
||||
if [[ "${SERVO_TYPE}" =~ "servo" ]] ; then
|
||||
stype=servo
|
||||
else
|
||||
stype=${SERVO_TYPE}
|
||||
fi
|
||||
# eval ${SERVO_TYPE}_${MCU}_boot0
|
||||
eval ${stype}_${MCU}_boot0
|
||||
}
|
||||
|
||||
# Returns 0 on success (if on beaglebone)
|
||||
@@ -372,14 +401,8 @@ function ec_image() {
|
||||
die "no EC image found : build one or specify one."
|
||||
}
|
||||
|
||||
DUT_CONTROL_CMD="dut-control --port=${FLAGS_port}"
|
||||
|
||||
function dut_control() {
|
||||
$DUT_CONTROL_CMD "$@" >/dev/null
|
||||
}
|
||||
|
||||
# Find the EC UART on the servo v2
|
||||
function ec_uart() {
|
||||
# Find the EC UART provided by servo.
|
||||
function servo_ec_uart() {
|
||||
SERVOD_FAIL="Cannot communicate with servo. is servod running ?"
|
||||
($DUT_CONTROL_CMD raw_${MCU}_uart_pty || \
|
||||
$DUT_CONTROL_CMD ${MCU}_uart_pty || \
|
||||
@@ -395,16 +418,24 @@ case "${BOARD}" in
|
||||
*) MCU="ec" ;;
|
||||
esac
|
||||
|
||||
servo_VARS="${MCU}_uart_en ${MCU}_uart_parity \
|
||||
${MCU}_uart_baudrate jtag_buf_on_flex_en jtag_buf_en dev_mode"
|
||||
# Not every control is supported on every servo type. Therfore, define which
|
||||
# controls are supported by each servo type.
|
||||
common_servo_VARS="${MCU}_uart_en ${MCU}_uart_parity ${MCU}_uart_baudrate"
|
||||
servo_v2_VARS="${common_servo_VARS} jtag_buf_on_flex_en jtag_buf_en dev_mode"
|
||||
if [ "${CHIP}" = "stm32" ] ; then
|
||||
servo_VARS+=" ${MCU}_boot_mode"
|
||||
servo_v2_VARS+=" ${MCU}_boot_mode"
|
||||
fi
|
||||
if $(in_array "${BOARDS_STM32_PROG_EN[@]}" "${BOARD}"); then
|
||||
servo_VARS+=" prog_en"
|
||||
servo_v2_VARS+=" prog_en"
|
||||
fi
|
||||
toad_VARS="${MCU}_uart_parity \
|
||||
${MCU}_uart_baudrate boot_mode"
|
||||
servo_v3_VARS="${servo_v2_VARS}"
|
||||
servo_micro_VARS="${common_servo_VARS} ${MCU}_boot_mode dev_mode"
|
||||
servo_v4_with_ccd_cr50_VARS="${common_servo_VARS} ccd_${MCU}_boot_mode \
|
||||
ec_uart_bitbang_en"
|
||||
servo_v4_with_servo_micro_VARS="${servo_micro_VARS}"
|
||||
toad_VARS="${MCU}_uart_parity ${MCU}_uart_baudrate boot_mode"
|
||||
|
||||
SERVO_TYPE="$(get_servo_type)"
|
||||
|
||||
function servo_save() {
|
||||
SERVO_VARS_NAME=${SERVO_TYPE}_VARS
|
||||
@@ -571,7 +602,7 @@ function flash_stm32() {
|
||||
info "Using serial flasher : ${STM32MON}"
|
||||
claim_pty ${EC_UART}
|
||||
|
||||
if [ "${SERVO_TYPE}" = "servo" ] ; then
|
||||
if [[ "${SERVO_TYPE}" =~ "servo" ]] ; then
|
||||
dut_control ${MCU}_uart_en:on
|
||||
fi
|
||||
dut_control ${MCU}_uart_parity:even
|
||||
@@ -704,7 +735,9 @@ IMG="$(ec_image)"
|
||||
info "Using ${MCU} image : ${IMG}"
|
||||
|
||||
if ! on_raiden && [ "${NEED_SERVO}" != "no" ] ; then
|
||||
EC_UART="$(ec_uart)"
|
||||
SERVO_TYPE="$(get_servo_type)"
|
||||
info "Using ${SERVO_TYPE}"
|
||||
EC_UART="$(servo_ec_uart)"
|
||||
info "${MCU} UART pty : ${EC_UART}"
|
||||
|
||||
save="$(servo_save)"
|
||||
|
||||
Reference in New Issue
Block a user