1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * GXP timer driver
4  *
5  * (C) Copyright 2022 Hewlett Packard Enterprise Development LP.
6  * Author: Nick Hawkins <nick.hawkins@hpe.com>
7  * Author: Jean-Marie Verdun <verdun@hpe.com>
8  */
9 
10 #include <linux/sizes.h>
11 #include <asm/io.h>
12 #include <dm.h>
13 #include <dm/uclass.h>
14 #include <ram.h>
15 
16 DECLARE_GLOBAL_DATA_PTR;
17 
18 #define ECHI_CMD 0xcefe0010
19 
board_init(void)20 int board_init(void)
21 {
22 	writel(0x00080002, ECHI_CMD);
23 
24 	return 0;
25 }
26 
dram_init(void)27 int dram_init(void)
28 {
29 	if (IS_ENABLED(CONFIG_TARGET_GXP)) {
30 		if (IS_ENABLED(CONFIG_GXP_ECC)) {
31 			/* 0x0f800000 */
32 			gd->ram_size = SZ_128M + SZ_64M + SZ_32M + SZ_16M + SZ_8M;
33 		} else {
34 			/* 0x1f000000 */
35 			gd->ram_size = SZ_256M + SZ_128M + SZ_64M + SZ_32M + SZ_16M;
36 		}
37 
38 		if (IS_ENABLED(CONFIG_GXP_VROM_64MB)) {
39 			if (IS_ENABLED(CONFIG_GXP_ECC)) {
40 				/* 0x0c000000 */
41 				gd->ram_size = SZ_128M + SZ_64M;
42 			} else {
43 				/* 0x18000000 */
44 				gd->ram_size = SZ_256M + SZ_128M;
45 			}
46 		}
47 
48 		if (IS_ENABLED(CONFIG_GXP_VROM_32MB)) {
49 			if (IS_ENABLED(CONFIG_GXP_ECC)) {
50 				/* 0x0e000000 */
51 				gd->ram_size = SZ_128M + SZ_64M + SZ_32M;
52 			} else {
53 				/* 0x1c000000 */
54 				gd->ram_size = SZ_256M + SZ_128M + SZ_64M;
55 			}
56 		}
57 	}
58 
59 	if (IS_ENABLED(CONFIG_TARGET_GXP2)) {
60 		/* 0x1b200000 */
61 		gd->ram_size = SZ_256M + SZ_128M + SZ_32M + SZ_16M + SZ_2M;
62 		if (IS_ENABLED(CONFIG_GXP_VROM_64MB)) {
63 			/* 0x14000000 */
64 			gd->ram_size = SZ_256M + SZ_64M;
65 		}
66 
67 		if (IS_ENABLED(CONFIG_GXP_VROM_32MB)) {
68 			/* 0x18000000 */
69 			gd->ram_size = SZ_256M + SZ_128M;
70 		}
71 	}
72 
73 	return 0;
74 }
75 
76