interrupts.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (c) 2016-17 Microsemi Corporation.
  4. * Padmarao Begari, Microsemi Corporation <padmarao.begari@microsemi.com>
  5. *
  6. * Copyright (C) 2017 Andes Technology Corporation
  7. * Rick Chen, Andes Technology Corporation <rick@andestech.com>
  8. */
  9. #include <common.h>
  10. #include <asm/ptrace.h>
  11. #include <asm/system.h>
  12. #include <asm/encoding.h>
  13. static void _exit_trap(ulong code, ulong epc, struct pt_regs *regs);
  14. int interrupt_init(void)
  15. {
  16. return 0;
  17. }
  18. /*
  19. * enable interrupts
  20. */
  21. void enable_interrupts(void)
  22. {
  23. }
  24. /*
  25. * disable interrupts
  26. */
  27. int disable_interrupts(void)
  28. {
  29. return 0;
  30. }
  31. ulong handle_trap(ulong mcause, ulong epc, struct pt_regs *regs)
  32. {
  33. ulong is_int;
  34. is_int = (mcause & MCAUSE_INT);
  35. if ((is_int) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT))
  36. external_interrupt(0); /* handle_m_ext_interrupt */
  37. else if ((is_int) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER))
  38. timer_interrupt(0); /* handle_m_timer_interrupt */
  39. else
  40. _exit_trap(mcause, epc, regs);
  41. return epc;
  42. }
  43. /*
  44. *Entry Point for PLIC Interrupt Handler
  45. */
  46. __attribute__((weak)) void external_interrupt(struct pt_regs *regs)
  47. {
  48. }
  49. __attribute__((weak)) void timer_interrupt(struct pt_regs *regs)
  50. {
  51. }
  52. static void _exit_trap(ulong code, ulong epc, struct pt_regs *regs)
  53. {
  54. static const char * const exception_code[] = {
  55. "Instruction address misaligned",
  56. "Instruction access fault",
  57. "Illegal instruction",
  58. "Breakpoint",
  59. "Load address misaligned"
  60. };
  61. printf("exception code: %ld , %s , epc %lx , ra %lx\n",
  62. code, exception_code[code], epc, regs->ra);
  63. }