xref: /rk3399_rockchip-uboot/board/gdsys/a38x/hre.h (revision 15f05610438981297ff628bb87e6d5789ee3fad0)
1*15f05610SDirk Eibach /*
2*15f05610SDirk Eibach  * (C) Copyright 2013
3*15f05610SDirk Eibach  * Reinhard Pfau, Guntermann & Drunck GmbH, reinhard.pfau@gdsys.cc
4*15f05610SDirk Eibach  *
5*15f05610SDirk Eibach  * SPDX-License-Identifier:	GPL-2.0+
6*15f05610SDirk Eibach  */
7*15f05610SDirk Eibach 
8*15f05610SDirk Eibach #ifndef __HRE_H
9*15f05610SDirk Eibach #define __HRE_H
10*15f05610SDirk Eibach 
11*15f05610SDirk Eibach struct key_program {
12*15f05610SDirk Eibach 	uint32_t magic;
13*15f05610SDirk Eibach 	uint32_t code_crc;
14*15f05610SDirk Eibach 	uint32_t code_size;
15*15f05610SDirk Eibach 	uint8_t code[];
16*15f05610SDirk Eibach };
17*15f05610SDirk Eibach 
18*15f05610SDirk Eibach struct h_reg {
19*15f05610SDirk Eibach 	bool valid;
20*15f05610SDirk Eibach 	uint8_t digest[20];
21*15f05610SDirk Eibach };
22*15f05610SDirk Eibach 
23*15f05610SDirk Eibach /* CCDM specific contants */
24*15f05610SDirk Eibach enum {
25*15f05610SDirk Eibach 	/* NV indices */
26*15f05610SDirk Eibach 	NV_COMMON_DATA_INDEX	= 0x40000001,
27*15f05610SDirk Eibach 	/* magics for key blob chains */
28*15f05610SDirk Eibach 	MAGIC_KEY_PROGRAM	= 0x68726500,
29*15f05610SDirk Eibach 	MAGIC_HMAC		= 0x68616300,
30*15f05610SDirk Eibach 	MAGIC_END_OF_CHAIN	= 0x00000000,
31*15f05610SDirk Eibach 	/* sizes */
32*15f05610SDirk Eibach 	NV_COMMON_DATA_MIN_SIZE	= 3 * sizeof(uint64_t) + 2 * sizeof(uint16_t),
33*15f05610SDirk Eibach };
34*15f05610SDirk Eibach 
35*15f05610SDirk Eibach int hre_verify_program(struct key_program *prg);
36*15f05610SDirk Eibach int hre_run_program(const uint8_t *code, size_t code_size);
37*15f05610SDirk Eibach 
38*15f05610SDirk Eibach #endif /* __HRE_H */
39