blob: 46666b6d553d8f74020dae9849a5bd567c375442 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef SOC_INTEL_COMMON_CSE_LITE_H
#define SOC_INTEL_COMMON_CSE_LITE_H
#include <sys/types.h>
/* Converts bp index to boot partition string */
#define GET_BP_STR(bp_index) (bp_index ? "RW" : "RO")
/* CSE RW boot partition signature */
#define CSE_RW_SIGNATURE 0x000055aa
/* CSE RW boot partition signature size */
#define CSE_RW_SIGN_SIZE sizeof(uint32_t)
/*
* CSE Firmware supports 3 boot partitions. For CSE Lite SKU, only 2 boot partitions are
* used and 3rd boot partition is set to BP_STATUS_PARTITION_NOT_PRESENT.
* CSE Lite SKU Image Layout:
* +------------+ +----+------+----+ +-----+------+-----+
* | CSE REGION | => | RO | DATA | RW | => | BP1 | DATA | BP2 |
* +------------+ +----+------+----+ +-----+------+-----+
*/
#define CSE_MAX_BOOT_PARTITIONS 3
/* CSE Lite SKU's valid bootable partition identifiers */
enum boot_partition_id {
/* RO(BP1) contains recovery/minimal boot firmware */
RO = 0,
/* RW(BP2) contains fully functional CSE firmware */
RW = 1
};
/*
* Boot partition status.
* The status is returned in response to MKHI_BUP_COMMON_GET_BOOT_PARTITION_INFO cmd.
*/
enum bp_status {
/* This value is returned when a partition has no errors */
BP_STATUS_SUCCESS = 0,
/*
* This value is returned when a partition should be present based on layout, but it is
* not valid.
*/
BP_STATUS_GENERAL_FAILURE = 1,
/* This value is returned when a partition is not present per initial image layout */
BP_STATUS_PARTITION_NOT_PRESENT = 2,
/*
* This value is returned when unexpected issues are detected in CSE Data area
* and CSE TCB-SVN downgrade scenario.
*/
BP_STATUS_DATA_FAILURE = 3,
};
/*
* Boot Partition Info Flags
* The flags are returned in response to MKHI_BUP_COMMON_GET_BOOT_PARTITION_INFO cmd.
*/
enum bp_info_flags {
/* Redundancy Enabled: It indicates CSE supports RO(BP1) and RW(BP2) regions */
BP_INFO_REDUNDANCY_EN = 1 << 0,
/* It indicates RO(BP1) supports Minimal Recovery Mode */
BP_INFO_MIN_RECOV_MODE_EN = 1 << 1,
/*
* Read-only Config Enabled: It indicates HW protection to CSE RO region is enabled.
* The option is relevant only if the BP_INFO_MIN_RECOV_MODE_EN flag is enabled.
*/
BP_INFO_READ_ONLY_CFG = 1 << 2,
};
/* CSE boot partition entry info */
struct cse_bp_entry {
/* Boot partition version */
struct fw_version fw_ver;
/* Boot partition status */
uint32_t status;
/* Starting offset of the partition within CSE region */
uint32_t start_offset;
/* Ending offset of the partition within CSE region */
uint32_t end_offset;
uint8_t reserved[12];
} __packed;
/* CSE boot partition info */
struct cse_bp_info {
/* Number of boot partitions */
uint8_t total_number_of_bp;
/* Current boot partition */
uint8_t current_bp;
/* Next boot partition */
uint8_t next_bp;
/* Boot Partition Info Flags */
uint8_t flags;
/* Boot Partition Entry Info */
struct cse_bp_entry bp_entries[CSE_MAX_BOOT_PARTITIONS];
} __packed;
struct get_bp_info_rsp {
struct mkhi_hdr hdr;
struct cse_bp_info bp_info;
} __packed;
#endif // SOC_INTEL_COMMON_CSE_LITE_H