1746f985aSSergey Temerkhanov /** 2746f985aSSergey Temerkhanov * (C) Copyright 2014, Cavium Inc. 3746f985aSSergey Temerkhanov * 4746f985aSSergey Temerkhanov * SPDX-License-Identifier: GPL-2.0+ 5746f985aSSergey Temerkhanov **/ 6746f985aSSergey Temerkhanov 7746f985aSSergey Temerkhanov #include <common.h> 8746f985aSSergey Temerkhanov #include <malloc.h> 9746f985aSSergey Temerkhanov #include <errno.h> 10746f985aSSergey Temerkhanov #include <linux/compiler.h> 11746f985aSSergey Temerkhanov 12*3ed2ece5SSergey Temerkhanov #include <cavium/atf.h> 13*3ed2ece5SSergey Temerkhanov 14746f985aSSergey Temerkhanov #if !CONFIG_IS_ENABLED(OF_CONTROL) 15746f985aSSergey Temerkhanov #include <dm/platdata.h> 16746f985aSSergey Temerkhanov #include <dm/platform_data/serial_pl01x.h> 17746f985aSSergey Temerkhanov 18746f985aSSergey Temerkhanov static const struct pl01x_serial_platdata serial0 = { 19746f985aSSergey Temerkhanov .base = CONFIG_SYS_SERIAL0, 20746f985aSSergey Temerkhanov .type = TYPE_PL011, 21746f985aSSergey Temerkhanov .clock = 0, 22746f985aSSergey Temerkhanov .skip_init = true, 23746f985aSSergey Temerkhanov }; 24746f985aSSergey Temerkhanov 25746f985aSSergey Temerkhanov U_BOOT_DEVICE(thunderx_serial0) = { 26746f985aSSergey Temerkhanov .name = "serial_pl01x", 27746f985aSSergey Temerkhanov .platdata = &serial0, 28746f985aSSergey Temerkhanov }; 29746f985aSSergey Temerkhanov 30746f985aSSergey Temerkhanov static const struct pl01x_serial_platdata serial1 = { 31746f985aSSergey Temerkhanov .base = CONFIG_SYS_SERIAL1, 32746f985aSSergey Temerkhanov .type = TYPE_PL011, 33746f985aSSergey Temerkhanov .clock = 0, 34746f985aSSergey Temerkhanov .skip_init = true, 35746f985aSSergey Temerkhanov }; 36746f985aSSergey Temerkhanov 37746f985aSSergey Temerkhanov U_BOOT_DEVICE(thunderx_serial1) = { 38746f985aSSergey Temerkhanov .name = "serial_pl01x", 39746f985aSSergey Temerkhanov .platdata = &serial1, 40746f985aSSergey Temerkhanov }; 41746f985aSSergey Temerkhanov #endif 42746f985aSSergey Temerkhanov 43746f985aSSergey Temerkhanov DECLARE_GLOBAL_DATA_PTR; 44746f985aSSergey Temerkhanov 45746f985aSSergey Temerkhanov int board_init(void) 46746f985aSSergey Temerkhanov { 47746f985aSSergey Temerkhanov return 0; 48746f985aSSergey Temerkhanov } 49746f985aSSergey Temerkhanov 50746f985aSSergey Temerkhanov int timer_init(void) 51746f985aSSergey Temerkhanov { 52746f985aSSergey Temerkhanov return 0; 53746f985aSSergey Temerkhanov } 54746f985aSSergey Temerkhanov 55*3ed2ece5SSergey Temerkhanov int dram_init(void) 56*3ed2ece5SSergey Temerkhanov { 57*3ed2ece5SSergey Temerkhanov ssize_t node_count = atf_node_count(); 58*3ed2ece5SSergey Temerkhanov ssize_t dram_size; 59*3ed2ece5SSergey Temerkhanov int node; 60*3ed2ece5SSergey Temerkhanov 61*3ed2ece5SSergey Temerkhanov printf("Initializing\nNodes in system: %zd\n", node_count); 62*3ed2ece5SSergey Temerkhanov 63*3ed2ece5SSergey Temerkhanov gd->ram_size = 0; 64*3ed2ece5SSergey Temerkhanov 65*3ed2ece5SSergey Temerkhanov for (node = 0; node < node_count; node++) { 66*3ed2ece5SSergey Temerkhanov dram_size = atf_dram_size(node); 67*3ed2ece5SSergey Temerkhanov printf("Node %d: %zd MBytes of DRAM\n", node, dram_size >> 20); 68*3ed2ece5SSergey Temerkhanov gd->ram_size += dram_size; 69*3ed2ece5SSergey Temerkhanov } 70*3ed2ece5SSergey Temerkhanov 71*3ed2ece5SSergey Temerkhanov gd->ram_size -= MEM_BASE; 72*3ed2ece5SSergey Temerkhanov 73*3ed2ece5SSergey Temerkhanov *(unsigned long *)CPU_RELEASE_ADDR = 0; 74*3ed2ece5SSergey Temerkhanov 75*3ed2ece5SSergey Temerkhanov puts("DRAM size:"); 76*3ed2ece5SSergey Temerkhanov 77*3ed2ece5SSergey Temerkhanov return 0; 78*3ed2ece5SSergey Temerkhanov } 79*3ed2ece5SSergey Temerkhanov 80746f985aSSergey Temerkhanov /* 81746f985aSSergey Temerkhanov * Board specific reset that is system reset. 82746f985aSSergey Temerkhanov */ 83746f985aSSergey Temerkhanov void reset_cpu(ulong addr) 84746f985aSSergey Temerkhanov { 85746f985aSSergey Temerkhanov } 86746f985aSSergey Temerkhanov 87746f985aSSergey Temerkhanov /* 88746f985aSSergey Temerkhanov * Board specific ethernet initialization routine. 89746f985aSSergey Temerkhanov */ 90746f985aSSergey Temerkhanov int board_eth_init(bd_t *bis) 91746f985aSSergey Temerkhanov { 92746f985aSSergey Temerkhanov int rc = 0; 93746f985aSSergey Temerkhanov 94746f985aSSergey Temerkhanov return rc; 95746f985aSSergey Temerkhanov } 96746f985aSSergey Temerkhanov 97746f985aSSergey Temerkhanov #ifdef CONFIG_PCI 98746f985aSSergey Temerkhanov void pci_init_board(void) 99746f985aSSergey Temerkhanov { 100746f985aSSergey Temerkhanov printf("DEBUG: PCI Init TODO *****\n"); 101746f985aSSergey Temerkhanov } 102746f985aSSergey Temerkhanov #endif 103