hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/** @file
 *  Platform headers
 *
 *  Copyright 2020 NXP
 *  Copyright 2020 Puresoftware Ltd
 *
 *  SPDX-License-Identifier: BSD-2-Clause-Patent
 *
**/
 
 
#ifndef LX2160ARDB_PLATFORM_H
#define LX2160ARDB_PLATFORM_H
 
#define EFI_ACPI_ARM_OEM_REVISION       0x00000000
 
// Soc defines
#define SVR_SOC_VER(svr)        (((svr) >> 8) & 0xFFFFFE)
#define SVR_MAJOR(svr)          (((svr) >> 4) & 0xf)
#define SVR_MINOR(svr)          (((svr) >> 0) & 0xf)
 
#define SVR_LX2160A             0x873600
 
// PCLK
#define DCFG_BASE   0x1E00000
#define DCFG_LEN    0x1FFFF
 
// Gic
#define GIC_VERSION 3
#define GICD_BASE   0x6000000
#define GICI_BASE   0x6020000
#define GICR_BASE   0x06200000
#define GICR_LEN    0x200000
#define GICC_BASE   0x0c0c0000
#define GICH_BASE   0x0c0d0000
#define GICV_BASE   0x0c0e0000
 
// UART
#define UART0_BASE               0x21C0000
#define UART1_BASE               0x21D0000
#define UART2_BASE               0x21E0000
#define UART3_BASE               0x21F0000
#define UART0_IT                 64
#define UART1_IT                 65
#define UART2_IT                 104
#define UART3_IT                 105
#define UART_LEN                 0x10000
#define SPCR_FLOW_CONTROL_NONE   0
 
// Timer
#define TIMER_BLOCK_COUNT            1
#define TIMER_FRAME_COUNT            4
#define TIMER_WATCHDOG_COUNT         1
#define TIMER_BASE_ADDRESS           0x23E0000 // a.k.a CNTControlBase
#define TIMER_READ_BASE_ADDRESS      0x23F0000 // a.k.a CNTReadBase
#define TIMER_GT_BLOCK_0_ADDRESS     0x2890000 // a.k.a CNTCTLBase (Secure)
#define TIMER_GT_BASE_0_ADDRESS      0x28A0000  // a.k.a CNTBase0
#define TIMER_GT_BASE_1_ADDRESS      0x28B0000  // a.k.a CNTBase1
#define TIMER_GT_BASE_2_ADDRESS      0x28C0000  // a.k.a CNTBase2
#define TIMER_GT_BASE_3_ADDRESS      0x28D0000  // a.k.a CNTBase3
#define TIMER_GT_BASE_0_EL0_ADDRESS  0x28E0000  // a.k.a CNTBase0EL0
#define TIMER_GT_BASE_2_EL0_ADDRESS  0x28F0000  // a.k.a CNTBase2EL0
#define TIMER_WDT0_REFRESH_BASE      0x2390000
#define TIMER_WDT0_CONTROL_BASE      0x23A0000
#define TIMER_SEC_IT                 29
#define TIMER_NON_SEC_IT             30
#define TIMER_VIRT_IT                27
#define TIMER_HYP_IT                 26
#define TIMER_FRAME0_IT              78
#define TIMER_FRAME1_IT              79
#define TIMER_FRAME2_IT              92
#define TIMER_FRAME3_IT              93
#define TIMER_WDT0_IT                91
 
#define DEFAULT_PLAT_FREQ            700000000
 
// Mcfg
#define LX2160A_PCI_SEG0_CONFIG_BASE 0x9000000000
#define LX2160A_PCI_SEG0             0x2
#define LX2160A_PCI_SEG_BUSNUM_MIN   0x0
#define LX2160A_PCI_SEG_BUSNUM_MAX   0xff
#define LX2160A_PCI_SEG1_CONFIG_BASE 0xA000000000
#define LX2160A_PCI_SEG1             0x4
 
// Platform specific info needed by Configuration Manager
 
#define OEM_ACPI_TABLES   1 // OEM defined DSDT
 
#define CFG_MGR_TABLE_ID  SIGNATURE_64 ('L','X','2','1','6','0',' ',' ')
 
#define PLAT_PCI_SEG0_CONFIG_BASE   LX2160A_PCI_SEG0_CONFIG_BASE
#define PLAT_PCI_SEG0               LX2160A_PCI_SEG0
#define PLAT_PCI_SEG_BUSNUM_MIN     LX2160A_PCI_SEG_BUSNUM_MIN
#define PLAT_PCI_SEG_BUSNUM_MAX     LX2160A_PCI_SEG_BUSNUM_MAX
#define PLAT_PCI_SEG1_CONFIG_BASE   LX2160A_PCI_SEG1_CONFIG_BASE
#define PLAT_PCI_SEG1               LX2160A_PCI_SEG1
 
