Phriction Trusted Firmware Trusted Firmware-A (TF-A) Patchdescription Platarmboardfvpfvp Io Storagecvsplatarmboardfvp Rfvp R Io Storagec
Platarmboardfvpfvp Io Storagecvsplatarmboardfvp Rfvp R Io Storagec
Platarmboardfvpfvp Io Storagecvsplatarmboardfvp Rfvp R Io Storagec
/* /* * Copyright (c) 2014-2020, ARM Limited and Contributors. | * Copyright (c) 2014-2021, ARM Limited and Contributors. * * * SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause */ */ #include <assert.h> #include <assert.h> #include <common/debug.h> #include <common/debug.h> #include <drivers/io/io_driver.h> #include <drivers/io/io_driver.h> #include <drivers/io/io_semihosting.h> #include <drivers/io/io_semihosting.h> #include <drivers/io/io_storage.h> #include <drivers/io/io_storage.h> #include <lib/semihosting.h> #include <lib/semihosting.h> #include <plat/arm/common/plat_arm.h> #include <plat/arm/common/plat_arm.h> #include <plat/common/common_def.h> #include <plat/common/common_def.h> /* Semihosting filenames */ /* Semihosting filenames */ #define BL2_IMAGE_NAME "bl2.bin" < #define BL31_IMAGE_NAME "bl31.bin" < #define BL32_IMAGE_NAME "bl32.bin" < #define BL33_IMAGE_NAME "bl33.bin" #define BL33_IMAGE_NAME "bl33.bin" #define TB_FW_CONFIG_NAME "fvp_tb_fw_config. < #define HW_CONFIG_NAME "hw_config.dtb" < #if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT #define TRUSTED_BOOT_FW_CERT_NAME "tb_fw.crt" < #define TRUSTED_KEY_CERT_NAME "trusted_key.crt" #define TRUSTED_KEY_CERT_NAME "trusted_key.crt" #define SOC_FW_KEY_CERT_NAME "soc_fw_key.crt" < #define TOS_FW_KEY_CERT_NAME "tos_fw_key.crt" < #define NT_FW_KEY_CERT_NAME "nt_fw_key.crt" #define NT_FW_KEY_CERT_NAME "nt_fw_key.crt" #define SOC_FW_CONTENT_CERT_NAME "soc_fw_content.cr < #define TOS_FW_CONTENT_CERT_NAME "tos_fw_content.cr < #define NT_FW_CONTENT_CERT_NAME "nt_fw_content.crt #define NT_FW_CONTENT_CERT_NAME "nt_fw_content.crt #endif /* TRUSTED_BOARD_BOOT */ #endif /* TRUSTED_BOARD_BOOT */ /* IO devices */ /* IO devices */ static const io_dev_connector_t *sh_dev_con; static const io_dev_connector_t *sh_dev_con; static uintptr_t sh_dev_handle; static uintptr_t sh_dev_handle; static const io_file_spec_t sh_file_spec[] = { static const io_file_spec_t sh_file_spec[] = { [BL2_IMAGE_ID] = { < .path = BL2_IMAGE_NAME, < .mode = FOPEN_MODE_RB < }, < [BL31_IMAGE_ID] = { < .path = BL31_IMAGE_NAME, < .mode = FOPEN_MODE_RB < }, < [BL32_IMAGE_ID] = { < .path = BL32_IMAGE_NAME, < .mode = FOPEN_MODE_RB < }, < [BL33_IMAGE_ID] = { [BL33_IMAGE_ID] = { .path = BL33_IMAGE_NAME, .path = BL33_IMAGE_NAME, .mode = FOPEN_MODE_RB .mode = FOPEN_MODE_RB }, }, [TB_FW_CONFIG_ID] = { < .path = TB_FW_CONFIG_NAME, < .mode = FOPEN_MODE_RB < }, < [HW_CONFIG_ID] = { < .path = HW_CONFIG_NAME, < .mode = FOPEN_MODE_RB < }, < #if TRUSTED_BOARD_BOOT #if TRUSTED_BOARD_BOOT [TRUSTED_BOOT_FW_CERT_ID] = { < .path = TRUSTED_BOOT_FW_CERT_NAME, < .mode = FOPEN_MODE_RB < }, < [TRUSTED_KEY_CERT_ID] = { [TRUSTED_KEY_CERT_ID] = { .path = TRUSTED_KEY_CERT_NAME, .path = TRUSTED_KEY_CERT_NAME, .mode = FOPEN_MODE_RB .mode = FOPEN_MODE_RB }, }, [SOC_FW_KEY_CERT_ID] = { < .path = SOC_FW_KEY_CERT_NAME, < .mode = FOPEN_MODE_RB < }, < [TRUSTED_OS_FW_KEY_CERT_ID] = { < .path = TOS_FW_KEY_CERT_NAME, < .mode = FOPEN_MODE_RB < }, < [NON_TRUSTED_FW_KEY_CERT_ID] = { [NON_TRUSTED_FW_KEY_CERT_ID] = { .path = NT_FW_KEY_CERT_NAME, .path = NT_FW_KEY_CERT_NAME, .mode = FOPEN_MODE_RB .mode = FOPEN_MODE_RB }, }, [SOC_FW_CONTENT_CERT_ID] = { < .path = SOC_FW_CONTENT_CERT_NAME, < .mode = FOPEN_MODE_RB < }, < [TRUSTED_OS_FW_CONTENT_CERT_ID] = { < .path = TOS_FW_CONTENT_CERT_NAME, < .mode = FOPEN_MODE_RB < }, < [NON_TRUSTED_FW_CONTENT_CERT_ID] = { [NON_TRUSTED_FW_CONTENT_CERT_ID] = { .path = NT_FW_CONTENT_CERT_NAME, .path = NT_FW_CONTENT_CERT_NAME, .mode = FOPEN_MODE_RB .mode = FOPEN_MODE_RB }, }, #endif /* TRUSTED_BOARD_BOOT */ #endif /* TRUSTED_BOARD_BOOT */ }; }; static int open_semihosting(const uintptr_t spec) static int open_semihosting(const uintptr_t spec) { { int result; int result; uintptr_t local_image_handle; uintptr_t local_image_handle; /* See if the file exists on semi-hosting.*/ /* See if the file exists on semi-hosting.*/ result = io_dev_init(sh_dev_handle, (uintptr_t)NUL result = io_dev_init(sh_dev_handle, (uintptr_t)NUL if (result == 0) { if (result == 0) { result = io_open(sh_dev_handle, spec, &loc result = io_open(sh_dev_handle, spec, &loc if (result == 0) { if (result == 0) { VERBOSE("Using Semi-hosting IO\n") VERBOSE("Using Semi-hosting IO\n") io_close(local_image_handle); io_close(local_image_handle); } } } } return result; return result; } } void plat_arm_io_setup(void) void plat_arm_io_setup(void) { { int io_result; int io_result; io_result = arm_io_setup(); io_result = arm_io_setup(); if (io_result < 0) { if (io_result < 0) { panic(); panic(); } } /* Register the additional IO devices on this plat /* Register the additional IO devices on this plat io_result = register_io_dev_sh(&sh_dev_con); io_result = register_io_dev_sh(&sh_dev_con); if (io_result < 0) { if (io_result < 0) { panic(); panic(); } } /* Open connections to devices and cache the handl /* Open connections to devices and cache the handl io_result = io_dev_open(sh_dev_con, (uintptr_t)NUL io_result = io_dev_open(sh_dev_con, (uintptr_t)NUL if (io_result < 0) { if (io_result < 0) { panic(); panic(); } } } } /* /* * FVP provides semihosting as an alternative to load imag | * FVP_R provides semihosting as an alternative to load im */ */ int plat_arm_get_alt_image_source(unsigned int image_id, u int plat_arm_get_alt_image_source(unsigned int image_id, u uintptr_t *image_spec) uintptr_t *image_spec) { { int result = open_semihosting((const uintptr_t)&sh int result = open_semihosting((const uintptr_t)&sh if (result == 0) { if (result == 0) { *dev_handle = sh_dev_handle; *dev_handle = sh_dev_handle; *image_spec = (uintptr_t)&sh_file_spec[ima *image_spec = (uintptr_t)&sh_file_spec[ima } } return result; return result; } }
Tags
None
Subscribers
None
- Last Author
- garymorrison-arm
- Last Edited
- Jul 2 2021, 10:40 PM