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