blob: c137033c4e39b2e3adb91db0a2ee81b4db9d4db0 [file] [log] [blame]
/*
* Copyright (c) 2025 Microchip Technology Inc.
* SPDX-License-Identifier: Apache-2.0
*/
/** @file
* @brief Microchip XEC MCU family EC Interrupt Aggregator support.
*
*/
#ifndef _MICROCHIP_MEC_SOC_ECIA_H_
#define _MICROCHIP_MEC_SOC_ECIA_H_
#include <stddef.h>
#include <stdint.h>
#include <zephyr/arch/common/sys_bitops.h>
/* zero based GIRQ numbering. 19 total GIRQ units in the aggregator */
#define MCHP_MEC_ECIA_ZGIRQ_MAX 19
/* Historically, GIRQ's have been numbered starting with 8 */
#define MCHP_MEC_ECIA_GIRQ_FIRST 8
#define MCHP_MEC_ECIA_GIRQ_LAST 26
/* MEC ECIA GIRQ's are numbered 8 - 26 for historical reasons.
* GIRQ's 8 - 12, 22, 24 - 26 interrupt sources are only connected to the GIRQ source bits.
* GIRQ's 13 - 21, and 23 result bits can be connected to the NVIC.
*/
#define MCHP_MEC_ECIA_GIRQ_ALL_BM GENMASK(26, 8)
#define MCHP_MEC_ECIA_GIRQ_AGGR_ONLY_BM (GENMASK(12, 8) | BIT(22) | GENMASK(26, 24))
#define MCHP_MEC_ECIA_GIRQ_DIRECT_CAP_BM (GENMASK(21, 13) | BIT(23))
enum mchp_mec_ecia_girq {
MCHP_MEC_ECIA_GIRQ8 = MCHP_MEC_ECIA_GIRQ_FIRST,
MCHP_MEC_ECIA_GIRQ9,
MCHP_MEC_ECIA_GIRQ10,
MCHP_MEC_ECIA_GIRQ11,
MCHP_MEC_ECIA_GIRQ12,
MCHP_MEC_ECIA_GIRQ13,
MCHP_MEC_ECIA_GIRQ14,
MCHP_MEC_ECIA_GIRQ15,
MCHP_MEC_ECIA_GIRQ16,
MCHP_MEC_ECIA_GIRQ17,
MCHP_MEC_ECIA_GIRQ18,
MCHP_MEC_ECIA_GIRQ19,
MCHP_MEC_ECIA_GIRQ20,
MCHP_MEC_ECIA_GIRQ21,
MCHP_MEC_ECIA_GIRQ22,
MCHP_MEC_ECIA_GIRQ23,
MCHP_MEC_ECIA_GIRQ24,
MCHP_MEC_ECIA_GIRQ25,
MCHP_MEC_ECIA_GIRQ26,
MCHP_MEC_ECIA_GIRQ_MAX,
};
#define MCHP_MEC_ECIA_INIT_CLR_ENABLES 0x01u
#define MCHP_MEC_ECIA_INIT_CLR_STATUS 0x02u
int soc_ecia_init(uint32_t aggr_girq_bm, uint32_t direct_girq_bm, uint32_t flags);
int soc_ecia_girq_ctrl_bm(uint8_t girq, uint32_t bitmap, uint8_t enable);
int soc_ecia_girq_ctrl(uint8_t girq, uint8_t srcpos, uint8_t enable);
uint32_t soc_ecia_girq_get_enable_bm(uint8_t girq);
int soc_ecia_girq_status_clear_bm(uint8_t girq, uint32_t bitmap);
int soc_ecia_girq_status_clear(uint8_t girq, uint8_t srcpos);
int soc_ecia_girq_status(uint8_t girq, uint32_t *status);
int soc_ecia_girq_result(uint8_t girq, uint32_t *result);
int soc_ecia_girq_is_result(uint8_t girq, uint32_t bitmap);
int soc_ecia_girq_aggr_ctrl_bm(uint32_t girq_bitmap, uint8_t enable);
int soc_ecia_girq_aggr_ctrl(uint8_t girq, uint8_t enable);
#endif /* _MICROCHIP_MEC_SOC_ECIA_H_ */