/*
 * Copyright 2016 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.
 */

#ifndef __EC_BOARD_CR50_SCRATCH_REG1_H
#define __EC_BOARD_CR50_SCRATCH_REG1_H

/*
 * Bit assignments of the LONG_LIFE_SCRATCH1 register. This register survives
 * all kinds of resets, it is cleared only on the Power ON event.
 */
#define BOARD_PERIPH_CONFIG_SPI       BIT(0)   /* TPM uses SPI interface */
#define BOARD_PERIPH_CONFIG_I2C       BIT(1)   /* TPM uses I2C interface */

/*
 * The gaps are left to ensure backwards compatibility with the earliest cr50
 * code releases. It will be possible to safely reuse these gaps if and when the
 * rest of the bits are taken.
 */

/* TODO(crosbug.com/p/56945): Remove when sys_rst_l has an external pullup */
#define BOARD_NEEDS_SYS_RST_PULL_UP  BIT(5)   /* Add a pullup to sys_rst_l */
#define BOARD_USE_PLT_RESET          BIT(6)   /* Use plt_rst_l instead of */
						/* sys_rst_l to monitor the */
						/* system resets */

/* Bits to store write protect bit state across deep sleep and resets. */
#define BOARD_WP_ASSERTED            BIT(8)
#define BOARD_FORCING_WP             BIT(9)

/*
 * Bit to signal to compatible RO to suppress its uart output.
 * Helps to reduce time to resume from deep sleep.
 */
#define BOARD_NO_RO_UART             BIT(10)

/*
 * Bits to store current case-closed debug state across deep sleep.
 *
 * DO NOT examine these bits to determine the current CCD state.  Call methods
 * from case_closed_debug.h instead.
 */
#define BOARD_CCD_SHIFT              11
#define BOARD_CCD_STATE              (3 << BOARD_CCD_SHIFT)

/* Prevent Cr50 from entering deep sleep when the AP is off */
#define BOARD_DEEP_SLEEP_DISABLED    BIT(13)
/* Use Cr50_RX_AP_TX to determine if the AP is off or on */
#define BOARD_DETECT_AP_WITH_UART    BIT(14)

/* ITE EC sync sequence generation after reset is required. */
#define BOARD_ITE_EC_SYNC_NEEDED     BIT(15)

/*
 * Enable delayed write protect disable for systems that can be opened
 * in less than 2 minutes
 */
#define BOARD_WP_DISABLE_DELAY       BIT(16)
/*
 * Enable custom options required for the closed source EC on the
 * Sarien/Arcada boards.  Includes the following behavior
 *    Enable factory mode to closed-source EC via GPIO
 *    Support customer diagnostic mode
 *    UEFI factory mode
 *    EC extended reset
 *    Power+Refresh recovery mode (instead of Power+Refresh+Esc)
 */
#define BOARD_CLOSED_SOURCE_SET1     BIT(17)

/*
 * Wait until PLT_RST_L is asserted before deasserting reset.
 */
#define BOARD_CLOSED_LOOP_RESET      BIT(18)

/*
 * The board uses INA pins as GPIOs, so it can't support reading inas using usb
 * i2c.
 */
#define BOARD_NO_INA_SUPPORT             BIT(19)

/*
 ****** Bit20 unused. DON'T FORGET TO INCLUDE IT INTO BOARD_ALL_PROPERTIES
 ****** WHEN IT GETS A NEW USE.
 */

/*
 * The board supports EC-CR50 communication.
 */
#define BOARD_EC_CR50_COMM_SUPPORT        BIT(21)

/*
 * Bits to store which pin is used for the ccd recovery switch/lid open signal.
 */
#define BOARD_CCD_REC_LID_PIN_SHIFT       22
#define BOARD_CCD_REC_LID_PIN_MASK        (3 << BOARD_CCD_REC_LID_PIN_SHIFT)
#define BOARD_CCD_REC_LID_PIN_DIOA1       (1 << BOARD_CCD_REC_LID_PIN_SHIFT)
#define BOARD_CCD_REC_LID_PIN_DIOA9       (2 << BOARD_CCD_REC_LID_PIN_SHIFT)
#define BOARD_CCD_REC_LID_PIN_DIOA12      (3 << BOARD_CCD_REC_LID_PIN_SHIFT)

/*
 * Indicates successful completion of FIPS power up
 * tests earlier. Reduces wake up time after sleep.
 * Stored in PWRDN_SCRATCH22 and use multiple bits to harden against
 * fault injection.
 */
#define BOARD_FIPS_POWERUP_DONE       0xAA556633

/*
 * Macro to capture all properties related to board strapping pins. This must be
 * updated if additional strap related properties are added.
 */
#define BOARD_ALL_PROPERTIES ( \
	BOARD_CCD_REC_LID_PIN_MASK | \
	BOARD_CLOSED_LOOP_RESET | \
	BOARD_CLOSED_SOURCE_SET1 | \
	BOARD_DEEP_SLEEP_DISABLED | \
	BOARD_DETECT_AP_WITH_UART | \
	BOARD_EC_CR50_COMM_SUPPORT | \
	BOARD_NEEDS_SYS_RST_PULL_UP | \
	BOARD_NO_INA_SUPPORT | \
	BOARD_PERIPH_CONFIG_I2C | \
	BOARD_PERIPH_CONFIG_SPI | \
	BOARD_USE_PLT_RESET | \
	BOARD_WP_DISABLE_DELAY)

#endif  /* ! __EC_BOARD_CR50_SCRATCH_REG1_H */
