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