xref: /linux/arch/mips/alchemy/devboards/db1xxx.c (revision d9a316fd994ee3c43ea1dedf76d9f452da79fc2c)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Alchemy DB/PB1xxx board support.
4  */
5 
6 #include <asm/prom.h>
7 #include <asm/mach-au1x00/au1000.h>
8 #include <asm/mach-db1x00/bcsr.h>
9 
10 #include "db1xxx.h"
11 
12 static const char *board_type_str(void)
13 {
14 	switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) {
15 	case BCSR_WHOAMI_DB1000:
16 		return "DB1000";
17 	case BCSR_WHOAMI_DB1500:
18 		return "DB1500";
19 	case BCSR_WHOAMI_DB1100:
20 		return "DB1100";
21 	case BCSR_WHOAMI_PB1500:
22 	case BCSR_WHOAMI_PB1500R2:
23 		return "PB1500";
24 	case BCSR_WHOAMI_PB1100:
25 		return "PB1100";
26 	case BCSR_WHOAMI_PB1200_DDR1:
27 	case BCSR_WHOAMI_PB1200_DDR2:
28 		return "PB1200";
29 	case BCSR_WHOAMI_DB1200:
30 		return "DB1200";
31 	case BCSR_WHOAMI_DB1300:
32 		return "DB1300";
33 	case BCSR_WHOAMI_DB1550:
34 		return "DB1550";
35 	case BCSR_WHOAMI_PB1550_SDR:
36 	case BCSR_WHOAMI_PB1550_DDR:
37 		return "PB1550";
38 	default:
39 		return "(unknown)";
40 	}
41 }
42 
43 const char *get_system_type(void)
44 {
45 	return board_type_str();
46 }
47 
48 void __init board_setup(void)
49 {
50 	int ret;
51 
52 	switch (alchemy_get_cputype()) {
53 	case ALCHEMY_CPU_AU1000:
54 	case ALCHEMY_CPU_AU1500:
55 	case ALCHEMY_CPU_AU1100:
56 		ret = db1000_board_setup();
57 		break;
58 	case ALCHEMY_CPU_AU1550:
59 		ret = db1550_board_setup();
60 		break;
61 	case ALCHEMY_CPU_AU1200:
62 		ret = db1200_board_setup();
63 		break;
64 	case ALCHEMY_CPU_AU1300:
65 		ret = db1300_board_setup();
66 		break;
67 	default:
68 		pr_err("unsupported CPU on board\n");
69 		ret = -ENODEV;
70 	}
71 	if (ret)
72 		panic("cannot initialize board support");
73 }
74 
75 static int __init db1xxx_arch_init(void)
76 {
77 	int id = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI));
78 	if (id == BCSR_WHOAMI_DB1550)
79 		return db1550_pci_setup(0);
80 	else if ((id == BCSR_WHOAMI_PB1550_SDR) ||
81 		 (id == BCSR_WHOAMI_PB1550_DDR))
82 		return db1550_pci_setup(1);
83 	else if ((id == BCSR_WHOAMI_DB1500) || (id == BCSR_WHOAMI_PB1500) ||
84 		 (id == BCSR_WHOAMI_PB1500R2))
85 		return db1500_pci_setup();
86 
87 	return 0;
88 }
89 arch_initcall(db1xxx_arch_init);
90 
91 static int __init db1xxx_dev_init(void)
92 {
93 	mips_set_machine_name(board_type_str());
94 	switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) {
95 	case BCSR_WHOAMI_DB1000:
96 	case BCSR_WHOAMI_DB1500:
97 	case BCSR_WHOAMI_DB1100:
98 	case BCSR_WHOAMI_PB1500:
99 	case BCSR_WHOAMI_PB1500R2:
100 	case BCSR_WHOAMI_PB1100:
101 		return db1000_dev_setup();
102 	case BCSR_WHOAMI_PB1200_DDR1:
103 	case BCSR_WHOAMI_PB1200_DDR2:
104 	case BCSR_WHOAMI_DB1200:
105 		return db1200_dev_setup();
106 	case BCSR_WHOAMI_DB1300:
107 		return db1300_dev_setup();
108 	case BCSR_WHOAMI_DB1550:
109 	case BCSR_WHOAMI_PB1550_SDR:
110 	case BCSR_WHOAMI_PB1550_DDR:
111 		return db1550_dev_setup();
112 	}
113 	return 0;
114 }
115 device_initcall(db1xxx_dev_init);
116