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