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