xref: /openbmc/linux/arch/mips/rb532/setup.c (revision 8dd06ef34b6e2f41b29fbf5fc1663780f2524285)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
273b4390fSRalf Baechle /*
373b4390fSRalf Baechle  * setup.c - boot time setup code
473b4390fSRalf Baechle  */
573b4390fSRalf Baechle 
673b4390fSRalf Baechle #include <linux/init.h>
7cae39d13SPaul Gortmaker #include <linux/export.h>
873b4390fSRalf Baechle 
973b4390fSRalf Baechle #include <asm/bootinfo.h>
1073b4390fSRalf Baechle #include <asm/reboot.h>
1173b4390fSRalf Baechle #include <asm/time.h>
1273b4390fSRalf Baechle #include <linux/ioport.h>
1373b4390fSRalf Baechle 
14606a083bSFlorian Fainelli #include <asm/mach-rc32434/rb.h>
1573b4390fSRalf Baechle #include <asm/mach-rc32434/pci.h>
1673b4390fSRalf Baechle 
1773b4390fSRalf Baechle struct pci_reg __iomem *pci_reg;
1873b4390fSRalf Baechle EXPORT_SYMBOL(pci_reg);
1973b4390fSRalf Baechle 
2073b4390fSRalf Baechle static struct resource pci0_res[] = {
2173b4390fSRalf Baechle 	{
2273b4390fSRalf Baechle 		.name = "pci_reg0",
2373b4390fSRalf Baechle 		.start = PCI0_BASE_ADDR,
2473b4390fSRalf Baechle 		.end = PCI0_BASE_ADDR + sizeof(struct pci_reg),
2573b4390fSRalf Baechle 		.flags = IORESOURCE_MEM,
2673b4390fSRalf Baechle 	}
2773b4390fSRalf Baechle };
2873b4390fSRalf Baechle 
rb_machine_restart(char * command)2973b4390fSRalf Baechle static void rb_machine_restart(char *command)
3073b4390fSRalf Baechle {
3173b4390fSRalf Baechle 	/* just jump to the reset vector */
32606a083bSFlorian Fainelli 	writel(0x80000001, IDT434_REG_BASE + RST);
3373b4390fSRalf Baechle 	((void (*)(void)) KSEG1ADDR(0x1FC00000u))();
3473b4390fSRalf Baechle }
3573b4390fSRalf Baechle 
rb_machine_halt(void)3673b4390fSRalf Baechle static void rb_machine_halt(void)
3773b4390fSRalf Baechle {
3873b4390fSRalf Baechle 	for (;;)
3973b4390fSRalf Baechle 		continue;
4073b4390fSRalf Baechle }
4173b4390fSRalf Baechle 
plat_mem_setup(void)4273b4390fSRalf Baechle void __init plat_mem_setup(void)
4373b4390fSRalf Baechle {
4473b4390fSRalf Baechle 	u32 val;
4573b4390fSRalf Baechle 
4673b4390fSRalf Baechle 	_machine_restart = rb_machine_restart;
4773b4390fSRalf Baechle 	_machine_halt = rb_machine_halt;
4873b4390fSRalf Baechle 	pm_power_off = rb_machine_halt;
4973b4390fSRalf Baechle 
5073b4390fSRalf Baechle 	set_io_port_base(KSEG1);
5173b4390fSRalf Baechle 
52*4bdc0d67SChristoph Hellwig 	pci_reg = ioremap(pci0_res[0].start,
5373b4390fSRalf Baechle 				pci0_res[0].end - pci0_res[0].start);
5473b4390fSRalf Baechle 	if (!pci_reg) {
5573b4390fSRalf Baechle 		printk(KERN_ERR "Could not remap PCI registers\n");
5673b4390fSRalf Baechle 		return;
5773b4390fSRalf Baechle 	}
5873b4390fSRalf Baechle 
5973b4390fSRalf Baechle 	val = __raw_readl(&pci_reg->pcic);
6073b4390fSRalf Baechle 	val &= 0xFFFFFF7;
6173b4390fSRalf Baechle 	__raw_writel(val, (void *)&pci_reg->pcic);
6273b4390fSRalf Baechle 
6373b4390fSRalf Baechle #ifdef CONFIG_PCI
6473b4390fSRalf Baechle 	/* Enable PCI interrupts in EPLD Mask register */
6573b4390fSRalf Baechle 	*epld_mask = 0x0;
6673b4390fSRalf Baechle 	*(epld_mask + 1) = 0x0;
6773b4390fSRalf Baechle #endif
6873b4390fSRalf Baechle 	write_c0_wired(0);
6973b4390fSRalf Baechle }
7073b4390fSRalf Baechle 
get_system_type(void)7173b4390fSRalf Baechle const char *get_system_type(void)
7273b4390fSRalf Baechle {
7373b4390fSRalf Baechle 	switch (mips_machtype) {
7473b4390fSRalf Baechle 	case MACH_MIKROTIK_RB532A:
7573b4390fSRalf Baechle 		return "Mikrotik RB532A";
7673b4390fSRalf Baechle 		break;
7773b4390fSRalf Baechle 	default:
7873b4390fSRalf Baechle 		return "Mikrotik RB532";
7973b4390fSRalf Baechle 		break;
8073b4390fSRalf Baechle 	}
8173b4390fSRalf Baechle }
82