/* SPDX-License-Identifier: BSD-3-Clause
 *
 * Copyright 2020 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Implement a state machine for powering on, booting, and powering off the
 * FPGA System-on-Module (SOM) that is the heart of Chameleon v3.
 * See doc/fpga_sm.md for design details.
 */

#ifndef __FPGABOOT_SM_H
#define __FPGABOOT_SM_H

#include <stdbool.h>
#include <zephyr.h>

#ifdef __cplusplus
extern "C" {
#endif

enum fpga_state {
	FPGABOOT_OFF,
	FPGABOOT_PWR_GOOD,
	FPGABOOT_LOAD,
	FPGABOOT_RUNNING,
};

enum fpga_event {
	FPGABOOT_EVENT_NONE,
	FPGABOOT_POWER_ON_REQ,
	FPGABOOT_POWER_OFF_REQ,
	FPGABOOT_SOM_PWR_GOOD_ASSERTED,
	FPGABOOT_SOM_PWR_GOOD_DEASSERTED,
	FPGABOOT_SOM_FPGA_DONE_ASSERTED,
	FPGABOOT_SOM_FPGA_DONE_DEASSERTED,
	FPGABOOT_TIMER_EXPIRED,
};

#define FPGABOOT_ACTION_NONE 0x00
#define FPGABOOT_ASSERT_SOM_PWR_EN 0x01
#define FPGABOOT_DEASSERT_SOM_PWR_EN 0x02
/* NB: SOM_POR_L_LOAD_L is active low, so "assert" == "set to 0V" */
#define FPGABOOT_ASSERT_SOM_POR_L_LOAD_L 0x04
#define FPGABOOT_DEASSERT_SOM_POR_L_LOAD_L 0x08
#define FPGABOOT_START_SHORT_TIMER 0x10
#define FPGABOOT_START_LONG_TIMER 0x20
#define FPGABOOT_STOP_TIMER 0x40

/**
 * @brief Initialize the state machine data
 *
 * Uses the values of `PWR_EN`, `PWR_GOOD`, and `FPGA_DONE` to determine
 * which state it should go to.
 *
 * @param pwr_en
 * @param pwr_good
 * @param fpga_done
 * @param p_state pointer to an `fpga_state` variable
 * @param[out] p_actions pointer to variable to set bit flags for actions.
 */
void fpgaboot_init_state_machine(int pwr_en, int pwr_good, int fpga_done,
                                 enum fpga_state *p_state, uint32_t *p_actions);

/**
 * @brief Run the state machine
 *
 * The caller should set `event` to indicate the event being processed.
 * The state machine may change `*p_state` and set one or more bits in
 * `*p_actions` to indicate what the caller should do next.
 *
 * @param event the event being processed
 * @param[inout] p_state pointer to an `fpga_state` variable
 * @param[out] p_actions pointer to variable to set bit flags for actions.
 */
void fpgaboot_run_state_machine(enum fpga_event event, enum fpga_state *p_state,
				uint32_t *p_actions);

/**
 * @brief Determine if the FPGA is in a steady state, on or off
 *
 * @param state an `fpga_state` variable
 * @retval true
 * if the FPGA is either on or off
 * @retval false
 * if the FPGA is in a different state moving towards either on or off
 */
bool fpgaboot_is_steady_state(enum fpga_state state);

#ifdef __cplusplus
}
#endif

#endif
