162be2a1aSMahesh Rao /* 262be2a1aSMahesh Rao * Copyright (c) 2024, Intel Corporation. All rights reserved. 3*bf2c2136SMahesh Rao * Copyright (c) 2025, Altera Corporation. All rights reserved. 462be2a1aSMahesh Rao * 562be2a1aSMahesh Rao * SPDX-License-Identifier: BSD-3-Clause 662be2a1aSMahesh Rao */ 762be2a1aSMahesh Rao 862be2a1aSMahesh Rao #ifndef SOCFPGA_ROS_H 962be2a1aSMahesh Rao #define SOCFPGA_ROS_H 1062be2a1aSMahesh Rao 1162be2a1aSMahesh Rao #include <arch_helpers.h> 1262be2a1aSMahesh Rao #include <lib/utils_def.h> 1362be2a1aSMahesh Rao 1462be2a1aSMahesh Rao /** status response*/ 1562be2a1aSMahesh Rao #define ROS_RET_OK (0x00U) 1662be2a1aSMahesh Rao #define ROS_RET_INVALID (0x01U) 1762be2a1aSMahesh Rao #define ROS_RET_NOT_RSU_MODE (0x02U) 1862be2a1aSMahesh Rao #define ROS_QSPI_READ_ERROR (0x03U) 1962be2a1aSMahesh Rao #define ROS_SPT_BAD_MAGIC_NUM (0x04U) 2062be2a1aSMahesh Rao #define ROS_SPT_CRC_ERROR (0x05U) 2162be2a1aSMahesh Rao #define ROS_IMAGE_INDEX_ERR (0x06U) 2262be2a1aSMahesh Rao #define ROS_IMAGE_PARTNUM_OVFL (0x07U) 2362be2a1aSMahesh Rao 2462be2a1aSMahesh Rao #define ADDR_64(h, l) (((((unsigned long)(h)) & 0xffffffff) << 32) | \ 2562be2a1aSMahesh Rao (((unsigned long)(l)) & 0xffffffff)) 2662be2a1aSMahesh Rao 2762be2a1aSMahesh Rao #define RSU_GET_SPT_RESP_SIZE (4U) 2862be2a1aSMahesh Rao 2962be2a1aSMahesh Rao #define RSU_STATUS_RES_SIZE (9U) 3062be2a1aSMahesh Rao 3162be2a1aSMahesh Rao #define SPT_MAGIC_NUMBER (0x57713427U) 3262be2a1aSMahesh Rao #define SPT_VERSION (0U) 3362be2a1aSMahesh Rao #define SPT_FLAG_RESERVED (1U) 3462be2a1aSMahesh Rao #define SPT_FLAG_READONLY (2U) 3562be2a1aSMahesh Rao 3662be2a1aSMahesh Rao #define SPT_MAX_PARTITIONS (127U) 3762be2a1aSMahesh Rao #define SPT_PARTITION_NAME_LENGTH (16U) 3862be2a1aSMahesh Rao #define SPT_RSVD_LENGTH (4U) 3962be2a1aSMahesh Rao #define SPT_SIZE (4096U) 4062be2a1aSMahesh Rao /*BOOT_INFO + FACTORY_IMAGE + SPT0 + SPT1 + CPB0 + CPB1 + FACTORY_IM.SSBL+ *APP* + *APP*.SSBL*/ 4162be2a1aSMahesh Rao #define SPT_MIN_PARTITIONS (9U) 4262be2a1aSMahesh Rao 4362be2a1aSMahesh Rao #define FACTORY_IMAGE "FACTORY_IMAGE" 44*bf2c2136SMahesh Rao #define FACTORY_SSBL "SSBL.FACTORY_IM" 45*bf2c2136SMahesh Rao #define SSBL_PREFIX "SSBL." 4662be2a1aSMahesh Rao 4762be2a1aSMahesh Rao typedef struct { 4862be2a1aSMahesh Rao const uint32_t magic_number; 4962be2a1aSMahesh Rao const uint32_t version; 5062be2a1aSMahesh Rao const uint32_t partitions; 5162be2a1aSMahesh Rao uint32_t checksum; 5262be2a1aSMahesh Rao const uint32_t __RSVD[SPT_RSVD_LENGTH]; 5362be2a1aSMahesh Rao struct { 5462be2a1aSMahesh Rao const char name[SPT_PARTITION_NAME_LENGTH]; 5562be2a1aSMahesh Rao const uint64_t offset; 5662be2a1aSMahesh Rao const uint32_t length; 5762be2a1aSMahesh Rao const uint32_t flags; 5862be2a1aSMahesh Rao } partition[SPT_MAX_PARTITIONS]; 59*bf2c2136SMahesh Rao } __packed __aligned(4) spt_table_t; 6062be2a1aSMahesh Rao 6162be2a1aSMahesh Rao uint32_t ros_qspi_get_ssbl_offset(unsigned long *offset); 6262be2a1aSMahesh Rao 6362be2a1aSMahesh Rao #endif /* SOCFPGA_ROS_H */ 64