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