xref: /openbmc/u-boot/board/imgtec/malta/malta.c (revision baf37f06c5cc51d2b9d71a2c83d5d92de60203a9)
17a9d109bSPaul Burton /*
27a9d109bSPaul Burton  * Copyright (C) 2013 Gabor Juhos <juhosg@openwrt.org>
3*baf37f06SPaul Burton  * Copyright (C) 2013 Imagination Technologies
47a9d109bSPaul Burton  *
57a9d109bSPaul Burton  * SPDX-License-Identifier:	GPL-2.0
67a9d109bSPaul Burton  */
77a9d109bSPaul Burton 
87a9d109bSPaul Burton #include <common.h>
97a9d109bSPaul Burton #include <netdev.h>
10*baf37f06SPaul Burton #include <pci_gt64120.h>
11*baf37f06SPaul Burton #include <pci_msc01.h>
12*baf37f06SPaul Burton #include <serial.h>
137a9d109bSPaul Burton 
147a9d109bSPaul Burton #include <asm/addrspace.h>
157a9d109bSPaul Burton #include <asm/io.h>
167a9d109bSPaul Burton #include <asm/malta.h>
177a9d109bSPaul Burton 
18a257f626SPaul Burton #include "superio.h"
19a257f626SPaul Burton 
20*baf37f06SPaul Burton enum core_card {
21*baf37f06SPaul Burton 	CORE_UNKNOWN,
22*baf37f06SPaul Burton 	CORE_LV,
23*baf37f06SPaul Burton 	CORE_FPGA6,
24*baf37f06SPaul Burton };
25*baf37f06SPaul Burton 
26*baf37f06SPaul Burton enum sys_con {
27*baf37f06SPaul Burton 	SYSCON_UNKNOWN,
28*baf37f06SPaul Burton 	SYSCON_GT64120,
29*baf37f06SPaul Burton 	SYSCON_MSC01,
30*baf37f06SPaul Burton };
31*baf37f06SPaul Burton 
32*baf37f06SPaul Burton static enum core_card malta_core_card(void)
33*baf37f06SPaul Burton {
34*baf37f06SPaul Burton 	u32 corid, rev;
35*baf37f06SPaul Burton 
36*baf37f06SPaul Burton 	rev = __raw_readl(CKSEG1ADDR(MALTA_REVISION));
37*baf37f06SPaul Burton 	corid = (rev & MALTA_REVISION_CORID_MSK) >> MALTA_REVISION_CORID_SHF;
38*baf37f06SPaul Burton 
39*baf37f06SPaul Burton 	switch (corid) {
40*baf37f06SPaul Burton 	case MALTA_REVISION_CORID_CORE_LV:
41*baf37f06SPaul Burton 		return CORE_LV;
42*baf37f06SPaul Burton 
43*baf37f06SPaul Burton 	case MALTA_REVISION_CORID_CORE_FPGA6:
44*baf37f06SPaul Burton 		return CORE_FPGA6;
45*baf37f06SPaul Burton 
46*baf37f06SPaul Burton 	default:
47*baf37f06SPaul Burton 		return CORE_UNKNOWN;
48*baf37f06SPaul Burton 	}
49*baf37f06SPaul Burton }
50*baf37f06SPaul Burton 
51*baf37f06SPaul Burton static enum sys_con malta_sys_con(void)
52*baf37f06SPaul Burton {
53*baf37f06SPaul Burton 	switch (malta_core_card()) {
54*baf37f06SPaul Burton 	case CORE_LV:
55*baf37f06SPaul Burton 		return SYSCON_GT64120;
56*baf37f06SPaul Burton 
57*baf37f06SPaul Burton 	case CORE_FPGA6:
58*baf37f06SPaul Burton 		return SYSCON_MSC01;
59*baf37f06SPaul Burton 
60*baf37f06SPaul Burton 	default:
61*baf37f06SPaul Burton 		return SYSCON_UNKNOWN;
62*baf37f06SPaul Burton 	}
63*baf37f06SPaul Burton }
64*baf37f06SPaul Burton 
657a9d109bSPaul Burton phys_size_t initdram(int board_type)
667a9d109bSPaul Burton {
677a9d109bSPaul Burton 	return CONFIG_SYS_MEM_SIZE;
687a9d109bSPaul Burton }
697a9d109bSPaul Burton 
707a9d109bSPaul Burton int checkboard(void)
717a9d109bSPaul Burton {
72*baf37f06SPaul Burton 	enum core_card core;
73*baf37f06SPaul Burton 
74*baf37f06SPaul Burton 	puts("Board: MIPS Malta");
75*baf37f06SPaul Burton 
76*baf37f06SPaul Burton 	core = malta_core_card();
77*baf37f06SPaul Burton 	switch (core) {
78*baf37f06SPaul Burton 	case CORE_LV:
79*baf37f06SPaul Burton 		puts(" CoreLV");
80*baf37f06SPaul Burton 		break;
81*baf37f06SPaul Burton 
82*baf37f06SPaul Burton 	case CORE_FPGA6:
83*baf37f06SPaul Burton 		puts(" CoreFPGA6");
84*baf37f06SPaul Burton 		break;
85*baf37f06SPaul Burton 
86*baf37f06SPaul Burton 	default:
87*baf37f06SPaul Burton 		puts(" CoreUnknown");
88*baf37f06SPaul Burton 	}
89*baf37f06SPaul Burton 
90*baf37f06SPaul Burton 	putc('\n');
917a9d109bSPaul Burton 	return 0;
927a9d109bSPaul Burton }
937a9d109bSPaul Burton 
947a9d109bSPaul Burton int board_eth_init(bd_t *bis)
957a9d109bSPaul Burton {
967a9d109bSPaul Burton 	return pci_eth_init(bis);
977a9d109bSPaul Burton }
987a9d109bSPaul Burton 
997a9d109bSPaul Burton void _machine_restart(void)
1007a9d109bSPaul Burton {
1017a9d109bSPaul Burton 	void __iomem *reset_base;
1027a9d109bSPaul Burton 
1037a9d109bSPaul Burton 	reset_base = (void __iomem *)CKSEG1ADDR(MALTA_RESET_BASE);
1047a9d109bSPaul Burton 	__raw_writel(GORESET, reset_base);
1057a9d109bSPaul Burton }
1067a9d109bSPaul Burton 
107a257f626SPaul Burton int board_early_init_f(void)
108a257f626SPaul Burton {
109*baf37f06SPaul Burton 	void *io_base;
110*baf37f06SPaul Burton 
111*baf37f06SPaul Burton 	/* choose correct PCI I/O base */
112*baf37f06SPaul Burton 	switch (malta_sys_con()) {
113*baf37f06SPaul Burton 	case SYSCON_GT64120:
114*baf37f06SPaul Burton 		io_base = (void *)CKSEG1ADDR(MALTA_GT_PCIIO_BASE);
115*baf37f06SPaul Burton 		break;
116*baf37f06SPaul Burton 
117*baf37f06SPaul Burton 	case SYSCON_MSC01:
118*baf37f06SPaul Burton 		io_base = (void *)CKSEG1ADDR(MALTA_MSC01_PCIIO_BASE);
119*baf37f06SPaul Burton 		break;
120*baf37f06SPaul Burton 
121*baf37f06SPaul Burton 	default:
122*baf37f06SPaul Burton 		return -1;
123*baf37f06SPaul Burton 	}
124*baf37f06SPaul Burton 
125a257f626SPaul Burton 	/* setup FDC37M817 super I/O controller */
126*baf37f06SPaul Burton 	malta_superio_init(io_base);
127a257f626SPaul Burton 
128a257f626SPaul Burton 	return 0;
129a257f626SPaul Burton }
130a257f626SPaul Burton 
131*baf37f06SPaul Burton struct serial_device *default_serial_console(void)
132*baf37f06SPaul Burton {
133*baf37f06SPaul Burton 	switch (malta_sys_con()) {
134*baf37f06SPaul Burton 	case SYSCON_GT64120:
135*baf37f06SPaul Burton 		return &eserial1_device;
136*baf37f06SPaul Burton 
137*baf37f06SPaul Burton 	default:
138*baf37f06SPaul Burton 	case SYSCON_MSC01:
139*baf37f06SPaul Burton 		return &eserial2_device;
140*baf37f06SPaul Burton 	}
141*baf37f06SPaul Burton }
142*baf37f06SPaul Burton 
1437a9d109bSPaul Burton void pci_init_board(void)
1447a9d109bSPaul Burton {
145*baf37f06SPaul Burton 	switch (malta_sys_con()) {
146*baf37f06SPaul Burton 	case SYSCON_GT64120:
147*baf37f06SPaul Burton 		set_io_port_base(CKSEG1ADDR(MALTA_GT_PCIIO_BASE));
1487a9d109bSPaul Burton 
1497a9d109bSPaul Burton 		gt64120_pci_init((void *)CKSEG1ADDR(MALTA_GT_BASE),
1507a9d109bSPaul Burton 				 0x00000000, 0x00000000, CONFIG_SYS_MEM_SIZE,
1517a9d109bSPaul Burton 				 0x10000000, 0x10000000, 128 * 1024 * 1024,
1527a9d109bSPaul Burton 				 0x00000000, 0x00000000, 0x20000);
153*baf37f06SPaul Burton 		break;
154*baf37f06SPaul Burton 
155*baf37f06SPaul Burton 	default:
156*baf37f06SPaul Burton 	case SYSCON_MSC01:
157*baf37f06SPaul Burton 		set_io_port_base(CKSEG1ADDR(MALTA_MSC01_PCIIO_BASE));
158*baf37f06SPaul Burton 
159*baf37f06SPaul Burton 		msc01_pci_init((void *)CKSEG1ADDR(MALTA_MSC01_PCI_BASE),
160*baf37f06SPaul Burton 			       0x00000000, 0x00000000, CONFIG_SYS_MEM_SIZE,
161*baf37f06SPaul Burton 			       MALTA_MSC01_PCIMEM_MAP,
162*baf37f06SPaul Burton 			       CKSEG1ADDR(MALTA_MSC01_PCIMEM_BASE),
163*baf37f06SPaul Burton 			       MALTA_MSC01_PCIMEM_SIZE, MALTA_MSC01_PCIIO_MAP,
164*baf37f06SPaul Burton 			       0x00000000, MALTA_MSC01_PCIIO_SIZE);
165*baf37f06SPaul Burton 		break;
166*baf37f06SPaul Burton 	}
1677a9d109bSPaul Burton }
168