/*******************************************************************************
 * DISCLAIMER
 * This software is supplied by Renesas Electronics Corporation and is only
 * intended for use with Renesas products. No other uses are authorized. This
 * software is owned by Renesas Electronics Corporation and is protected under
 * all applicable laws, including copyright laws.
 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 * Renesas reserves the right, without notice, to make changes to this software
 * and to discontinue the availability of this software. By using this software,
 * you agree to the additional terms and conditions found by accessing the
 * following link:
 * http://www.renesas.com/disclaimer
 * Copyright 2022-2023 Renesas Electronics Corporation All rights reserved.
 *******************************************************************************/

/*******************************************************************************
 * DESCRIPTION   : MCU power management driver header
 ******************************************************************************/

#ifndef CPU_ON_FOR_MCU_H__
#define CPU_ON_FOR_MCU_H__

#define MCU_PWR_TARGET_G4MH     (0U)
#define MCU_PWR_TARGET_ICUMH    (1U)

#define MCU_BOOT_NONE           (0U)
#define MCU_BOOT_G4MH           (1U)
#define MCU_BOOT_ICUMH          (2U)
#define MCU_BOOT_G4MH_ICUMH     (3U)

#define MCU_HBG_REL_CODE        (0xA5A5A501U)
#define MCU_HBG_PROT_CODE       (0xA5A5A500U)

#define G4MH_PRG_1_BOOT_ADDR    (0x10000000U)
#define G4MH_PRG_1_SIZE         (0x00100000U)
#define G4MH_PRG_2_BOOT_ADDR    (0x10100000U)
#define G4MH_PRG_2_SIZE         (0x00400000U)
#define ICUMH_PRG_BOOT_ADDR     (0x10500000U)
#define ICUMH_PRG_SIZE          (0x00100000U)

#define MCU_CSRM_MAX            (6U)
#define CODESRAM_BUS_NUM_MASK   (0x00700000U)

/*******************************************************************************
 * Function & variable prototypes
 ******************************************************************************/
void mcu_cpu_on(uint32_t target);
void mcu_set_opbt(void);
void mcu_set_icum_opbt(void);
void mcu_set_hbg(void);
void mcu_set_csrm(uint32_t boot_addr, uint32_t size);
void hbg_reg_write(uint32_t prot_reg_addr, uint32_t reg_addr, uint32_t val);

#endif /* CPU_ON_FOR_MCU_H__ */
