mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00

Original progress reporting implemented in CB:49643 and it has some issues, for example: size_t start_address = start; size_t end_address = len - start; End address is anything but length minus start address. update_progress(flash, FLASHROM_PROGRESS_READ, /*current*/ start - start_address + to_read, /*total*/ end_address); Total should just be length if that's how current value is computed. --- libflashrom needs to know total size ahead of time. That's init_progress() and changed update_progress(). It also needs to store the last current value to be able to update it. That's stage_progress in flashrom_flashctx. Measuring accurately amount of data which will be read/erased/written isn't easy because things can be skipped as optimizations. The next patch in the chain aims to address this, there are TODO/FIXME comments there. --- CLI shares terminal with the rest of the code and has to maintain more state to handle that reasonably well. Similar to CB:64668, an effort is made to keep the progress on a single line. Non-progress output is kept track of to know when moving to a new line cannot be avoided. --- A script to test the CLI: \#!/bin/bash t=${1:-rewW} shift if [[ $t =~ r ]]; then echo ">>> READ" ./flashrom -p dummy:emulate=W25Q128FV,freq=64mhz -r dump.rom --progress "$@" echo fi if [[ $t =~ e ]]; then echo ">>> ERASE" ./flashrom -p dummy:emulate=W25Q128FV,freq=64mhz -E --progress "$@" echo fi if [[ $t =~ w ]]; then echo ">>> WRITE (without erase)" dd if=/dev/zero of=zero.rom bs=1M count=16 2> /dev/null ./flashrom -p dummy:emulate=W25Q128FV,freq=64mhz -w zero.rom --progress "$@" echo fi if [[ $t =~ W ]]; then echo ">>> WRITE (with erase)" dd if=/dev/zero of=zero.rom bs=1M count=16 2> /dev/null dd if=/dev/random of=random.rom bs=1M count=16 2> /dev/null ./flashrom -p dummy:emulate=W25Q128FV,freq=64mhz,image=random.rom -w zero.rom --progress "$@" echo fi Co-developed-by: Anastasia Klimchuk <aklm@flashrom.org> Co-developed-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Change-Id: If1e40fc97f443c4f0c0501cef11cff1f3f84c051 Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Signed-off-by: Anastasia Klimchuk <aklm@flashrom.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/84102 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
123 lines
5.2 KiB
C
123 lines
5.2 KiB
C
/*
|
|
* This file is part of the flashrom project.
|
|
*
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef TESTS_H
|
|
#define TESTS_H
|
|
|
|
#include <fcntl.h>
|
|
#include <include/test.h>
|
|
|
|
/* helpers.c */
|
|
void address_to_bits_test_success(void **state);
|
|
void bitcount_test_success(void **state);
|
|
void minmax_test_success(void **state);
|
|
void strcat_realloc_test_success(void **state);
|
|
void tolower_string_test_success(void **state);
|
|
void reverse_byte_test_success(void **state);
|
|
void reverse_bytes_test_success(void **state);
|
|
|
|
/* flashrom.c */
|
|
void flashbuses_to_text_test_success(void **state);
|
|
|
|
/* spi25.c */
|
|
void spi_write_enable_test_success(void **state);
|
|
void spi_write_disable_test_success(void **state);
|
|
void default_spi_read_test_success(void **state);
|
|
void probe_spi_rdid_test_success(void **state);
|
|
void probe_spi_rdid4_test_success(void **state);
|
|
void probe_spi_rems_test_success(void **state);
|
|
void probe_spi_res1_test_success(void **state);
|
|
void probe_spi_res2_test_success(void **state);
|
|
void probe_spi_res3_test_success(void **state);
|
|
void probe_spi_at25f_test_success(void **state);
|
|
void probe_spi_st95_test_success(void **state); /* spi95.c */
|
|
|
|
/* lifecycle.c */
|
|
void dummy_basic_lifecycle_test_success(void **state);
|
|
void dummy_probe_lifecycle_test_success(void **state);
|
|
void dummy_probe_variable_size_test_success(void **state);
|
|
void dummy_init_fails_unhandled_param_test_success(void **state);
|
|
void dummy_init_success_invalid_param_test_success(void **state);
|
|
void dummy_init_success_unhandled_param_test_success(void **state);
|
|
void dummy_null_prog_param_test_success(void **state);
|
|
void dummy_all_buses_test_success(void **state);
|
|
void dummy_freq_param_init(void **state);
|
|
void nicrealtek_basic_lifecycle_test_success(void **state);
|
|
void raiden_debug_basic_lifecycle_test_success(void **state);
|
|
void raiden_debug_targetAP_basic_lifecycle_test_success(void **state);
|
|
void raiden_debug_targetEC_basic_lifecycle_test_success(void **state);
|
|
void raiden_debug_target0_basic_lifecycle_test_success(void **state);
|
|
void raiden_debug_target1_basic_lifecycle_test_success(void **state);
|
|
void dediprog_basic_lifecycle_test_success(void **state);
|
|
void linux_mtd_probe_lifecycle_test_success(void **state);
|
|
void linux_spi_probe_lifecycle_test_success(void **state);
|
|
void parade_lspcon_basic_lifecycle_test_success(void **state);
|
|
void parade_lspcon_no_allow_brick_test_success(void **state);
|
|
void mediatek_i2c_spi_basic_lifecycle_test_success(void **state);
|
|
void mediatek_i2c_no_allow_brick_test_success(void **state);
|
|
void realtek_mst_basic_lifecycle_test_success(void **state);
|
|
void realtek_mst_no_allow_brick_test_success(void **state);
|
|
void ch341a_spi_basic_lifecycle_test_success(void **state);
|
|
void ch341a_spi_probe_lifecycle_test_success(void **state);
|
|
|
|
/* layout.c */
|
|
void included_regions_dont_overlap_test_success(void **state);
|
|
void included_regions_overlap_test_success(void **state);
|
|
void region_not_included_overlap_test_success(void **state);
|
|
void layout_pass_sanity_checks_test_success(void **state);
|
|
void layout_region_invalid_address_test_success(void **state);
|
|
void layout_region_invalid_range_test_success(void **state);
|
|
|
|
/* chip.c */
|
|
void erase_chip_test_success(void **state);
|
|
void erase_chip_with_progress(void **state);
|
|
void erase_chip_with_dummyflasher_test_success(void **state);
|
|
void read_chip_test_success(void **state);
|
|
void read_chip_with_progress(void **state);
|
|
void read_chip_with_dummyflasher_test_success(void **state);
|
|
void write_chip_test_success(void **state);
|
|
void write_chip_with_progress(void **state);
|
|
void write_chip_with_dummyflasher_test_success(void **state);
|
|
void write_chip_feature_no_erase(void **state);
|
|
void write_nonaligned_region_with_dummyflasher_test_success(void **state);
|
|
void verify_chip_test_success(void **state);
|
|
void verify_chip_with_dummyflasher_test_success(void **state);
|
|
|
|
/* chip_wp.c */
|
|
void invalid_wp_range_dummyflasher_test_success(void **state);
|
|
void set_wp_range_dummyflasher_test_success(void **state);
|
|
void switch_wp_mode_dummyflasher_test_success(void **state);
|
|
void wp_init_from_status_dummyflasher_test_success(void **state);
|
|
void full_chip_erase_with_wp_dummyflasher_test_success(void **state);
|
|
void partial_chip_erase_with_wp_dummyflasher_test_success(void **state);
|
|
void wp_get_register_values_and_masks(void **state);
|
|
|
|
/* selfcheck.c */
|
|
void selfcheck_programmer_table(void **state);
|
|
void selfcheck_flashchips_table(void **state);
|
|
void selfcheck_eraseblocks(void **state);
|
|
void selfcheck_board_matches_table(void **state);
|
|
|
|
/* erase_func_algo.c */
|
|
struct CMUnitTest *get_erase_func_algo_tests(size_t *num_tests);
|
|
struct CMUnitTest *get_erase_protected_region_algo_tests(size_t *num_tests);
|
|
void erase_function_algo_test_success(void **state);
|
|
void write_function_algo_test_success(void **state);
|
|
|
|
/* udelay.c */
|
|
void udelay_test_short(void **state);
|
|
|
|
#endif /* TESTS_H */
|