/*
 * Copyright (c) 2018-2021, Renesas Electronics Corporation
 * All rights reserved.
 */

/******************************************************************************
 * @file          mfis_init.c
 * - Version      : 0.01
 * @brief         Initial setting process of MFIS.
 * .
 *****************************************************************************/
/******************************************************************************
 * History : DD.MM.YYYY Version  Description
 *         : 29.05.2020 0.01     First Release
 *****************************************************************************/

#include <mmio.h>
#include "mfis_register.h"
#include "mfis.h"

#define MFIS_EXTRQHLDCNTR_TIMER_COUNT       (0x80000001U)

void mfis_init(void)
{
    uint32_t loop;
    const uint32_t mfis_tbl[][2] = {
        { MFIS_MFIERRCTLR0, 0x9F7BFA00U },
        { MFIS_MFIERRCTLR1, 0x9207FAFFU },
        { MFIS_MFIERRCTLR2, 0xFFFFFFFFU },
        { MFIS_MFIERRCTLR3, 0x1FFFFFFFU },
        { MFIS_MFIERRCTLR4, 0x119EFC0BU },
        { MFIS_MFIERRCTLR5, 0x00000000U },
        { MFIS_MFIERRCTLR6, 0x00000000U },
        { MFIS_MFIERRCTLR7, 0xF8050000U },
        { MFIS_MFIERRCTLR8, 0x01E00F84U },
        { MFIS_MFIERRCTLR9, 0xFF00175FU },
        { MFIS_MFIERRCTLR10, 0x00000000U },
        { MFIS_MFIERRCTLR11, 0x00000000U },

        { MFIS_MFIERRTGTR0, 0x80000000U },
        { MFIS_MFIERRTGTR1, 0x80000017U },
        { MFIS_MFIERRTGTR2, 0x00000000U },
        { MFIS_MFIERRTGTR3, 0x00000000U },
        { MFIS_MFIERRTGTR4, 0x00000000U },
        { MFIS_MFIERRTGTR5, 0x00000000U },
        { MFIS_MFIERRTGTR6, 0x00000000U },
        { MFIS_MFIERRTGTR7, 0x00000000U },
        { MFIS_MFIERRTGTR8, 0x00000080U },
        { MFIS_MFIERRTGTR9, 0xFF000000U },
        { MFIS_MFIERRTGTR10, 0x00000000U },
        { MFIS_MFIERRTGTR11, 0x00000000U },
    };

    for (loop = 0U;
        loop < (sizeof(mfis_tbl) / sizeof(mfis_tbl[0]));
        loop++)
    {
            mmio_write_32((uintptr_t)mfis_tbl[loop][0],
                                     mfis_tbl[loop][1]);
    }

    mmio_write_32((uintptr_t)MFIS_MFIEXTRQHLDCNTR,
                             MFIS_EXTRQHLDCNTR_TIMER_COUNT);
}
/* End of function mfis_init */

