Skip to content
Snippets Groups Projects
interrupts_64.c 2.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • David Feng's avatar
    David Feng committed
    /*
     * (C) Copyright 2013
     * David Feng <fenghua@phytium.com.cn>
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #include <common.h>
    #include <linux/compiler.h>
    
    
    int interrupt_init(void)
    {
    	return 0;
    }
    
    void enable_interrupts(void)
    {
    	return;
    }
    
    int disable_interrupts(void)
    {
    	return 0;
    }
    
    void show_regs(struct pt_regs *regs)
    {
    	int i;
    
    	printf("ELR:     %lx\n", regs->elr);
    	printf("LR:      %lx\n", regs->regs[30]);
    	for (i = 0; i < 29; i += 2)
    		printf("x%-2d: %016lx x%-2d: %016lx\n",
    		       i, regs->regs[i], i+1, regs->regs[i+1]);
    	printf("\n");
    }
    
    /*
     * do_bad_sync handles the impossible case in the Synchronous Abort vector.
     */
    void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_bad_irq handles the impossible case in the Irq vector.
     */
    void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("Bad mode in \"Irq\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_bad_fiq handles the impossible case in the Fiq vector.
     */
    void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("Bad mode in \"Fiq\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_bad_error handles the impossible case in the Error vector.
     */
    void do_bad_error(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("Bad mode in \"Error\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_sync handles the Synchronous Abort exception.
     */
    void do_sync(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("\"Synchronous Abort\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_irq handles the Irq exception.
     */
    void do_irq(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("\"Irq\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_fiq handles the Fiq exception.
     */
    void do_fiq(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("\"Fiq\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }
    
    /*
     * do_error handles the Error exception.
     * Errors are more likely to be processor specific,
     * it is defined with weak attribute and can be redefined
     * in processor specific code.
     */
    void __weak do_error(struct pt_regs *pt_regs, unsigned int esr)
    {
    	printf("\"Error\" handler, esr 0x%08x\n", esr);
    	show_regs(pt_regs);
    	panic("Resetting CPU ...\n");
    }