xref: /rk3399_rockchip-uboot/board/cavium/thunderx/thunderx.c (revision 3ed2ece5e162b104cd3ea3788cae841ecd24408f)
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