mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.8 KiB
124 lines
2.8 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/* |
|
* Alchemy DB/PB1xxx board support. |
|
*/ |
|
|
|
#include <asm/prom.h> |
|
#include <asm/mach-au1x00/au1000.h> |
|
#include <asm/mach-db1x00/bcsr.h> |
|
|
|
int __init db1000_board_setup(void); |
|
int __init db1000_dev_setup(void); |
|
int __init db1500_pci_setup(void); |
|
int __init db1200_board_setup(void); |
|
int __init db1200_dev_setup(void); |
|
int __init db1300_board_setup(void); |
|
int __init db1300_dev_setup(void); |
|
int __init db1550_board_setup(void); |
|
int __init db1550_dev_setup(void); |
|
int __init db1550_pci_setup(int); |
|
|
|
static const char *board_type_str(void) |
|
{ |
|
switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) { |
|
case BCSR_WHOAMI_DB1000: |
|
return "DB1000"; |
|
case BCSR_WHOAMI_DB1500: |
|
return "DB1500"; |
|
case BCSR_WHOAMI_DB1100: |
|
return "DB1100"; |
|
case BCSR_WHOAMI_PB1500: |
|
case BCSR_WHOAMI_PB1500R2: |
|
return "PB1500"; |
|
case BCSR_WHOAMI_PB1100: |
|
return "PB1100"; |
|
case BCSR_WHOAMI_PB1200_DDR1: |
|
case BCSR_WHOAMI_PB1200_DDR2: |
|
return "PB1200"; |
|
case BCSR_WHOAMI_DB1200: |
|
return "DB1200"; |
|
case BCSR_WHOAMI_DB1300: |
|
return "DB1300"; |
|
case BCSR_WHOAMI_DB1550: |
|
return "DB1550"; |
|
case BCSR_WHOAMI_PB1550_SDR: |
|
case BCSR_WHOAMI_PB1550_DDR: |
|
return "PB1550"; |
|
default: |
|
return "(unknown)"; |
|
} |
|
} |
|
|
|
const char *get_system_type(void) |
|
{ |
|
return board_type_str(); |
|
} |
|
|
|
void __init board_setup(void) |
|
{ |
|
int ret; |
|
|
|
switch (alchemy_get_cputype()) { |
|
case ALCHEMY_CPU_AU1000: |
|
case ALCHEMY_CPU_AU1500: |
|
case ALCHEMY_CPU_AU1100: |
|
ret = db1000_board_setup(); |
|
break; |
|
case ALCHEMY_CPU_AU1550: |
|
ret = db1550_board_setup(); |
|
break; |
|
case ALCHEMY_CPU_AU1200: |
|
ret = db1200_board_setup(); |
|
break; |
|
case ALCHEMY_CPU_AU1300: |
|
ret = db1300_board_setup(); |
|
break; |
|
default: |
|
pr_err("unsupported CPU on board\n"); |
|
ret = -ENODEV; |
|
} |
|
if (ret) |
|
panic("cannot initialize board support"); |
|
} |
|
|
|
static int __init db1xxx_arch_init(void) |
|
{ |
|
int id = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI)); |
|
if (id == BCSR_WHOAMI_DB1550) |
|
return db1550_pci_setup(0); |
|
else if ((id == BCSR_WHOAMI_PB1550_SDR) || |
|
(id == BCSR_WHOAMI_PB1550_DDR)) |
|
return db1550_pci_setup(1); |
|
else if ((id == BCSR_WHOAMI_DB1500) || (id == BCSR_WHOAMI_PB1500) || |
|
(id == BCSR_WHOAMI_PB1500R2)) |
|
return db1500_pci_setup(); |
|
|
|
return 0; |
|
} |
|
arch_initcall(db1xxx_arch_init); |
|
|
|
static int __init db1xxx_dev_init(void) |
|
{ |
|
mips_set_machine_name(board_type_str()); |
|
switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) { |
|
case BCSR_WHOAMI_DB1000: |
|
case BCSR_WHOAMI_DB1500: |
|
case BCSR_WHOAMI_DB1100: |
|
case BCSR_WHOAMI_PB1500: |
|
case BCSR_WHOAMI_PB1500R2: |
|
case BCSR_WHOAMI_PB1100: |
|
return db1000_dev_setup(); |
|
case BCSR_WHOAMI_PB1200_DDR1: |
|
case BCSR_WHOAMI_PB1200_DDR2: |
|
case BCSR_WHOAMI_DB1200: |
|
return db1200_dev_setup(); |
|
case BCSR_WHOAMI_DB1300: |
|
return db1300_dev_setup(); |
|
case BCSR_WHOAMI_DB1550: |
|
case BCSR_WHOAMI_PB1550_SDR: |
|
case BCSR_WHOAMI_PB1550_DDR: |
|
return db1550_dev_setup(); |
|
} |
|
return 0; |
|
} |
|
device_initcall(db1xxx_dev_init);
|
|
|