Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Carsten Langgaard, carstenl@mips.com
0004  * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
0005  */
0006 #include <linux/init.h>
0007 #include <linux/ioport.h>
0008 #include <linux/pm.h>
0009 #include <linux/time.h>
0010 
0011 #include <asm/reboot.h>
0012 #include <asm/mach-ar7/ar7.h>
0013 #include <asm/mach-ar7/prom.h>
0014 
0015 static void ar7_machine_restart(char *command)
0016 {
0017     u32 *softres_reg = ioremap(AR7_REGS_RESET + AR7_RESET_SOFTWARE, 1);
0018 
0019     writel(1, softres_reg);
0020 }
0021 
0022 static void ar7_machine_halt(void)
0023 {
0024     while (1)
0025         ;
0026 }
0027 
0028 static void ar7_machine_power_off(void)
0029 {
0030     u32 *power_reg = (u32 *)ioremap(AR7_REGS_POWER, 1);
0031     u32 power_state = readl(power_reg) | (3 << 30);
0032 
0033     writel(power_state, power_reg);
0034     ar7_machine_halt();
0035 }
0036 
0037 const char *get_system_type(void)
0038 {
0039     u16 chip_id = ar7_chip_id();
0040     u16 titan_variant_id = titan_chip_id();
0041 
0042     switch (chip_id) {
0043     case AR7_CHIP_7100:
0044         return "TI AR7 (TNETD7100)";
0045     case AR7_CHIP_7200:
0046         return "TI AR7 (TNETD7200)";
0047     case AR7_CHIP_7300:
0048         return "TI AR7 (TNETD7300)";
0049     case AR7_CHIP_TITAN:
0050         switch (titan_variant_id) {
0051         case TITAN_CHIP_1050:
0052             return "TI AR7 (TNETV1050)";
0053         case TITAN_CHIP_1055:
0054             return "TI AR7 (TNETV1055)";
0055         case TITAN_CHIP_1056:
0056             return "TI AR7 (TNETV1056)";
0057         case TITAN_CHIP_1060:
0058             return "TI AR7 (TNETV1060)";
0059         }
0060         fallthrough;
0061     default:
0062         return "TI AR7 (unknown)";
0063     }
0064 }
0065 
0066 static int __init ar7_init_console(void)
0067 {
0068     return 0;
0069 }
0070 console_initcall(ar7_init_console);
0071 
0072 /*
0073  * Initializes basic routines and structures pointers, memory size (as
0074  * given by the bios and saves the command line.
0075  */
0076 void __init plat_mem_setup(void)
0077 {
0078     unsigned long io_base;
0079 
0080     _machine_restart = ar7_machine_restart;
0081     _machine_halt = ar7_machine_halt;
0082     pm_power_off = ar7_machine_power_off;
0083 
0084     io_base = (unsigned long)ioremap(AR7_REGS_BASE, 0x10000);
0085     if (!io_base)
0086         panic("Can't remap IO base!");
0087     set_io_port_base(io_base);
0088 
0089     prom_meminit();
0090 
0091     printk(KERN_INFO "%s, ID: 0x%04x, Revision: 0x%02x\n",
0092             get_system_type(), ar7_chip_id(), ar7_chip_rev());
0093 }