1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 2016 Google, Inc
4  */
5 #include <common.h>
6 #include <dm.h>
7 #include <ram.h>
8 #include <timer.h>
9 #include <asm/io.h>
10 #include <asm/arch/timer.h>
11 #include <linux/err.h>
12 #include <dm/uclass.h>
13 
14 DECLARE_GLOBAL_DATA_PTR;
15 
16 __weak int board_init(void)
17 {
18 	struct udevice *dev;
19 	int i;
20 	int ret;
21 
22 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
23 
24 	/*
25 	 * Loop over all MISC uclass drivers to call the comphy code
26 	 * and init all CP110 devices enabled in the DT
27 	 */
28 	i = 0;
29 	while (1) {
30 		/* Call the comphy code via the MISC uclass driver */
31 		ret = uclass_get_device(UCLASS_MISC, i++, &dev);
32 
33 		/* We're done, once no further CP110 device is found */
34 		if (ret)
35 			break;
36 	}
37 
38 	return 0;
39 }
40 
41 #ifndef CONFIG_RAM
42 #define SDMC_CONFIG_VRAM_GET(x)		((x >> 2) & 0x3)
43 #define SDMC_CONFIG_MEM_GET(x)		(x & 0x3)
44 
45 static const u32 ast2500_dram_table[] = {
46 	0x08000000,	//128MB
47 	0x10000000,	//256MB
48 	0x20000000,	//512MB
49 	0x40000000,	//1024MB
50 };
51 
52 u32
53 ast_sdmc_get_mem_size(void)
54 {
55 	u32 size = 0;
56 	u32 size_conf = SDMC_CONFIG_MEM_GET(readl(0x1e6e0004));
57 
58 	size = ast2500_dram_table[size_conf];
59 
60 	return size;
61 
62 }
63 
64 static const u32 aspeed_vram_table[] = {
65 	0x00800000,	//8MB
66 	0x01000000,	//16MB
67 	0x02000000,	//32MB
68 	0x04000000,	//64MB
69 };
70 
71 static u32
72 ast_sdmc_get_vram_size(void)
73 {
74 	u32 size_conf = SDMC_CONFIG_VRAM_GET(SDMC_CONFIG_VRAM_GET(readl(0x1e6e0004)));
75 	return aspeed_vram_table[size_conf];
76 }
77 #endif
78 
79 __weak int dram_init(void)
80 {
81 #ifdef CONFIG_RAM
82 	struct udevice *dev;
83 	struct ram_info ram;
84 	int ret;
85 
86 	ret = uclass_get_device(UCLASS_RAM, 0, &dev);
87 	if (ret) {
88 		debug("DRAM FAIL1\r\n");
89 		return ret;
90 	}
91 
92 	ret = ram_get_info(dev, &ram);
93 	if (ret) {
94 		debug("DRAM FAIL2\r\n");
95 		return ret;
96 	}
97 
98 	gd->ram_size = ram.size;
99 #else
100 	u32 vga = ast_sdmc_get_vram_size();
101 	u32 dram = ast_sdmc_get_mem_size();
102 	gd->ram_size = (dram - vga);
103 #endif
104 	return 0;
105 }
106 
107 int arch_early_init_r(void)
108 {
109 #ifdef CONFIG_DM_PCI
110 	/* Trigger PCIe devices detection */
111 	pci_init();
112 #endif
113 
114 	return 0;
115 }
116 
117