#define PLAT_GIC_VERSION            GIC_VERSION
#define PLAT_GICD_BASE              GICD_BASE
#define PLAT_GICI_BASE              GICI_BASE
#define PLAT_GICR_BASE              GICR_BASE
#define PLAT_GICR_LEN               GICR_LEN
#define PLAT_GICC_BASE              GICC_BASE
#define PLAT_GICH_BASE              GICH_BASE
#define PLAT_GICV_BASE              GICV_BASE
 
#define PLAT_CPU_COUNT          16
#define PLAT_GTBLOCK_COUNT      1
#define PLAT_GTFRAME_COUNT      4
#define PLAT_PCI_CONFG_COUNT    2
 
#define PLAT_WATCHDOG_COUNT           1
#define PLAT_GIC_REDISTRIBUTOR_COUNT  1
#define PLAT_GIC_ITS_COUNT            1
 
/* GIC CPU Interface information
   GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq, EnergyEfficiency)
 */
#define PLAT_GIC_CPU_INTERFACE    {                         \
             GICC_ENTRY (0,  GET_MPID (0, 0), 23, 0x19, 0), \
             GICC_ENTRY (1,  GET_MPID (0, 1), 23, 0x19, 0), \
             GICC_ENTRY (2,  GET_MPID (1, 0), 23, 0x19, 0), \
             GICC_ENTRY (3,  GET_MPID (1, 1), 23, 0x19, 0), \
             GICC_ENTRY (4,  GET_MPID (2, 0), 23, 0x19, 0), \
             GICC_ENTRY (5,  GET_MPID (2, 1), 23, 0x19, 0), \
             GICC_ENTRY (6,  GET_MPID (3, 0), 23, 0x19, 0), \
             GICC_ENTRY (7,  GET_MPID (3, 1), 23, 0x19, 0), \
             GICC_ENTRY (8,  GET_MPID (4, 0), 23, 0x19, 0), \
             GICC_ENTRY (9,  GET_MPID (4, 1), 23, 0x19, 0), \
             GICC_ENTRY (10, GET_MPID (5, 0), 23, 0x19, 0), \
             GICC_ENTRY (11, GET_MPID (5, 1), 23, 0x19, 0), \
             GICC_ENTRY (12, GET_MPID (6, 0), 23, 0x19, 0), \
             GICC_ENTRY (13, GET_MPID (6, 1), 23, 0x19, 0), \
             GICC_ENTRY (14, GET_MPID (7, 0), 23, 0x19, 0), \
             GICC_ENTRY (15, GET_MPID (7, 1), 23, 0x19, 0)  \
}
 
// watchdogs
#define PLAT_WATCHDOG_INFO                    \
  {                                           \
      TIMER_WDT0_CONTROL_BASE,                \
      TIMER_WDT0_REFRESH_BASE,                \
      TIMER_WDT0_IT,                          \
      SBSA_WATCHDOG_FLAGS                     \
  }                                           \
 
#define PLAT_TIMER_BLOCK_INFO                                           \
  {                                                                     \
    {                                                                   \
      TIMER_GT_BLOCK_0_ADDRESS,                                         \
      PLAT_GTFRAME_COUNT,                                               \
      (CM_OBJECT_TOKEN)((UINT8*)&FslPlatformRepositoryInfo +            \
        OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, GTBlock0TimerInfo))  \
    }                                                                   \
  }                                                                     \
 
