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