@@ -371,8 +371,11 @@ int tpm_auto_startup(struct tpm_chip *chip)
{
int rc;
- if (!(chip->ops->flags & TPM_OPS_AUTO_STARTUP))
+ if (!(chip->ops->flags & TPM_OPS_AUTO_STARTUP)) {
+ if (chip->flags & TPM_CHIP_FLAG_TPM2)
+ return tpm2_init_commands(chip);
return 0;
+ }
if (chip->flags & TPM_CHIP_FLAG_TPM2)
rc = tpm2_auto_startup(chip);
@@ -222,6 +222,7 @@ ssize_t tpm2_get_tpm_pt(struct tpm_chip *chip, u32 property_id,
u32 *value, const char *desc);
ssize_t tpm2_get_pcr_allocation(struct tpm_chip *chip);
+int tpm2_init_commands(struct tpm_chip *chip);
int tpm2_auto_startup(struct tpm_chip *chip);
void tpm2_shutdown(struct tpm_chip *chip, u16 shutdown_type);
unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal);
@@ -709,6 +709,20 @@ static int tpm2_startup(struct tpm_chip *chip)
return rc;
}
+/**
+ * tpm2_init_commands - Get timeouts, durations and command code attributes
+ * in case tpm2_auto_startup is not used.
+ * @chip: TPM chip to use
+ *
+ * Return 0 on success, < 0 in case of fatal error.
+ */
+int tpm2_init_commands(struct tpm_chip *chip)
+{
+ tpm2_get_timeouts(chip);
+
+ return tpm2_get_cc_attrs_tbl(chip);
+}
+
/**
* tpm2_auto_startup - Perform the standard automatic TPM initialization
* sequence