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