18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/***************************************************************************/ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci/* 58c2ecf20Sopenharmony_ci * vectors.c -- high level trap setup for ColdFire 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Copyright (C) 1999-2007, Greg Ungerer <gerg@snapgear.com> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/***************************************************************************/ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/kernel.h> 138c2ecf20Sopenharmony_ci#include <linux/init.h> 148c2ecf20Sopenharmony_ci#include <linux/irq.h> 158c2ecf20Sopenharmony_ci#include <asm/traps.h> 168c2ecf20Sopenharmony_ci#include <asm/machdep.h> 178c2ecf20Sopenharmony_ci#include <asm/coldfire.h> 188c2ecf20Sopenharmony_ci#include <asm/mcfsim.h> 198c2ecf20Sopenharmony_ci#include <asm/mcfwdebug.h> 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci/***************************************************************************/ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#ifdef TRAP_DBG_INTERRUPT 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciasmlinkage void dbginterrupt_c(struct frame *fp) 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci extern void dump(struct pt_regs *fp); 288c2ecf20Sopenharmony_ci printk(KERN_DEBUG "%s(%d): BUS ERROR TRAP\n", __FILE__, __LINE__); 298c2ecf20Sopenharmony_ci dump((struct pt_regs *) fp); 308c2ecf20Sopenharmony_ci asm("halt"); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci#endif 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci/***************************************************************************/ 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci/* Assembler routines */ 388c2ecf20Sopenharmony_ciasmlinkage void buserr(void); 398c2ecf20Sopenharmony_ciasmlinkage void trap(void); 408c2ecf20Sopenharmony_ciasmlinkage void system_call(void); 418c2ecf20Sopenharmony_ciasmlinkage void inthandler(void); 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_civoid __init trap_init(void) 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci int i; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci /* 488c2ecf20Sopenharmony_ci * There is a common trap handler and common interrupt 498c2ecf20Sopenharmony_ci * handler that handle almost every vector. We treat 508c2ecf20Sopenharmony_ci * the system call and bus error special, they get their 518c2ecf20Sopenharmony_ci * own first level handlers. 528c2ecf20Sopenharmony_ci */ 538c2ecf20Sopenharmony_ci for (i = 3; (i <= 23); i++) 548c2ecf20Sopenharmony_ci _ramvec[i] = trap; 558c2ecf20Sopenharmony_ci for (i = 33; (i <= 63); i++) 568c2ecf20Sopenharmony_ci _ramvec[i] = trap; 578c2ecf20Sopenharmony_ci for (i = 24; (i <= 31); i++) 588c2ecf20Sopenharmony_ci _ramvec[i] = inthandler; 598c2ecf20Sopenharmony_ci for (i = 64; (i < 255); i++) 608c2ecf20Sopenharmony_ci _ramvec[i] = inthandler; 618c2ecf20Sopenharmony_ci _ramvec[255] = 0; 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci _ramvec[2] = buserr; 648c2ecf20Sopenharmony_ci _ramvec[32] = system_call; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci#ifdef TRAP_DBG_INTERRUPT 678c2ecf20Sopenharmony_ci _ramvec[12] = dbginterrupt; 688c2ecf20Sopenharmony_ci#endif 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci/***************************************************************************/ 72