| #!/usr/bin/env python3 |
| # |
| # Copyright (c) 2019 Intel Corporation |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import os |
| import argparse |
| import logging |
| |
| from colorama import Fore, Style |
| from lib.loader import FirmwareLoader, FirmwareStatus |
| import lib.platforms as plat_def |
| |
| |
| def check_args(args): |
| # Check if firmware exists |
| firmware_abs = os.path.abspath(args.firmware) |
| if not os.path.exists(firmware_abs): |
| raise ValueError("File not found: %s" % firmware_abs) |
| |
| |
| def parse_args(): |
| arg_parser = argparse.ArgumentParser(description="ADSP firmware loader") |
| arg_parser.add_argument("-f", "--firmware", required=True, |
| help="ADSP firmware file to load") |
| arg_parser.add_argument("-d", "--debug", default=False, action='store_true', |
| help="Display debug information") |
| args = arg_parser.parse_args() |
| check_args(args) |
| return args |
| |
| |
| def main(): |
| """ Main Entry Point """ |
| |
| args = parse_args() |
| |
| log_level = logging.INFO |
| if args.debug: |
| log_level = logging.DEBUG |
| logging.basicConfig(level=log_level, format="%(message)s") |
| |
| logging.info("Start firmware downloading...") |
| fw_loader = FirmwareLoader() |
| |
| # Use Stream #7 for firmware download DMA |
| fw_loader.init(plat_def.DMA_ID) |
| |
| logging.info("Reset DSP...") |
| fw_loader.reset_dsp() |
| FirmwareStatus(fw_loader.dev.fw_status.value).print() |
| logging.info(" IPC CMD : %s" % fw_loader.dev.ipc_cmd) |
| logging.info(" IPC LEN : %s" % fw_loader.dev.ipc_len) |
| |
| logging.info("Booting up DSP...") |
| fw_loader.boot_dsp() |
| FirmwareStatus(fw_loader.dev.fw_status.value).print() |
| |
| fw_loader.wait_for_fw_boot_status(plat_def.BOOT_STATUS_INIT_DONE) |
| |
| logging.info("Downloading firmware...") |
| fw_loader.download_firmware(args.firmware) |
| |
| logging.info("Checking firmware status...") |
| if fw_loader.check_fw_boot_status(plat_def.BOOT_STATUS_FW_ENTERED): |
| logging.info(Fore.LIGHTGREEN_EX + |
| "Firmware download completed successfully" |
| + Style.RESET_ALL) |
| logging.info("Reading IPC FwReady Message...") |
| fw_loader.ipc.read_fw_ready() |
| else: |
| logging.error(Fore.RED + |
| "!!!!! Failed to download firmware !!!!!" |
| + Style.RESET_ALL) |
| fw_loader.close() |
| |
| |
| if __name__ == "__main__": |
| try: |
| main() |
| os._exit(0) |
| except KeyboardInterrupt: # Ctrl-C |
| os._exit(14) |
| except SystemExit: |
| raise |
| except BaseException: |
| import traceback |
| traceback.print_exc() |
| os._exit(16) |