blob: 0ea3c86c3b0ee010df476775b717095e82885d43 [file] [log] [blame]
/*
* Copyright (c) 2020 The Fuchsia Authors
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <zircon/zircon_abr_reg_util.h>
abr_sticky_reg1_t read_sticky_reg1()
{
abr_sticky_reg1_t sticky_reg1;
sticky_reg1.value = readl(P_AO_RTI_STICKY_REG1);
return sticky_reg1;
}
abr_sticky_reg0_t read_sticky_reg0()
{
abr_sticky_reg0_t sticky_reg0;
sticky_reg0.value = readl(P_AO_RTI_STICKY_REG0);
return sticky_reg0;
}
void write_sticky_reg1(abr_sticky_reg1_t reg1)
{
writel(reg1.value, P_AO_RTI_STICKY_REG1);
}
void write_sticky_reg0(abr_sticky_reg0_t reg0)
{
writel(reg0.value, P_AO_RTI_STICKY_REG0);
}
void set_force_recovery_bit(bool val)
{
abr_sticky_reg0_t reg0 = read_sticky_reg0();
reg0.fields.force_recovery = val;
write_sticky_reg0(reg0);
}
// The flag indicates whether this boot is due to force recovery.
bool force_recovery_mode_flag = false;
void set_force_recovery_mode(bool val)
{
force_recovery_mode_flag = val;
}
bool force_recovery_mode(void)
{
return force_recovery_mode_flag;
}
void set_abr_sticky_reg_rebootmode(uint8_t value)
{
abr_sticky_reg0_t reg0 = read_sticky_reg0();
reg0.fields.rebootmode = value;
write_sticky_reg0(reg0);
}
bool force_recovery_bit_set(void)
{
return read_sticky_reg0().fields.force_recovery;
}