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