/*********************************************************************************************************************** * Copyright [2020-2021] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. * * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ /** * @file sys_init.c * @brief Metal device definitions * @date 2020.10.15 * @author Copyright (c) 2020, eForce Co., Ltd. All rights reserved. * **************************************************************************** * @par History * - rev 1.0 (2020.10.15) Imada * First release **************************************************************************** */ #include #include #include #include #include #include "bsp_api.h" extern void init_resource_table(void); const metal_phys_addr_t metal_phys[] = { MBX_REG_PA, CFG_RSCTBL_MEM_PA, CFG_VRING0_BASE0_PA, CFG_VRING0_BASE1_PA, CFG_VRING_SHM_BASE0_PA, CFG_VRING_SHM_BASE1_PA, }; struct metal_device metal_dev_table[] = { /* Mailbox device */ { MBX_DEV_NAME, NULL, 1, {{(void *)MBX_REG_VA, &metal_phys[0], MBX_MAP_SIZE, (sizeof(metal_phys_addr_t) << 3), (metal_phys_addr_t)(-1), 0, {NULL}}}, {NULL}, 1, (void *)MBX_INT_NUM, }, /* Resource table */ { CFG_RSCTBL_DEV_NAME, NULL, 1, {{ (void *)(CFG_RSCTBL_MEM_VA), &metal_phys[1], CFG_RSCTBL_MAP_SIZE, (sizeof(metal_phys_addr_t) << 3), (unsigned long)(-1), 0, {NULL}, }}, {NULL}, 0, NULL, }, /* RPMSG (vring) */ { /* vring #0 CTL */ CFG_VRING_CTL_NAME0, NULL, 1, {{ (void *)(CFG_VRING0_BASE0_VA), &metal_phys[2], CFG_VRING_SIZE0, (sizeof(metal_phys_addr_t) << 3), (unsigned long)(-1), 0, {NULL}, }}, {NULL}, 0, NULL, }, { /* vring #1 CTL */ CFG_VRING_CTL_NAME1, NULL, 1, {{ (void *)(CFG_VRING0_BASE1_VA), &metal_phys[3], CFG_VRING_SIZE1, (sizeof(metal_phys_addr_t) << 3), (unsigned long)(-1), 0, {NULL}, }}, {NULL}, 0, NULL, }, { /* vring #0 SHM */ CFG_VRING_SHM_NAME0, NULL, 1, {{ (void *)(CFG_VRING_SHM_BASE0_VA), &metal_phys[4], CFG_VRING_SHM_SIZE0, (sizeof(metal_phys_addr_t) << 3), (unsigned long)(-1), 0, {NULL}, }}, {NULL}, 0, NULL, }, { /* vring #1 SHM */ CFG_VRING_SHM_NAME1, NULL, 1, {{ (void *)(CFG_VRING_SHM_BASE1_VA), &metal_phys[5], CFG_VRING_SHM_SIZE1, (sizeof(metal_phys_addr_t) << 3), (unsigned long)(-1), 0, {NULL}, }}, {NULL}, 0, NULL, }, }; int init_system(void) { unsigned int i; int ret; struct metal_init_params metal_param = METAL_INIT_DEFAULTS; struct metal_device *dev; init_resource_table(); ret = metal_init(&metal_param); if (ret) { return ret; } /* register device */ for (i = 0U; i < (sizeof(metal_dev_table) / sizeof(struct metal_device)); i++) { dev = &metal_dev_table[i]; ret = metal_register_generic_device(dev); if (ret) { break; } } return ret; } void cleanup_system(void) { metal_finish(); }