xref: /rk3399_ARM-atf/include/services/oem/chromeos/widevine_smc_handlers.h (revision e534668bd96924199990d49f5623f4cd219aba7a)
1*b22e6898SYi Chou /*
2*b22e6898SYi Chou  * Copyright (c) 2024, The ChromiumOS Authors. All rights reserved.
3*b22e6898SYi Chou  *
4*b22e6898SYi Chou  * SPDX-License-Identifier: BSD-3-Clause
5*b22e6898SYi Chou  */
6*b22e6898SYi Chou 
7*b22e6898SYi Chou #ifndef CROS_WIDEVINE_SMC_HANDLERS_H
8*b22e6898SYi Chou #define CROS_WIDEVINE_SMC_HANDLERS_H
9*b22e6898SYi Chou 
10*b22e6898SYi Chou #include <lib/smccc.h>
11*b22e6898SYi Chou 
12*b22e6898SYi Chou /*******************************************************************************
13*b22e6898SYi Chou  * Defines for CrOS OEM Service queries
14*b22e6898SYi Chou  ******************************************************************************/
15*b22e6898SYi Chou 
16*b22e6898SYi Chou /* 0xC300C050 - 0xC300C05F are CrOS OEM service calls */
17*b22e6898SYi Chou #define CROS_OEM_SMC_ID 0xC050
18*b22e6898SYi Chou #define CROS_OEM_SMC_CALL_ID(func_num)                                         \
19*b22e6898SYi Chou 	((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT) |                                \
20*b22e6898SYi Chou 	 ((SMC_64) << FUNCID_CC_SHIFT) | (OEN_OEM_START << FUNCID_OEN_SHIFT) | \
21*b22e6898SYi Chou 	 (CROS_OEM_SMC_ID) | ((func_num) & FUNCID_NUM_MASK))
22*b22e6898SYi Chou 
23*b22e6898SYi Chou enum cros_drm_set {
24*b22e6898SYi Chou 	CROS_DRM_SET_TPM_AUTH_PUB = 0U,
25*b22e6898SYi Chou 	CROS_DRM_SET_HARDWARE_UNIQUE_KEY = 1U,
26*b22e6898SYi Chou 	CROS_DRM_SET_ROOT_OF_TRUST = 2U,
27*b22e6898SYi Chou };
28*b22e6898SYi Chou 
29*b22e6898SYi Chou /*******************************************************************************
30*b22e6898SYi Chou  * Defines for runtime services func ids
31*b22e6898SYi Chou  ******************************************************************************/
32*b22e6898SYi Chou 
33*b22e6898SYi Chou /* Sets the TPM auth public key. The maximum size is 128 bytes.
34*b22e6898SYi Chou  * |x1| is the length of the data, |x2| is the physical address of the data.
35*b22e6898SYi Chou  */
36*b22e6898SYi Chou #define CROS_OEM_SMC_DRM_SET_TPM_AUTH_PUB_FUNC_ID \
37*b22e6898SYi Chou 	CROS_OEM_SMC_CALL_ID(CROS_DRM_SET_TPM_AUTH_PUB)
38*b22e6898SYi Chou 
39*b22e6898SYi Chou /* Sets the hardware unique key. The maximum size is 32 bytes.
40*b22e6898SYi Chou  * |x1| is the length of the data, |x2| is the physical address of the data.
41*b22e6898SYi Chou  */
42*b22e6898SYi Chou #define CROS_OEM_SMC_DRM_SET_HARDWARE_UNIQUE_KEY_FUNC_ID \
43*b22e6898SYi Chou 	CROS_OEM_SMC_CALL_ID(CROS_DRM_SET_HARDWARE_UNIQUE_KEY)
44*b22e6898SYi Chou 
45*b22e6898SYi Chou /* Sets the widevine root of trust. The maximum size is 32 bytes.
46*b22e6898SYi Chou  * |x1| is the length of the data, |x2| is the physical address of the data.
47*b22e6898SYi Chou  */
48*b22e6898SYi Chou #define CROS_OEM_SMC_DRM_SET_ROOT_OF_TRUST_FUNC_ID \
49*b22e6898SYi Chou 	CROS_OEM_SMC_CALL_ID(CROS_DRM_SET_ROOT_OF_TRUST)
50*b22e6898SYi Chou 
51*b22e6898SYi Chou #define is_cros_oem_smc(_call_id) (((_call_id) & 0xFFF0U) == CROS_OEM_SMC_ID)
52*b22e6898SYi Chou 
53*b22e6898SYi Chou struct cros_oem_data {
54*b22e6898SYi Chou 	uint8_t *buffer;
55*b22e6898SYi Chou 	const uint32_t max_length;
56*b22e6898SYi Chou 	uint32_t length;
57*b22e6898SYi Chou };
58*b22e6898SYi Chou 
59*b22e6898SYi Chou extern struct cros_oem_data cros_oem_tpm_auth_pk;
60*b22e6898SYi Chou 
61*b22e6898SYi Chou extern struct cros_oem_data cros_oem_huk;
62*b22e6898SYi Chou 
63*b22e6898SYi Chou extern struct cros_oem_data cros_oem_rot;
64*b22e6898SYi Chou 
65*b22e6898SYi Chou #endif /* CROS_WIDEVINE_SMC_HANDLERS_H */
66