162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Carsten Langgaard, carstenl@mips.com 462306a36Sopenharmony_ci * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#include <linux/init.h> 762306a36Sopenharmony_ci#include <linux/ioport.h> 862306a36Sopenharmony_ci#include <linux/pm.h> 962306a36Sopenharmony_ci#include <linux/time.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <asm/reboot.h> 1262306a36Sopenharmony_ci#include <asm/mach-ar7/ar7.h> 1362306a36Sopenharmony_ci#include <asm/mach-ar7/prom.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistatic void ar7_machine_restart(char *command) 1662306a36Sopenharmony_ci{ 1762306a36Sopenharmony_ci u32 *softres_reg = ioremap(AR7_REGS_RESET + AR7_RESET_SOFTWARE, 1); 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci writel(1, softres_reg); 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistatic void ar7_machine_halt(void) 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci while (1) 2562306a36Sopenharmony_ci ; 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic void ar7_machine_power_off(void) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci u32 *power_reg = (u32 *)ioremap(AR7_REGS_POWER, 1); 3162306a36Sopenharmony_ci u32 power_state = readl(power_reg) | (3 << 30); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci writel(power_state, power_reg); 3462306a36Sopenharmony_ci ar7_machine_halt(); 3562306a36Sopenharmony_ci} 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciconst char *get_system_type(void) 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci u16 chip_id = ar7_chip_id(); 4062306a36Sopenharmony_ci u16 titan_variant_id = titan_chip_id(); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci switch (chip_id) { 4362306a36Sopenharmony_ci case AR7_CHIP_7100: 4462306a36Sopenharmony_ci return "TI AR7 (TNETD7100)"; 4562306a36Sopenharmony_ci case AR7_CHIP_7200: 4662306a36Sopenharmony_ci return "TI AR7 (TNETD7200)"; 4762306a36Sopenharmony_ci case AR7_CHIP_7300: 4862306a36Sopenharmony_ci return "TI AR7 (TNETD7300)"; 4962306a36Sopenharmony_ci case AR7_CHIP_TITAN: 5062306a36Sopenharmony_ci switch (titan_variant_id) { 5162306a36Sopenharmony_ci case TITAN_CHIP_1050: 5262306a36Sopenharmony_ci return "TI AR7 (TNETV1050)"; 5362306a36Sopenharmony_ci case TITAN_CHIP_1055: 5462306a36Sopenharmony_ci return "TI AR7 (TNETV1055)"; 5562306a36Sopenharmony_ci case TITAN_CHIP_1056: 5662306a36Sopenharmony_ci return "TI AR7 (TNETV1056)"; 5762306a36Sopenharmony_ci case TITAN_CHIP_1060: 5862306a36Sopenharmony_ci return "TI AR7 (TNETV1060)"; 5962306a36Sopenharmony_ci } 6062306a36Sopenharmony_ci fallthrough; 6162306a36Sopenharmony_ci default: 6262306a36Sopenharmony_ci return "TI AR7 (unknown)"; 6362306a36Sopenharmony_ci } 6462306a36Sopenharmony_ci} 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistatic int __init ar7_init_console(void) 6762306a36Sopenharmony_ci{ 6862306a36Sopenharmony_ci return 0; 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ciconsole_initcall(ar7_init_console); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci/* 7362306a36Sopenharmony_ci * Initializes basic routines and structures pointers, memory size (as 7462306a36Sopenharmony_ci * given by the bios and saves the command line. 7562306a36Sopenharmony_ci */ 7662306a36Sopenharmony_civoid __init plat_mem_setup(void) 7762306a36Sopenharmony_ci{ 7862306a36Sopenharmony_ci unsigned long io_base; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci _machine_restart = ar7_machine_restart; 8162306a36Sopenharmony_ci _machine_halt = ar7_machine_halt; 8262306a36Sopenharmony_ci pm_power_off = ar7_machine_power_off; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci io_base = (unsigned long)ioremap(AR7_REGS_BASE, 0x10000); 8562306a36Sopenharmony_ci if (!io_base) 8662306a36Sopenharmony_ci panic("Can't remap IO base!"); 8762306a36Sopenharmony_ci set_io_port_base(io_base); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci prom_meminit(); 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci printk(KERN_INFO "%s, ID: 0x%04x, Revision: 0x%02x\n", 9262306a36Sopenharmony_ci get_system_type(), ar7_chip_id(), ar7_chip_rev()); 9362306a36Sopenharmony_ci} 94