void vboot_reboot(void) { if (IS_ENABLED(CONFIG_CONSOLE_CBMEM_DUMP_TO_UART)) cbmem_dump_console(); vboot_platform_prepare_reboot(); hard_reset(); die("failed to reboot"); }
void init_tpm(int s3resume) { u32 result; u8 response[TPM_LARGE_ENOUGH_COMMAND_SIZE]; if (CONFIG_TPM_DEACTIVATE) { printk(BIOS_SPEW, "TPM: Deactivate\n"); result = TlclSendReceive(tpm_deactivate_cmd.buffer, response, sizeof(response)); if (result == TPM_SUCCESS) { printk(BIOS_SPEW, "TPM: OK.\n"); return; } printk(BIOS_ERR, "TPM: Error code 0x%x.\n", result); return; } /* Doing TPM startup when we're not coming in on the S3 resume path * saves us roughly 20ms in boot time only. This does not seem to * be worth an API change to vboot_reference-firmware right now, so * let's keep the code around, but just bail out early: */ if (s3resume ? CONFIG_NO_TPM_RESUME : CONFIG_SKIP_TPM_STARTUP_ON_NORMAL_BOOT) return; printk(BIOS_DEBUG, "TPM initialization.\n"); printk(BIOS_SPEW, "TPM: Init\n"); if (tis_init()) return; printk(BIOS_SPEW, "TPM: Open\n"); if (tis_open()) return; if (s3resume) { /* S3 Resume */ printk(BIOS_SPEW, "TPM: Resume\n"); result = TlclSendReceive(tpm_resume_cmd.buffer, response, sizeof(response)); if (result == TPM_E_INVALID_POSTINIT) { /* We're on a platform where the TPM maintains power * in S3, so it's already initialized. */ printk(BIOS_DEBUG, "TPM: Already initialized.\n"); return; } } else { printk(BIOS_SPEW, "TPM: Startup\n"); result = TlclSendReceive(tpm_startup_cmd.buffer, response, sizeof(response)); } if (result == TPM_SUCCESS) { printk(BIOS_SPEW, "TPM: OK.\n"); return; } printk(BIOS_ERR, "TPM: Error code 0x%x.\n", result); if (CONFIG_TPM_INIT_FAILURE_IS_FATAL) { printk(BIOS_ERR, "Hard reset!\n"); post_code(POST_TPM_FAILURE); if (IS_ENABLED(CONFIG_CONSOLE_CBMEM_DUMP_TO_UART)) cbmem_dump_console(); hard_reset(); } }