/*
 * Copyright (c) 2020 The Fuchsia Authors
 *
 * SPDX-License-Identifier:	BSD-3-Clause
 */
#ifndef _ZIRCON_ABR_REG_H_
#define _ZIRCON_ABR_REG_H_

#include <asm/arch/io.h>
#include <asm/arch/secure_apb.h>

typedef union abr_sticky_reg0 {
	uint32_t value;
	struct {
		uint8_t priority;
		uint8_t tries_remaining;
		uint8_t successful;
		// The flag indicates whether the sticky register contains a newer
		// version of abr metadata than storage.
		uint8_t valid : 1;
		uint8_t misc_corruption : 1;
		// The field is different from one-shot recovery from abr
		// metadata. It is set by BL33 in the need of forcing recovery,
		// when current tpl slot is not tpl_r. This will tell BL2
		// to boot into tpl_r slot in the next reboot regardless of
		// current abr state.
		uint8_t force_recovery: 1;
		// In the case of force recovery request while in a/b slot, bootloader
		// resets itself via watchdog to enter tpl_r, this masks the original
		// reboot reason. Therefore we introduce the following field to
		// override the reboot reason. Before watchdog reset, bootloader will
		// store the real reboot reason into the sticky register. After the
		// reset, the reboot reason will override the one from the register.
		uint8_t rebootmode: 4;
		uint8_t reserved: 1;
	} fields;
} abr_sticky_reg0_t;

typedef union abr_sticky_reg1 {
	uint32_t value;
	struct {
		uint8_t priority;
		uint8_t tries_remaining;
		uint8_t successful;
		uint8_t next_slot : 4;
		uint8_t current_slot : 4;
	} fields;
} abr_sticky_reg1_t;

abr_sticky_reg1_t read_sticky_reg1(void);

abr_sticky_reg0_t read_sticky_reg0(void);

void write_sticky_reg1(abr_sticky_reg1_t reg1);

void write_sticky_reg0(abr_sticky_reg0_t reg0);

void set_force_recovery_bit(bool val);

void set_force_recovery_mode(bool val);

void set_abr_sticky_reg_rebootmode(uint8_t value);

bool force_recovery_mode(void);

bool force_recovery_bit_set(void);

#endif
