1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2023 The ChromiumOS Authors 2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file. 4*8617a60dSAndroid Build Coastguard Worker */ 5*8617a60dSAndroid Build Coastguard Worker 6*8617a60dSAndroid Build Coastguard Worker #include "flash_helpers.h" 7*8617a60dSAndroid Build Coastguard Worker #include "futility.h" 8*8617a60dSAndroid Build Coastguard Worker #include "updater.h" 9*8617a60dSAndroid Build Coastguard Worker setup_flash(struct updater_config ** cfg,struct updater_config_arguments * args)10*8617a60dSAndroid Build Coastguard Workerint setup_flash(struct updater_config **cfg, 11*8617a60dSAndroid Build Coastguard Worker struct updater_config_arguments *args) 12*8617a60dSAndroid Build Coastguard Worker { 13*8617a60dSAndroid Build Coastguard Worker #ifdef USE_FLASHROM 14*8617a60dSAndroid Build Coastguard Worker *cfg = updater_new_config(); 15*8617a60dSAndroid Build Coastguard Worker if (!*cfg) { 16*8617a60dSAndroid Build Coastguard Worker ERROR("Out of memory\n"); 17*8617a60dSAndroid Build Coastguard Worker return 1; 18*8617a60dSAndroid Build Coastguard Worker } 19*8617a60dSAndroid Build Coastguard Worker if (args->detect_servo) { 20*8617a60dSAndroid Build Coastguard Worker char *servo_programmer = host_detect_servo(&(*cfg)->prepare_ctrl_name); 21*8617a60dSAndroid Build Coastguard Worker if (!servo_programmer) { 22*8617a60dSAndroid Build Coastguard Worker ERROR("Problem communicating with servo\n"); 23*8617a60dSAndroid Build Coastguard Worker goto errdelete; 24*8617a60dSAndroid Build Coastguard Worker } 25*8617a60dSAndroid Build Coastguard Worker 26*8617a60dSAndroid Build Coastguard Worker if (!args->programmer) 27*8617a60dSAndroid Build Coastguard Worker args->programmer = servo_programmer; 28*8617a60dSAndroid Build Coastguard Worker else 29*8617a60dSAndroid Build Coastguard Worker free(servo_programmer); 30*8617a60dSAndroid Build Coastguard Worker } 31*8617a60dSAndroid Build Coastguard Worker 32*8617a60dSAndroid Build Coastguard Worker if (updater_setup_config(*cfg, args)) { 33*8617a60dSAndroid Build Coastguard Worker ERROR("Bad servo options\n"); 34*8617a60dSAndroid Build Coastguard Worker goto errdelete; 35*8617a60dSAndroid Build Coastguard Worker } 36*8617a60dSAndroid Build Coastguard Worker prepare_servo_control((*cfg)->prepare_ctrl_name, true); 37*8617a60dSAndroid Build Coastguard Worker return 0; 38*8617a60dSAndroid Build Coastguard Worker 39*8617a60dSAndroid Build Coastguard Worker errdelete: 40*8617a60dSAndroid Build Coastguard Worker updater_delete_config(*cfg); 41*8617a60dSAndroid Build Coastguard Worker *cfg = NULL; 42*8617a60dSAndroid Build Coastguard Worker return 1; 43*8617a60dSAndroid Build Coastguard Worker #else 44*8617a60dSAndroid Build Coastguard Worker return 1; 45*8617a60dSAndroid Build Coastguard Worker #endif /* USE_FLASHROM */ 46*8617a60dSAndroid Build Coastguard Worker } 47*8617a60dSAndroid Build Coastguard Worker teardown_flash(struct updater_config * cfg)48*8617a60dSAndroid Build Coastguard Workervoid teardown_flash(struct updater_config *cfg) 49*8617a60dSAndroid Build Coastguard Worker { 50*8617a60dSAndroid Build Coastguard Worker #ifdef USE_FLASHROM 51*8617a60dSAndroid Build Coastguard Worker prepare_servo_control(cfg->prepare_ctrl_name, false); 52*8617a60dSAndroid Build Coastguard Worker updater_delete_config(cfg); 53*8617a60dSAndroid Build Coastguard Worker #endif /* USE_FLASHROM */ 54*8617a60dSAndroid Build Coastguard Worker } 55