blob: 3e04323abea89cc0cd802ed4a75e74474286cf7d [file] [log] [blame]
/*
* Copyright (c) 2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "platform_drivers.h"
#include "uart_stdout.h"
#include "peripheral_memmap.h"
#include <string.h>
#if defined(ARM_NPU)
#include "ethosu_npu_init.h"
#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
#include "ethosu_ta_init.h"
#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
#if defined(ETHOS_U_BASE_ADDR)
#if (ETHOS_U_NPU_BASE != ETHOS_U_BASE_ADDR) && (SEC_ETHOS_U_NPU_BASE != ETHOS_U_BASE_ADDR)
#error "NPU component configured with incorrect NPU base address."
#endif /* (ETHOS_U_NPU_BASE != ETHOS_U_BASE_ADDR) && (SEC_ETHOS_U_NPU_BASE == ETHOS_U_BASE_ADDR) */
#else
#error "ETHOS_U_BASE_ADDR should have been defined by the NPU component."
#endif /* defined(ETHOS_U_BASE_ADDR) */
#endif /* ARM_NPU */
/* Platform name */
static const char* s_platform_name = DESIGN_NAME;
int platform_init(void)
{
SystemCoreClockUpdate(); /* From start up code */
/* UART init - will enable valid use of printf (stdout
* re-directed at this UART (UART0) */
UartStdOutInit();
info("%s: complete\n", __FUNCTION__);
#if defined(ARM_NPU)
int state;
/* If the platform has timing adapter blocks along with Ethos-U core
* block, initialise them here. */
#if defined(ETHOS_U_NPU_TIMING_ADAPTER_ENABLED)
int err;
if (0 != (err = arm_ethosu_timing_adapter_init())) {
return err;
}
#endif /* ETHOS_U_NPU_TIMING_ADAPTER_ENABLED */
/* If Arm Ethos-U NPU is to be used, we initialise it here */
if (0 != (state = arm_ethosu_npu_init())) {
return state;
}
#endif /* ARM_NPU */
/* Print target design info */
info("Target system design: %s\n", s_platform_name);
return 0;
}
void platform_release(void)
{
__disable_irq();
}
const char* platform_name(void)
{
return s_platform_name;
}