summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c305
1 files changed, 0 insertions, 305 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c b/c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c
deleted file mode 100644
index 1c785fe11b..0000000000
--- a/c/src/lib/libbsp/powerpc/gen5200/irq/irq_init.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*===============================================================*\
-| Project: RTEMS generic MPC5200 BSP |
-+-----------------------------------------------------------------+
-| Partially based on the code references which are named below. |
-| Adaptions, modifications, enhancements and any recent parts of |
-| the code are: |
-| Copyright (c) 2005 |
-| Embedded Brains GmbH |
-| Obere Lagerstr. 30 |
-| D-82178 Puchheim |
-| Germany |
-| rtems@embedded-brains.de |
-+-----------------------------------------------------------------+
-| The license and distribution terms for this file may be |
-| found in the file LICENSE in this distribution or at |
-| |
-| http://www.rtems.com/license/LICENSE. |
-| |
-+-----------------------------------------------------------------+
-| this file contains the IRQ controller/system initialization |
-\*===============================================================*/
-/***********************************************************************/
-/* */
-/* Module: irq_init.c */
-/* Date: 07/17/2003 */
-/* Purpose: RTEMS MPC5x00 CPU interrupt initialization */
-/* */
-/*---------------------------------------------------------------------*/
-/* */
-/* Description: This file contains the implementation of rtems */
-/* initialization related to interrupt handling. */
-/* */
-/*---------------------------------------------------------------------*/
-/* */
-/* Code */
-/* References: MBX8xx CPU interrupt initialization */
-/* Module: irq_init.c */
-/* Project: RTEMS 4.6.0pre1 / MBX8xx BSP */
-/* Version 1.1 */
-/* Date: 04/06/2001 */
-/* */
-/* Author(s) / Copyright(s): */
-/* */
-/* CopyRight (C) 2001 valette@crf.canon.fr */
-/* */
-/* The license and distribution terms for this file may be */
-/* found in found in the file LICENSE in this distribution or at */
-/* http://www.rtems.com/license/LICENSE. */
-/* */
-/*---------------------------------------------------------------------*/
-/* */
-/* Partially based on the code references which are named above. */
-/* Adaptions, modifications, enhancements and any recent parts of */
-/* the code are under the right of */
-/* */
-/* IPR Engineering, Dachauer Straße 38, D-80335 München */
-/* Copyright(C) 2003 */
-/* */
-/*---------------------------------------------------------------------*/
-/* */
-/* IPR Engineering makes no representation or warranties with */
-/* respect to the performance of this computer program, and */
-/* specifically disclaims any responsibility for any damages, */
-/* special or consequential, connected with the use of this program. */
-/* */
-/*---------------------------------------------------------------------*/
-/* */
-/* Version history: 1.0 */
-/* */
-/***********************************************************************/
-
-#include <bsp.h>
-#include <rtems.h>
-#include "../irq/irq.h"
-#include <rtems/bspIo.h>
-#include <libcpu/raw_exception.h>
-#include "../include/mpc5200.h"
-
-extern unsigned int external_exception_vector_prolog_code_size;
-extern void external_exception_vector_prolog_code(void);
-extern unsigned int decrementer_exception_vector_prolog_code_size;
-extern void decrementer_exception_vector_prolog_code(void);
-extern unsigned int system_management_exception_vector_prolog_code_size;
-extern void system_management_exception_vector_prolog_code(void);
-
-extern void BSP_panic(char *s);
-extern void _BSP_Fatal_error(unsigned int v);
-/*
-volatile unsigned int ppc_cached_irq_mask;
-*/
-
-/*
- * default on/off function
- */
-static void nop_func(void){}
-/*
- * default isOn function
- */
-static int not_connected(void) {return 0;}
-/*
- * default possible isOn function
- */
-static int connected(void) {return 1;}
-
-static rtems_irq_connect_data rtemsIrq[BSP_IRQ_NUMBER];
-static rtems_irq_global_settings initial_config;
-
-static rtems_irq_connect_data defaultIrq =
- {
- /* vectorIdex, hdl , param, on , off , isOn */
- 0, nop_func, NULL , nop_func, nop_func, not_connected };
-
-static rtems_irq_prio irqPrioTable[BSP_SIU_IRQ_NUMBER] =
- {
-/* per. int. priorities (0-7) / 4bit coding / msb is HI/LO selection */
-/* msb = 0 -> non-critical per. int. is routed to main int. (LO_int) */
-/* msb = 1 -> critical per. int. is routed to critical int. (HI_int) */
- 0xF, 0, 0, 0, /* smart_comm (do not change!), psc1, psc2, psc3 */
- 0, 0, 0, 0, /* irda, eth, usb, ata */
- 0, 0, 0, 0, /* pci_ctrl, pci_sc_rx, pci_sc_tx, res */
- 0, 0, 0, 0, /* res, spi_modf, spi_spif, i2c1 */
- 0, 0, 0, 0, /* i2c, can1, can2, ir_rx */
- 0, 0, /* ir_rx, xlb_arb */
-/* main interrupt priorities (0-7) / 4bit coding / msb is INT/SMI selection */
-/* msb = 0 -> main int. is routed to processor INT (low vector base 0x500 ) */
-/* msb = 1 -> main int. is routed to processor SMI (low vector base 0x1400 ) */
- 0, 0, /* slice_tim2, irq1 */
- 0, 0, 0, 0, /* irq2, irq3, lo_int, rtc_pint */
- 0, 0, 0, 0, /* rtc_sint, gpio_std, gpio_wkup, tmr0 */
- 0, 0, 0, 0, /* tmr1, tmr2, tmr3, tmr4 */
- 0, 0, 0, /* tmr5, tmr6, tmr7 */
- /* critical interrupt priorities (0-3) / 2bit coding / no special purpose of msb */
- 0, /* irq0 */
- 0, 0, 0 /* slice_tim1, hi_int, ccs_wkup */
- };
-
-uint32_t irqMaskTable[BSP_PER_IRQ_NUMBER + BSP_MAIN_IRQ_NUMBER];
-
-
-/*
- * setup irqMaskTable to support a priorized/nested interrupt environment
- */
-void setup_irqMaskTable(void)
- {
- rtems_irq_prio prio = 0;
- uint32_t i = 0, j = 0, mask = 0;
-
- /* set up the priority dependent masks for peripheral interrupts */
- for(i = BSP_PER_IRQ_LOWEST_OFFSET; i <= BSP_PER_IRQ_MAX_OFFSET; i++)
- {
-
- prio = irqPrioTable[i];
- mask = 0;
-
- for(j = BSP_PER_IRQ_LOWEST_OFFSET; j <= BSP_PER_IRQ_MAX_OFFSET; j++)
- {
-
- if(prio > irqPrioTable[j])
- mask |= (1 << (31 - j + BSP_PER_IRQ_LOWEST_OFFSET));
-
- if((prio == irqPrioTable[j]) && (j >= i))
- mask |= (1 << (31 - j + BSP_PER_IRQ_LOWEST_OFFSET));
-
- }
-
- irqMaskTable[i] = mask;
-
- }
-
-
- /* set up the priority dependent masks for main interrupts */
- for(i = BSP_MAIN_IRQ_LOWEST_OFFSET; i <= BSP_MAIN_IRQ_MAX_OFFSET; i++)
- {
-
- prio = irqPrioTable[i];
- mask = 0;
-
- for(j = BSP_MAIN_IRQ_LOWEST_OFFSET; j <= BSP_MAIN_IRQ_MAX_OFFSET; j++)
- {
-
- if(prio > irqPrioTable[j])
- mask |= (1 << (16 - j + BSP_MAIN_IRQ_LOWEST_OFFSET));
-
- if((prio == irqPrioTable[j]) && (j >= i))
- mask |= (1 << (16 - j + BSP_MAIN_IRQ_LOWEST_OFFSET));
-
- }
-
- irqMaskTable[i] = mask;
-
- }
-
- }
-
-
-/*
- * Initialize MPC5x00 SIU interrupt management
- */
-void BSP_SIU_irq_init(void)
- {
-
- /* disable all peripheral interrupts */
- mpc5200.per_mask = 0xFFFFFC00;
-
- /* peripheral interrupt priorities according to reset value */
- mpc5200.per_pri_1 = 0xF0000000;
- mpc5200.per_pri_2 = 0x00000000;
- mpc5200.per_pri_3 = 0x00000000;
-
- /* disable external interrupts IRQ0-4 / critical interrupts are routed to core_int */
- mpc5200.ext_en_type = 0x0F000001;
-
- /* disable main interrupts / crit. int. priorities according to reset values */
- mpc5200.crit_pri_main_mask = 0x0001FFFF;
-
- /* main priorities according to reset value */
- mpc5200.main_pri_1 = 0;
- mpc5200.main_pri_2 = 0;
-
- /* reset all status indicators */
- mpc5200.csa = 0x0001FFFF;
- mpc5200.msa = 0x0001FFFF;
- mpc5200.psa = 0x003FFFFF;
- mpc5200.psa_be = 0x03000000;
-
- setup_irqMaskTable();
-
- }
-
-void BSP_rtems_irq_mng_init(unsigned cpuId)
- {
- rtems_raw_except_connect_data vectorDesc;
- int i;
- #if (BENCHMARK_IRQ_PROCESSING == 1)
- extern void BSP_initialize_IRQ_Timing(void);
-
- void BSP_initialize_IRQ_Timing(void);
- #endif
-
- BSP_SIU_irq_init();
-
- /*
- * Initialize Rtems management interrupt table
- */
-
- /*
- * re-init the rtemsIrq table
- */
- for (i = 0; i < BSP_IRQ_NUMBER; i++) {
- rtemsIrq[i] = defaultIrq;
- rtemsIrq[i].name = i;
- }
- /*
- * Init initial Interrupt management config
- */
- initial_config.irqNb = BSP_IRQ_NUMBER;
- initial_config.defaultEntry = defaultIrq;
- initial_config.irqHdlTbl = rtemsIrq;
- initial_config.irqBase = BSP_LOWEST_OFFSET;
- initial_config.irqPrioTbl = irqPrioTable;
-
- if (!BSP_rtems_irq_mngt_set(&initial_config)) {
- /*
- * put something here that will show the failure...
- */
- BSP_panic(
- "Unable to initialize RTEMS interrupt Management!!! System locked\n"
- );
- }
-
- /*
- * We must connect the raw irq handler for the two
- * expected interrupt sources : decrementer and external interrupts.
- */
- vectorDesc.exceptIndex = ASM_DEC_VECTOR;
- vectorDesc.hdl.vector = ASM_DEC_VECTOR;
- vectorDesc.hdl.raw_hdl = decrementer_exception_vector_prolog_code;
- vectorDesc.hdl.raw_hdl_size = (unsigned) &decrementer_exception_vector_prolog_code_size;
- vectorDesc.on = nop_func;
- vectorDesc.off = nop_func;
- vectorDesc.isOn = connected;
-
- if (!ppc_set_exception (&vectorDesc)) {
- BSP_panic("Unable to initialize RTEMS decrementer raw exception\n");
- }
-
- vectorDesc.exceptIndex = ASM_EXT_VECTOR;
- vectorDesc.hdl.vector = ASM_EXT_VECTOR;
- vectorDesc.hdl.raw_hdl = external_exception_vector_prolog_code;
- vectorDesc.hdl.raw_hdl_size = (unsigned) &external_exception_vector_prolog_code_size;
-
- if (!ppc_set_exception (&vectorDesc)) {
- BSP_panic("Unable to initialize RTEMS external raw exception\n");
- }
-
- vectorDesc.exceptIndex = ASM_60X_SYSMGMT_VECTOR;
- vectorDesc.hdl.vector = ASM_60X_SYSMGMT_VECTOR;
- vectorDesc.hdl.raw_hdl = system_management_exception_vector_prolog_code;
- vectorDesc.hdl.raw_hdl_size = (unsigned) &system_management_exception_vector_prolog_code_size;
-
- if (!ppc_set_exception (&vectorDesc)) {
- BSP_panic("Unable to initialize RTEMS system management raw exception\n");
- }
-}
-