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 17 struct pci_reg __iomem *pci_reg; 18 EXPORT_SYMBOL(pci_reg); 19 20 static 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 29 static 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 36 static void rb_machine_halt(void) 37 { 38 for (;;) 39 continue; 40 } 41 42 void __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 71 const 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 } 82