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