setup.c (1534B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * setup.c - boot time setup code 4 */ 5 6#include <linux/init.h> 7#include <linux/export.h> 8 9#include <asm/bootinfo.h> 10#include <asm/reboot.h> 11#include <asm/time.h> 12#include <linux/ioport.h> 13 14#include <asm/mach-rc32434/rb.h> 15#include <asm/mach-rc32434/pci.h> 16 17struct pci_reg __iomem *pci_reg; 18EXPORT_SYMBOL(pci_reg); 19 20static struct resource pci0_res[] = { 21 { 22 .name = "pci_reg0", 23 .start = PCI0_BASE_ADDR, 24 .end = PCI0_BASE_ADDR + sizeof(struct pci_reg), 25 .flags = IORESOURCE_MEM, 26 } 27}; 28 29static void rb_machine_restart(char *command) 30{ 31 /* just jump to the reset vector */ 32 writel(0x80000001, IDT434_REG_BASE + RST); 33 ((void (*)(void)) KSEG1ADDR(0x1FC00000u))(); 34} 35 36static void rb_machine_halt(void) 37{ 38 for (;;) 39 continue; 40} 41 42void __init plat_mem_setup(void) 43{ 44 u32 val; 45 46 _machine_restart = rb_machine_restart; 47 _machine_halt = rb_machine_halt; 48 pm_power_off = rb_machine_halt; 49 50 set_io_port_base(KSEG1); 51 52 pci_reg = ioremap(pci0_res[0].start, 53 pci0_res[0].end - pci0_res[0].start); 54 if (!pci_reg) { 55 printk(KERN_ERR "Could not remap PCI registers\n"); 56 return; 57 } 58 59 val = __raw_readl(&pci_reg->pcic); 60 val &= 0xFFFFFF7; 61 __raw_writel(val, (void *)&pci_reg->pcic); 62 63#ifdef CONFIG_PCI 64 /* Enable PCI interrupts in EPLD Mask register */ 65 *epld_mask = 0x0; 66 *(epld_mask + 1) = 0x0; 67#endif 68 write_c0_wired(0); 69} 70 71const char *get_system_type(void) 72{ 73 switch (mips_machtype) { 74 case MACH_MIKROTIK_RB532A: 75 return "Mikrotik RB532A"; 76 break; 77 default: 78 return "Mikrotik RB532"; 79 break; 80 } 81}