17a9d109bSPaul Burton /* 27a9d109bSPaul Burton * Copyright (C) 2013 Gabor Juhos <juhosg@openwrt.org> 3*baf37f06SPaul Burton * Copyright (C) 2013 Imagination Technologies 47a9d109bSPaul Burton * 57a9d109bSPaul Burton * SPDX-License-Identifier: GPL-2.0 67a9d109bSPaul Burton */ 77a9d109bSPaul Burton 87a9d109bSPaul Burton #include <common.h> 97a9d109bSPaul Burton #include <netdev.h> 10*baf37f06SPaul Burton #include <pci_gt64120.h> 11*baf37f06SPaul Burton #include <pci_msc01.h> 12*baf37f06SPaul Burton #include <serial.h> 137a9d109bSPaul Burton 147a9d109bSPaul Burton #include <asm/addrspace.h> 157a9d109bSPaul Burton #include <asm/io.h> 167a9d109bSPaul Burton #include <asm/malta.h> 177a9d109bSPaul Burton 18a257f626SPaul Burton #include "superio.h" 19a257f626SPaul Burton 20*baf37f06SPaul Burton enum core_card { 21*baf37f06SPaul Burton CORE_UNKNOWN, 22*baf37f06SPaul Burton CORE_LV, 23*baf37f06SPaul Burton CORE_FPGA6, 24*baf37f06SPaul Burton }; 25*baf37f06SPaul Burton 26*baf37f06SPaul Burton enum sys_con { 27*baf37f06SPaul Burton SYSCON_UNKNOWN, 28*baf37f06SPaul Burton SYSCON_GT64120, 29*baf37f06SPaul Burton SYSCON_MSC01, 30*baf37f06SPaul Burton }; 31*baf37f06SPaul Burton 32*baf37f06SPaul Burton static enum core_card malta_core_card(void) 33*baf37f06SPaul Burton { 34*baf37f06SPaul Burton u32 corid, rev; 35*baf37f06SPaul Burton 36*baf37f06SPaul Burton rev = __raw_readl(CKSEG1ADDR(MALTA_REVISION)); 37*baf37f06SPaul Burton corid = (rev & MALTA_REVISION_CORID_MSK) >> MALTA_REVISION_CORID_SHF; 38*baf37f06SPaul Burton 39*baf37f06SPaul Burton switch (corid) { 40*baf37f06SPaul Burton case MALTA_REVISION_CORID_CORE_LV: 41*baf37f06SPaul Burton return CORE_LV; 42*baf37f06SPaul Burton 43*baf37f06SPaul Burton case MALTA_REVISION_CORID_CORE_FPGA6: 44*baf37f06SPaul Burton return CORE_FPGA6; 45*baf37f06SPaul Burton 46*baf37f06SPaul Burton default: 47*baf37f06SPaul Burton return CORE_UNKNOWN; 48*baf37f06SPaul Burton } 49*baf37f06SPaul Burton } 50*baf37f06SPaul Burton 51*baf37f06SPaul Burton static enum sys_con malta_sys_con(void) 52*baf37f06SPaul Burton { 53*baf37f06SPaul Burton switch (malta_core_card()) { 54*baf37f06SPaul Burton case CORE_LV: 55*baf37f06SPaul Burton return SYSCON_GT64120; 56*baf37f06SPaul Burton 57*baf37f06SPaul Burton case CORE_FPGA6: 58*baf37f06SPaul Burton return SYSCON_MSC01; 59*baf37f06SPaul Burton 60*baf37f06SPaul Burton default: 61*baf37f06SPaul Burton return SYSCON_UNKNOWN; 62*baf37f06SPaul Burton } 63*baf37f06SPaul Burton } 64*baf37f06SPaul Burton 657a9d109bSPaul Burton phys_size_t initdram(int board_type) 667a9d109bSPaul Burton { 677a9d109bSPaul Burton return CONFIG_SYS_MEM_SIZE; 687a9d109bSPaul Burton } 697a9d109bSPaul Burton 707a9d109bSPaul Burton int checkboard(void) 717a9d109bSPaul Burton { 72*baf37f06SPaul Burton enum core_card core; 73*baf37f06SPaul Burton 74*baf37f06SPaul Burton puts("Board: MIPS Malta"); 75*baf37f06SPaul Burton 76*baf37f06SPaul Burton core = malta_core_card(); 77*baf37f06SPaul Burton switch (core) { 78*baf37f06SPaul Burton case CORE_LV: 79*baf37f06SPaul Burton puts(" CoreLV"); 80*baf37f06SPaul Burton break; 81*baf37f06SPaul Burton 82*baf37f06SPaul Burton case CORE_FPGA6: 83*baf37f06SPaul Burton puts(" CoreFPGA6"); 84*baf37f06SPaul Burton break; 85*baf37f06SPaul Burton 86*baf37f06SPaul Burton default: 87*baf37f06SPaul Burton puts(" CoreUnknown"); 88*baf37f06SPaul Burton } 89*baf37f06SPaul Burton 90*baf37f06SPaul Burton putc('\n'); 917a9d109bSPaul Burton return 0; 927a9d109bSPaul Burton } 937a9d109bSPaul Burton 947a9d109bSPaul Burton int board_eth_init(bd_t *bis) 957a9d109bSPaul Burton { 967a9d109bSPaul Burton return pci_eth_init(bis); 977a9d109bSPaul Burton } 987a9d109bSPaul Burton 997a9d109bSPaul Burton void _machine_restart(void) 1007a9d109bSPaul Burton { 1017a9d109bSPaul Burton void __iomem *reset_base; 1027a9d109bSPaul Burton 1037a9d109bSPaul Burton reset_base = (void __iomem *)CKSEG1ADDR(MALTA_RESET_BASE); 1047a9d109bSPaul Burton __raw_writel(GORESET, reset_base); 1057a9d109bSPaul Burton } 1067a9d109bSPaul Burton 107a257f626SPaul Burton int board_early_init_f(void) 108a257f626SPaul Burton { 109*baf37f06SPaul Burton void *io_base; 110*baf37f06SPaul Burton 111*baf37f06SPaul Burton /* choose correct PCI I/O base */ 112*baf37f06SPaul Burton switch (malta_sys_con()) { 113*baf37f06SPaul Burton case SYSCON_GT64120: 114*baf37f06SPaul Burton io_base = (void *)CKSEG1ADDR(MALTA_GT_PCIIO_BASE); 115*baf37f06SPaul Burton break; 116*baf37f06SPaul Burton 117*baf37f06SPaul Burton case SYSCON_MSC01: 118*baf37f06SPaul Burton io_base = (void *)CKSEG1ADDR(MALTA_MSC01_PCIIO_BASE); 119*baf37f06SPaul Burton break; 120*baf37f06SPaul Burton 121*baf37f06SPaul Burton default: 122*baf37f06SPaul Burton return -1; 123*baf37f06SPaul Burton } 124*baf37f06SPaul Burton 125a257f626SPaul Burton /* setup FDC37M817 super I/O controller */ 126*baf37f06SPaul Burton malta_superio_init(io_base); 127a257f626SPaul Burton 128a257f626SPaul Burton return 0; 129a257f626SPaul Burton } 130a257f626SPaul Burton 131*baf37f06SPaul Burton struct serial_device *default_serial_console(void) 132*baf37f06SPaul Burton { 133*baf37f06SPaul Burton switch (malta_sys_con()) { 134*baf37f06SPaul Burton case SYSCON_GT64120: 135*baf37f06SPaul Burton return &eserial1_device; 136*baf37f06SPaul Burton 137*baf37f06SPaul Burton default: 138*baf37f06SPaul Burton case SYSCON_MSC01: 139*baf37f06SPaul Burton return &eserial2_device; 140*baf37f06SPaul Burton } 141*baf37f06SPaul Burton } 142*baf37f06SPaul Burton 1437a9d109bSPaul Burton void pci_init_board(void) 1447a9d109bSPaul Burton { 145*baf37f06SPaul Burton switch (malta_sys_con()) { 146*baf37f06SPaul Burton case SYSCON_GT64120: 147*baf37f06SPaul Burton set_io_port_base(CKSEG1ADDR(MALTA_GT_PCIIO_BASE)); 1487a9d109bSPaul Burton 1497a9d109bSPaul Burton gt64120_pci_init((void *)CKSEG1ADDR(MALTA_GT_BASE), 1507a9d109bSPaul Burton 0x00000000, 0x00000000, CONFIG_SYS_MEM_SIZE, 1517a9d109bSPaul Burton 0x10000000, 0x10000000, 128 * 1024 * 1024, 1527a9d109bSPaul Burton 0x00000000, 0x00000000, 0x20000); 153*baf37f06SPaul Burton break; 154*baf37f06SPaul Burton 155*baf37f06SPaul Burton default: 156*baf37f06SPaul Burton case SYSCON_MSC01: 157*baf37f06SPaul Burton set_io_port_base(CKSEG1ADDR(MALTA_MSC01_PCIIO_BASE)); 158*baf37f06SPaul Burton 159*baf37f06SPaul Burton msc01_pci_init((void *)CKSEG1ADDR(MALTA_MSC01_PCI_BASE), 160*baf37f06SPaul Burton 0x00000000, 0x00000000, CONFIG_SYS_MEM_SIZE, 161*baf37f06SPaul Burton MALTA_MSC01_PCIMEM_MAP, 162*baf37f06SPaul Burton CKSEG1ADDR(MALTA_MSC01_PCIMEM_BASE), 163*baf37f06SPaul Burton MALTA_MSC01_PCIMEM_SIZE, MALTA_MSC01_PCIIO_MAP, 164*baf37f06SPaul Burton 0x00000000, MALTA_MSC01_PCIIO_SIZE); 165*baf37f06SPaul Burton break; 166*baf37f06SPaul Burton } 1677a9d109bSPaul Burton } 168