xref: /rk3399_ARM-atf/plat/intel/soc/common/include/socfpga_fcs.h (revision 6dc00c24ab0100a2aae0f416c72470f8ed17e149)
1286b96f4SSieu Mun Tang /*
2286b96f4SSieu Mun Tang  * Copyright (c) 2020-2022, Intel Corporation. All rights reserved.
3286b96f4SSieu Mun Tang  *
4286b96f4SSieu Mun Tang  * SPDX-License-Identifier: BSD-3-Clause
5286b96f4SSieu Mun Tang  */
6286b96f4SSieu Mun Tang 
7286b96f4SSieu Mun Tang #ifndef SOCFPGA_FCS_H
8286b96f4SSieu Mun Tang #define SOCFPGA_FCS_H
9286b96f4SSieu Mun Tang 
10286b96f4SSieu Mun Tang /* FCS Definitions */
11286b96f4SSieu Mun Tang 
12286b96f4SSieu Mun Tang #define FCS_RANDOM_WORD_SIZE		8U
13286b96f4SSieu Mun Tang #define FCS_PROV_DATA_WORD_SIZE		44U
1477902fcaSSieu Mun Tang #define FCS_SHA384_WORD_SIZE		12U
15286b96f4SSieu Mun Tang 
16286b96f4SSieu Mun Tang #define FCS_RANDOM_BYTE_SIZE		(FCS_RANDOM_WORD_SIZE * 4U)
17286b96f4SSieu Mun Tang #define FCS_PROV_DATA_BYTE_SIZE		(FCS_PROV_DATA_WORD_SIZE * 4U)
1877902fcaSSieu Mun Tang #define FCS_SHA384_BYTE_SIZE		(FCS_SHA384_WORD_SIZE * 4U)
19286b96f4SSieu Mun Tang 
2002d3ef33SSieu Mun Tang #define FCS_MODE_DECRYPT		0x0
2102d3ef33SSieu Mun Tang #define FCS_MODE_ENCRYPT		0x1
2202d3ef33SSieu Mun Tang #define FCS_ENCRYPTION_DATA_0		0x10100
2302d3ef33SSieu Mun Tang #define FCS_DECRYPTION_DATA_0		0x10102
2402d3ef33SSieu Mun Tang #define FCS_OWNER_ID_OFFSET		0xC
25286b96f4SSieu Mun Tang 
26d1740831SSieu Mun Tang #define PSGSIGMA_TEARDOWN_MAGIC		0xB852E2A4
27d1740831SSieu Mun Tang #define	PSGSIGMA_SESSION_ID_ONE		0x1
28d1740831SSieu Mun Tang #define PSGSIGMA_UNKNOWN_SESSION	0xFFFFFFFF
29d1740831SSieu Mun Tang 
30d1740831SSieu Mun Tang #define	RESERVED_AS_ZERO		0x0
317facacecSSieu Mun Tang /* FCS Single cert */
327facacecSSieu Mun Tang 
337facacecSSieu Mun Tang #define FCS_BIG_CNTR_SEL		0x1
347facacecSSieu Mun Tang 
357facacecSSieu Mun Tang #define FCS_SVN_CNTR_0_SEL		0x2
367facacecSSieu Mun Tang #define FCS_SVN_CNTR_1_SEL		0x3
377facacecSSieu Mun Tang #define FCS_SVN_CNTR_2_SEL		0x4
387facacecSSieu Mun Tang #define FCS_SVN_CNTR_3_SEL		0x5
397facacecSSieu Mun Tang 
407facacecSSieu Mun Tang #define FCS_BIG_CNTR_VAL_MAX		495U
417facacecSSieu Mun Tang #define FCS_SVN_CNTR_VAL_MAX		64U
42d1740831SSieu Mun Tang 
43581182c1SSieu Mun Tang /* FCS Attestation Cert Request Parameter */
44581182c1SSieu Mun Tang 
45581182c1SSieu Mun Tang #define FCS_ALIAS_CERT			0x01
46581182c1SSieu Mun Tang #define FCS_DEV_ID_SELF_SIGN_CERT	0x02
47581182c1SSieu Mun Tang #define FCS_DEV_ID_ENROLL_CERT		0x04
48581182c1SSieu Mun Tang #define FCS_ENROLL_SELF_SIGN_CERT	0x08
49581182c1SSieu Mun Tang #define FCS_PLAT_KEY_CERT		0x10
50581182c1SSieu Mun Tang 
51286b96f4SSieu Mun Tang /* FCS Payload Structure */
52286b96f4SSieu Mun Tang 
5302d3ef33SSieu Mun Tang typedef struct fcs_encrypt_payload_t {
54286b96f4SSieu Mun Tang 	uint32_t first_word;
55286b96f4SSieu Mun Tang 	uint32_t src_addr;
56286b96f4SSieu Mun Tang 	uint32_t src_size;
57286b96f4SSieu Mun Tang 	uint32_t dst_addr;
58286b96f4SSieu Mun Tang 	uint32_t dst_size;
5902d3ef33SSieu Mun Tang } fcs_encrypt_payload;
6002d3ef33SSieu Mun Tang 
6102d3ef33SSieu Mun Tang typedef struct fcs_decrypt_payload_t {
6202d3ef33SSieu Mun Tang 	uint32_t first_word;
6302d3ef33SSieu Mun Tang 	uint32_t owner_id[2];
6402d3ef33SSieu Mun Tang 	uint32_t src_addr;
6502d3ef33SSieu Mun Tang 	uint32_t src_size;
6602d3ef33SSieu Mun Tang 	uint32_t dst_addr;
6702d3ef33SSieu Mun Tang 	uint32_t dst_size;
6802d3ef33SSieu Mun Tang } fcs_decrypt_payload;
69286b96f4SSieu Mun Tang 
70d1740831SSieu Mun Tang typedef struct psgsigma_teardown_msg_t {
71d1740831SSieu Mun Tang 	uint32_t reserved_word;
72d1740831SSieu Mun Tang 	uint32_t magic_word;
73d1740831SSieu Mun Tang 	uint32_t session_id;
74d1740831SSieu Mun Tang } psgsigma_teardown_msg;
75d1740831SSieu Mun Tang 
767facacecSSieu Mun Tang typedef struct fcs_cntr_set_preauth_payload_t {
777facacecSSieu Mun Tang 	uint32_t first_word;
787facacecSSieu Mun Tang 	uint32_t counter_value;
797facacecSSieu Mun Tang } fcs_cntr_set_preauth_payload;
80d1740831SSieu Mun Tang 
81286b96f4SSieu Mun Tang /* Functions Definitions */
82286b96f4SSieu Mun Tang 
83286b96f4SSieu Mun Tang uint32_t intel_fcs_random_number_gen(uint64_t addr, uint64_t *ret_size,
84286b96f4SSieu Mun Tang 				uint32_t *mbox_error);
85286b96f4SSieu Mun Tang uint32_t intel_fcs_send_cert(uint64_t addr, uint64_t size,
86286b96f4SSieu Mun Tang 				uint32_t *send_id);
87286b96f4SSieu Mun Tang uint32_t intel_fcs_get_provision_data(uint32_t *send_id);
887facacecSSieu Mun Tang uint32_t intel_fcs_cntr_set_preauth(uint8_t counter_type,
897facacecSSieu Mun Tang 				int32_t counter_value,
907facacecSSieu Mun Tang 				uint32_t test_bit,
917facacecSSieu Mun Tang 				uint32_t *mbox_error);
9202d3ef33SSieu Mun Tang uint32_t intel_fcs_encryption(uint32_t src_addr, uint32_t src_size,
9302d3ef33SSieu Mun Tang 				uint32_t dst_addr, uint32_t dst_size,
9402d3ef33SSieu Mun Tang 				uint32_t *send_id);
9502d3ef33SSieu Mun Tang 
9602d3ef33SSieu Mun Tang uint32_t intel_fcs_decryption(uint32_t src_addr, uint32_t src_size,
9702d3ef33SSieu Mun Tang 				uint32_t dst_addr, uint32_t dst_size,
9802d3ef33SSieu Mun Tang 				uint32_t *send_id);
99286b96f4SSieu Mun Tang 
100d1740831SSieu Mun Tang int intel_fcs_sigma_teardown(uint32_t session_id, uint32_t *mbox_error);
101d1740831SSieu Mun Tang int intel_fcs_chip_id(uint32_t *id_low, uint32_t *id_high, uint32_t *mbox_error);
102d1740831SSieu Mun Tang int intel_fcs_attestation_subkey(uint64_t src_addr, uint32_t src_size,
103d1740831SSieu Mun Tang 				uint64_t dst_addr, uint32_t *dst_size,
104d1740831SSieu Mun Tang 				uint32_t *mbox_error);
105d1740831SSieu Mun Tang int intel_fcs_get_measurement(uint64_t src_addr, uint32_t src_size,
106d1740831SSieu Mun Tang 				uint64_t dst_addr, uint32_t *dst_size,
107d1740831SSieu Mun Tang 				uint32_t *mbox_error);
10877902fcaSSieu Mun Tang uint32_t intel_fcs_get_rom_patch_sha384(uint64_t addr, uint64_t *ret_size,
10977902fcaSSieu Mun Tang 				uint32_t *mbox_error);
11077902fcaSSieu Mun Tang 
111581182c1SSieu Mun Tang int intel_fcs_create_cert_on_reload(uint32_t cert_request,
112581182c1SSieu Mun Tang 				uint32_t *mbox_error);
113581182c1SSieu Mun Tang int intel_fcs_get_attestation_cert(uint32_t cert_request, uint64_t dst_addr,
114581182c1SSieu Mun Tang 				uint32_t *dst_size, uint32_t *mbox_error);
115581182c1SSieu Mun Tang 
116*6dc00c24SSieu Mun Tang int intel_fcs_open_crypto_service_session(uint32_t *session_id,
117*6dc00c24SSieu Mun Tang 				uint32_t *mbox_error);
118*6dc00c24SSieu Mun Tang int intel_fcs_close_crypto_service_session(uint32_t session_id,
119*6dc00c24SSieu Mun Tang 				uint32_t *mbox_error);
120*6dc00c24SSieu Mun Tang 
121286b96f4SSieu Mun Tang #endif /* SOCFPGA_FCS_H */
122