xref: /optee_os/core/include/drivers/ls_sec_mon.h (revision 3a34000547dd3c274ad4f91592afb862c37ed4a8)
1*3a340005SAndrew Mustea /* SPDX-License-Identifier: BSD-2-Clause */
2*3a340005SAndrew Mustea /*
3*3a340005SAndrew Mustea  * Copyright 2022 Microsoft
4*3a340005SAndrew Mustea  *
5*3a340005SAndrew Mustea  * Definitions for the NXP LX2160A-series Security Monitor (SecMon) driver.
6*3a340005SAndrew Mustea  */
7*3a340005SAndrew Mustea 
8*3a340005SAndrew Mustea #ifndef __DRIVERS_LS_SEC_MON_H
9*3a340005SAndrew Mustea #define __DRIVERS_LS_SEC_MON_H
10*3a340005SAndrew Mustea 
11*3a340005SAndrew Mustea #include <stdlib.h>
12*3a340005SAndrew Mustea #include <tee_api_types.h>
13*3a340005SAndrew Mustea 
14*3a340005SAndrew Mustea /**
15*3a340005SAndrew Mustea  * struct ls_sec_mon_data - Compact data struct of all SecMon registers.
16*3a340005SAndrew Mustea  * @hplr:	HP Lock Register.
17*3a340005SAndrew Mustea  * @hpcomr:	HP Command Register.
18*3a340005SAndrew Mustea  * @hpsicr:	HP Security Interrupt Control Register.
19*3a340005SAndrew Mustea  * @hpsvcr:	HP Security Violation Control Register.
20*3a340005SAndrew Mustea  * @hpsr:	HP Status Register.
21*3a340005SAndrew Mustea  * @hpsvsr:	HP Security Violation Status Register.
22*3a340005SAndrew Mustea  * @hphacivr:	HP High Assurance Counter IV Register.
23*3a340005SAndrew Mustea  * @hphacr:	HP High Assurance Counter Register.
24*3a340005SAndrew Mustea  * @lplr:	LP Lock Register.
25*3a340005SAndrew Mustea  * @lpcr:	LP Control Register.
26*3a340005SAndrew Mustea  * @lpmkcr:	LP Master Key Control Register.
27*3a340005SAndrew Mustea  * @lpsvcr:	LP Security Violation Control Register.
28*3a340005SAndrew Mustea  * @lptdcr:	LP Tamper Detectors Configuration Register.
29*3a340005SAndrew Mustea  * @lpsr:	LP Status Register.
30*3a340005SAndrew Mustea  * @lpsmcmr:	LP Secure Monotonic Counter MSB Register.
31*3a340005SAndrew Mustea  * @lpsmclr:	LP Secure Monotonic Counter LSB Register.
32*3a340005SAndrew Mustea  * @lppgdr:	LP Power Glitch Detector Register.
33*3a340005SAndrew Mustea  * @lpzmkr[8]:	LP Zeroizable Master Key Registers.
34*3a340005SAndrew Mustea  * @lpgpr[4]:	LP General Purpose Registers.
35*3a340005SAndrew Mustea  * @hpvidr1:	HP Version ID Register 1.
36*3a340005SAndrew Mustea  * @hpvidr2:	HP Version ID Register 2.
37*3a340005SAndrew Mustea  */
38*3a340005SAndrew Mustea struct ls_sec_mon_data {
39*3a340005SAndrew Mustea 	uint32_t hplr;
40*3a340005SAndrew Mustea 	uint32_t hpcomr;
41*3a340005SAndrew Mustea 	uint32_t hpsicr;
42*3a340005SAndrew Mustea 	uint32_t hpsvcr;
43*3a340005SAndrew Mustea 	uint32_t hpsr;
44*3a340005SAndrew Mustea 	uint32_t hpsvsr;
45*3a340005SAndrew Mustea 	uint32_t hphacivr;
46*3a340005SAndrew Mustea 	uint32_t hphacr;
47*3a340005SAndrew Mustea 	uint32_t lplr;
48*3a340005SAndrew Mustea 	uint32_t lpcr;
49*3a340005SAndrew Mustea 	uint32_t lpmkcr;
50*3a340005SAndrew Mustea 	uint32_t lpsvcr;
51*3a340005SAndrew Mustea 	uint32_t lptdcr;
52*3a340005SAndrew Mustea 	uint32_t lpsr;
53*3a340005SAndrew Mustea 	uint32_t lpsmcmr;
54*3a340005SAndrew Mustea 	uint32_t lpsmclr;
55*3a340005SAndrew Mustea 	uint32_t lppgdr;
56*3a340005SAndrew Mustea 	uint32_t lpzmkr[8];
57*3a340005SAndrew Mustea 	uint32_t lpgpr[4];
58*3a340005SAndrew Mustea 	uint32_t hpvidr1;
59*3a340005SAndrew Mustea 	uint32_t hpvidr2;
60*3a340005SAndrew Mustea };
61*3a340005SAndrew Mustea 
62*3a340005SAndrew Mustea /**
63*3a340005SAndrew Mustea  * ls_sec_mon_read() - Read a copy of the SecMon register data if the SecMon
64*3a340005SAndrew Mustea  *		       driver was successfully initialized.
65*3a340005SAndrew Mustea  * @data:	Location to save SecMon data.
66*3a340005SAndrew Mustea  *
67*3a340005SAndrew Mustea  * Return:	0 if successful or > 0 on error.
68*3a340005SAndrew Mustea  */
69*3a340005SAndrew Mustea TEE_Result ls_sec_mon_read(struct ls_sec_mon_data *data);
70*3a340005SAndrew Mustea 
71*3a340005SAndrew Mustea /**
72*3a340005SAndrew Mustea  * ls_sec_mon_status() - Check if the SecMon driver was initialized
73*3a340005SAndrew Mustea  *			 successfully.
74*3a340005SAndrew Mustea  *
75*3a340005SAndrew Mustea  * Return:	0 if init was successful or TEE_ERROR_GENERIC on init failed.
76*3a340005SAndrew Mustea  */
77*3a340005SAndrew Mustea TEE_Result ls_sec_mon_status(void);
78*3a340005SAndrew Mustea 
79*3a340005SAndrew Mustea #endif /* __DRIVERS_LS_SEC_MON_H */
80