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);
	}
}
示例#2
0
文件: lpc.c 项目: latelee/chrome-ec
/**
 * 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();
	}
}
示例#4
0
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);
	}
}
示例#5
0
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;
}