static void vboot_hash_init(void) { #ifdef CONFIG_SAVE_VBOOT_HASH const struct vboot_hash_tag *tag; int version, size; tag = (const struct vboot_hash_tag *)system_get_jump_tag( VBOOT_HASH_SYSJUMP_TAG, &version, &size); if (tag && version == VBOOT_HASH_SYSJUMP_VERSION && size == sizeof(*tag)) { /* Already computed a hash, so don't recompute */ CPRINTS("hash precomputed"); hash = tag->hash; data_offset = tag->offset; data_size = tag->size; } else #endif { /* Start computing the hash of RW firmware */ vboot_hash_start(CONFIG_EC_WRITABLE_STORAGE_OFF + CONFIG_RW_STORAGE_OFF, system_get_image_used(SYSTEM_IMAGE_RW), NULL, 0); } }
/** * Restore event masks after a sysjump. */ static void lpc_post_sysjump(void) { const uint32_t *prev_mask; int size, version; prev_mask = (const uint32_t *)system_get_jump_tag(LPC_SYSJUMP_TAG, &version, &size); if (!prev_mask || version != 1 || size != sizeof(event_mask)) return; memcpy(event_mask, prev_mask, sizeof(event_mask)); }
static void usb_charge_init(void) { const struct usb_state *prev; int version, size; prev = (const struct usb_state *)system_get_jump_tag(USB_SYSJUMP_TAG, &version, &size); if (prev && version == USB_HOOK_VERSION && size == sizeof(*prev)) { usb_charge_set_mode(0, prev->port_mode[0]); usb_charge_set_mode(1, prev->port_mode[1]); } else { usb_charge_all_ports_off(); } }
static void pwm_kblight_init(void) { const struct pwm_kbd_state *prev; int version, size; /* Configure GPIO */ gpio_config_module(MODULE_PWM_KBLIGHT, 1); prev = (const struct pwm_kbd_state *) system_get_jump_tag(PWMKBD_SYSJUMP_TAG, &version, &size); if (prev && version == PWM_HOOK_VERSION && size == sizeof(*prev)) { /* Restore previous state. */ pwm_enable(PWM_CH_KBLIGHT, prev->kblight_en); pwm_set_duty(PWM_CH_KBLIGHT, prev->kblight_percent); } else { /* Enable keyboard backlight control, turned down */ pwm_set_duty(PWM_CH_KBLIGHT, 0); pwm_enable(PWM_CH_KBLIGHT, 1); } }
int flash_physical_restore_state(void) { uint32_t reset_flags = system_get_reset_flags(); int version, size; const struct flash_wp_state *prev; /* * If we have already jumped between images, an earlier image could * have applied write protection. Nothing additional needs to be done. */ if (reset_flags & RESET_FLAG_SYSJUMP) { prev = (const struct flash_wp_state *)system_get_jump_tag( FLASH_SYSJUMP_TAG, &version, &size); if (prev && version == FLASH_HOOK_VERSION && size == sizeof(*prev)) entire_flash_locked = prev->entire_flash_locked; return 1; } return 0; }