]>
git.ipfire.org Git - thirdparty/u-boot.git/blob - lib/tpm_api.c
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2019 Google LLC
14 static bool is_tpm1(struct udevice
*dev
)
16 return IS_ENABLED(CONFIG_TPM_V1
) && tpm_get_version(dev
) == TPM_V1
;
19 u32
tpm_startup(struct udevice
*dev
, enum tpm_startup_type mode
)
22 return tpm1_startup(dev
, mode
);
27 u32
tpm_resume(struct udevice
*dev
)
30 return tpm1_startup(dev
, TPM_ST_STATE
);
35 u32
tpm_self_test_full(struct udevice
*dev
)
38 return tpm1_self_test_full(dev
);
43 u32
tpm_continue_self_test(struct udevice
*dev
)
46 return tpm1_continue_self_test(dev
);
51 u32
tpm_clear_and_reenable(struct udevice
*dev
)
55 log_info("TPM: Clear and re-enable\n");
56 ret
= tpm_force_clear(dev
);
57 if (ret
!= TPM_SUCCESS
) {
58 log_err("Can't initiate a force clear\n");
63 ret
= tpm1_physical_enable(dev
);
64 if (ret
!= TPM_SUCCESS
) {
65 log_err("TPM: Can't set enabled state\n");
69 ret
= tpm1_physical_set_deactivated(dev
, 0);
70 if (ret
!= TPM_SUCCESS
) {
71 log_err("TPM: Can't set deactivated state\n");
81 u32
tpm_nv_enable_locking(struct udevice
*dev
)
84 return tpm1_nv_define_space(dev
, TPM_NV_INDEX_LOCK
, 0, 0);
89 u32
tpm_nv_read_value(struct udevice
*dev
, u32 index
, void *data
, u32 count
)
92 return tpm1_nv_read_value(dev
, index
, data
, count
);
97 u32
tpm_nv_write_value(struct udevice
*dev
, u32 index
, const void *data
,
101 return tpm1_nv_write_value(dev
, index
, data
, count
);
106 u32
tpm_set_global_lock(struct udevice
*dev
)
108 return tpm_nv_write_value(dev
, TPM_NV_INDEX_0
, NULL
, 0);
111 u32
tpm_write_lock(struct udevice
*dev
, u32 index
)
119 u32
tpm_pcr_extend(struct udevice
*dev
, u32 index
, const void *in_digest
,
123 return tpm1_extend(dev
, index
, in_digest
, out_digest
);
128 u32
tpm_pcr_read(struct udevice
*dev
, u32 index
, void *data
, size_t count
)
131 return tpm1_pcr_read(dev
, index
, data
, count
);
136 u32
tpm_tsc_physical_presence(struct udevice
*dev
, u16 presence
)
139 return tpm1_tsc_physical_presence(dev
, presence
);
144 u32
tpm_finalise_physical_presence(struct udevice
*dev
)
147 return tpm1_finalise_physical_presence(dev
);
152 u32
tpm_read_pubek(struct udevice
*dev
, void *data
, size_t count
)
155 return tpm1_read_pubek(dev
, data
, count
);
157 return -ENOSYS
; /* not implemented yet */
160 u32
tpm_force_clear(struct udevice
*dev
)
163 return tpm1_force_clear(dev
);
168 u32
tpm_physical_enable(struct udevice
*dev
)
171 return tpm1_physical_enable(dev
);
176 u32
tpm_physical_disable(struct udevice
*dev
)
179 return tpm1_physical_disable(dev
);
184 u32
tpm_physical_set_deactivated(struct udevice
*dev
, u8 state
)
187 return tpm1_physical_set_deactivated(dev
, state
);
192 u32
tpm_get_capability(struct udevice
*dev
, u32 cap_area
, u32 sub_cap
,
193 void *cap
, size_t count
)
196 return tpm1_get_capability(dev
, cap_area
, sub_cap
, cap
, count
);
201 u32
tpm_get_permissions(struct udevice
*dev
, u32 index
, u32
*perm
)
204 return tpm1_get_permissions(dev
, index
, perm
);
206 return -ENOSYS
; /* not implemented yet */
209 u32
tpm_get_random(struct udevice
*dev
, void *data
, u32 count
)
212 return tpm1_get_random(dev
, data
, count
);
214 return -ENOSYS
; /* not implemented yet */