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