1 /*
2  * Copyright 2024 Microchip Technology Inc. and its subsidiaries.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef _MEC_ECS_API_H
7 #define _MEC_ECS_API_H
8 
9 #include <stdbool.h>
10 #include <stddef.h>
11 #include <stdint.h>
12 
13 #include "mec_defs.h"
14 
15 /* Interfaces to any C modules */
16 #ifdef __cplusplus
17 extern "C"
18 {
19 #endif
20 
21 #define ECS_FEAT_LOCK_LASIC       0
22 #define ECS_FEAT_LOCK_ESPI        1
23 #define ECS_FEAT_LOCK_PUF         2
24 #define ECS_FEAT_LOCK_PWRGRD      6
25 #define ECS_FEAT_LOCK_KSCAN       7
26 #define ECS_FEAT_LOCK_FJ          8
27 #define ECS_FEAT_LOCK_FPU         9
28 #define ECS_FEAT_LOCK_CACHE       10
29 #define ECS_FEAT_LOCK_AES_DPA     11
30 #define ECS_FEAT_LOCK_PK_DPA      12
31 #define ECS_FEAT_LOCK_CRYPTO      13
32 #define ECS_FEAT_LOCK_BGPO_0      64
33 #define ECS_FEAT_LOCK_VCI_IN1     65
34 #define ECS_FEAT_LOCK_VCI_OVRD_IN 66
35 #define ECS_FEAT_LOCK_VCI_OUT1    67
36 #define ECS_FEAT_LOCK_VCI_OUT2    68
37 #define ECS_FEAT_LOCK_RSYS_PIN    69
38 #define ECS_FEAT_LOCK_EMC_SHDN    70
39 #define ECS_FEAT_LOCK_SYSPWRP     71
40 
41 void mec_hal_ecs_ictrl(uint8_t direct_en);
42 int mec_hal_ecs_is_idirect(void);
43 
44 void mec_hal_ecs_ahb_error_ctrl(uint8_t ahb_err_enable);
45 uint32_t mec_hal_ecs_ahb_error_val(uint8_t clr_after_read);
46 
47 int mec_hal_ecs_is_feature_disabled(uint8_t feature);
48 
49 void mec_hal_ecs_peci_vtt_ref_pin_ctrl(uint8_t enable);
50 uint8_t mec_hal_ecs_peci_vtt_ref_pin_is_enabled(void);
51 
52 #define ECS_ETM_PINS_DISABLE 0
53 #define ECS_ETM_PINS_ENABLE 1
54 
55 void mec_ecs_etm_pins(uint8_t enable);
56 
57 enum mec_debug_mode {
58     MEC_DEBUG_MODE_DISABLE = 0,
59     MEC_DEBUG_MODE_JTAG,
60     MEC_DEBUG_MODE_SWD,
61     MEC_DEBUG_MODE_SWD_SWV,
62     MEC_DEBUG_MODE_MAX,
63 };
64 
65 void mec_hal_ecs_debug_port(enum mec_debug_mode mode);
66 
67 enum mec_analog_comparator_config {
68     MEC_ACMP_CFG_EN0 = MEC_BIT(0),
69     MEC_ACMP_CFG_DS0 = MEC_BIT(1),
70     MEC_ACMP_CFG_LOCK0 = MEC_BIT(2),
71     MEC_ACMP_CFG_EN1 = MEC_BIT(4),
72     MEC_ACMP_CFG_DS1 = MEC_BIT(5),
73 };
74 
75 void mec_hal_ecs_analog_comparator_config(uint32_t config);
76 
77 /* ---- ECS Embedded Reset ---- */
78 bool mec_hal_ecs_emb_reset_is_enabled(void);
79 void mec_hal_ecs_emb_reset_enable(uint8_t enable);
80 uint8_t mec_hal_ecs_emb_reset_timeout_get(void);
81 void mec_hal_ecs_emb_reset_timeout(uint8_t timeout);
82 uint32_t mec_hal_ecs_emb_reset_status(void);
83 void mec_hal_ecs_emb_reset_status_clear(void);
84 uint32_t mec_hal_ecs_emb_reset_count(void);
85 
86 /* ---- PM ---- */
87 void mec_hal_ecs_debug_ifc_save_disable(void);
88 void mec_hal_ecs_debug_ifc_restore(void);
89 
90 void mec_hal_ecs_pm_save_disable(void);
91 void mec_hal_ecs_pm_restore(void);
92 
93 #ifdef __cplusplus
94 }
95 #endif
96 
97 #endif /* #ifndef _MEC_ECS_API_H */
98