xref: /rk3399_ARM-atf/drivers/arm/css/sds/sds_private.h (revision 5932d194d7de355616de46adea8248224190b63e)
1*5932d194SAntonio Nino Diaz /*
2*5932d194SAntonio Nino Diaz  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3*5932d194SAntonio Nino Diaz  *
4*5932d194SAntonio Nino Diaz  * SPDX-License-Identifier: BSD-3-Clause
5*5932d194SAntonio Nino Diaz  */
6*5932d194SAntonio Nino Diaz 
7*5932d194SAntonio Nino Diaz #ifndef SDS_PRIVATE_H
8*5932d194SAntonio Nino Diaz #define SDS_PRIVATE_H
9*5932d194SAntonio Nino Diaz 
10*5932d194SAntonio Nino Diaz /* SDS Header defines */
11*5932d194SAntonio Nino Diaz #define SDS_HEADER_ID_SHIFT			0
12*5932d194SAntonio Nino Diaz #define SDS_HEADER_ID_WIDTH			16
13*5932d194SAntonio Nino Diaz #define SDS_HEADER_ID_MASK			((1 << SDS_HEADER_ID_WIDTH) - 1)
14*5932d194SAntonio Nino Diaz 
15*5932d194SAntonio Nino Diaz #define SDS_HEADER_MINOR_VERSION_WIDTH		8
16*5932d194SAntonio Nino Diaz #define SDS_HEADER_MINOR_VERSION_SHIFT		16
17*5932d194SAntonio Nino Diaz #define SDS_HEADER_MAJOR_VERSION_WIDTH		8
18*5932d194SAntonio Nino Diaz 
19*5932d194SAntonio Nino Diaz #define MAKE_SDS_HEADER_VERSION(major, minor)	\
20*5932d194SAntonio Nino Diaz 	(((((major) & 0xff) << SDS_HEADER_MINOR_VERSION_WIDTH) | ((minor) & 0xff)))
21*5932d194SAntonio Nino Diaz #define SDS_HEADER_VERSION_MASK			\
22*5932d194SAntonio Nino Diaz 	((1 << (SDS_HEADER_MINOR_VERSION_WIDTH + SDS_HEADER_MAJOR_VERSION_WIDTH)) - 1)
23*5932d194SAntonio Nino Diaz 
24*5932d194SAntonio Nino Diaz #define SDS_HEADER_VERSION			MAKE_SDS_HEADER_VERSION(1, 0)
25*5932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_WIDTH		23
26*5932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_SHIFT		1
27*5932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_MASK		((1 << SDS_HEADER_STRUCT_SIZE_WIDTH) - 1)
28*5932d194SAntonio Nino Diaz #define SDS_HEADER_VALID_MASK			0x1
29*5932d194SAntonio Nino Diaz #define SDS_HEADER_VALID_SHIFT			0
30*5932d194SAntonio Nino Diaz #define SDS_HEADER_SIZE				0x8
31*5932d194SAntonio Nino Diaz 
32*5932d194SAntonio Nino Diaz /* Arbitrary, 16 bit value that indicates a valid SDS Memory Region */
33*5932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE			0xAA7A
34*5932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_WIDTH		16
35*5932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_SHIFT		0
36*5932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_MASK		((1 << SDS_REGION_SIGNATURE_WIDTH) - 1)
37*5932d194SAntonio Nino Diaz 
38*5932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_SHIFT		16
39*5932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_WIDTH		8
40*5932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_MASK		((1 << SDS_REGION_STRUCT_COUNT_WIDTH) - 1)
41*5932d194SAntonio Nino Diaz 
42*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_SHIFT		24
43*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_WIDTH		4
44*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_MASK		((1 << SDS_REGION_SCH_MINOR_WIDTH) - 1)
45*5932d194SAntonio Nino Diaz 
46*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_SHIFT		28
47*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_WIDTH		4
48*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_MASK		((1 << SDS_REGION_SCH_MAJOR_WIDTH) - 1)
49*5932d194SAntonio Nino Diaz 
50*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_VERSION_MASK		\
51*5932d194SAntonio Nino Diaz 	((1 << (SDS_REGION_SCH_MINOR_WIDTH + SDS_REGION_SCH_MAJOR_WIDTH)) - 1)
52*5932d194SAntonio Nino Diaz 
53*5932d194SAntonio Nino Diaz #define MAKE_SDS_REGION_SCH_VERSION(maj, min)	\
54*5932d194SAntonio Nino Diaz 	((((maj) & SDS_REGION_SCH_MAJOR_MASK) << SDS_REGION_SCH_MINOR_WIDTH) |	\
55*5932d194SAntonio Nino Diaz 	((min) & SDS_REGION_SCH_MINOR_MASK))
56*5932d194SAntonio Nino Diaz 
57*5932d194SAntonio Nino Diaz #define SDS_REGION_SCH_VERSION			MAKE_SDS_REGION_SCH_VERSION(1, 0)
58*5932d194SAntonio Nino Diaz #define SDS_REGION_REGIONSIZE_OFFSET		0x4
59*5932d194SAntonio Nino Diaz #define SDS_REGION_DESC_SIZE			0x8
60*5932d194SAntonio Nino Diaz 
61*5932d194SAntonio Nino Diaz #ifndef __ASSEMBLY__
62*5932d194SAntonio Nino Diaz #include <stddef.h>
63*5932d194SAntonio Nino Diaz #include <stdint.h>
64*5932d194SAntonio Nino Diaz 
65*5932d194SAntonio Nino Diaz /* Header containing Shared Data Structure metadata */
66*5932d194SAntonio Nino Diaz typedef struct structure_header {
67*5932d194SAntonio Nino Diaz 	uint32_t reg[2];
68*5932d194SAntonio Nino Diaz } struct_header_t;
69*5932d194SAntonio Nino Diaz 
70*5932d194SAntonio Nino Diaz #define GET_SDS_HEADER_ID(_header)			\
71*5932d194SAntonio Nino Diaz 	((((struct_header_t *)(_header))->reg[0]) & SDS_HEADER_ID_MASK)
72*5932d194SAntonio Nino Diaz #define GET_SDS_HEADER_VERSION(_header)			\
73*5932d194SAntonio Nino Diaz 	(((((struct_header_t *)(_header))->reg[0]) >> SDS_HEADER_MINOR_VERSION_SHIFT)\
74*5932d194SAntonio Nino Diaz 	& SDS_HEADER_VERSION_MASK)
75*5932d194SAntonio Nino Diaz #define GET_SDS_HEADER_STRUCT_SIZE(_header)		\
76*5932d194SAntonio Nino Diaz 	(((((struct_header_t *)(_header))->reg[1]) >> SDS_HEADER_STRUCT_SIZE_SHIFT)\
77*5932d194SAntonio Nino Diaz 	& SDS_HEADER_STRUCT_SIZE_MASK)
78*5932d194SAntonio Nino Diaz #define IS_SDS_HEADER_VALID(_header)			\
79*5932d194SAntonio Nino Diaz 	((((struct_header_t *)(_header))->reg[1]) & SDS_HEADER_VALID_MASK)
80*5932d194SAntonio Nino Diaz #define GET_SDS_STRUCT_FIELD(_header, _field_offset)	\
81*5932d194SAntonio Nino Diaz 	((((uint8_t *)(_header)) + sizeof(struct_header_t)) + (_field_offset))
82*5932d194SAntonio Nino Diaz 
83*5932d194SAntonio Nino Diaz /* Region Descriptor describing the SDS Memory Region */
84*5932d194SAntonio Nino Diaz typedef struct region_descriptor {
85*5932d194SAntonio Nino Diaz 	uint32_t reg[2];
86*5932d194SAntonio Nino Diaz } region_desc_t;
87*5932d194SAntonio Nino Diaz 
88*5932d194SAntonio Nino Diaz #define IS_SDS_REGION_VALID(region)			\
89*5932d194SAntonio Nino Diaz 	(((((region_desc_t *)(region))->reg[0]) & SDS_REGION_SIGNATURE_MASK) == SDS_REGION_SIGNATURE)
90*5932d194SAntonio Nino Diaz #define GET_SDS_REGION_STRUCTURE_COUNT(region)		\
91*5932d194SAntonio Nino Diaz 	(((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_STRUCT_COUNT_SHIFT)\
92*5932d194SAntonio Nino Diaz 	& SDS_REGION_STRUCT_COUNT_MASK)
93*5932d194SAntonio Nino Diaz #define GET_SDS_REGION_SCHEMA_VERSION(region)		\
94*5932d194SAntonio Nino Diaz 	(((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_SCH_MINOR_SHIFT)\
95*5932d194SAntonio Nino Diaz 	& SDS_REGION_SCH_VERSION_MASK)
96*5932d194SAntonio Nino Diaz #define GET_SDS_REGION_SIZE(region)		((((region_desc_t *)(region))->reg[1]))
97*5932d194SAntonio Nino Diaz 
98*5932d194SAntonio Nino Diaz #endif /* __ASSEMBLY__ */
99*5932d194SAntonio Nino Diaz 
100*5932d194SAntonio Nino Diaz #endif /* SDS_PRIVATE_H */
101