#define PLAT_TIMER_FRAME_INFO                                            \
  {                                                                      \
    {                                                                    \
      0,                             /* UINT8 GTFrameNumber */           \
      TIMER_GT_BASE_0_ADDRESS,       /* UINT64 CntBaseX */               \
      TIMER_GT_BASE_0_EL0_ADDRESS,   /* UINT64 CntEL0BaseX */            \
      TIMER_FRAME0_IT,               /* UINT32 GTxPhysicalTimerGSIV */   \
      GTDT_FRAME_FLAGS,              /* UINT32 GTxPhysicalTimerFlags */  \
      TIMER_FRAME0_IT,               /* UINT32 GTxVirtualTimerGSIV */    \
      GTDT_FRAME_FLAGS,              /* UINT32 GTxVirtualTimerFlags */   \
      0                              /* UINT32 GTxCommonFlags */         \
    }, /* Gtdt.Frames[0] */                                              \
    {                                                                    \
      1,                             /* UINT8 GTFrameNumber */           \
      TIMER_GT_BASE_1_ADDRESS,       /* UINT64 CntBaseX */               \
      GT_BLOCK_FRAME_RES_BASE,       /* UINT64 CntEL0BaseX */            \
      TIMER_FRAME1_IT,               /* UINT32 GTxPhysicalTimerGSIV */   \
      GTDT_FRAME_FLAGS,              /* UINT32 GTxPhysicalTimerFlags */  \
      0,                             /* UINT32 GTxVirtualTimerGSIV */    \
      0,                             /* UINT32 GTxVirtualTimerFlags */   \
      GTDT_FRAME_COMMON_FLAGS        /* UINT32 GTxCommonFlags */         \
    }, /* Gtdt.Frames[1] */                                              \
    {                                                                    \
      2,                              /* UINT8 GTFrameNumber */          \
      TIMER_GT_BASE_2_ADDRESS,        /* UINT64 CntBaseX */              \
      TIMER_GT_BASE_2_EL0_ADDRESS,    /* UINT64 CntEL0BaseX */           \
      TIMER_FRAME2_IT,                /* UINT32 GTxPhysicalTimerGSIV */  \
      GTDT_FRAME_FLAGS,               /* UINT32 GTxPhysicalTimerFlags */ \
      0,                              /* UINT32 GTxVirtualTimerGSIV */   \
      0,                              /* UINT32 GTxVirtualTimerFlags */  \
      GTDT_FRAME_COMMON_FLAGS         /* UINT32 GTxCommonFlags */        \
    },/* Gtdt.Frames[2] */                                               \
    {                                                                   \
      3,                             /* UINT8 GTFrameNumber */          \
      TIMER_GT_BASE_3_ADDRESS,       /* UINT64 CntBaseX */              \
      GT_BLOCK_FRAME_RES_BASE,       /* UINT64 CntEL0BaseX */           \
      TIMER_FRAME3_IT,               /* UINT32 GTxPhysicalTimerGSIV */  \
      GTDT_FRAME_FLAGS,              /* UINT32 GTxPhysicalTimerFlags */ \
      0,                             /* UINT32 GTxVirtualTimerGSIV */   \
      0,                             /* UINT32 GTxVirtualTimerFlags */  \
      GTDT_FRAME_COMMON_FLAGS        /* UINT32 GTxCommonFlags */        \
    }, /* Gtdt.Frames[3] */                                             \
  }                                                                     \
 
#define PLAT_GIC_DISTRIBUTOR_INFO                                      \
  {                                                                    \
    PLAT_GICD_BASE,                  /* UINT64  PhysicalBaseAddress */ \
    0,                               /* UINT32  SystemVectorBase */    \
    PLAT_GIC_VERSION                 /* UINT8   GicVersion */          \
  }                                                                    \
 
#define PLAT_GIC_REDISTRIBUTOR_INFO                                    \
  {                                                                    \
    PLAT_GICR_BASE,      /* UINT64 DiscoveryRangeBaseAddress */        \
    PLAT_GICR_LEN        /* UINT32 DiscoveryRangeLength */             \
  }                                                                    \
 
#define PLAT_GIC_ITS_INFO                                                    \
  {                                                                          \
    0,                   /* UINT32 GIC ITS ID */                             \
    PLAT_GICI_BASE,      /* UINT64 The 64-bit physical address for ITS */    \
    0                    /* UINT32 Populate the GIC ITS affinity in SRAT. */ \
  }                                                                          \
 
#define PLAT_MCFG_INFO                \
  {                                   \
    {                                 \
      PLAT_PCI_SEG0_CONFIG_BASE,      \
      PLAT_PCI_SEG0,                  \
      PLAT_PCI_SEG_BUSNUM_MIN,        \
      PLAT_PCI_SEG_BUSNUM_MAX,        \
    },                                \
    {                                 \
      PLAT_PCI_SEG1_CONFIG_BASE,      \
      PLAT_PCI_SEG1,                  \
      PLAT_PCI_SEG_BUSNUM_MIN,        \
      PLAT_PCI_SEG_BUSNUM_MAX,        \
    }                                 \
  }                                   \
 
#define PLAT_SPCR_INFO                                                            \
  {                                                                               \
    UART0_BASE,                                                                   \
    UART0_IT,                                                                     \
    115200,                                                                       \
    0,                                                                            \
    EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART  \
  }                                                                               \
 
#endif // LX2160ARDB_PLATFORM_H