xref: /rk3399_ARM-atf/plat/intel/soc/common/include/socfpga_ros.h (revision 62be2a1ae3efcba0bb8b7ec8ef73b2a0f5a437e3)
1*62be2a1aSMahesh Rao /*
2*62be2a1aSMahesh Rao  * Copyright (c) 2024, Intel Corporation. All rights reserved.
3*62be2a1aSMahesh Rao  *
4*62be2a1aSMahesh Rao  * SPDX-License-Identifier: BSD-3-Clause
5*62be2a1aSMahesh Rao  */
6*62be2a1aSMahesh Rao 
7*62be2a1aSMahesh Rao #ifndef SOCFPGA_ROS_H
8*62be2a1aSMahesh Rao #define SOCFPGA_ROS_H
9*62be2a1aSMahesh Rao 
10*62be2a1aSMahesh Rao #include <arch_helpers.h>
11*62be2a1aSMahesh Rao #include <lib/utils_def.h>
12*62be2a1aSMahesh Rao 
13*62be2a1aSMahesh Rao /** status response*/
14*62be2a1aSMahesh Rao #define ROS_RET_OK			(0x00U)
15*62be2a1aSMahesh Rao #define ROS_RET_INVALID			(0x01U)
16*62be2a1aSMahesh Rao #define ROS_RET_NOT_RSU_MODE		(0x02U)
17*62be2a1aSMahesh Rao #define ROS_QSPI_READ_ERROR		(0x03U)
18*62be2a1aSMahesh Rao #define ROS_SPT_BAD_MAGIC_NUM		(0x04U)
19*62be2a1aSMahesh Rao #define ROS_SPT_CRC_ERROR		(0x05U)
20*62be2a1aSMahesh Rao #define ROS_IMAGE_INDEX_ERR		(0x06U)
21*62be2a1aSMahesh Rao #define ROS_IMAGE_PARTNUM_OVFL		(0x07U)
22*62be2a1aSMahesh Rao 
23*62be2a1aSMahesh Rao #define ADDR_64(h, l)			(((((unsigned long)(h)) & 0xffffffff) << 32) | \
24*62be2a1aSMahesh Rao 						(((unsigned long)(l)) & 0xffffffff))
25*62be2a1aSMahesh Rao 
26*62be2a1aSMahesh Rao #define RSU_GET_SPT_RESP_SIZE		(4U)
27*62be2a1aSMahesh Rao 
28*62be2a1aSMahesh Rao #define RSU_STATUS_RES_SIZE		(9U)
29*62be2a1aSMahesh Rao 
30*62be2a1aSMahesh Rao #define SPT_MAGIC_NUMBER		(0x57713427U)
31*62be2a1aSMahesh Rao #define SPT_VERSION			(0U)
32*62be2a1aSMahesh Rao #define SPT_FLAG_RESERVED		(1U)
33*62be2a1aSMahesh Rao #define SPT_FLAG_READONLY		(2U)
34*62be2a1aSMahesh Rao 
35*62be2a1aSMahesh Rao #define SPT_MAX_PARTITIONS		(127U)
36*62be2a1aSMahesh Rao #define SPT_PARTITION_NAME_LENGTH	(16U)
37*62be2a1aSMahesh Rao #define SPT_RSVD_LENGTH			(4U)
38*62be2a1aSMahesh Rao #define SPT_SIZE			(4096U)
39*62be2a1aSMahesh Rao /*BOOT_INFO + FACTORY_IMAGE + SPT0 + SPT1 + CPB0 + CPB1 + FACTORY_IM.SSBL+ *APP* + *APP*.SSBL*/
40*62be2a1aSMahesh Rao #define SPT_MIN_PARTITIONS		(9U)
41*62be2a1aSMahesh Rao 
42*62be2a1aSMahesh Rao #define FACTORY_IMAGE			"FACTORY_IMAGE"
43*62be2a1aSMahesh Rao #define FACTORY_SSBL			"FACTORY_IM.SSBL"
44*62be2a1aSMahesh Rao #define SSBL_SUFFIX			".SSBL"
45*62be2a1aSMahesh Rao 
46*62be2a1aSMahesh Rao typedef struct {
47*62be2a1aSMahesh Rao 	const uint32_t magic_number;
48*62be2a1aSMahesh Rao 	const uint32_t version;
49*62be2a1aSMahesh Rao 	const uint32_t partitions;
50*62be2a1aSMahesh Rao 	uint32_t checksum;
51*62be2a1aSMahesh Rao 	const uint32_t __RSVD[SPT_RSVD_LENGTH];
52*62be2a1aSMahesh Rao 	struct {
53*62be2a1aSMahesh Rao 		const char name[SPT_PARTITION_NAME_LENGTH];
54*62be2a1aSMahesh Rao 		const uint64_t offset;
55*62be2a1aSMahesh Rao 		const uint32_t length;
56*62be2a1aSMahesh Rao 		const uint32_t flags;
57*62be2a1aSMahesh Rao 	} partition[SPT_MAX_PARTITIONS];
58*62be2a1aSMahesh Rao } __packed spt_table_t;
59*62be2a1aSMahesh Rao 
60*62be2a1aSMahesh Rao uint32_t ros_qspi_get_ssbl_offset(unsigned long *offset);
61*62be2a1aSMahesh Rao 
62*62be2a1aSMahesh Rao #endif /* SOCFPGA_ROS_H */
63