xref: /rk3399_ARM-atf/include/drivers/nxp/crypto/caam/caam.h (revision d60364d48e31b33b57049d848b7462eb0e0de612)
1050a99a6SPankaj Gupta /*
2*d60364d4SJiafei Pan  * Copyright 2017-2022 NXP
3050a99a6SPankaj Gupta  *
4050a99a6SPankaj Gupta  * SPDX-License-Identifier: BSD-3-Clause
5050a99a6SPankaj Gupta  *
6050a99a6SPankaj Gupta  */
7050a99a6SPankaj Gupta 
8050a99a6SPankaj Gupta #ifndef CAAM_H
9050a99a6SPankaj Gupta #define CAAM_H
10050a99a6SPankaj Gupta 
11050a99a6SPankaj Gupta #include "caam_io.h"
12050a99a6SPankaj Gupta #include "sec_jr_driver.h"
13050a99a6SPankaj Gupta 
14050a99a6SPankaj Gupta 
15050a99a6SPankaj Gupta /* Job ring 3 is reserved for usage by sec firmware */
16050a99a6SPankaj Gupta #define DEFAULT_JR	3
17050a99a6SPankaj Gupta 
18*d60364d4SJiafei Pan #if defined(CONFIG_CHASSIS_3_2) || defined(CONFIG_CHASSIS_3) || defined(CONFIG_CHASSIS_2)
19050a99a6SPankaj Gupta #define CAAM_JR0_OFFSET			0x10000
20050a99a6SPankaj Gupta #define CAAM_JR1_OFFSET			0x20000
21050a99a6SPankaj Gupta #define CAAM_JR2_OFFSET			0x30000
22050a99a6SPankaj Gupta #define CAAM_JR3_OFFSET			0x40000
23050a99a6SPankaj Gupta #endif
24050a99a6SPankaj Gupta 
25050a99a6SPankaj Gupta enum sig_alg {
26050a99a6SPankaj Gupta 	RSA,
27050a99a6SPankaj Gupta 	ECC
28050a99a6SPankaj Gupta };
29050a99a6SPankaj Gupta 
30050a99a6SPankaj Gupta /* This function does basic SEC Initialization */
31050a99a6SPankaj Gupta int sec_init(uintptr_t nxp_caam_addr);
32050a99a6SPankaj Gupta int config_sec_block(void);
33050a99a6SPankaj Gupta uintptr_t get_caam_addr(void);
34050a99a6SPankaj Gupta 
35050a99a6SPankaj Gupta /* This function is used to submit jobs to JR */
36050a99a6SPankaj Gupta int run_descriptor_jr(struct job_descriptor *desc);
37050a99a6SPankaj Gupta 
38050a99a6SPankaj Gupta /* This function is used to instatiate the HW RNG is already not instantiated */
39050a99a6SPankaj Gupta int hw_rng_instantiate(void);
40050a99a6SPankaj Gupta 
41050a99a6SPankaj Gupta /* This function is used to return random bytes of byte_len from HW RNG */
42050a99a6SPankaj Gupta int get_rand_bytes_hw(uint8_t *bytes, int byte_len);
43050a99a6SPankaj Gupta 
44050a99a6SPankaj Gupta /* This function is used to set the hw unique key from HW CAAM */
45050a99a6SPankaj Gupta int get_hw_unq_key_blob_hw(uint8_t *hw_key, int size);
46050a99a6SPankaj Gupta 
47050a99a6SPankaj Gupta /* This function is used to fetch random number from
48050a99a6SPankaj Gupta  * CAAM of length either of 4 bytes or 8 bytes depending
49050a99a6SPankaj Gupta  * rngWidth value.
50050a99a6SPankaj Gupta  */
51050a99a6SPankaj Gupta unsigned long long get_random(int rngWidth);
52050a99a6SPankaj Gupta 
53050a99a6SPankaj Gupta #endif /* CAAM_H */
54