| #!/bin/bash |
| |
| # 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. |
| |
| set -e |
| |
| # shellcheck source=./common.sh |
| . "$(dirname "$(readlink -f "${0}")")/common.sh" |
| |
| test_read_from_flash_in_bootloader_mode_without_modifying_RDP_level() { |
| local file_read_from_flash="test.bin" |
| local original_fw_file="$1" |
| |
| # Given: |
| # * Hardware write protect is disabled |
| # * Software write protect is disabled |
| # * RDP is at level 0 |
| # |
| # Then: |
| # * Reading from flash without changing the RDP level should succeed |
| # (we're already at level 0). Thus we should be able to read the entire |
| # firmware out of flash and it should exactly match the firmware that we |
| # flashed for testing. |
| echo "Reading firmware without modifying RDP level" |
| read_from_flash_in_bootloader_mode_without_modifying_RDP_level \ |
| "${file_read_from_flash}" |
| if [[ $? -ne 0 ]]; then |
| echo "Failed to read firmware" |
| exit 1 |
| fi |
| |
| echo "Checking that value read matches the flashed version" |
| check_files_match "${file_read_from_flash}" "${original_fw_file}" |
| |
| echo "Checking that firmware is still functional" |
| check_firmware_is_functional |
| |
| rm -rf "${file_read_from_flash}" |
| } |
| |
| test_read_from_flash_in_bootloader_mode_while_setting_RDP_to_level_0() { |
| local file_read_from_flash="test.bin" |
| local original_fw_file="$1" |
| |
| # Given: |
| # * Hardware write protect is disabled |
| # * Software write protect is disabled |
| # * RDP is at level 0 |
| # |
| # Then: |
| # * Changing the RDP level to 0 should have no effect (we're already at |
| # level 0). Thus we should be able to read the entire firmware out of |
| # flash and it should exactly match the firmware that we flashed for |
| # testing. |
| echo "Reading firmware while setting RDP to level 0" |
| read_from_flash_in_bootloader_mode_while_setting_RDP_to_level_0 \ |
| "${file_read_from_flash}" |
| if [[ $? -ne 0 ]]; then |
| echo "Failed to read firmware" |
| exit 1 |
| fi |
| |
| echo "Checking that value read matches the flashed version" |
| check_files_match "${file_read_from_flash}" "${original_fw_file}" |
| |
| echo "Checking that firmware is still functional" |
| check_firmware_is_functional |
| |
| rm -rf "${file_read_from_flash}" |
| } |
| |
| echo "Running test to validate that we can read when RDP is set to level 0" |
| |
| readonly ORIGINAL_FW_FILE="$1" |
| |
| check_file_exists "${ORIGINAL_FW_FILE}" |
| |
| echo "Making sure all write protect is disabled" |
| check_hw_and_sw_write_protect_disabled |
| |
| echo "Validating initial state" |
| check_has_mp_rw_firmware |
| check_has_mp_ro_firmware |
| check_running_rw_firmware |
| check_rollback_is_unset |
| |
| echo "Checking that firmware is functional" |
| check_firmware_is_functional |
| |
| test_read_from_flash_in_bootloader_mode_without_modifying_RDP_level \ |
| "${ORIGINAL_FW_FILE}" |
| |
| |
| test_read_from_flash_in_bootloader_mode_while_setting_RDP_to_level_0 \ |
| "${ORIGINAL_FW_FILE}" |