db1xxx.c 2.8 KB

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