summaryrefslogtreecommitdiff
path: root/chip/g/system_chip.h
blob: b5b59aac9da0b8fdcb61bef1c7a32e653a1447dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* Copyright 2017 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* chip/g-specific system function prototypes */

#ifndef __CROS_EC_SYSTEM_CHIP_H
#define __CROS_EC_SYSTEM_CHIP_H

/**
 * On systems with protection from a failing RW update: read the retry counter
 * and act on it.
 *
 * @return EC_SUCCESS if no flash write errors were encounterd.
 */
int system_process_retry_counter(void);

/**
 * On systems with protection from a failing RW update: reset retry
 * counter, this is used after a new image upload is finished, to make
 * sure that the new image has a chance to run.
 */
void system_clear_retry_counter(void);

/**
 * A function provided by some platforms to decrement a retry counter.
 *
 * This should be used whenever a system reset is manually triggered.
 */
void system_decrement_retry_counter(void);

/**
 * A function provided by some platforms to hint that something is going
 * wrong.
 *
 * @return a boolean, set to True if rolling reboot condition is suspected.
 */
int system_rolling_reboot_suspected(void);

/**
 * Returns True if a rollback was detected during system_preinit.
 *
 * system_rollback_detected only returns True from rollback until the AP boots
 * and then enters deep sleep. The system won't know that it rolled back on
 * resume from deep sleep.
 *
 * @return a boolean, set to True if a rollback is detected.
 */
int system_rollback_detected(void);

/**
 * Returns non-zero value when firmware is expected to be abe to detect user
 * request to cut off battery supply.
 */
int system_battery_cutoff_support_required(void);

/**
 * Functions to update INFO1 rollback mask based on one or both RW image
 * headers.
 */
void system_update_rollback_mask_with_active_img(void);
void system_update_rollback_mask_with_both_imgs(void);

/**
 * Scan INFO1 rollback map and infomap fields of both RW and RW_B image
 * headers, and return a string showing how many zeros are there at the base
 * of in each of these objects.
 *
 * The passed in parameters are the memory area to put the string in and the
 * size of this memory area.
 */
void system_get_rollback_bits(char *value, size_t value_size);

/**
 * Set the rollback counter to a value which would ensure a rollback on the
 * next boot.
 */
void system_ensure_rollback(void);

/**
 * Enables holding external pins across soft chip resets. Application firmware
 * is responsible for disengaging pinhold upon reset.
 */
void system_pinhold_on_reset_enable(void);

/**
 * Disables holding external pins across soft chip resets.
 */
void system_pinhold_on_reset_disable(void);

/**
 * Disengages pinhold if engaged.
 */
void system_pinhold_disengage(void);

/**
 * Notify the board booted.
 */
void system_notify_ap_boot(void);

#endif /* __CROS_EC_SYSTEM_CHIP_H */