xref: /rk3399_rockchip-uboot/board/cavium/thunderx/thunderx.c (revision 9d922450aa9944ecf8c249c892078cda80f40e02)
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>
8*9d922450SSimon Glass #include <dm.h>
9746f985aSSergey Temerkhanov #include <malloc.h>
10746f985aSSergey Temerkhanov #include <errno.h>
11746f985aSSergey Temerkhanov #include <linux/compiler.h>
12746f985aSSergey Temerkhanov 
133ed2ece5SSergey Temerkhanov #include <cavium/atf.h>
14d473f0c6SAlexander Graf #include <asm/armv8/mmu.h>
153ed2ece5SSergey Temerkhanov 
16746f985aSSergey Temerkhanov #if !CONFIG_IS_ENABLED(OF_CONTROL)
17746f985aSSergey Temerkhanov #include <dm/platform_data/serial_pl01x.h>
18746f985aSSergey Temerkhanov 
19746f985aSSergey Temerkhanov static const struct pl01x_serial_platdata serial0 = {
20746f985aSSergey Temerkhanov 	.base = CONFIG_SYS_SERIAL0,
21746f985aSSergey Temerkhanov 	.type = TYPE_PL011,
22746f985aSSergey Temerkhanov 	.clock = 0,
23746f985aSSergey Temerkhanov 	.skip_init = true,
24746f985aSSergey Temerkhanov };
25746f985aSSergey Temerkhanov 
26746f985aSSergey Temerkhanov U_BOOT_DEVICE(thunderx_serial0) = {
27746f985aSSergey Temerkhanov 	.name = "serial_pl01x",
28746f985aSSergey Temerkhanov 	.platdata = &serial0,
29746f985aSSergey Temerkhanov };
30746f985aSSergey Temerkhanov 
31746f985aSSergey Temerkhanov static const struct pl01x_serial_platdata serial1 = {
32746f985aSSergey Temerkhanov 	.base = CONFIG_SYS_SERIAL1,
33746f985aSSergey Temerkhanov 	.type = TYPE_PL011,
34746f985aSSergey Temerkhanov 	.clock = 0,
35746f985aSSergey Temerkhanov 	.skip_init = true,
36746f985aSSergey Temerkhanov };
37746f985aSSergey Temerkhanov 
38746f985aSSergey Temerkhanov U_BOOT_DEVICE(thunderx_serial1) = {
39746f985aSSergey Temerkhanov 	.name = "serial_pl01x",
40746f985aSSergey Temerkhanov 	.platdata = &serial1,
41746f985aSSergey Temerkhanov };
42746f985aSSergey Temerkhanov #endif
43746f985aSSergey Temerkhanov 
44746f985aSSergey Temerkhanov DECLARE_GLOBAL_DATA_PTR;
45746f985aSSergey Temerkhanov 
46d473f0c6SAlexander Graf static struct mm_region thunderx_mem_map[] = {
47d473f0c6SAlexander Graf 	{
48cd4b0c5fSYork Sun 		.virt = 0x000000000000UL,
49cd4b0c5fSYork Sun 		.phys = 0x000000000000UL,
50d473f0c6SAlexander Graf 		.size = 0x40000000000UL,
51d473f0c6SAlexander Graf 		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_NON_SHARE,
52d473f0c6SAlexander Graf 	}, {
53cd4b0c5fSYork Sun 		.virt = 0x800000000000UL,
54cd4b0c5fSYork Sun 		.phys = 0x800000000000UL,
55d473f0c6SAlexander Graf 		.size = 0x40000000000UL,
56d473f0c6SAlexander Graf 		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
57d473f0c6SAlexander Graf 			 PTE_BLOCK_NON_SHARE,
58d473f0c6SAlexander Graf 	}, {
59cd4b0c5fSYork Sun 		.virt = 0x840000000000UL,
60cd4b0c5fSYork Sun 		.phys = 0x840000000000UL,
61d473f0c6SAlexander Graf 		.size = 0x40000000000UL,
62d473f0c6SAlexander Graf 		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
63d473f0c6SAlexander Graf 			 PTE_BLOCK_NON_SHARE,
64d473f0c6SAlexander Graf 	}, {
65d473f0c6SAlexander Graf 		/* List terminator */
66d473f0c6SAlexander Graf 		0,
67d473f0c6SAlexander Graf 	}
68d473f0c6SAlexander Graf };
69d473f0c6SAlexander Graf 
70d473f0c6SAlexander Graf struct mm_region *mem_map = thunderx_mem_map;
71d473f0c6SAlexander Graf 
board_init(void)72746f985aSSergey Temerkhanov int board_init(void)
73746f985aSSergey Temerkhanov {
74746f985aSSergey Temerkhanov 	return 0;
75746f985aSSergey Temerkhanov }
76746f985aSSergey Temerkhanov 
timer_init(void)77746f985aSSergey Temerkhanov int timer_init(void)
78746f985aSSergey Temerkhanov {
79746f985aSSergey Temerkhanov 	return 0;
80746f985aSSergey Temerkhanov }
81746f985aSSergey Temerkhanov 
dram_init(void)823ed2ece5SSergey Temerkhanov int dram_init(void)
833ed2ece5SSergey Temerkhanov {
843ed2ece5SSergey Temerkhanov 	ssize_t node_count = atf_node_count();
853ed2ece5SSergey Temerkhanov 	ssize_t dram_size;
863ed2ece5SSergey Temerkhanov 	int node;
873ed2ece5SSergey Temerkhanov 
883ed2ece5SSergey Temerkhanov 	printf("Initializing\nNodes in system: %zd\n", node_count);
893ed2ece5SSergey Temerkhanov 
903ed2ece5SSergey Temerkhanov 	gd->ram_size = 0;
913ed2ece5SSergey Temerkhanov 
923ed2ece5SSergey Temerkhanov 	for (node = 0; node < node_count; node++) {
933ed2ece5SSergey Temerkhanov 		dram_size = atf_dram_size(node);
943ed2ece5SSergey Temerkhanov 		printf("Node %d: %zd MBytes of DRAM\n", node, dram_size >> 20);
953ed2ece5SSergey Temerkhanov 		gd->ram_size += dram_size;
963ed2ece5SSergey Temerkhanov 	}
973ed2ece5SSergey Temerkhanov 
983ed2ece5SSergey Temerkhanov 	gd->ram_size -= MEM_BASE;
993ed2ece5SSergey Temerkhanov 
1003ed2ece5SSergey Temerkhanov 	*(unsigned long *)CPU_RELEASE_ADDR = 0;
1013ed2ece5SSergey Temerkhanov 
1023ed2ece5SSergey Temerkhanov 	puts("DRAM size:");
1033ed2ece5SSergey Temerkhanov 
1043ed2ece5SSergey Temerkhanov 	return 0;
1053ed2ece5SSergey Temerkhanov }
1063ed2ece5SSergey Temerkhanov 
107746f985aSSergey Temerkhanov /*
108746f985aSSergey Temerkhanov  * Board specific reset that is system reset.
109746f985aSSergey Temerkhanov  */
reset_cpu(ulong addr)110746f985aSSergey Temerkhanov void reset_cpu(ulong addr)
111746f985aSSergey Temerkhanov {
112746f985aSSergey Temerkhanov }
113746f985aSSergey Temerkhanov 
114746f985aSSergey Temerkhanov /*
115746f985aSSergey Temerkhanov  * Board specific ethernet initialization routine.
116746f985aSSergey Temerkhanov  */
board_eth_init(bd_t * bis)117746f985aSSergey Temerkhanov int board_eth_init(bd_t *bis)
118746f985aSSergey Temerkhanov {
119746f985aSSergey Temerkhanov 	int rc = 0;
120746f985aSSergey Temerkhanov 
121746f985aSSergey Temerkhanov 	return rc;
122746f985aSSergey Temerkhanov }
123746f985aSSergey Temerkhanov 
124746f985aSSergey Temerkhanov #ifdef CONFIG_PCI
pci_init_board(void)125746f985aSSergey Temerkhanov void pci_init_board(void)
126746f985aSSergey Temerkhanov {
127746f985aSSergey Temerkhanov 	printf("DEBUG: PCI Init TODO *****\n");
128746f985aSSergey Temerkhanov }
129746f985aSSergey Temerkhanov #endif
130