xref: /arm-trusted-firmware/plat/marvell/octeontx/otx2/t91/t9130/board/marvell_plat_config.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (C) 2018 Marvell International Ltd.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier:	BSD-3-Clause
5*91f16700Schasinglulu  * https://spdx.org/licenses
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #include <armada_common.h>
9*91f16700Schasinglulu #include <mvebu_def.h>
10*91f16700Schasinglulu 
11*91f16700Schasinglulu /*
12*91f16700Schasinglulu  * If bootrom is currently at BLE there's no need to include the memory
13*91f16700Schasinglulu  * maps structure at this point
14*91f16700Schasinglulu  */
15*91f16700Schasinglulu #ifndef IMAGE_BLE
16*91f16700Schasinglulu 
17*91f16700Schasinglulu /*****************************************************************************
18*91f16700Schasinglulu  * AMB Configuration
19*91f16700Schasinglulu  *****************************************************************************
20*91f16700Schasinglulu  */
21*91f16700Schasinglulu struct addr_map_win amb_memory_map_cp0[] = {
22*91f16700Schasinglulu 	/* CP0 SPI1 CS0 Direct Mode access */
23*91f16700Schasinglulu 	{0xe800,	0x2000000,	AMB_SPI1_CS0_ID},
24*91f16700Schasinglulu };
25*91f16700Schasinglulu 
26*91f16700Schasinglulu int marvell_get_amb_memory_map(struct addr_map_win **win, uint32_t *size,
27*91f16700Schasinglulu 			       uintptr_t base)
28*91f16700Schasinglulu {
29*91f16700Schasinglulu 	switch (base) {
30*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(0):
31*91f16700Schasinglulu 		*win = amb_memory_map_cp0;
32*91f16700Schasinglulu 		*size = ARRAY_SIZE(amb_memory_map_cp0);
33*91f16700Schasinglulu 		return 0;
34*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(1):
35*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(2):
36*91f16700Schasinglulu 	default:
37*91f16700Schasinglulu 		*size = 0;
38*91f16700Schasinglulu 		*win = 0;
39*91f16700Schasinglulu 		return 1;
40*91f16700Schasinglulu 	}
41*91f16700Schasinglulu }
42*91f16700Schasinglulu #endif
43*91f16700Schasinglulu 
44*91f16700Schasinglulu /*****************************************************************************
45*91f16700Schasinglulu  * IO WIN Configuration
46*91f16700Schasinglulu  *****************************************************************************
47*91f16700Schasinglulu  */
48*91f16700Schasinglulu struct addr_map_win io_win_memory_map[] = {
49*91f16700Schasinglulu #if (CP_COUNT > 1)
50*91f16700Schasinglulu 	/* SB (MCi0) internal regs */
51*91f16700Schasinglulu 	{0x00000000f4000000,		0x2000000,	MCI_0_TID},
52*91f16700Schasinglulu #if (CP_COUNT > 2)
53*91f16700Schasinglulu 	/* SB (MCi1) internal regs */
54*91f16700Schasinglulu 	{0x00000000f6000000,		0x2000000,	MCI_1_TID},
55*91f16700Schasinglulu #endif
56*91f16700Schasinglulu #endif
57*91f16700Schasinglulu #ifndef IMAGE_BLE
58*91f16700Schasinglulu 	/* SB (MCi0) PCIe0-2 on CP1 */
59*91f16700Schasinglulu 	{0x00000000e2000000,		0x3000000,	MCI_0_TID},
60*91f16700Schasinglulu 	/* SB (MCi1) PCIe0-2 on CP2 */
61*91f16700Schasinglulu 	{0x00000000e5000000,		0x3000000,	MCI_1_TID},
62*91f16700Schasinglulu 	/* MCI 0 indirect window */
63*91f16700Schasinglulu 	{MVEBU_MCI_REG_BASE_REMAP(0),	0x100000,	MCI_0_TID},
64*91f16700Schasinglulu 	/* MCI 1 indirect window */
65*91f16700Schasinglulu 	{MVEBU_MCI_REG_BASE_REMAP(1),	0x100000,	MCI_1_TID},
66*91f16700Schasinglulu #endif
67*91f16700Schasinglulu };
68*91f16700Schasinglulu 
69*91f16700Schasinglulu /* Global Control Register - window default target */
70*91f16700Schasinglulu uint32_t marvell_get_io_win_gcr_target(int ap_index)
71*91f16700Schasinglulu {
72*91f16700Schasinglulu 	/*
73*91f16700Schasinglulu 	 * PIDI == iMCIP AP to SB internal MoChi connection.
74*91f16700Schasinglulu 	 * In other words CP0
75*91f16700Schasinglulu 	 */
76*91f16700Schasinglulu 	return PIDI_TID;
77*91f16700Schasinglulu }
78*91f16700Schasinglulu 
79*91f16700Schasinglulu int marvell_get_io_win_memory_map(int ap_index, struct addr_map_win **win,
80*91f16700Schasinglulu 				  uint32_t *size)
81*91f16700Schasinglulu {
82*91f16700Schasinglulu 	*win = io_win_memory_map;
83*91f16700Schasinglulu 	if (*win == NULL)
84*91f16700Schasinglulu 		*size = 0;
85*91f16700Schasinglulu 	else
86*91f16700Schasinglulu 		*size = ARRAY_SIZE(io_win_memory_map);
87*91f16700Schasinglulu 
88*91f16700Schasinglulu 	return 0;
89*91f16700Schasinglulu }
90*91f16700Schasinglulu 
91*91f16700Schasinglulu #ifndef IMAGE_BLE
92*91f16700Schasinglulu /*****************************************************************************
93*91f16700Schasinglulu  * IOB Configuration
94*91f16700Schasinglulu  *****************************************************************************
95*91f16700Schasinglulu  */
96*91f16700Schasinglulu struct addr_map_win iob_memory_map_cp0[] = {
97*91f16700Schasinglulu 	/* SPI1_CS0 (RUNIT) window */
98*91f16700Schasinglulu 	{0x00000000e8000000,	0x2000000,	RUNIT_TID},
99*91f16700Schasinglulu 	/* PEX2_X1 window */
100*91f16700Schasinglulu 	{0x00000000e1000000,	0x1000000,	PEX2_TID},
101*91f16700Schasinglulu 	/* PEX1_X1 window */
102*91f16700Schasinglulu 	{0x00000000e0000000,	0x1000000,	PEX1_TID},
103*91f16700Schasinglulu 	/* PEX0_X4 window */
104*91f16700Schasinglulu 	{0x00000000c0000000,	0x20000000,	PEX0_TID},
105*91f16700Schasinglulu };
106*91f16700Schasinglulu 
107*91f16700Schasinglulu struct addr_map_win iob_memory_map_cp1[] = {
108*91f16700Schasinglulu 
109*91f16700Schasinglulu 	/* PEX2_X1 window */
110*91f16700Schasinglulu 	{0x00000000e4000000,	0x1000000,	PEX2_TID},
111*91f16700Schasinglulu 	/* PEX1_X1 window */
112*91f16700Schasinglulu 	{0x00000000e3000000,	0x1000000,	PEX1_TID},
113*91f16700Schasinglulu 	/* PEX0_X4 window */
114*91f16700Schasinglulu 	{0x00000000e2000000,	0x1000000,	PEX0_TID},
115*91f16700Schasinglulu };
116*91f16700Schasinglulu 
117*91f16700Schasinglulu struct addr_map_win iob_memory_map_cp2[] = {
118*91f16700Schasinglulu 
119*91f16700Schasinglulu 	/* PEX2_X1 window */
120*91f16700Schasinglulu 	{0x00000000e7000000,	0x1000000,	PEX2_TID},
121*91f16700Schasinglulu 	/* PEX1_X1 window */
122*91f16700Schasinglulu 	{0x00000000e6000000,	0x1000000,	PEX1_TID},
123*91f16700Schasinglulu 	/* PEX0_X4 window */
124*91f16700Schasinglulu 	{0x00000000e5000000,	0x1000000,	PEX0_TID},
125*91f16700Schasinglulu };
126*91f16700Schasinglulu 
127*91f16700Schasinglulu int marvell_get_iob_memory_map(struct addr_map_win **win, uint32_t *size,
128*91f16700Schasinglulu 			       uintptr_t base)
129*91f16700Schasinglulu {
130*91f16700Schasinglulu 	switch (base) {
131*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(0):
132*91f16700Schasinglulu 		*win = iob_memory_map_cp0;
133*91f16700Schasinglulu 		*size = ARRAY_SIZE(iob_memory_map_cp0);
134*91f16700Schasinglulu 		return 0;
135*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(1):
136*91f16700Schasinglulu 		*win = iob_memory_map_cp1;
137*91f16700Schasinglulu 		*size = ARRAY_SIZE(iob_memory_map_cp1);
138*91f16700Schasinglulu 		return 0;
139*91f16700Schasinglulu 	case MVEBU_CP_REGS_BASE(2):
140*91f16700Schasinglulu 		*win = iob_memory_map_cp2;
141*91f16700Schasinglulu 		*size = ARRAY_SIZE(iob_memory_map_cp2);
142*91f16700Schasinglulu 		return 0;
143*91f16700Schasinglulu 	default:
144*91f16700Schasinglulu 		*size = 0;
145*91f16700Schasinglulu 		*win = 0;
146*91f16700Schasinglulu 		return 1;
147*91f16700Schasinglulu 	}
148*91f16700Schasinglulu }
149*91f16700Schasinglulu #endif
150*91f16700Schasinglulu 
151*91f16700Schasinglulu /*****************************************************************************
152*91f16700Schasinglulu  * CCU Configuration
153*91f16700Schasinglulu  *****************************************************************************
154*91f16700Schasinglulu  */
155*91f16700Schasinglulu struct addr_map_win ccu_memory_map[] = {	/* IO window */
156*91f16700Schasinglulu #ifdef IMAGE_BLE
157*91f16700Schasinglulu 	{0x00000000f2000000,	0x6000000,	IO_0_TID}, /* IO window */
158*91f16700Schasinglulu #else
159*91f16700Schasinglulu #if LLC_SRAM
160*91f16700Schasinglulu 	{PLAT_MARVELL_LLC_SRAM_BASE, PLAT_MARVELL_LLC_SRAM_SIZE, DRAM_0_TID},
161*91f16700Schasinglulu #endif
162*91f16700Schasinglulu 	{0x00000000f2000000,	0xe000000,	IO_0_TID}, /* IO window */
163*91f16700Schasinglulu 	{0x00000000c0000000,	0x30000000,	IO_0_TID}, /* IO window */
164*91f16700Schasinglulu 	{0x0000002000000000,	0x70e000000,	IO_0_TID}, /* IO for CV-OS */
165*91f16700Schasinglulu #endif
166*91f16700Schasinglulu };
167*91f16700Schasinglulu 
168*91f16700Schasinglulu uint32_t marvell_get_ccu_gcr_target(int ap)
169*91f16700Schasinglulu {
170*91f16700Schasinglulu 	return DRAM_0_TID;
171*91f16700Schasinglulu }
172*91f16700Schasinglulu 
173*91f16700Schasinglulu int marvell_get_ccu_memory_map(int ap_index, struct addr_map_win **win,
174*91f16700Schasinglulu 			       uint32_t *size)
175*91f16700Schasinglulu {
176*91f16700Schasinglulu 	*win = ccu_memory_map;
177*91f16700Schasinglulu 	*size = ARRAY_SIZE(ccu_memory_map);
178*91f16700Schasinglulu 
179*91f16700Schasinglulu 	return 0;
180*91f16700Schasinglulu }
181*91f16700Schasinglulu 
182*91f16700Schasinglulu #ifdef IMAGE_BLE
183*91f16700Schasinglulu /*****************************************************************************
184*91f16700Schasinglulu  * SKIP IMAGE Configuration
185*91f16700Schasinglulu  *****************************************************************************
186*91f16700Schasinglulu  */
187*91f16700Schasinglulu void *plat_get_skip_image_data(void)
188*91f16700Schasinglulu {
189*91f16700Schasinglulu 	/* No recovery button on CN-9130 board? */
190*91f16700Schasinglulu 	return NULL;
191*91f16700Schasinglulu }
192*91f16700Schasinglulu #endif
193