diff options
Diffstat (limited to 'source/hal/hal.c')
-rw-r--r-- | source/hal/hal.c | 211 |
1 files changed, 8 insertions, 203 deletions
diff --git a/source/hal/hal.c b/source/hal/hal.c index d78ac95..2715a17 100644 --- a/source/hal/hal.c +++ b/source/hal/hal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Arm Limited. All rights reserved. + * Copyright (c) 2022 Arm Limited. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +16,6 @@ */ #include "hal.h" /* API */ -#include "hal_config.h" /* HAL configuration */ #include "platform_drivers.h" /* Platform drivers */ #include "log_macros.h" /* Logging macros */ @@ -24,46 +23,6 @@ #include <assert.h> #include <string.h> -#if defined(ARM_NPU) - -#include "ethosu_mem_config.h" /* Arm Ethos-U memory config */ -#include "ethosu_driver.h" /* Arm Ethos-U driver header */ -#include "timing_adapter.h" /* Arm Ethos-U timing adapter driver header */ - -#if defined(TIMING_ADAPTER_AVAILABLE) -#include "timing_adapter_settings.h" /* Arm Ethos-U timing adapter settings */ -#endif /* defined(TIMING_ADAPTER_AVAILABLE) */ - -struct ethosu_driver ethosu_drv; /* Default Ethos-U device driver */ - -#if defined(ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) - static uint8_t cache_arena[ETHOS_U_CACHE_BUF_SZ] CACHE_BUF_ATTRIBUTE; -#else /* defined (ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) */ - static uint8_t* cache_arena = NULL; -#endif /* defined (ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) */ - -/** - * @brief Initialises the Arm Ethos-U NPU - * @return 0 if successful, error code otherwise - **/ -static int arm_npu_init(void); - -static uint8_t * get_cache_arena() -{ - return cache_arena; -} - -static size_t get_cache_arena_size() -{ -#if defined(ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) - return sizeof(cache_arena); -#else /* defined (ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) */ - return 0; -#endif /* defined (ETHOS_U_CACHE_BUF_SZ) && (ETHOS_U_CACHE_BUF_SZ > 0) */ -} - -#endif /* ARM_NPU */ - int hal_init(hal_platform* platform, data_acq_module* data_acq, data_psn_module* data_psn, platform_timer* timer) { @@ -96,14 +55,14 @@ int hal_platform_init(hal_platform* platform) /* Initialise platform */ if (0 != (state = platform->platform_init())) { - printf_err("failed to initialise platform %s\n", platform->plat_name); + printf_err("Failed to initialise platform %s\n", platform->plat_name); return state; } /* Initialise the data acquisition module */ if (0 != (state = data_acq_channel_init(platform->data_acq))) { if (!platform->data_acq->inited) { - printf_err("failed to initialise data acq module: %s\n", + printf_err("Failed to initialise data acq module: %s\n", platform->data_acq->system_name); } hal_platform_release(platform); @@ -112,29 +71,20 @@ int hal_platform_init(hal_platform* platform) /* Initialise the presentation module */ if (0 != (state = data_psn_system_init(platform->data_psn))) { - printf_err("failed to initialise data psn module: %s\n", + printf_err("Failed to initialise data psn module: %s\n", platform->data_psn->system_name); data_acq_channel_release(platform->data_acq); hal_platform_release(platform); return state; } -#if defined(ARM_NPU) - - /* If Arm Ethos-U NPU is to be used, we initialise it here */ - if (0 != (state = arm_npu_init())) { - return state; - } - -#endif /* ARM_NPU */ - - /* followed by the timer module */ + /* Followed by the timer module */ init_timer(platform->timer); info("%s platform initialised\n", platform->plat_name); - debug("using %s module for data acquisition\n", + debug("Using %s module for data acquisition\n", platform->data_acq->system_name); - debug("using %s module for data presentation\n", + debug("Using %s module for data presentation\n", platform->data_psn->system_name); platform->inited = !state; @@ -149,151 +99,6 @@ void hal_platform_release(hal_platform *platform) data_psn_system_release(platform->data_psn); hal_platform_clear(platform); - info("releasing platform %s\n", platform->plat_name); + info("Releasing platform %s\n", platform->plat_name); platform->platform_release(); } - -#if defined(ARM_NPU) -/** - * @brief Defines the Ethos-U interrupt handler: just a wrapper around the default - * implementation. - **/ -static void arm_npu_irq_handler(void) -{ - /* Call the default interrupt handler from the NPU driver */ - ethosu_irq_handler(ðosu_drv); -} - -/** - * @brief Initialises the NPU IRQ - **/ -static void arm_npu_irq_init(void) -{ - const IRQn_Type ethosu_irqnum = (IRQn_Type)EthosU_IRQn; - - /* Register the EthosU IRQ handler in our vector table. - * Note, this handler comes from the EthosU driver */ - NVIC_SetVector(ethosu_irqnum, (uint32_t)arm_npu_irq_handler); - - /* Enable the IRQ */ - NVIC_EnableIRQ(ethosu_irqnum); - - debug("EthosU IRQ#: %u, Handler: 0x%p\n", - ethosu_irqnum, arm_npu_irq_handler); -} - -#if defined(TIMING_ADAPTER_AVAILABLE) - static int _arm_npu_timing_adapter_init(void) - { - #if defined (TA0_BASE) - struct timing_adapter ta_0; - struct timing_adapter_settings ta_0_settings = { - .maxr = TA0_MAXR, - .maxw = TA0_MAXW, - .maxrw = TA0_MAXRW, - .rlatency = TA0_RLATENCY, - .wlatency = TA0_WLATENCY, - .pulse_on = TA0_PULSE_ON, - .pulse_off = TA0_PULSE_OFF, - .bwcap = TA0_BWCAP, - .perfctrl = TA0_PERFCTRL, - .perfcnt = TA0_PERFCNT, - .mode = TA0_MODE, - .maxpending = 0, /* This is a read-only parameter */ - .histbin = TA0_HISTBIN, - .histcnt = TA0_HISTCNT - }; - - if (0 != ta_init(&ta_0, TA0_BASE)) { - printf_err("TA0 initialisation failed\n"); - return 1; - } - - ta_set_all(&ta_0, &ta_0_settings); - #endif /* defined (TA0_BASE) */ - - #if defined (TA1_BASE) - struct timing_adapter ta_1; - struct timing_adapter_settings ta_1_settings = { - .maxr = TA1_MAXR, - .maxw = TA1_MAXW, - .maxrw = TA1_MAXRW, - .rlatency = TA1_RLATENCY, - .wlatency = TA1_WLATENCY, - .pulse_on = TA1_PULSE_ON, - .pulse_off = TA1_PULSE_OFF, - .bwcap = TA1_BWCAP, - .perfctrl = TA1_PERFCTRL, - .perfcnt = TA1_PERFCNT, - .mode = TA1_MODE, - .maxpending = 0, /* This is a read-only parameter */ - .histbin = TA1_HISTBIN, - .histcnt = TA1_HISTCNT - }; - - if (0 != ta_init(&ta_1, TA1_BASE)) { - printf_err("TA1 initialisation failed\n"); - return 1; - } - - ta_set_all(&ta_1, &ta_1_settings); - #endif /* defined (TA1_BASE) */ - - return 0; - } -#endif /* defined(TIMING_ADAPTER_AVAILABLE) */ - -static int arm_npu_init(void) -{ - int err = 0; - - /* If the platform has timing adapter blocks along with Ethos-U core - * block, initialise them here. */ -#if defined(TIMING_ADAPTER_AVAILABLE) - if (0 != (err = _arm_npu_timing_adapter_init())) { - return err; - } -#endif /* defined(TIMING_ADAPTER_AVAILABLE) */ - - /* Initialise the IRQ */ - arm_npu_irq_init(); - - /* Initialise Ethos-U device */ - const void * ethosu_base_address = (void *)(SEC_ETHOS_U_NPU_BASE); - - if (0 != (err = ethosu_init( - ðosu_drv, /* Ethos-U driver device pointer */ - ethosu_base_address, /* Ethos-U NPU's base address. */ - get_cache_arena(), /* Pointer to fast mem area - NULL for U55. */ - get_cache_arena_size(), /* Fast mem region size. */ - 1, /* Security enable. */ - 1))) { /* Privilege enable. */ - printf_err("failed to initalise Ethos-U device\n"); - return err; - } - - info("Ethos-U device initialised\n"); - - /* Get Ethos-U version */ - struct ethosu_driver_version driver_version; - struct ethosu_hw_info hw_info; - - ethosu_get_driver_version(&driver_version); - ethosu_get_hw_info(ðosu_drv, &hw_info); - - info("Ethos-U version info:\n"); - info("\tArch: v%"PRIu32".%"PRIu32".%"PRIu32"\n", - hw_info.version.arch_major_rev, - hw_info.version.arch_minor_rev, - hw_info.version.arch_patch_rev); - info("\tDriver: v%"PRIu8".%"PRIu8".%"PRIu8"\n", - driver_version.major, - driver_version.minor, - driver_version.patch); - info("\tMACs/cc: %"PRIu32"\n", (uint32_t)(1 << hw_info.cfg.macs_per_cc)); - info("\tCmd stream: v%"PRIu32"\n", hw_info.cfg.cmd_stream_version); - - return 0; -} - -#endif /* ARM_NPU */ |