security_engine.h 1.74 KB
Newer Older
1
2
/*
 * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
3
 * Copyright (c) 2017-2020, NVIDIA CORPORATION.  All rights reserved.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef SECURITY_ENGINE_H
#define SECURITY_ENGINE_H

/*******************************************************************************
 * Structure definition
 ******************************************************************************/

/* Security Engine Linked List */
struct tegra_se_ll {
	/* DMA buffer address */
	uint32_t addr;
	/* Data length in DMA buffer */
	uint32_t data_len;
};

#define SE_LL_MAX_BUFFER_NUM			4
typedef struct tegra_se_io_lst {
	volatile uint32_t last_buff_num;
	volatile struct tegra_se_ll buffer[SE_LL_MAX_BUFFER_NUM];
} tegra_se_io_lst_t __attribute__((aligned(4)));

/* SE device structure */
typedef struct tegra_se_dev {
	/* Security Engine ID */
	const int se_num;
	/* SE base address */
	const uint64_t se_base;
	/* SE context size in AES blocks */
	const uint32_t ctx_size_blks;
	/* pointer to source linked list buffer */
	tegra_se_io_lst_t *src_ll_buf;
	/* pointer to destination linked list buffer */
	tegra_se_io_lst_t *dst_ll_buf;
41
42
	/* LP context buffer pointer */
	uint32_t *ctx_save_buf;
43
44
} tegra_se_dev_t;

45
46
47
48
49
50
/* PKA1 device structure */
typedef struct tegra_pka_dev {
	/* PKA1 base address */
	uint64_t pka_base;
} tegra_pka_dev_t;

51
52
53
54
55
56
57
/*******************************************************************************
 * Public interface
 ******************************************************************************/
void tegra_se_init(void);
int tegra_se_suspend(void);
void tegra_se_resume(void);
int tegra_se_save_tzram(void);
58
int32_t tegra_se_save_sha256_hash(uint64_t bl31_base, uint32_t src_len_inbyte);
59
60

#endif /* SECURITY_ENGINE_H */