1/* 2 * Carsten Langgaard, carstenl@mips.com 3 * Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved. 4 * 5 * Thomas Horsten <thh@lasat.com> 6 * Copyright (C) 2000 LASAT Networks A/S. 7 * 8 * Brian Murphy <brian@murphy.dk> 9 * 10 * This program is free software; you can distribute it and/or modify it 11 * under the terms of the GNU General Public License (Version 2) as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope it will be useful, but WITHOUT 15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17 * for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 22 * 23 * Lasat specific setup. 24 */ 25#include <linux/init.h> 26#include <linux/sched.h> 27#include <linux/pci.h> 28#include <linux/interrupt.h> 29#include <linux/tty.h> 30 31#include <asm/time.h> 32#include <asm/cpu.h> 33#include <asm/bootinfo.h> 34#include <asm/irq.h> 35#include <asm/lasat/lasat.h> 36#include <asm/lasat/serial.h> 37 38#ifdef CONFIG_PICVUE 39#include <linux/notifier.h> 40#endif 41 42#include "ds1603.h" 43#include <asm/lasat/ds1603.h> 44#include <asm/lasat/picvue.h> 45#include <asm/lasat/eeprom.h> 46 47#include "prom.h" 48 49int lasat_command_line; 50void lasatint_init(void); 51 52extern void lasat_reboot_setup(void); 53extern void pcisetup(void); 54extern void edhac_init(void *, void *, void *); 55extern void addrflt_init(void); 56 57struct lasat_misc lasat_misc_info[N_MACHTYPES] = { 58 { 59 .reset_reg = (void *)KSEG1ADDR(0x1c840000), 60 .flash_wp_reg = (void *)KSEG1ADDR(0x1c800000), 2 61 }, { 62 .reset_reg = (void *)KSEG1ADDR(0x11080000), 63 .flash_wp_reg = (void *)KSEG1ADDR(0x11000000), 6 64 } 65}; 66 67struct lasat_misc *lasat_misc; 68 69#ifdef CONFIG_DS1603 70static struct ds_defs ds_defs[N_MACHTYPES] = { 71 { (void *)DS1603_REG_100, (void *)DS1603_REG_100, 72 DS1603_RST_100, DS1603_CLK_100, DS1603_DATA_100, 73 DS1603_DATA_SHIFT_100, 0, 0 }, 74 { (void *)DS1603_REG_200, (void *)DS1603_DATA_REG_200, 75 DS1603_RST_200, DS1603_CLK_200, DS1603_DATA_200, 76 DS1603_DATA_READ_SHIFT_200, 1, 2000 } 77}; 78#endif 79 80#ifdef CONFIG_PICVUE 81#include "picvue.h" 82static struct pvc_defs pvc_defs[N_MACHTYPES] = { 83 { (void *)PVC_REG_100, PVC_DATA_SHIFT_100, PVC_DATA_M_100, 84 PVC_E_100, PVC_RW_100, PVC_RS_100 }, 85 { (void *)PVC_REG_200, PVC_DATA_SHIFT_200, PVC_DATA_M_200, 86 PVC_E_200, PVC_RW_200, PVC_RS_200 } 87}; 88#endif 89 90static int lasat_panic_display(struct notifier_block *this, 91 unsigned long event, void *ptr) 92{ 93#ifdef CONFIG_PICVUE 94 unsigned char *string = ptr; 95 if (string == NULL) 96 string = "Kernel Panic"; 97 pvc_dump_string(string); 98#endif 99 return NOTIFY_DONE; 100} 101 102static int lasat_panic_prom_monitor(struct notifier_block *this, 103 unsigned long event, void *ptr) 104{ 105 prom_monitor(); 106 return NOTIFY_DONE; 107} 108 109static struct notifier_block lasat_panic_block[] = 110{ 111 { 112 .notifier_call = lasat_panic_display, 113 .priority = INT_MAX 114 }, { 115 .notifier_call = lasat_panic_prom_monitor, 116 .priority = INT_MIN 117 } 118}; 119 120void __init plat_time_init(void) 121{ 122 mips_hpt_frequency = lasat_board_info.li_cpu_hz / 2; 123 124 change_c0_status(ST0_IM, IE_IRQ0); 125} 126 127void __init plat_mem_setup(void) 128{ 129 int i; 130 int lasat_type = IS_LASAT_200() ? 1 : 0; 131 132 lasat_misc = &lasat_misc_info[lasat_type]; 133#ifdef CONFIG_PICVUE 134 picvue = &pvc_defs[lasat_type]; 135#endif 136 137 /* Set up panic notifier */ 138 for (i = 0; i < ARRAY_SIZE(lasat_panic_block); i++) 139 atomic_notifier_chain_register(&panic_notifier_list, 140 &lasat_panic_block[i]); 141 142 lasat_reboot_setup(); 143 144#ifdef CONFIG_DS1603 145 ds1603 = &ds_defs[lasat_type]; 146#endif 147 148#ifdef DYNAMIC_SERIAL_INIT 149 serial_init(); 150#endif 151 152 pr_info("Lasat specific initialization complete\n"); 153} 154