xref: /rk3399_ARM-atf/include/plat/marvell/odyssey/csr/ody-csrs-sam.h (revision 12d80bbbf6031228bdd910eccb03bb185e8df527)
1*4b8b8d74SJaiprakash Singh #ifndef __ODY_CSRS_SAM_H__
2*4b8b8d74SJaiprakash Singh #define __ODY_CSRS_SAM_H__
3*4b8b8d74SJaiprakash Singh /* This file is auto-generated. Do not edit */
4*4b8b8d74SJaiprakash Singh 
5*4b8b8d74SJaiprakash Singh /***********************license start***********************************
6*4b8b8d74SJaiprakash Singh * Copyright (C) 2021-2026 Marvell.
7*4b8b8d74SJaiprakash Singh * SPDX-License-Identifier: BSD-3-Clause
8*4b8b8d74SJaiprakash Singh * https://spdx.org/licenses
9*4b8b8d74SJaiprakash Singh ***********************license end**************************************/
10*4b8b8d74SJaiprakash Singh 
11*4b8b8d74SJaiprakash Singh 
12*4b8b8d74SJaiprakash Singh /**
13*4b8b8d74SJaiprakash Singh  * @file
14*4b8b8d74SJaiprakash Singh  *
15*4b8b8d74SJaiprakash Singh  * Configuration and status register (CSR) address and type definitions for
16*4b8b8d74SJaiprakash Singh  * SAM.
17*4b8b8d74SJaiprakash Singh  *
18*4b8b8d74SJaiprakash Singh  * This file is auto generated. Do not edit.
19*4b8b8d74SJaiprakash Singh  *
20*4b8b8d74SJaiprakash Singh  */
21*4b8b8d74SJaiprakash Singh 
22*4b8b8d74SJaiprakash Singh /**
23*4b8b8d74SJaiprakash Singh  * Enumeration sam_bar_e
24*4b8b8d74SJaiprakash Singh  *
25*4b8b8d74SJaiprakash Singh  * SAM Base Address Register Enumeration
26*4b8b8d74SJaiprakash Singh  * Enumerates the base address registers.
27*4b8b8d74SJaiprakash Singh  */
28*4b8b8d74SJaiprakash Singh #define ODY_SAM_BAR_E_SAM_PF_BAR0 (0x87e059000000ll)
29*4b8b8d74SJaiprakash Singh #define ODY_SAM_BAR_E_SAM_PF_BAR0_SIZE 0x10000ull
30*4b8b8d74SJaiprakash Singh 
31*4b8b8d74SJaiprakash Singh /**
32*4b8b8d74SJaiprakash Singh  * Enumeration sam_dmc_size_e
33*4b8b8d74SJaiprakash Singh  *
34*4b8b8d74SJaiprakash Singh  * SAM DMC Size Enumeration
35*4b8b8d74SJaiprakash Singh  * Size of each memory channel
36*4b8b8d74SJaiprakash Singh  */
37*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_12GB (2)
38*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_192GB (6)
39*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_24GB (3)
40*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_384GB (7)
41*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_48GB (4)
42*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_6GB (1)
43*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_96GB (5)
44*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_SIZE_E_S_PWR2 (0)
45*4b8b8d74SJaiprakash Singh 
46*4b8b8d74SJaiprakash Singh /**
47*4b8b8d74SJaiprakash Singh  * Enumeration sam_dmc_stripe_e
48*4b8b8d74SJaiprakash Singh  *
49*4b8b8d74SJaiprakash Singh  * SAM DMC Stripe Enumeration
50*4b8b8d74SJaiprakash Singh  * Number of aligned consecutive bytes to keep within a memory channel
51*4b8b8d74SJaiprakash Singh  */
52*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_STRIPE_E_RSVD (3)
53*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_STRIPE_E_S_128B (1)
54*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_STRIPE_E_S_256B (2)
55*4b8b8d74SJaiprakash Singh #define ODY_SAM_DMC_STRIPE_E_S_64B (0)
56*4b8b8d74SJaiprakash Singh 
57*4b8b8d74SJaiprakash Singh /**
58*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_asc_region#_attr
59*4b8b8d74SJaiprakash Singh  *
60*4b8b8d74SJaiprakash Singh  * SAM Address Space Control Region Attributes Registers
61*4b8b8d74SJaiprakash Singh  */
62*4b8b8d74SJaiprakash Singh union ody_sam_asc_regionx_attr {
63*4b8b8d74SJaiprakash Singh 	uint64_t u;
64*4b8b8d74SJaiprakash Singh 	struct ody_sam_asc_regionx_attr_s {
65*4b8b8d74SJaiprakash Singh 		uint64_t reserved_0_19               : 20;
66*4b8b8d74SJaiprakash Singh 		uint64_t ns_en                       : 1;
67*4b8b8d74SJaiprakash Singh 		uint64_t s_en                        : 1;
68*4b8b8d74SJaiprakash Singh 		uint64_t reserved_22_63              : 42;
69*4b8b8d74SJaiprakash Singh 	} s;
70*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_asc_regionx_attr_s cn; */
71*4b8b8d74SJaiprakash Singh };
72*4b8b8d74SJaiprakash Singh typedef union ody_sam_asc_regionx_attr ody_sam_asc_regionx_attr_t;
73*4b8b8d74SJaiprakash Singh 
74*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_ATTR(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_ASC_REGIONX_ATTR(uint64_t a)75*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_ATTR(uint64_t a)
76*4b8b8d74SJaiprakash Singh {
77*4b8b8d74SJaiprakash Singh 	if (a <= 3)
78*4b8b8d74SJaiprakash Singh 		return 0x87e059000018ll + 0x20ll * ((a) & 0x3);
79*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_ASC_REGIONX_ATTR", 1, a, 0, 0, 0, 0, 0);
80*4b8b8d74SJaiprakash Singh }
81*4b8b8d74SJaiprakash Singh 
82*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_ASC_REGIONX_ATTR(a) ody_sam_asc_regionx_attr_t
83*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_ASC_REGIONX_ATTR(a) CSR_TYPE_RSL
84*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_ASC_REGIONX_ATTR(a) "SAM_ASC_REGIONX_ATTR"
85*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_ASC_REGIONX_ATTR(a) 0x0 /* PF_BAR0 */
86*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_ASC_REGIONX_ATTR(a) (a)
87*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_ASC_REGIONX_ATTR(a) (a), -1, -1, -1
88*4b8b8d74SJaiprakash Singh 
89*4b8b8d74SJaiprakash Singh /**
90*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_asc_region#_end
91*4b8b8d74SJaiprakash Singh  *
92*4b8b8d74SJaiprakash Singh  * SAM Address Space Control Region End Address Registers
93*4b8b8d74SJaiprakash Singh  */
94*4b8b8d74SJaiprakash Singh union ody_sam_asc_regionx_end {
95*4b8b8d74SJaiprakash Singh 	uint64_t u;
96*4b8b8d74SJaiprakash Singh 	struct ody_sam_asc_regionx_end_s {
97*4b8b8d74SJaiprakash Singh 		uint64_t reserved_0_20               : 21;
98*4b8b8d74SJaiprakash Singh 		uint64_t addr                        : 23;
99*4b8b8d74SJaiprakash Singh 		uint64_t reserved_44_63              : 20;
100*4b8b8d74SJaiprakash Singh 	} s;
101*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_asc_regionx_end_s cn; */
102*4b8b8d74SJaiprakash Singh };
103*4b8b8d74SJaiprakash Singh typedef union ody_sam_asc_regionx_end ody_sam_asc_regionx_end_t;
104*4b8b8d74SJaiprakash Singh 
105*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_END(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_ASC_REGIONX_END(uint64_t a)106*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_END(uint64_t a)
107*4b8b8d74SJaiprakash Singh {
108*4b8b8d74SJaiprakash Singh 	if (a <= 3)
109*4b8b8d74SJaiprakash Singh 		return 0x87e059000008ll + 0x20ll * ((a) & 0x3);
110*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_ASC_REGIONX_END", 1, a, 0, 0, 0, 0, 0);
111*4b8b8d74SJaiprakash Singh }
112*4b8b8d74SJaiprakash Singh 
113*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_ASC_REGIONX_END(a) ody_sam_asc_regionx_end_t
114*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_ASC_REGIONX_END(a) CSR_TYPE_RSL
115*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_ASC_REGIONX_END(a) "SAM_ASC_REGIONX_END"
116*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_ASC_REGIONX_END(a) 0x0 /* PF_BAR0 */
117*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_ASC_REGIONX_END(a) (a)
118*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_ASC_REGIONX_END(a) (a), -1, -1, -1
119*4b8b8d74SJaiprakash Singh 
120*4b8b8d74SJaiprakash Singh /**
121*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_asc_region#_start
122*4b8b8d74SJaiprakash Singh  *
123*4b8b8d74SJaiprakash Singh  * SAM Address Space Control Region Start Address Registers
124*4b8b8d74SJaiprakash Singh  */
125*4b8b8d74SJaiprakash Singh union ody_sam_asc_regionx_start {
126*4b8b8d74SJaiprakash Singh 	uint64_t u;
127*4b8b8d74SJaiprakash Singh 	struct ody_sam_asc_regionx_start_s {
128*4b8b8d74SJaiprakash Singh 		uint64_t reserved_0_20               : 21;
129*4b8b8d74SJaiprakash Singh 		uint64_t addr                        : 23;
130*4b8b8d74SJaiprakash Singh 		uint64_t reserved_44_63              : 20;
131*4b8b8d74SJaiprakash Singh 	} s;
132*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_asc_regionx_start_s cn; */
133*4b8b8d74SJaiprakash Singh };
134*4b8b8d74SJaiprakash Singh typedef union ody_sam_asc_regionx_start ody_sam_asc_regionx_start_t;
135*4b8b8d74SJaiprakash Singh 
136*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_START(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_ASC_REGIONX_START(uint64_t a)137*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_ASC_REGIONX_START(uint64_t a)
138*4b8b8d74SJaiprakash Singh {
139*4b8b8d74SJaiprakash Singh 	if (a <= 3)
140*4b8b8d74SJaiprakash Singh 		return 0x87e059000000ll + 0x20ll * ((a) & 0x3);
141*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_ASC_REGIONX_START", 1, a, 0, 0, 0, 0, 0);
142*4b8b8d74SJaiprakash Singh }
143*4b8b8d74SJaiprakash Singh 
144*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_ASC_REGIONX_START(a) ody_sam_asc_regionx_start_t
145*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_ASC_REGIONX_START(a) CSR_TYPE_RSL
146*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_ASC_REGIONX_START(a) "SAM_ASC_REGIONX_START"
147*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_ASC_REGIONX_START(a) 0x0 /* PF_BAR0 */
148*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_ASC_REGIONX_START(a) (a)
149*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_ASC_REGIONX_START(a) (a), -1, -1, -1
150*4b8b8d74SJaiprakash Singh 
151*4b8b8d74SJaiprakash Singh /**
152*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_cfg
153*4b8b8d74SJaiprakash Singh  *
154*4b8b8d74SJaiprakash Singh  * SAM Configuration Register
155*4b8b8d74SJaiprakash Singh  * This register holds configuration information.
156*4b8b8d74SJaiprakash Singh  */
157*4b8b8d74SJaiprakash Singh union ody_sam_cfg {
158*4b8b8d74SJaiprakash Singh 	uint64_t u;
159*4b8b8d74SJaiprakash Singh 	struct ody_sam_cfg_s {
160*4b8b8d74SJaiprakash Singh 		uint64_t dss_ch                      : 4;
161*4b8b8d74SJaiprakash Singh 		uint64_t dmc_2ch                     : 1;
162*4b8b8d74SJaiprakash Singh 		uint64_t dmc_size                    : 3;
163*4b8b8d74SJaiprakash Singh 		uint64_t dmc_stripe                  : 2;
164*4b8b8d74SJaiprakash Singh 		uint64_t dss_columns_dis             : 5;
165*4b8b8d74SJaiprakash Singh 		uint64_t reserved_15_63              : 49;
166*4b8b8d74SJaiprakash Singh 	} s;
167*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_cfg_s cn; */
168*4b8b8d74SJaiprakash Singh };
169*4b8b8d74SJaiprakash Singh typedef union ody_sam_cfg ody_sam_cfg_t;
170*4b8b8d74SJaiprakash Singh 
171*4b8b8d74SJaiprakash Singh #define ODY_SAM_CFG ODY_SAM_CFG_FUNC()
172*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_CFG_FUNC(void) __attribute__ ((pure, always_inline));
ODY_SAM_CFG_FUNC(void)173*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_CFG_FUNC(void)
174*4b8b8d74SJaiprakash Singh {
175*4b8b8d74SJaiprakash Singh 	return 0x87e059000400ll;
176*4b8b8d74SJaiprakash Singh }
177*4b8b8d74SJaiprakash Singh 
178*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_CFG ody_sam_cfg_t
179*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_CFG CSR_TYPE_RSL
180*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_CFG "SAM_CFG"
181*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_CFG 0x0 /* PF_BAR0 */
182*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_CFG 0
183*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_CFG -1, -1, -1, -1
184*4b8b8d74SJaiprakash Singh 
185*4b8b8d74SJaiprakash Singh /**
186*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_hash#
187*4b8b8d74SJaiprakash Singh  *
188*4b8b8d74SJaiprakash Singh  * SAM hash matrix coefficients Registers
189*4b8b8d74SJaiprakash Singh  * This hash matrix is used to spread addresses among tiles/sets. Each register
190*4b8b8d74SJaiprakash Singh  * represents an output bit. Each coefficient bit represents inputs that are XOR'd to
191*4b8b8d74SJaiprakash Singh  * create the output bit. bit. HASH(16..0)[CO]\<22:6\> must form an invertible
192*4b8b8d74SJaiprakash Singh  * matrix. Input bit 6 must only affect output bit 6. Input bit 7 must only affect
193*4b8b8d74SJaiprakash Singh  * output bits 6 and 7. It is recommended that every 17x17 submatrix is invertible for
194*4b8b8d74SJaiprakash Singh  * best stride resistance. If scratch mode is used in a 10 DSS system, SAM_HASH(16..15)
195*4b8b8d74SJaiprakash Singh  * must come from the identity matrix. If scratch mode is used is a 4 DSS system,
196*4b8b8d74SJaiprakash Singh  * SAM_HASH(16) must come from the identity matrix. The reset value is compatible with
197*4b8b8d74SJaiprakash Singh  * a 10 DSS system.
198*4b8b8d74SJaiprakash Singh  */
199*4b8b8d74SJaiprakash Singh union ody_sam_hashx {
200*4b8b8d74SJaiprakash Singh 	uint64_t u;
201*4b8b8d74SJaiprakash Singh 	struct ody_sam_hashx_s {
202*4b8b8d74SJaiprakash Singh 		uint64_t reserved_0_5                : 6;
203*4b8b8d74SJaiprakash Singh 		uint64_t co                          : 38;
204*4b8b8d74SJaiprakash Singh 		uint64_t reserved_44_63              : 20;
205*4b8b8d74SJaiprakash Singh 	} s;
206*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_hashx_s cn; */
207*4b8b8d74SJaiprakash Singh };
208*4b8b8d74SJaiprakash Singh typedef union ody_sam_hashx ody_sam_hashx_t;
209*4b8b8d74SJaiprakash Singh 
210*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_HASHX(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_HASHX(uint64_t a)211*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_HASHX(uint64_t a)
212*4b8b8d74SJaiprakash Singh {
213*4b8b8d74SJaiprakash Singh 	if (a <= 16)
214*4b8b8d74SJaiprakash Singh 		return 0x87e059004000ll + 8ll * ((a) & 0x1f);
215*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_HASHX", 1, a, 0, 0, 0, 0, 0);
216*4b8b8d74SJaiprakash Singh }
217*4b8b8d74SJaiprakash Singh 
218*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_HASHX(a) ody_sam_hashx_t
219*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_HASHX(a) CSR_TYPE_RSL
220*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_HASHX(a) "SAM_HASHX"
221*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_HASHX(a) 0x0 /* PF_BAR0 */
222*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_HASHX(a) (a)
223*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_HASHX(a) (a), -1, -1, -1
224*4b8b8d74SJaiprakash Singh 
225*4b8b8d74SJaiprakash Singh /**
226*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_ihash#
227*4b8b8d74SJaiprakash Singh  *
228*4b8b8d74SJaiprakash Singh  * SAM inverse hash matrix coefficients Registers
229*4b8b8d74SJaiprakash Singh  * This matrix must be the inverse of SAM_HASH
230*4b8b8d74SJaiprakash Singh  */
231*4b8b8d74SJaiprakash Singh union ody_sam_ihashx {
232*4b8b8d74SJaiprakash Singh 	uint64_t u;
233*4b8b8d74SJaiprakash Singh 	struct ody_sam_ihashx_s {
234*4b8b8d74SJaiprakash Singh 		uint64_t reserved_0_5                : 6;
235*4b8b8d74SJaiprakash Singh 		uint64_t co                          : 38;
236*4b8b8d74SJaiprakash Singh 		uint64_t reserved_44_63              : 20;
237*4b8b8d74SJaiprakash Singh 	} s;
238*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_ihashx_s cn; */
239*4b8b8d74SJaiprakash Singh };
240*4b8b8d74SJaiprakash Singh typedef union ody_sam_ihashx ody_sam_ihashx_t;
241*4b8b8d74SJaiprakash Singh 
242*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_IHASHX(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_IHASHX(uint64_t a)243*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_IHASHX(uint64_t a)
244*4b8b8d74SJaiprakash Singh {
245*4b8b8d74SJaiprakash Singh 	if (a <= 16)
246*4b8b8d74SJaiprakash Singh 		return 0x87e059004100ll + 8ll * ((a) & 0x1f);
247*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_IHASHX", 1, a, 0, 0, 0, 0, 0);
248*4b8b8d74SJaiprakash Singh }
249*4b8b8d74SJaiprakash Singh 
250*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_IHASHX(a) ody_sam_ihashx_t
251*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_IHASHX(a) CSR_TYPE_RSL
252*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_IHASHX(a) "SAM_IHASHX"
253*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_IHASHX(a) 0x0 /* PF_BAR0 */
254*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_IHASHX(a) (a)
255*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_IHASHX(a) (a), -1, -1, -1
256*4b8b8d74SJaiprakash Singh 
257*4b8b8d74SJaiprakash Singh /**
258*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_mn_map#
259*4b8b8d74SJaiprakash Singh  *
260*4b8b8d74SJaiprakash Singh  * SAM MN Map Registers
261*4b8b8d74SJaiprakash Singh  * These registers specify the location of MN.  Note that it is illegal to provision an
262*4b8b8d74SJaiprakash Singh  * MN on a tile with a TAD that is disabled for any reason.
263*4b8b8d74SJaiprakash Singh  */
264*4b8b8d74SJaiprakash Singh union ody_sam_mn_mapx {
265*4b8b8d74SJaiprakash Singh 	uint64_t u;
266*4b8b8d74SJaiprakash Singh 	struct ody_sam_mn_mapx_s {
267*4b8b8d74SJaiprakash Singh 		uint64_t y                           : 4;
268*4b8b8d74SJaiprakash Singh 		uint64_t x                           : 4;
269*4b8b8d74SJaiprakash Singh 		uint64_t val                         : 1;
270*4b8b8d74SJaiprakash Singh 		uint64_t reserved_9_63               : 55;
271*4b8b8d74SJaiprakash Singh 	} s;
272*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_mn_mapx_s cn; */
273*4b8b8d74SJaiprakash Singh };
274*4b8b8d74SJaiprakash Singh typedef union ody_sam_mn_mapx ody_sam_mn_mapx_t;
275*4b8b8d74SJaiprakash Singh 
276*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_MN_MAPX(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_MN_MAPX(uint64_t a)277*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_MN_MAPX(uint64_t a)
278*4b8b8d74SJaiprakash Singh {
279*4b8b8d74SJaiprakash Singh 	if (a <= 7)
280*4b8b8d74SJaiprakash Singh 		return 0x87e059004200ll + 8ll * ((a) & 0x7);
281*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_MN_MAPX", 1, a, 0, 0, 0, 0, 0);
282*4b8b8d74SJaiprakash Singh }
283*4b8b8d74SJaiprakash Singh 
284*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_MN_MAPX(a) ody_sam_mn_mapx_t
285*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_MN_MAPX(a) CSR_TYPE_RSL
286*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_MN_MAPX(a) "SAM_MN_MAPX"
287*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_MN_MAPX(a) 0x0 /* PF_BAR0 */
288*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_MN_MAPX(a) (a)
289*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_MN_MAPX(a) (a), -1, -1, -1
290*4b8b8d74SJaiprakash Singh 
291*4b8b8d74SJaiprakash Singh /**
292*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_ncb#_const
293*4b8b8d74SJaiprakash Singh  *
294*4b8b8d74SJaiprakash Singh  * SAM Processor Number Routing Map Registers
295*4b8b8d74SJaiprakash Singh  * A table of IOB routing destinations.
296*4b8b8d74SJaiprakash Singh  *
297*4b8b8d74SJaiprakash Singh  * \<pre\>
298*4b8b8d74SJaiprakash Singh  *  Index a  bus  Bus index
299*4b8b8d74SJaiprakash Singh  *  -------  ---  ---------
300*4b8b8d74SJaiprakash Singh  *  00-3F    NCB  DID 00-3F
301*4b8b8d74SJaiprakash Singh  *  40-5F    NCB  DID 60-7F
302*4b8b8d74SJaiprakash Singh  *  60-7F    NCB  DID E0-FF
303*4b8b8d74SJaiprakash Singh  *  80-BF    ECAM DOM 00-3F
304*4b8b8d74SJaiprakash Singh  *  C0-CF    PEM  DID 00-0F
305*4b8b8d74SJaiprakash Singh  *  D0-FF    Reserved
306*4b8b8d74SJaiprakash Singh  * \</pre\>
307*4b8b8d74SJaiprakash Singh  */
308*4b8b8d74SJaiprakash Singh union ody_sam_ncbx_const {
309*4b8b8d74SJaiprakash Singh 	uint64_t u;
310*4b8b8d74SJaiprakash Singh 	struct ody_sam_ncbx_const_s {
311*4b8b8d74SJaiprakash Singh 		uint64_t valid                       : 1;
312*4b8b8d74SJaiprakash Singh 		uint64_t iob                         : 3;
313*4b8b8d74SJaiprakash Singh 		uint64_t ncb                         : 2;
314*4b8b8d74SJaiprakash Singh 		uint64_t reserved_6_7                : 2;
315*4b8b8d74SJaiprakash Singh 		uint64_t arbid                       : 4;
316*4b8b8d74SJaiprakash Singh 		uint64_t reserved_12_63              : 52;
317*4b8b8d74SJaiprakash Singh 	} s;
318*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_ncbx_const_s cn; */
319*4b8b8d74SJaiprakash Singh };
320*4b8b8d74SJaiprakash Singh typedef union ody_sam_ncbx_const ody_sam_ncbx_const_t;
321*4b8b8d74SJaiprakash Singh 
322*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_NCBX_CONST(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_NCBX_CONST(uint64_t a)323*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_NCBX_CONST(uint64_t a)
324*4b8b8d74SJaiprakash Singh {
325*4b8b8d74SJaiprakash Singh 	if (a <= 255)
326*4b8b8d74SJaiprakash Singh 		return 0x87e059008800ll + 8ll * ((a) & 0xff);
327*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_NCBX_CONST", 1, a, 0, 0, 0, 0, 0);
328*4b8b8d74SJaiprakash Singh }
329*4b8b8d74SJaiprakash Singh 
330*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_NCBX_CONST(a) ody_sam_ncbx_const_t
331*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_NCBX_CONST(a) CSR_TYPE_RSL
332*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_NCBX_CONST(a) "SAM_NCBX_CONST"
333*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_NCBX_CONST(a) 0x0 /* PF_BAR0 */
334*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_NCBX_CONST(a) (a)
335*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_NCBX_CONST(a) (a), -1, -1, -1
336*4b8b8d74SJaiprakash Singh 
337*4b8b8d74SJaiprakash Singh /**
338*4b8b8d74SJaiprakash Singh  * Register (RSL) sam_pn_map#
339*4b8b8d74SJaiprakash Singh  *
340*4b8b8d74SJaiprakash Singh  * SAM Processor Number Routing Map Registers
341*4b8b8d74SJaiprakash Singh  * A table of routing destinations indexed by logical processor number.  The default
342*4b8b8d74SJaiprakash Singh  * numbering is row-major.
343*4b8b8d74SJaiprakash Singh  */
344*4b8b8d74SJaiprakash Singh union ody_sam_pn_mapx {
345*4b8b8d74SJaiprakash Singh 	uint64_t u;
346*4b8b8d74SJaiprakash Singh 	struct ody_sam_pn_mapx_s {
347*4b8b8d74SJaiprakash Singh 		uint64_t y                           : 4;
348*4b8b8d74SJaiprakash Singh 		uint64_t x                           : 4;
349*4b8b8d74SJaiprakash Singh 		uint64_t val                         : 1;
350*4b8b8d74SJaiprakash Singh 		uint64_t reserved_9_63               : 55;
351*4b8b8d74SJaiprakash Singh 	} s;
352*4b8b8d74SJaiprakash Singh 	/* struct ody_sam_pn_mapx_s cn; */
353*4b8b8d74SJaiprakash Singh };
354*4b8b8d74SJaiprakash Singh typedef union ody_sam_pn_mapx ody_sam_pn_mapx_t;
355*4b8b8d74SJaiprakash Singh 
356*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_PN_MAPX(uint64_t a) __attribute__ ((pure, always_inline));
ODY_SAM_PN_MAPX(uint64_t a)357*4b8b8d74SJaiprakash Singh static inline uint64_t ODY_SAM_PN_MAPX(uint64_t a)
358*4b8b8d74SJaiprakash Singh {
359*4b8b8d74SJaiprakash Singh 	if (a <= 81)
360*4b8b8d74SJaiprakash Singh 		return 0x87e059000800ll + 8ll * ((a) & 0x7f);
361*4b8b8d74SJaiprakash Singh 	__ody_csr_fatal("SAM_PN_MAPX", 1, a, 0, 0, 0, 0, 0);
362*4b8b8d74SJaiprakash Singh }
363*4b8b8d74SJaiprakash Singh 
364*4b8b8d74SJaiprakash Singh #define typedef_ODY_SAM_PN_MAPX(a) ody_sam_pn_mapx_t
365*4b8b8d74SJaiprakash Singh #define bustype_ODY_SAM_PN_MAPX(a) CSR_TYPE_RSL
366*4b8b8d74SJaiprakash Singh #define basename_ODY_SAM_PN_MAPX(a) "SAM_PN_MAPX"
367*4b8b8d74SJaiprakash Singh #define device_bar_ODY_SAM_PN_MAPX(a) 0x0 /* PF_BAR0 */
368*4b8b8d74SJaiprakash Singh #define busnum_ODY_SAM_PN_MAPX(a) (a)
369*4b8b8d74SJaiprakash Singh #define arguments_ODY_SAM_PN_MAPX(a) (a), -1, -1, -1
370*4b8b8d74SJaiprakash Singh 
371*4b8b8d74SJaiprakash Singh #endif /* __ODY_CSRS_SAM_H__ */
372