| Index: host/lib/crossystem.c
|
| diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
|
| index 2e29d04dd1a229d7b9dfa1c020c272ffd817565f..1c3fcc256a115827a375fa1bb1ccbcb368e9628e 100644
|
| --- a/host/lib/crossystem.c
|
| +++ b/host/lib/crossystem.c
|
| @@ -41,6 +41,10 @@ typedef enum VdatIntField {
|
| } VdatIntField;
|
|
|
|
|
| +/* Masks for kern_nv usage by kernel */
|
| +#define KERN_NV_FWUPDATE_TRIES_MASK 0x0000000F
|
| +
|
| +
|
| /* Return true if the FWID starts with the specified string. */
|
| int FwidStartsWith(const char *start) {
|
| char fwid[128];
|
| @@ -93,7 +97,7 @@ int VbSetNvStorage(VbNvParam param, int value) {
|
| goto VbSetNvCleanup;
|
|
|
| if (vnc.raw_changed) {
|
| - if (0 != VbReadNvStorage(&vnc))
|
| + if (0 != VbWriteNvStorage(&vnc))
|
| goto VbSetNvCleanup;
|
| }
|
|
|
| @@ -351,6 +355,10 @@ int VbGetSystemPropertyInt(const char* name) {
|
| value = VbGetNvStorage(VBNV_DEBUG_RESET_MODE);
|
| } else if (!strcasecmp(name,"fwb_tries")) {
|
| value = VbGetNvStorage(VBNV_TRY_B_COUNT);
|
| + } else if (!strcasecmp(name,"fwupdate_tries")) {
|
| + value = VbGetNvStorage(VBNV_KERNEL_FIELD);
|
| + if (value != -1)
|
| + value &= KERN_NV_FWUPDATE_TRIES_MASK;
|
| }
|
| /* Other parameters */
|
| else if (!strcasecmp(name,"cros_debug")) {
|
| @@ -397,6 +405,7 @@ const char* VbGetSystemPropertyString(const char* name, char* dest, int size) {
|
|
|
| int VbSetSystemPropertyInt(const char* name, int value) {
|
| /* Check architecture-dependent properties first */
|
| +
|
| if (0 == VbSetArchPropertyInt(name, value))
|
| return 0;
|
|
|
| @@ -416,6 +425,13 @@ int VbSetSystemPropertyInt(const char* name, int value) {
|
| return VbSetNvStorage(VBNV_DEBUG_RESET_MODE, value);
|
| } else if (!strcasecmp(name,"fwb_tries")) {
|
| return VbSetNvStorage(VBNV_TRY_B_COUNT, value);
|
| + } else if (!strcasecmp(name,"fwupdate_tries")) {
|
| + int kern_nv = VbGetNvStorage(VBNV_KERNEL_FIELD);
|
| + if (kern_nv == -1)
|
| + return -1;
|
| + kern_nv &= ~KERN_NV_FWUPDATE_TRIES_MASK;
|
| + kern_nv |= (value & KERN_NV_FWUPDATE_TRIES_MASK);
|
| + return VbSetNvStorage(VBNV_KERNEL_FIELD, kern_nv);
|
| }
|
|
|
| return -1;
|
|
|