mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 23:23:13 +00:00
2008-09-30 Jennifer Averett <jennifer.averett@oarcorp.com>
* Makefile.am, preinstall.am, PCI_bus/universe.c, console/console.c, include/bsp.h, irq/FPGA.c, irq/irq.c, startup/Hwr_init.c, startup/bspstart.c, startup/vmeintr.c: Modifications required to run on hardware. Some cleanup. * include/irq-config.h: New file. * startup/spurious.c: Removed.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2008-09-30 Jennifer Averett <jennifer.averett@oarcorp.com>
|
||||||
|
|
||||||
|
* Makefile.am, preinstall.am, PCI_bus/universe.c, console/console.c,
|
||||||
|
include/bsp.h, irq/FPGA.c, irq/irq.c, startup/Hwr_init.c,
|
||||||
|
startup/bspstart.c, startup/vmeintr.c: Modifications required to run
|
||||||
|
on hardware. Some cleanup.
|
||||||
|
* include/irq-config.h: New file.
|
||||||
|
* startup/spurious.c: Removed.
|
||||||
|
|
||||||
2008-09-29 Ralf Corsépius <ralf.corsepius@rtems.org>
|
2008-09-29 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||||
|
|
||||||
* Makefile.am: Remove noinst_PROGRAMS (Unused).
|
* Makefile.am: Remove noinst_PROGRAMS (Unused).
|
||||||
|
|||||||
@@ -34,25 +34,32 @@ console_SOURCES = console/85c30.c console/85c30.h console/console.c \
|
|||||||
console/tbl85c30.c console/consolebsp.h
|
console/tbl85c30.c console/consolebsp.h
|
||||||
|
|
||||||
include_bsp_HEADERS = ../../powerpc/shared/pci/pci.h \
|
include_bsp_HEADERS = ../../powerpc/shared/pci/pci.h \
|
||||||
PCI_bus/PCI.h \
|
PCI_bus/PCI.h \
|
||||||
../../powerpc/shared/residual/residual.h \
|
../../powerpc/shared/residual/residual.h \
|
||||||
../../powerpc/shared/residual/pnp.h \
|
../../powerpc/shared/residual/pnp.h \
|
||||||
../../powerpc/shared/openpic/openpic.h \
|
../../powerpc/shared/openpic/openpic.h \
|
||||||
../../powerpc/shared/console/consoleIo.h
|
../../powerpc/shared/console/consoleIo.h \
|
||||||
|
../../shared/include/irq-generic.h \
|
||||||
|
include/irq-config.h
|
||||||
|
|
||||||
pci_SOURCES = pci/no_host_bridge.c ../../powerpc/shared/pci/pci.c \
|
pci_SOURCES = pci/no_host_bridge.c ../../powerpc/shared/pci/pci.c \
|
||||||
../../powerpc/shared/pci/pcifinddevice.c PCI_bus/PCI.c PCI_bus/universe.c
|
../../powerpc/shared/pci/pcifinddevice.c PCI_bus/PCI.c PCI_bus/universe.c
|
||||||
|
|
||||||
include_bsp_HEADERS += irq/irq.h \
|
include_bsp_HEADERS += irq/irq.h \
|
||||||
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/ppc_exc_bspsupp.h \
|
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/ppc_exc_bspsupp.h \
|
||||||
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h \
|
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h \
|
||||||
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/irq_supp.h
|
../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/irq_supp.h
|
||||||
irq_SOURCES = irq/FPGA.c irq/irq.c ../../powerpc/shared/irq/irq_asm.S
|
irq_SOURCES = include/irq-config.h \
|
||||||
|
irq/FPGA.c irq/irq.c \
|
||||||
|
../../shared/src/irq-generic.c \
|
||||||
|
../../powerpc/shared/irq/irq_asm.S
|
||||||
|
|
||||||
include_bsp_HEADERS += ../../powerpc/shared/vectors/vectors.h
|
include_bsp_HEADERS += ../../powerpc/shared/vectors/vectors.h
|
||||||
vectors_SOURCES = ../../powerpc/shared/vectors/vectors_init.c \
|
vectors_SOURCES = ../../powerpc/shared/vectors/vectors_init.c \
|
||||||
../../powerpc/shared/vectors/vectors.S
|
../../powerpc/shared/vectors/vectors.S
|
||||||
|
|
||||||
include_bsp_HEADERS += ../../shared/vmeUniverse/vmeUniverse.h \
|
include_bsp_HEADERS += ../../shared/vmeUniverse/vmeUniverse.h \
|
||||||
|
../../shared/include/irq-generic.h \
|
||||||
../../shared/vmeUniverse/vme_am_defs.h \
|
../../shared/vmeUniverse/vme_am_defs.h \
|
||||||
../../shared/vmeUniverse/VME.h \
|
../../shared/vmeUniverse/VME.h \
|
||||||
vme/VMEConfig.h \
|
vme/VMEConfig.h \
|
||||||
|
|||||||
@@ -157,15 +157,14 @@ void initialize_universe()
|
|||||||
{
|
{
|
||||||
uint32_t jumper_selection;
|
uint32_t jumper_selection;
|
||||||
uint32_t pci_id;
|
uint32_t pci_id;
|
||||||
#if (SCORE603E_USE_SDS) | (SCORE603E_USE_OPEN_FIRMWARE) | (SCORE603E_USE_NONE)
|
|
||||||
volatile uint32_t universe_temp_value;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read the VME jumper location to determine the VME base address
|
* Read the VME jumper location to determine the VME base address
|
||||||
*/
|
*/
|
||||||
jumper_selection = PCI_bus_read(
|
jumper_selection = PCI_bus_read(
|
||||||
(volatile uint32_t*)SCORE603E_VME_JUMPER_ADDR );
|
(volatile uint32_t*)SCORE603E_VME_JUMPER_ADDR );
|
||||||
|
printk("initialize_universe: Read 0x%x = 0x%x\n",
|
||||||
|
SCORE603E_VME_JUMPER_ADDR, jumper_selection);
|
||||||
jumper_selection = (jumper_selection >> 3) & 0x1f;
|
jumper_selection = (jumper_selection >> 3) & 0x1f;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -179,67 +178,14 @@ void initialize_universe()
|
|||||||
if (pci_id != SCORE603E_UNIVERSE_CHIP_ID ){
|
if (pci_id != SCORE603E_UNIVERSE_CHIP_ID ){
|
||||||
printk ("Invalid SCORE603E_UNIVERSE_CHIP_ID: 0x08%" PRId32 "\n", pci_id);
|
printk ("Invalid SCORE603E_UNIVERSE_CHIP_ID: 0x08%" PRId32 "\n", pci_id);
|
||||||
rtems_fatal_error_occurred( 0x603e0bad );
|
rtems_fatal_error_occurred( 0x603e0bad );
|
||||||
|
} else {
|
||||||
|
printk("initialize_universe: Reg 0x%x read 0x%x\n",
|
||||||
|
SCORE603E_IO_VME_UNIVERSE_BASE, pci_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (SCORE603E_USE_SDS) | (SCORE603E_USE_OPEN_FIRMWARE) | (SCORE603E_USE_NONE)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the UNIVERSE PCI Configuration Base Address Register with 0x30001
|
|
||||||
* to specifies the 64 Kbyte aligned base address of the UNIVERSE register
|
|
||||||
* space on PCI to be 0x30000 + 0x80000000 (IO_BASE)
|
|
||||||
*/
|
|
||||||
Write_pci_device_register( SCORE603E_IO_VME_UNIVERSE_BASE+0x10,0x30001 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the UNIVERSE PCI Configuration Space Control and Status Register to
|
|
||||||
* medium speed device, Target Back to Back Capable, Master Enable, Target
|
|
||||||
* Memory Enable and Target IO Enable
|
|
||||||
*/
|
|
||||||
Write_pci_device_register( SCORE603E_IO_VME_UNIVERSE_BASE+0x4, 0x2800007 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Turn off the sysfail by setting SYSFAIL bit to 1 on the VCSR_CLR register
|
|
||||||
*/
|
|
||||||
PCI_bus_write( &UNIVERSE->VCSR_CLR, 0x40000000 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the VMEbus Master Control register with retry forever, 256 bytes
|
|
||||||
* posted write transfer count, VMEbus request level 3, RWD, PCI 32 bytes
|
|
||||||
* aligned burst size and PCI bus number to be zero
|
|
||||||
*/
|
|
||||||
PCI_bus_write( &UNIVERSE->MAST_CTL, 0x01C00000 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* VMEbus DMA Transfer Control register with 32 bit VMEbus Maximum Data
|
|
||||||
* width, A32 VMEbus Address Space, AM code to be data, none-privilleged,
|
|
||||||
* single and BLT cycles on VME bus and 64-bit PCI Bus Transactions enable
|
|
||||||
PCI_bus_write( &UNIVERSE->DCTL, 0x00820180 );
|
|
||||||
*/
|
|
||||||
|
|
||||||
PCI_bus_write( &UNIVERSE->LSI0_CTL, 0x80700040 );
|
|
||||||
PCI_bus_write( &UNIVERSE->LSI0_BS, 0x04000000 );
|
|
||||||
PCI_bus_write( &UNIVERSE->LSI0_BD, 0x05000000 );
|
|
||||||
PCI_bus_write( &UNIVERSE->LSI0_TO, 0x7C000000 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the Universe from VMEbus BI-Mode (bus-isolation). Once out of
|
|
||||||
* BI-Mode VMEbus accesses can be made.
|
|
||||||
*/
|
|
||||||
|
|
||||||
universe_temp_value = PCI_bus_read( &UNIVERSE->MISC_CTL );
|
|
||||||
|
|
||||||
if (universe_temp_value & 0x100000)
|
|
||||||
PCI_bus_write( &UNIVERSE->MISC_CTL,(universe_temp_value | ~0xFF0FFFFF));
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_DINK)
|
|
||||||
/*
|
/*
|
||||||
* Do not modify the DINK setup of the universe chip.
|
* Do not modify the DINK setup of the universe chip.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#else
|
|
||||||
#error "SCORE603E BSPSTART.C -- what ROM monitor are you using"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include "consolebsp.h"
|
#include "consolebsp.h"
|
||||||
#include <rtems/bspIo.h>
|
#include <rtems/bspIo.h>
|
||||||
|
|
||||||
#if (1)
|
|
||||||
/*
|
/*
|
||||||
* The Port Used for the Console interface is based upon which
|
* The Port Used for the Console interface is based upon which
|
||||||
* debugger is being used. The SDS debugger uses a binary
|
* debugger is being used. The SDS debugger uses a binary
|
||||||
@@ -31,28 +30,7 @@
|
|||||||
* not be used as the console port for the SDS debugger.
|
* not be used as the console port for the SDS debugger.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (SCORE603E_USE_SDS)
|
|
||||||
#define USE_FOR_CONSOLE_DEF 1
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_OPEN_FIRMWARE)
|
|
||||||
#define USE_FOR_CONSOLE_DEF 0
|
#define USE_FOR_CONSOLE_DEF 0
|
||||||
|
|
||||||
#elif (SCORE603E_USE_NONE)
|
|
||||||
#define USE_FOR_CONSOLE_DEF 0
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_DINK)
|
|
||||||
#define USE_FOR_CONSOLE_DEF 0
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error "SCORE603E CONSOLE.C -- what ROM monitor are you using"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (0)
|
|
||||||
extern int USE_FOR_CONSOLE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int USE_FOR_CONSOLE = USE_FOR_CONSOLE_DEF;
|
int USE_FOR_CONSOLE = USE_FOR_CONSOLE_DEF;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -134,12 +112,6 @@ rtems_isr console_isr(
|
|||||||
|
|
||||||
for (i=0; i < NUM_Z85C30_PORTS; i++){
|
for (i=0; i < NUM_Z85C30_PORTS; i++){
|
||||||
ISR_85c30_Async( &Ports_85C30[i] );
|
ISR_85c30_Async( &Ports_85C30[i] );
|
||||||
|
|
||||||
#if (0) /* XXX - TO TEST LOOP BACKS comment this out. */
|
|
||||||
if ( Ports_85C30[i].Chip->vector == vector ) {
|
|
||||||
ISR_85c30_Async( &Ports_85C30[i] );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +163,6 @@ void console_outbyte_interrupts(
|
|||||||
char ch
|
char ch
|
||||||
);
|
);
|
||||||
|
|
||||||
/* XXXXXX */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* PAGE
|
/* PAGE
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ extern "C" {
|
|||||||
#if (HAS_PMC_PSC8)
|
#if (HAS_PMC_PSC8)
|
||||||
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS (4 + 4)
|
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS (4 + 4)
|
||||||
#else
|
#else
|
||||||
|
/* XXXXX FIX THIS */
|
||||||
|
#error "MUST HAVE PSC8 SET FOR BOEING CODE"
|
||||||
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS (4)
|
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS (4)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -76,7 +78,7 @@ extern "C" {
|
|||||||
SCORE603E_BRD_FLASH_DISABLE_MASK)
|
SCORE603E_BRD_FLASH_DISABLE_MASK)
|
||||||
|
|
||||||
#define Processor_Synchronize() \
|
#define Processor_Synchronize() \
|
||||||
asm(" eieio ")
|
asm volatile(" eieio ")
|
||||||
|
|
||||||
|
|
||||||
/* Constants */
|
/* Constants */
|
||||||
@@ -128,17 +130,6 @@ rtems_isr_entry set_vector( /* returns old vector */
|
|||||||
int type /* RTEMS or RAW intr */
|
int type /* RTEMS or RAW intr */
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
* spurious.c
|
|
||||||
*/
|
|
||||||
rtems_isr bsp_stub_handler(
|
|
||||||
rtems_vector_number trap
|
|
||||||
);
|
|
||||||
rtems_isr bsp_spurious_handler(
|
|
||||||
rtems_vector_number trap
|
|
||||||
);
|
|
||||||
void bsp_spurious_initialize();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* genvec.c
|
* genvec.c
|
||||||
*/
|
*/
|
||||||
|
|||||||
44
c/src/lib/libbsp/powerpc/score603e/include/irq-config.h
Normal file
44
c/src/lib/libbsp/powerpc/score603e/include/irq-config.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup bsp_interrupt
|
||||||
|
*
|
||||||
|
* @brief BSP interrupt support configuration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBBSP_POWERPC_SCORE603E_IRQ_CONFIG_H
|
||||||
|
#define LIBBSP_POWERPC_SCORE603E_IRQ_CONFIG_H
|
||||||
|
|
||||||
|
#include <bsp/irq.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup bsp_interrupt
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Minimum vector number.
|
||||||
|
*/
|
||||||
|
#define BSP_INTERRUPT_VECTOR_MIN BSP_LOWEST_OFFSET
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Maximum vector number.
|
||||||
|
*/
|
||||||
|
#define BSP_INTERRUPT_VECTOR_MAX BSP_MAX_OFFSET
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
#endif /* LIBBSP_POWERPC_SCORE603E_IRQ_CONFIG_H */
|
||||||
@@ -24,21 +24,10 @@
|
|||||||
*/
|
*/
|
||||||
void initialize_PCI_bridge (void)
|
void initialize_PCI_bridge (void)
|
||||||
{
|
{
|
||||||
#if (!SCORE603E_USE_DINK)
|
/* Note: Accept DINKs setup of the PCI Bridge and don't
|
||||||
uint16_t mask, shift, data;
|
* change anything.
|
||||||
|
*/
|
||||||
shift = SCORE603E_85C30_0_IRQ - Score_IRQ_First;
|
printk("initialize_PCI_bridge: \n");
|
||||||
mask = 1 << shift;
|
|
||||||
|
|
||||||
shift = SCORE603E_85C30_1_IRQ - Score_IRQ_First;
|
|
||||||
mask = mask & (1 << shift);
|
|
||||||
|
|
||||||
data = *SCORE603E_FPGA_MASK_DATA;
|
|
||||||
data = ~mask;
|
|
||||||
|
|
||||||
*SCORE603E_FPGA_MASK_DATA = data;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_irq_mask(
|
void set_irq_mask(
|
||||||
@@ -95,9 +84,7 @@ void init_irq_data_register(void)
|
|||||||
uint32_t index;
|
uint32_t index;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
#if (SCORE603E_USE_DINK)
|
|
||||||
set_irq_mask( 0xffff );
|
set_irq_mask( 0xffff );
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear any existing interupts from the vector data register.
|
* Clear any existing interupts from the vector data register.
|
||||||
|
|||||||
@@ -139,6 +139,27 @@ printk(" BSP_install_rtems_shared_irq_handler %d\n", irq->name );
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function disables a given XXX interrupt
|
||||||
|
*/
|
||||||
|
rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqLine)
|
||||||
|
{
|
||||||
|
/* XXX FIX ME!!!! */
|
||||||
|
|
||||||
|
printk("bsp_interrupt_vector_disable: 0x%x\n", irqLine );
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqLine)
|
||||||
|
{
|
||||||
|
/* XXX FIX ME!!!! */
|
||||||
|
printk("bsp_interrupt_vector_enable: 0x%x\n", irqLine );
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ------------------------ RTEMS Single Irq Handler Mngt Routines ----------------
|
* ------------------------ RTEMS Single Irq Handler Mngt Routines ----------------
|
||||||
*/
|
*/
|
||||||
@@ -178,18 +199,23 @@ printk(" BSP_install_rtems_irq_handler %d\n", irq->name );
|
|||||||
/*
|
/*
|
||||||
* Enable interrupt
|
* Enable interrupt
|
||||||
*/
|
*/
|
||||||
|
printk("is_pci_irq = TRUE - FIX THIS!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_processor_irq(irq->name)) {
|
if (is_processor_irq(irq->name)) {
|
||||||
/*
|
/*
|
||||||
* Enable exception at processor level
|
* Enable exception at processor level
|
||||||
*/
|
*/
|
||||||
|
printk("is_processor_irq = TRUE : Fix This\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enable interrupt on device
|
* Enable interrupt on device
|
||||||
*/
|
*/
|
||||||
if (irq->on)
|
if (irq->on) {
|
||||||
|
printk("Call 0x%x\n", irq->on );
|
||||||
irq->on(irq);
|
irq->on(irq);
|
||||||
|
}
|
||||||
|
|
||||||
rtems_interrupt_enable(level);
|
rtems_interrupt_enable(level);
|
||||||
|
|
||||||
@@ -415,7 +441,6 @@ int C_dispatch_irq_handler (CPU_Interrupt_frame *frame, unsigned int excNum)
|
|||||||
register unsigned msr;
|
register unsigned msr;
|
||||||
register unsigned new_msr;
|
register unsigned new_msr;
|
||||||
|
|
||||||
printk(" C_dispatch_irq_handler %d\n", excNum);
|
|
||||||
if (excNum == ASM_DEC_VECTOR) {
|
if (excNum == ASM_DEC_VECTOR) {
|
||||||
_CPU_MSR_GET(msr);
|
_CPU_MSR_GET(msr);
|
||||||
new_msr = msr | MSR_EE;
|
new_msr = msr | MSR_EE;
|
||||||
@@ -468,3 +493,21 @@ printk(" _ThreadProcessSignalsFromIrq \n");
|
|||||||
* This will include DEBUG session requested from keyboard...
|
* This will include DEBUG session requested from keyboard...
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rtems_status_code bsp_interrupt_facility_initialize( void)
|
||||||
|
{
|
||||||
|
/* Install exception handler */
|
||||||
|
if (ppc_exc_set_handler( ASM_EXT_VECTOR, C_dispatch_irq_handler)) {
|
||||||
|
return RTEMS_IO_ERROR;
|
||||||
|
}
|
||||||
|
if (ppc_exc_set_handler( ASM_DEC_VECTOR, C_dispatch_irq_handler)) {
|
||||||
|
return RTEMS_IO_ERROR;
|
||||||
|
}
|
||||||
|
if (ppc_exc_set_handler( ASM_E300_SYSMGMT_VECTOR, C_dispatch_irq_handler)) {
|
||||||
|
return RTEMS_IO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,14 @@ $(PROJECT_INCLUDE)/bsp/consoleIo.h: ../../powerpc/shared/console/consoleIo.h $(P
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/consoleIo.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/consoleIo.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/consoleIo.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/consoleIo.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/bsp/irq-config.h: include/irq-config.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-config.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-config.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
|
||||||
@@ -113,6 +121,10 @@ $(PROJECT_INCLUDE)/bsp/vmeUniverse.h: ../../shared/vmeUniverse/vmeUniverse.h $(P
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vmeUniverse.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vmeUniverse.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/vmeUniverse.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/vmeUniverse.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/bsp/vme_am_defs.h: ../../shared/vmeUniverse/vme_am_defs.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
$(PROJECT_INCLUDE)/bsp/vme_am_defs.h: ../../shared/vmeUniverse/vme_am_defs.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vme_am_defs.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vme_am_defs.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/vme_am_defs.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/vme_am_defs.h
|
||||||
|
|||||||
@@ -80,70 +80,10 @@ void init_RTC(void)
|
|||||||
|
|
||||||
void init_PCI(void)
|
void init_PCI(void)
|
||||||
{
|
{
|
||||||
#if (SCORE603E_USE_SDS) | (SCORE603E_USE_OPEN_FIRMWARE) | (SCORE603E_USE_NONE)
|
|
||||||
uint32_t value;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE: Accessing any memory location not mapped by the BAT
|
|
||||||
* registers will cause a TLB miss exception.
|
|
||||||
* Set the DBAT1 to be configured for 256M of PCI MEM
|
|
||||||
* at 0xC0000000 with Write-through and Guarded Attributed and
|
|
||||||
* read/write access allowed
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* load DBAT1U (spr538) - 256Mbytes, User, Super */
|
|
||||||
value = SCORE603E_PCI_MEM_BASE | 0x1FFF;
|
|
||||||
asm volatile(
|
|
||||||
"isync;"
|
|
||||||
"mtspr 538, %0"
|
|
||||||
: "=r" (value)
|
|
||||||
: "0" (value)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* load DBAT1L (spr539) - Write-through, Guarded and Read/Write */
|
|
||||||
value = SCORE603E_PCI_MEM_BASE | 0x0002;
|
|
||||||
asm volatile (
|
|
||||||
"mtspr 539, %0;"
|
|
||||||
"isync"
|
|
||||||
: "=r" (value)
|
|
||||||
: "0" (value)
|
|
||||||
);
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_DINK)
|
|
||||||
/* DINK Monitor setsup and uses all 4 BAT registers. */
|
/* DINK Monitor setsup and uses all 4 BAT registers. */
|
||||||
/* The fourth BAT register can be modified to access this area */
|
/* The fourth BAT register can be modified to access this area */
|
||||||
|
|
||||||
#if (0)
|
printk("init_PCI:\n");
|
||||||
/*
|
|
||||||
* NOTE: Accessing any memory location not mapped by the BAT
|
|
||||||
* registers will cause a TLB miss exception.
|
|
||||||
* Set the DBAT3 to be configured for 256M of PCI MEM
|
|
||||||
* at 0xC0000000 with Write-through and Guarded Attributed and
|
|
||||||
* read/write access allowed
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* load DBAT3U (spr542) - 256Mbytes, User, Super */
|
|
||||||
value = SCORE603E_PCI_MEM_BASE | 0x1FFF;
|
|
||||||
asm volatile(
|
|
||||||
"isync;"
|
|
||||||
"mtspr 542, %0"
|
|
||||||
: "=r" (value)
|
|
||||||
: "0" (value)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* load DBAT3L (spr543) - Write-through, Guarded and Read/Write */
|
|
||||||
value = SCORE603E_PCI_MEM_BASE | 0x0002;
|
|
||||||
asm volatile (
|
|
||||||
"mtspr 543, %0;"
|
|
||||||
"isync"
|
|
||||||
: "=r" (value)
|
|
||||||
: "0" (value)
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error "SCORE603E BSPSTART.C -- what ROM monitor are you using"
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PPC_Get_HID0( _value ) \
|
#define PPC_Get_HID0( _value ) \
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ unsigned int BSP_processor_frequency; /* XXX - Set this based upon the Score boa
|
|||||||
/*
|
/*
|
||||||
* Time base divisior (how many tick for 1 second).
|
* Time base divisior (how many tick for 1 second).
|
||||||
*/
|
*/
|
||||||
unsigned int BSP_time_base_divisor = 1000; /* XXX - Just a guess */
|
unsigned int BSP_time_base_divisor = 4000;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* system init stack
|
* system init stack
|
||||||
@@ -121,17 +121,6 @@ void initialize_PMC();
|
|||||||
|
|
||||||
void bsp_predriver_hook(void)
|
void bsp_predriver_hook(void)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_predriver_hook: init_RTC\n");
|
|
||||||
#endif
|
|
||||||
init_RTC();
|
|
||||||
init_PCI();
|
|
||||||
initialize_universe();
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_predriver_hook: initialize_PCI_bridge\n");
|
|
||||||
#endif
|
|
||||||
initialize_PCI_bridge ();
|
|
||||||
|
|
||||||
#if (HAS_PMC_PSC8)
|
#if (HAS_PMC_PSC8)
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -140,29 +129,6 @@ void bsp_predriver_hook(void)
|
|||||||
initialize_PMC();
|
initialize_PMC();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Initialize Bsp General purpose vector table.
|
|
||||||
*/
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_predriver_hook: initialize_external_exception_vector\n");
|
|
||||||
#endif
|
|
||||||
initialize_external_exception_vector();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (0)
|
|
||||||
/*
|
|
||||||
* XXX - Modify this to write a 48000000 (loop to self) command
|
|
||||||
* to each interrupt location. This is better for debug.
|
|
||||||
*/
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_predriver_hook: bsp_spurious_initialize\n");
|
|
||||||
#endif
|
|
||||||
bsp_spurious_initialize();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ShowBATS();
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_predriver_hook: End of routine\n");
|
printk("bsp_predriver_hook: End of routine\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -175,64 +141,35 @@ void bsp_predriver_hook(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void initialize_PMC() {
|
void initialize_PMC() {
|
||||||
volatile uint32_t *PMC_addr;
|
volatile uint32_t *PMC_addr;
|
||||||
uint8_t data;
|
uint32_t data;
|
||||||
|
|
||||||
#if (0) /* First Values sent */
|
|
||||||
/*
|
|
||||||
* set PMC base address.
|
|
||||||
*/
|
|
||||||
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x14 );
|
|
||||||
*PMC_addr = (BSP_PCI_REGISTER_BASE >> 24) & 0x3f;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear status, enable SERR and memory space only.
|
* Clear status, enable SERR and memory space only.
|
||||||
*/
|
*/
|
||||||
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x4 );
|
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x4 );
|
||||||
*PMC_addr = 0x0201ff37;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bit 0 and 1 HI cause Medium Loopback to occur.
|
|
||||||
*/
|
|
||||||
PMC_addr = (volatile uint32_t*)
|
|
||||||
BSP_PMC_SERIAL_ADDRESS( 0x100000 );
|
|
||||||
data = *PMC_addr;
|
|
||||||
/* *PMC_addr = data | 0x3; */
|
|
||||||
*PMC_addr = data & 0xfc;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (1)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear status, enable SERR and memory space only.
|
|
||||||
*/
|
|
||||||
#if DEBUG
|
|
||||||
printk("initialize_PMC: set Device Address 0x4 \n");
|
|
||||||
ShowBATS();
|
|
||||||
#endif
|
|
||||||
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x4 );
|
|
||||||
*PMC_addr = 0x020080cc;
|
*PMC_addr = 0x020080cc;
|
||||||
|
#if DEBUG
|
||||||
|
printk("initialize_PMC: 0x%x = 0x%x\n", PMC_addr, 0x020080cc);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set PMC base address.
|
* set PMC base address.
|
||||||
*/
|
*/
|
||||||
#if DEBUG
|
|
||||||
printk("initialize_PMC: set Device Address 0x14 \n");
|
|
||||||
ShowBATS();
|
|
||||||
#endif
|
|
||||||
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x14 );
|
PMC_addr = BSP_PCI_DEVICE_ADDRESS( 0x14 );
|
||||||
*PMC_addr = (BSP_PCI_REGISTER_BASE >> 24) & 0x3f;
|
*PMC_addr = (BSP_PCI_REGISTER_BASE >> 24) & 0x3f;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("initialize_PMC: set PMC Serial Address 0x100000\n");
|
printk("initialize_PMC: 0x%x = 0x%x\n", PMC_addr, ((BSP_PCI_REGISTER_BASE >> 24) & 0x3f));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PMC_addr = (volatile uint32_t*)
|
PMC_addr = (volatile uint32_t*)
|
||||||
BSP_PMC_SERIAL_ADDRESS( 0x100000 );
|
BSP_PMC_SERIAL_ADDRESS( 0x100000 );
|
||||||
data = *PMC_addr;
|
data = *PMC_addr;
|
||||||
|
#if DEBUG
|
||||||
|
printk("initialize_PMC: Read 0x%x (0x%x)\n", PMC_addr, data );
|
||||||
|
printk("initialize_PMC: Read 0x%x (0x%x)\n", PMC_addr, data & 0xfc );
|
||||||
|
#endif
|
||||||
*PMC_addr = data & 0xfc;
|
*PMC_addr = data & 0xfc;
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*PAGE
|
||||||
@@ -246,18 +183,15 @@ void bsp_postdriver_hook(void)
|
|||||||
{
|
{
|
||||||
extern void Init_EE_mask_init(void);
|
extern void Init_EE_mask_init(void);
|
||||||
extern void open_dev_console(void);
|
extern void open_dev_console(void);
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_postdriver_hook: open_dev_console\n");
|
printk("bsp_postdriver_hook: open_dev_console\n");
|
||||||
#endif
|
#endif
|
||||||
open_dev_console();
|
open_dev_console();
|
||||||
ShowBATS();
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_postdriver_hook: Init_EE_mask_init\n");
|
printk("bsp_postdriver_hook: Init_EE_mask_init\n");
|
||||||
#endif
|
#endif
|
||||||
Init_EE_mask_init();
|
Init_EE_mask_init();
|
||||||
ShowBATS();
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_postdriver_hook: Finished procedure\n");
|
printk("bsp_postdriver_hook: Finished procedure\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -281,7 +215,7 @@ void bsp_start( void )
|
|||||||
volatile uint32_t *ptr;
|
volatile uint32_t *ptr;
|
||||||
ppc_cpu_id_t myCpu;
|
ppc_cpu_id_t myCpu;
|
||||||
ppc_cpu_revision_t myCpuRevision;
|
ppc_cpu_revision_t myCpuRevision;
|
||||||
|
|
||||||
rtems_bsp_delay( 1000 );
|
rtems_bsp_delay( 1000 );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -289,7 +223,6 @@ void bsp_start( void )
|
|||||||
*/
|
*/
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_start: Zero out lots of memory\n");
|
printk("bsp_start: Zero out lots of memory\n");
|
||||||
ShowBATS();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(
|
memset(
|
||||||
@@ -308,6 +241,8 @@ void bsp_start( void )
|
|||||||
*/
|
*/
|
||||||
myCpu = get_ppc_cpu_type();
|
myCpu = get_ppc_cpu_type();
|
||||||
myCpuRevision = get_ppc_cpu_revision();
|
myCpuRevision = get_ppc_cpu_revision();
|
||||||
|
printk("Cpu: 0x%x Revision: %d\n", myCpu, myCpuRevision);
|
||||||
|
printk("Cpu %s\n", get_ppc_cpu_type_name(myCpu) );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the interrupt related settings.
|
* Initialize the interrupt related settings.
|
||||||
@@ -319,75 +254,27 @@ void bsp_start( void )
|
|||||||
/*
|
/*
|
||||||
* Initialize default raw exception handlers.
|
* Initialize default raw exception handlers.
|
||||||
*/
|
*/
|
||||||
printk("ppc_exc_initialize\n");
|
|
||||||
ppc_exc_initialize(
|
ppc_exc_initialize(
|
||||||
PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
|
PPC_INTERRUPT_DISABLE_MASK_DEFAULT,
|
||||||
intrStackStart,
|
intrStackStart,
|
||||||
intrStackSize
|
intrStackSize
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
* There are multiple ROM monitors available for this board.
|
|
||||||
*/
|
|
||||||
#if (SCORE603E_USE_SDS)
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_start: USE SDS\n");
|
printk("bsp_predriver_hook: init_RTC\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* init_RTC(); */
|
||||||
|
init_PCI();
|
||||||
|
initialize_universe();
|
||||||
|
|
||||||
/*
|
|
||||||
* Write instruction for Unconditional Branch to ROM vector.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Code = 0x4bf00002;
|
|
||||||
for (Address = 0x100; Address <= 0xe00; Address += 0x100) {
|
|
||||||
A_Vector = (uint32_t*)Address;
|
|
||||||
Code = 0x4bf00002 + Address;
|
|
||||||
*A_Vector = Code;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Address = 0x1000; Address <= 0x1400; Address += 0x100) {
|
|
||||||
A_Vector = (uint32_t*)Address;
|
|
||||||
Code = 0x4bf00002 + Address;
|
|
||||||
*A_Vector = Code;
|
|
||||||
}
|
|
||||||
|
|
||||||
msr_value = 0x2030;
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_OPEN_FIRMWARE)
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_start: USE OPEN FIRMWARE\n");
|
printk("bsp_predriver_hook: initialize_PCI_bridge\n");
|
||||||
#endif
|
#endif
|
||||||
msr_value = 0x2030;
|
initialize_PCI_bridge ();
|
||||||
|
|
||||||
#elif (SCORE603E_USE_NONE)
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_start: USE NONE\n");
|
|
||||||
#endif
|
|
||||||
msr_value = 0x2030;
|
|
||||||
_CPU_MSR_SET( msr_value );
|
|
||||||
bsp_set_trap_vectors();
|
|
||||||
|
|
||||||
#elif (SCORE603E_USE_DINK)
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_start: USE DINK\n");
|
|
||||||
#endif
|
|
||||||
msr_value = 0x2030;
|
msr_value = 0x2030;
|
||||||
_CPU_MSR_SET( msr_value );
|
_CPU_MSR_SET( msr_value );
|
||||||
|
|
||||||
/*
|
|
||||||
* Override the DINK error on a Decrementor interrupt.
|
|
||||||
*/
|
|
||||||
/* org dec_vector - rfi */
|
|
||||||
ptr = (uint32_t*)0x900;
|
|
||||||
*ptr = 0x4c000064;
|
|
||||||
|
|
||||||
#else
|
|
||||||
#if DEBUG
|
|
||||||
printk("bsp_start: ERROR unknow ROM Monitor\n");
|
|
||||||
#endif
|
|
||||||
#error "SCORE603E BSPSTART.C -- what ROM monitor are you using"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_CPU_MSR_SET( msr_value );
|
_CPU_MSR_SET( msr_value );
|
||||||
|
|
||||||
@@ -428,6 +315,12 @@ printk("ppc_exc_initialize\n");
|
|||||||
printk("bsp_start: END PPC_USE_DATA_CACHE\n");
|
printk("bsp_start: END PPC_USE_DATA_CACHE\n");
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Initalize interrupt support */
|
||||||
|
if (bsp_interrupt_initialize() != RTEMS_SUCCESSFUL) {
|
||||||
|
BSP_panic( "Cannot intitialize interrupt support\n");
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk("bsp_start: end BSPSTART\n");
|
printk("bsp_start: end BSPSTART\n");
|
||||||
ShowBATS();
|
ShowBATS();
|
||||||
|
|||||||
@@ -1,235 +0,0 @@
|
|||||||
/*
|
|
||||||
* Score603e Spurious Trap Handler
|
|
||||||
*
|
|
||||||
* This is just enough of a trap handler to let us know what
|
|
||||||
* the likely source of the trap was.
|
|
||||||
*
|
|
||||||
* Developed as part of the port of RTEMS to the ERC32 implementation
|
|
||||||
* of the SPARC by On-Line Applications Research Corporation (OAR)
|
|
||||||
* under contract to the European Space Agency (ESA).
|
|
||||||
*
|
|
||||||
* COPYRIGHT (c) 1995. European Space Agency.
|
|
||||||
*
|
|
||||||
* This terms of the RTEMS license apply to this file.
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <bsp.h>
|
|
||||||
#include <rtems/bspIo.h>
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
rtems_isr bsp_stub_handler(
|
|
||||||
rtems_vector_number trap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* bsp_spurious_handler
|
|
||||||
*
|
|
||||||
* Print a message on the debug console and then die
|
|
||||||
*/
|
|
||||||
rtems_isr bsp_spurious_handler(
|
|
||||||
rtems_vector_number trap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch ( trap ) {
|
|
||||||
case PPC_IRQ_SYSTEM_RESET:
|
|
||||||
printk( "\nTrap: System reset\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_MCHECK:
|
|
||||||
printk( "\nTrap: Machine check\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_PROTECT:
|
|
||||||
printk( "\nTrap: DSI\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_ISI:
|
|
||||||
printk( "ISI\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_EXTERNAL:
|
|
||||||
printk( "\nTrap: External interupt\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_ALIGNMENT:
|
|
||||||
printk( "\nTrap: Alignment Exception\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_PROGRAM:
|
|
||||||
printk( "\nTrap: Program\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_NOFP:
|
|
||||||
printk( "\nTrap: Floating point unavailable\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_DECREMENTER:
|
|
||||||
printk( "\nTrap: Decrementer\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_RESERVED_A:
|
|
||||||
printk( "\nTrap: Reserved 0x00a00\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_RESERVED_B:
|
|
||||||
printk( "\nTrap: Reserved 0x00b00\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_SCALL:
|
|
||||||
printk( "\nTrap: System call\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_TRACE:
|
|
||||||
printk( "\nTrap: Trace\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_FP_ASST:
|
|
||||||
printk( "\nTrap: Floating point Assist\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
#if defined(ppc403)
|
|
||||||
#error "Please fill in names. "
|
|
||||||
case PPC_IRQ_CRIT :
|
|
||||||
printk( "\nTrap: Critical Error\n ");
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_PIT:
|
|
||||||
printk( "\nTrap: 0x01000\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_FIT:
|
|
||||||
printk( "\nTrap: 0x01010\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_WATCHDOG :
|
|
||||||
printk( "\nTrap: 0x01020\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_DEBUG :
|
|
||||||
printk( "\nTrap: 0x02000\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
#elif defined(ppc601)
|
|
||||||
#error "Please fill in names. "
|
|
||||||
case PPC_IRQ_TRACE :
|
|
||||||
printk( "\nTrap: 0x02000\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
#elif defined(ppc603) || defined(ppc603e)
|
|
||||||
case PPC_IRQ_TRANS_MISS:
|
|
||||||
printk( "\nTrap: Instruction Translation Miss\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_DATA_LOAD:
|
|
||||||
printk( "\nTrap: Data Load Translation Miss\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_DATA_STORE:
|
|
||||||
printk( "\nTrap: Data store Translation Mis\ns");
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_ADDR_BRK:
|
|
||||||
printk( "\nTrap: Instruction address break point\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_SYS_MGT:
|
|
||||||
printk( "\nTrap: System management interrupt\n" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
#elif defined(mpc604)
|
|
||||||
#error "Please fill in names. "
|
|
||||||
case PPC_IRQ_ADDR_BRK:
|
|
||||||
printk( "0x1300\n" );
|
|
||||||
break;
|
|
||||||
case PPC_IRQ_SYS_MGT:
|
|
||||||
printk( "0x1400\n" );
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
|
||||||
printk( "\nTrap: Undefined exception\n" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* What else can we do but stop ...
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
asm volatile( "" );
|
|
||||||
*/
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* bsp_spurious_initialize
|
|
||||||
*
|
|
||||||
* Install the spurious handler for most traps.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void bsp_spurious_initialize()
|
|
||||||
{
|
|
||||||
uint32_t trap;
|
|
||||||
|
|
||||||
for ( trap=0 ; trap < PPC_IRQ_LAST ; trap++ ) {
|
|
||||||
if (trap == PPC_IRQ_DECREMENTER)
|
|
||||||
;
|
|
||||||
/* set_vector( bsp_stub_handler, trap, 1 ); */
|
|
||||||
else
|
|
||||||
set_vector( bsp_spurious_handler, trap, 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void bsp_set_trap_vectors( void )
|
|
||||||
{
|
|
||||||
volatile uint32_t *ptr;
|
|
||||||
|
|
||||||
/* reset_vector */
|
|
||||||
ptr = (uint32_t*)0x00100 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org mach_vector */
|
|
||||||
ptr = (uint32_t*)0x00200;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org prot_vector */
|
|
||||||
ptr = (uint32_t*)0x00300;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org isi_vector */
|
|
||||||
ptr = (uint32_t*)0x00400;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org ext_vector */
|
|
||||||
ptr = (uint32_t*)0x0500 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org align_vector */
|
|
||||||
ptr = (uint32_t*)0x00600 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org prog_vector */
|
|
||||||
ptr = (uint32_t*)0x00700 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org float_vector */
|
|
||||||
ptr = (uint32_t*)0x00800;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org dec_vector - rfi */
|
|
||||||
ptr = (uint32_t*)0x900;
|
|
||||||
*ptr = 0x4c000064;
|
|
||||||
|
|
||||||
/* org sys_vector */
|
|
||||||
ptr = (uint32_t*)0x0c00 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org trace_vector */
|
|
||||||
ptr = (uint32_t*)0x0d00 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org itm_vector */
|
|
||||||
ptr = (uint32_t*)0x01000 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org dltm_vector */
|
|
||||||
ptr = (uint32_t*)0x01100 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org dstm_vector */
|
|
||||||
ptr = (uint32_t*)0x1200 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org addr_vector */
|
|
||||||
ptr = (uint32_t*)0x1300 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
/* org sysmgmt_vector */
|
|
||||||
ptr = (uint32_t*)0x1400 ;
|
|
||||||
*ptr = 0x48000000;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -26,18 +26,12 @@ void VME_interrupt_Disable (
|
|||||||
VME_interrupt_Mask mask /* IN */
|
VME_interrupt_Mask mask /* IN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
volatile uint8_t *VME_interrupt_enable;
|
volatile uint8_t *VME_interrupt_enable;
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
|
|
||||||
#if 0
|
|
||||||
VME_interrupt_enable = ACC_VIE;
|
|
||||||
#else
|
|
||||||
VME_interrupt_enable = 0;
|
VME_interrupt_enable = 0;
|
||||||
#endif
|
|
||||||
value = *VME_interrupt_enable;
|
value = *VME_interrupt_enable;
|
||||||
|
|
||||||
value &= ~mask; /* turn off interrupts for all levels in mask */
|
value &= ~mask; /* turn off interrupts for all levels in mask */
|
||||||
|
|
||||||
*VME_interrupt_enable = value;
|
*VME_interrupt_enable = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,14 +48,8 @@ void VME_interrupt_Enable (
|
|||||||
volatile uint8_t *VME_interrupt_enable;
|
volatile uint8_t *VME_interrupt_enable;
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
|
|
||||||
#if 0
|
|
||||||
VME_interrupt_enable = ACC_VIE;
|
|
||||||
#else
|
|
||||||
VME_interrupt_enable = 0;
|
VME_interrupt_enable = 0;
|
||||||
#endif
|
|
||||||
value = *VME_interrupt_enable;
|
value = *VME_interrupt_enable;
|
||||||
|
|
||||||
value |= mask; /* turn on interrupts for all levels in mask */
|
value |= mask; /* turn on interrupts for all levels in mask */
|
||||||
|
|
||||||
*VME_interrupt_enable = value;
|
*VME_interrupt_enable = value;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user