1 /*
2  * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef IMX_CAAM_H
8 #define IMX_CAAM_H
9 
10 #include <cdefs.h>
11 #include <stdint.h>
12 #include <arch.h>
13 #include <imx_regs.h>
14 
15 struct caam_job_ring {
16 	uint32_t jrmidr_ms;
17 	uint32_t jrmidr_ls;
18 };
19 
20 struct caam_rtic_mid {
21 	uint32_t rticmidr_ms;
22 	uint32_t rticmidr_ls;
23 };
24 
25 struct caam_deco {
26 	uint32_t		deco_mid_ms;
27 	uint32_t		deco_mid_ls;
28 };
29 
30 #define JOB_RING_OFFSET 0x10
31 #define DEBUGCTL_OFFSET	0x58
32 #define RES2_SIZE (DEBUGCTL_OFFSET - JOB_RING_OFFSET - \
33 	(sizeof(struct caam_job_ring) * CAAM_NUM_JOB_RINGS))
34 
35 #define RTIC_MID_OFFSET 0x60
36 #define DECORR_OFFSET	0x9C
37 #define RES3_SIZE (DECORR_OFFSET - RTIC_MID_OFFSET - \
38 	(sizeof(struct caam_rtic_mid) * CAAM_NUM_RTIC))
39 
40 #define DECO_MID_OFFSET	0xA0
41 #define DAR_OFFSET	0x120
42 #define RES4_SIZE (DAR_OFFSET - DECO_MID_OFFSET - \
43 	(sizeof(struct caam_deco) * CAAM_NUM_DECO))
44 
45 struct caam_ctrl {
46 	uint32_t		res0;
47 	uint32_t		mcfgr;
48 	uint32_t		res1;
49 	uint32_t		scfgr;
50 	struct caam_job_ring	jr[CAAM_NUM_JOB_RINGS];
51 	uint8_t			res2[RES2_SIZE];
52 	uint32_t		debuctl;
53 	uint32_t		jrstartr;
54 	struct caam_rtic_mid	mid[CAAM_NUM_RTIC];
55 	uint8_t			res3[RES3_SIZE];
56 	uint32_t		decorr;
57 	struct caam_deco	deco[CAAM_NUM_DECO];
58 	uint8_t			res4[RES4_SIZE];
59 	uint32_t		dar;
60 	uint32_t		drr;
61 } __packed;
62 
63 /* Job ring control bits */
64 #define JROWN_NS		BIT(3)
65 #define JROWN_MID		0x01
66 
67 /* Declare CAAM API */
68 void imx_caam_init(void);
69 
70 #endif /* IMX_CAAM_H */
71