xref: /openbmc/linux/arch/mips/ar7/setup.c (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
141173abcSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
27ca5dc14SFlorian Fainelli /*
37ca5dc14SFlorian Fainelli  * Carsten Langgaard, carstenl@mips.com
47ca5dc14SFlorian Fainelli  * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
57ca5dc14SFlorian Fainelli  */
67ca5dc14SFlorian Fainelli #include <linux/init.h>
77ca5dc14SFlorian Fainelli #include <linux/ioport.h>
87ca5dc14SFlorian Fainelli #include <linux/pm.h>
97ca5dc14SFlorian Fainelli #include <linux/time.h>
107ca5dc14SFlorian Fainelli 
117ca5dc14SFlorian Fainelli #include <asm/reboot.h>
127ca5dc14SFlorian Fainelli #include <asm/mach-ar7/ar7.h>
137ca5dc14SFlorian Fainelli #include <asm/mach-ar7/prom.h>
147ca5dc14SFlorian Fainelli 
ar7_machine_restart(char * command)157ca5dc14SFlorian Fainelli static void ar7_machine_restart(char *command)
167ca5dc14SFlorian Fainelli {
174d1da8c2SAlexander Clouter 	u32 *softres_reg = ioremap(AR7_REGS_RESET + AR7_RESET_SOFTWARE, 1);
184d1da8c2SAlexander Clouter 
197ca5dc14SFlorian Fainelli 	writel(1, softres_reg);
207ca5dc14SFlorian Fainelli }
217ca5dc14SFlorian Fainelli 
ar7_machine_halt(void)227ca5dc14SFlorian Fainelli static void ar7_machine_halt(void)
237ca5dc14SFlorian Fainelli {
247ca5dc14SFlorian Fainelli 	while (1)
257ca5dc14SFlorian Fainelli 		;
267ca5dc14SFlorian Fainelli }
277ca5dc14SFlorian Fainelli 
ar7_machine_power_off(void)287ca5dc14SFlorian Fainelli static void ar7_machine_power_off(void)
297ca5dc14SFlorian Fainelli {
307ca5dc14SFlorian Fainelli 	u32 *power_reg = (u32 *)ioremap(AR7_REGS_POWER, 1);
317ca5dc14SFlorian Fainelli 	u32 power_state = readl(power_reg) | (3 << 30);
324d1da8c2SAlexander Clouter 
337ca5dc14SFlorian Fainelli 	writel(power_state, power_reg);
347ca5dc14SFlorian Fainelli 	ar7_machine_halt();
357ca5dc14SFlorian Fainelli }
367ca5dc14SFlorian Fainelli 
get_system_type(void)377ca5dc14SFlorian Fainelli const char *get_system_type(void)
387ca5dc14SFlorian Fainelli {
397ca5dc14SFlorian Fainelli 	u16 chip_id = ar7_chip_id();
40238dd317SFlorian Fainelli 	u16 titan_variant_id = titan_chip_id();
41238dd317SFlorian Fainelli 
427ca5dc14SFlorian Fainelli 	switch (chip_id) {
437ca5dc14SFlorian Fainelli 	case AR7_CHIP_7100:
447ca5dc14SFlorian Fainelli 		return "TI AR7 (TNETD7100)";
457ca5dc14SFlorian Fainelli 	case AR7_CHIP_7200:
467ca5dc14SFlorian Fainelli 		return "TI AR7 (TNETD7200)";
474d1da8c2SAlexander Clouter 	case AR7_CHIP_7300:
484d1da8c2SAlexander Clouter 		return "TI AR7 (TNETD7300)";
49238dd317SFlorian Fainelli 	case AR7_CHIP_TITAN:
50238dd317SFlorian Fainelli 		switch (titan_variant_id) {
51238dd317SFlorian Fainelli 		case TITAN_CHIP_1050:
52238dd317SFlorian Fainelli 			return "TI AR7 (TNETV1050)";
53238dd317SFlorian Fainelli 		case TITAN_CHIP_1055:
54238dd317SFlorian Fainelli 			return "TI AR7 (TNETV1055)";
55238dd317SFlorian Fainelli 		case TITAN_CHIP_1056:
56238dd317SFlorian Fainelli 			return "TI AR7 (TNETV1056)";
57238dd317SFlorian Fainelli 		case TITAN_CHIP_1060:
58238dd317SFlorian Fainelli 			return "TI AR7 (TNETV1060)";
59238dd317SFlorian Fainelli 		}
60*c9b02990SLiangliang Huang 		fallthrough;
617ca5dc14SFlorian Fainelli 	default:
624d1da8c2SAlexander Clouter 		return "TI AR7 (unknown)";
637ca5dc14SFlorian Fainelli 	}
647ca5dc14SFlorian Fainelli }
657ca5dc14SFlorian Fainelli 
ar7_init_console(void)667ca5dc14SFlorian Fainelli static int __init ar7_init_console(void)
677ca5dc14SFlorian Fainelli {
687ca5dc14SFlorian Fainelli 	return 0;
697ca5dc14SFlorian Fainelli }
707ca5dc14SFlorian Fainelli console_initcall(ar7_init_console);
717ca5dc14SFlorian Fainelli 
727ca5dc14SFlorian Fainelli /*
737ca5dc14SFlorian Fainelli  * Initializes basic routines and structures pointers, memory size (as
747ca5dc14SFlorian Fainelli  * given by the bios and saves the command line.
757ca5dc14SFlorian Fainelli  */
plat_mem_setup(void)767ca5dc14SFlorian Fainelli void __init plat_mem_setup(void)
777ca5dc14SFlorian Fainelli {
787ca5dc14SFlorian Fainelli 	unsigned long io_base;
797ca5dc14SFlorian Fainelli 
807ca5dc14SFlorian Fainelli 	_machine_restart = ar7_machine_restart;
817ca5dc14SFlorian Fainelli 	_machine_halt = ar7_machine_halt;
827ca5dc14SFlorian Fainelli 	pm_power_off = ar7_machine_power_off;
837ca5dc14SFlorian Fainelli 
847ca5dc14SFlorian Fainelli 	io_base = (unsigned long)ioremap(AR7_REGS_BASE, 0x10000);
857ca5dc14SFlorian Fainelli 	if (!io_base)
86ab75dc02SRalf Baechle 		panic("Can't remap IO base!");
877ca5dc14SFlorian Fainelli 	set_io_port_base(io_base);
887ca5dc14SFlorian Fainelli 
897ca5dc14SFlorian Fainelli 	prom_meminit();
907ca5dc14SFlorian Fainelli 
917ca5dc14SFlorian Fainelli 	printk(KERN_INFO "%s, ID: 0x%04x, Revision: 0x%02x\n",
924d1da8c2SAlexander Clouter 			get_system_type(), ar7_chip_id(), ar7_chip_rev());
937ca5dc14SFlorian Fainelli }
94