xref: /rk3399_ARM-atf/plat/intel/soc/common/include/socfpga_ros.h (revision ddcce3b13477ca7ee8efbc2081ad2ce904072d2d)
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